diff --git a/.readthedocs.yaml b/.readthedocs.yaml deleted file mode 100644 index 7ec0177..0000000 --- a/.readthedocs.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# Required -version: 2 - -# Set the version of Python and other tools you might need -build: - os: ubuntu-20.04 - tools: - python: "3.11" - -# Build documentation in the docs/ directory with Sphinx -sphinx: - configuration: docs/source/conf.py - -formats: all - - -# Optionally declare the Python requirements required to build your docs -python: - install: - - requirements: docs/requirements.txt \ No newline at end of file diff --git a/README.md b/README.md index 6e23646..8f80ddb 100644 --- a/README.md +++ b/README.md @@ -138,7 +138,7 @@ python -m pip install mac-pyxa ``` # Documentation -The best way to learn about PyXA is to read the [documentation](https://pyxa.readthedocs.io/en/latest/). From there, you can find tutorials, examples, in-depth class and method documentation, and additional resources. +The best way to learn about PyXA is to read the [documentation](http://skaplanofficial.github.io/pyxa/). From there, you can find tutorials, examples, in-depth class and method documentation, and additional resources. For further help, consider joining the (PyXA Discord Server](https://discord.gg/Crypg65dxK) and asking your questions there. diff --git a/docs/.buildinfo b/docs/.buildinfo index a433301..336abcd 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: c26b86505751fa963daa71099c4fbde9 +config: bb617c8417f12efaf3f656c18e0e09ba tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/source/_static/assets/CPUMonitor.png b/docs/_images/CPUMonitor.png similarity index 100% rename from docs/source/_static/assets/CPUMonitor.png rename to docs/_images/CPUMonitor.png diff --git a/docs/source/_static/assets/HelloMenu.png b/docs/_images/HelloMenu.png similarity index 100% rename from docs/source/_static/assets/HelloMenu.png rename to docs/_images/HelloMenu.png diff --git a/docs/source/_static/assets/JWSTMenuBar.png b/docs/_images/JWSTMenuBar.png similarity index 100% rename from docs/source/_static/assets/JWSTMenuBar.png rename to docs/_images/JWSTMenuBar.png diff --git a/docs/source/_static/assets/MenuItemImages.png b/docs/_images/MenuItemImages.png similarity index 100% rename from docs/source/_static/assets/MenuItemImages.png rename to docs/_images/MenuItemImages.png diff --git a/docs/source/_static/assets/PrintHi.png b/docs/_images/PrintHi.png similarity index 100% rename from docs/source/_static/assets/PrintHi.png rename to docs/_images/PrintHi.png diff --git a/docs/source/_static/assets/PrintHiImage.png b/docs/_images/PrintHiImage.png similarity index 100% rename from docs/source/_static/assets/PrintHiImage.png rename to docs/_images/PrintHiImage.png diff --git a/docs/source/_static/assets/PyXALogoTransparent.png b/docs/_images/PyXALogoTransparent.png similarity index 100% rename from docs/source/_static/assets/PyXALogoTransparent.png rename to docs/_images/PyXALogoTransparent.png diff --git a/docs/_modules/PyXA/Additions/Learn.html b/docs/_modules/PyXA/Additions/Learn.html new file mode 100644 index 0000000..5f446a3 --- /dev/null +++ b/docs/_modules/PyXA/Additions/Learn.html @@ -0,0 +1,425 @@ + + + + + + PyXA.Additions.Learn — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.Additions.Learn

+""".. versionadded:: 0.1.1
+
+A collection of classes for interfacing with built-in ML/AI features in macOS.
+"""
+
+print("Hi")
+
+from typing import Union
+
+import Foundation
+import LatentSemanticMapping
+
+from PyXA import XABase
+
+
+
[docs]class XALSM(): + def __init__(self, dataset: Union[dict[str, list[str]], None] = None, from_file: bool = False): + """Initializes a Latent Semantic Mapping environment. + + :param dataset: The initial dataset, specified as a dictionary where keys are categories and values are list of corresponding texts, defaults to None. Cannot be None if from_file is False. + :type dataset: Union[dict[str, list[str]], None], optional + :param from_file: Whether the LSM is being loaded from a file, defaults to False. Cannot be False is dataset is None. + :type from_file: bool, optional + :raises ValueError: Either you must provide a dataset, or you must load an existing map from an external file + + :Example 1: Classify emails based on subject line + + >>> import PyXA + >>> lsm = PyXA.XALSM({ + >>> # 1 + >>> "spam": ["Deals", "Holiday playbook", "Spend and save. You know the drill.", "Don't miss these holiday deals!", "GOOD NEWS", "you will never have an opportunity of this kind again", "Your Long Overdue Compensation Funds; Totally", "US $25,000,000.00", "goog day", "GOOD DAY, I am Mike Paul I have a", "enron methanol; meter # : 988291 this is a follow up to the note i gave you on monday , 4...", "hpl nom for january 9, see attached file : hplnol 09. xls", "neon retreat ho ho ho, we're around to that most wonderful time of the year", "photoshop, windows, office cheap, main trending abasements, darer prudently fortuitous", "re: indian springs this deal is to book the teco pvr revenue. it is my understanding that...", "noms / actual flow for 2 / we agree", "nominations for oct 21 - 23"], + >>> + >>> # 2 + >>> "kayak": ["Price Alert: Airfare holding steady for your trip", "Prices going down for your Boston to Dublin flight", "Price Increase: Boston to Dublin airfare up $184", "Flight Alert: #37 decrease on your flight to Dublin.", "Flight Alert: It's time to book your flight to Dublin", "Price Alert: Airfare holding steady for your Bangor, ME to...", "Ready to explore the world again?"], + >>> + >>> # 3 + >>> "lenovo": ["Doorbuster deals up to 70% off", "Visionary, On-Demand Content. Lenovo Tech World '22 is starting", "Up to 70% off deals 9 AM", "TGIF! Here's up to 70% off to jumpstart your weekend", "Top picks to refresh your workspace", "This only happens twice a year", "Think about saving on a Think PC", "Deep deals on Summer Clearance", "Save up to 67% + earn rewards", "Unlock up to 61% off Think PCs", "Giveaway alert!", "Annual Sale Sneak Peak Unlocked!"], + >>> + >>> # 4 + >>> "linkedin": ["Here is the latest post trending amongst your coworkers", "Stephen, add Sean Brown to your network", "Share thoughts on LinkedIn", "Top companies are hiring", "Linkedin is better on the app", "Here is the latest post trending amongst your coworkers", "Stephen, add Ronald McDonald to your network", "James Smith shared a post for the first time in a while", "Here is the latest post trending amongst your coworkers", "You appeared in 13 searches this week", "you're on a roll with your career!", "You appeared in 16 searches this week", "18 people notices you", "You appeared in 10 searches this week", "Stephen, add Joe Shmoe to your network", "Your network is talking: The Center for Oceanic Research...", "thanks for being a valued member"] + >>> }) + >>> print(lsm.categorize_query("New! Weekend-only deals")) + >>> print(lsm.categorize_query("Stephen, redeem these three (3) unlocked courses")) + >>> print(lsm.categorize_query("Round Trip From San Francisco to Atlanta")) + [(3, 0.9418474435806274)] + [(4, 0.9366401433944702)] + [(2, 0.9944692850112915)] + + :Example 2: Use the Mail module to automate dataset construction + + >>> import PyXA + >>> app = PyXA.Application("Mail") + >>> junk_subject_lines = app.accounts()[0].mailboxes().by_name("Junk").messages().subject() + >>> other_subject_lines = app.accounts()[0].mailboxes().by_name("INBOX").messages().subject() + >>> + >>> dataset = { + >>> "junk": junk_subject_lines, + >>> "other": other_subject_lines + >>> } + >>> lsm = PyXA.XALSM(dataset) + >>> + >>> query = "Amazon Web Services Billing Statement Available" + >>> category = list(dataset.keys())[lsm.categorize_query(query)[0][0] - 1] + >>> print(query, "- category:", category) + >>> + >>> query = "Complete registration form asap receive your rewards" + >>> category = list(dataset.keys())[lsm.categorize_query(query)[0][0] - 1] + >>> print(query, "- category:", category) + Amazon Web Services Billing Statement Available - category: other + Complete registration form asap receive your rewards - category: junk + + .. versionadded:: 0.1.0 + """ + self.__categories = {} + if dataset is None and not from_file: + raise ValueError("You must either load a map from an external file or provide an initial dataset.") + elif dataset is None: + # Map will be loaded from external file -- empty dataset is temporary + self.__dataset = {} + else: + # Create new map + self.__dataset = dataset + + self.map = LatentSemanticMapping.LSMMapCreate(None, 0) + LatentSemanticMapping.LSMMapStartTraining(self.map) + LatentSemanticMapping.LSMMapSetProperties(self.map, { + LatentSemanticMapping.kLSMSweepCutoffKey: 0, + # LatentSemanticMapping.kLSMPrecisionKey: LatentSemanticMapping.kLSMPrecisionDouble, + LatentSemanticMapping.kLSMAlgorithmKey: LatentSemanticMapping.kLSMAlgorithmSparse, + }) + + for category in dataset: + self.__add_category(category) + + LatentSemanticMapping.LSMMapCompile(self.map) + + def __add_category(self, category: str) -> int: + loc = Foundation.CFLocaleGetSystem() + category_ref = LatentSemanticMapping.LSMMapAddCategory(self.map) + self.__categories[category] = category_ref + self.__categories[category_ref] = category_ref + text_ref = LatentSemanticMapping.LSMTextCreate(None, self.map) + LatentSemanticMapping.LSMTextAddWords(text_ref, " ".join(self.__dataset[category]), loc, LatentSemanticMapping.kLSMTextPreserveAcronyms) + LatentSemanticMapping.LSMMapAddText(self.map, text_ref, category_ref) + return category_ref + +
[docs] def save(self, file_path: Union[XABase.XAPath, str]) -> bool: + """Saves the map to an external file. + + :param file_path: The path to save the map at + :type file_path: Union[XABase.XAPath, str] + :return: True if the map was saved successfully + :rtype: bool + + :Example: Create a Reddit post classifier for gaming vs. productivity posts + + >>> import PyXA + >>> lsm = PyXA.XALSM({ + >>> # 1 + >>> "gaming": ["If you could vote on the 2017 Mob Vote again, which mob would you choose this time and why?", "Take your time, you got this", "My parents (late 70s) got me a ps5 controller for Christmas. I do not own a playstation 5...", "I got off the horse by accident right before a cutscene in red dead", "boy gamer", "Minesweeper 99 x 99, 1500 mines. Took me about 2.5 hours to finish, nerve-wracking. No one might care, but just wanted to share this.", "The perfect cosplay doesn’t ex...", "'Play until we lose'", "Can we please boycott Star Wars battlefront 2", "EA removed the refund button on their webpage, and now you have to call them and wait to get a refund.", "Train Simulator is so immersive!", "Been gaming with this dude for 15 years. Since Rainbow Six Vegas on 360. I have some good gaming memories with him. He tried but couldn’t get one. Little did he know I was able to get him one. Looking forward to playing another generation with him.", "EA will no longer have exclusive rights of the Star Wars games", "A ziplining contraption I created with 1000+ command blocks", "The steepest walkable staircase possible in 1.16", "I made a texture pack that gives mobs different facial expressions. Should I keep going?"], + >>> + >>> # 2 + >>> "productivity": ["Looking for an alarm app that plays a really small alarm, doesn’t need to be switched off and doesn’t repeat.", "I want to build a second brain but I'm lost and don't know where to start.", "noise cancelling earplugs", "I have so much to do but I don't know where to start", "How to handle stressful work calls", "time tracking app/platform", "We just need to find ways to cope and keep moving forward.", "Ikigai - A Reason for Being", "Minimalist Productivity Tip: create two users on your computer ➞ One for normal use and leisure ➞ One for business/work only. I have nothing except the essentials logged in on my work user. Not even Messages or YouTube. It completely revolutionized my productivity 💸", "Trick yourself into productivity the same way you trick yourself into procrastination", "I spent 40 hours sifting through research papers to fix my mental clarity, focus, and productivity - I ended up going down a rabbit hole and figuring out it was all tied to sleep, even though I felt I sleep well - here's what I found.", "The Cycle of Procrastination. Always a good reminder", "'Most people underestimate what they can do in a year, and overestimate what they can do in a day' - When you work on getting 1% better each day you won't even recognize yourself in a year."], + >>> }) + >>> lsm.save("/Users/steven/Downloads/gaming-productivity.map") + + .. versionadded:: 0.1.0 + """ + if isinstance(file_path, str): + file_path = XABase.XAPath(file_path) + + status = LatentSemanticMapping.LSMMapWriteToURL(self.map, file_path.xa_elem, 0) + if status == 0: + return True + return False
+ +
[docs] def load(file_path: Union[XABase.XAPath, str]) -> 'XALSM': + """Loads a map from an external file. + + :param file_path: The file path for load the map from + :type file_path: Union[XABase.XAPath, str] + :return: The populated LSM object + :rtype: XALSM + + :Example: Using the gaming vs. productivity Reddit post map + + >>> import PyXA + >>> lsm = PyXA.XALSM.load("/Users/steven/Downloads/gaming-productivity.map") + >>> print(lsm.categorize_query("Hidden survival base on our server")) + >>> print(lsm.categorize_query("Your memory is FAR more powerful than you think… school just never taught us to use it properly.")) + [(1, 0.7313863635063171)] + [(2, 0.9422407150268555)] + + .. versionadded:: 0.1.0 + """ + if isinstance(file_path, str): + file_path = XABase.XAPath(file_path) + + new_lsm = XALSM(from_file=True) + new_lsm.map = LatentSemanticMapping.LSMMapCreateFromURL(None, file_path.xa_elem, LatentSemanticMapping.kLSMMapLoadMutable) + new_lsm.__dataset = {i: [] for i in range(LatentSemanticMapping.LSMMapGetCategoryCount(new_lsm.map))} + new_lsm.__categories = {i: i for i in range(LatentSemanticMapping.LSMMapGetCategoryCount(new_lsm.map))} + LatentSemanticMapping.LSMMapCompile(new_lsm.map) + return new_lsm
+ +
[docs] def add_category(self, name: str, initial_data: Union[list[str], None] = None) -> int: + """Adds a new category to the map, optionally filling the category with initial text data. + + :param name: The name of the category + :type name: str + :param initial_data: _description_ + :type initial_data: list[str] + :return: The ID of the new category + :rtype: int + + :Example: Add a category for cleaning-related Reddit posts to the previous example + + >>> import PyXA + >>> lsm = PyXA.XALSM.load("/Users/steven/Downloads/gaming-productivity.map") + >>> lsm.add_category("cleaning", ["Curtains stained from eyelet reaction at dry cleaner", "How do I get these stains out of my pink denim overalls? from a black denim jacket that was drying next to them", "Cleaned my depression room after months 🥵", "Tip: 30 minute soak in Vinegar", "Regular floor squeegee pulled a surprising amount of pet hair out of my carpet!", "Before and after…", "It actually WORKS", "CLR is actually magic. (With some elbow grease)", "It was 100% worth it to scrape out my old moldy caulk and replace it. $5 dollars and a bit of time to make my shower look so much cleaner!", "Thanks to the person who recommended the Clorox Foamer. Before and after pics", "TIL you can dissolve inkstains with milk.", "Fixing cat scratch marks to couch using felting needle: Before and After", "Turns out BKF isn't a meme! Really satisfied with this stuff"]) + >>> print(lsm.categorize_query("Hidden survival base on our server")) + >>> print(lsm.categorize_query("Your memory is FAR more powerful than you think… school just never taught us to use it properly.")) + >>> print(lsm.categorize_query("A carpet rake will change your life.")) + [(1, 0.7474805116653442)] + [(2, 0.7167008519172668)] + [(3, 0.797333300113678)] + + .. versionadded:: 0.1.0 + """ + LatentSemanticMapping.LSMMapStartTraining(self.map) + + if initial_data is None: + initial_data = [] + + if name in self.__dataset: + raise ValueError("The category name must be unique.") + + self.__dataset[name] = initial_data + category_ref = self.__add_category(name) + LatentSemanticMapping.LSMMapCompile(self.map) + return category_ref
+ +
[docs] def add_data(self, data: dict[Union[int, str], list[str]]) -> list[int]: + """Adds the provided data, organized by category, to the active map. + + :param data: A dictionary specifying new or existing categories along with data to input into them + :type data: dict[Union[int, str], list[str]] + :return: A list of newly created category IDs + :rtype: int + + :Example: Classify text by language + + >>> import PyXA + >>> lsm = PyXA.XALSM({}) + >>> lsm.add_data({ + >>> # 1 + >>> "english": ["brilliance outer jacket artist flat mosquito recover restrict official gas ratio publish domestic realize pure offset obstacle thigh favorite demonstration revive nest reader slide pudding symptom ballot auction characteristic complete Mars ridge student explosion dive emphasis the buy perfect motif penny a errand to fur far spirit random integration of with"], + >>> + >>> # 2 + >>> "italian": ["da piazza proposta di legge legare nazionale a volte la salute bar farti farmi il pane aggiunta valore artista chiamata settentrionale scuro buio classe signori investitore in grado di fidanzato tagliare arriva successo altrimenti speciale esattamente definizione sorriso chiamo madre pulire esperto rurale vedo malattia era amici libertà l'account immaginare lingua soldi più perché"], + >>> }) + >>> print(lsm.categorize_query("Here's to the crazy ones")) + >>> print(lsm.categorize_query("Potete parlarmi in italiano")) + [(1, 1.0)] + [(2, 1.0)] + + .. versionadded:: 0.1.0 + """ + category_refs = [] + LatentSemanticMapping.LSMMapStartTraining(self.map) + for category in data: + if category not in self.__dataset: + self.__dataset[category] = data[category] + category_refs.append(self.__add_category(category)) + else: + loc = Foundation.CFLocaleGetSystem() + text_ref = LatentSemanticMapping.LSMTextCreate(None, self.map) + LatentSemanticMapping.LSMTextAddWords(text_ref, " ".join(data[category]), loc, LatentSemanticMapping.kLSMTextPreserveAcronyms) + LatentSemanticMapping.LSMMapAddText(self.map, text_ref, self.__categories[category]) + LatentSemanticMapping.LSMMapCompile(self.map) + return category_refs
+ +
[docs] def add_text(self, text: str, category: Union[int, str], weight: float = 1): + """Adds the given text to the specified category, applying an optional weight. + + :param text: The text to add to the dataset + :type text: str + :param category: The category to add the text to + :type category: Union[int, str] + :param weight: The weight to assign to the text entry, defaults to 1 + :type weight: float, optional + :raises ValueError: The specified category must be a valid category name or ID + + :Example: + + >>> import PyXA + >>> lsm = PyXA.XALSM({"colors": [], "numbers": ["One", "Two", "Three"]}) + >>> lsm.add_text("red orange yellow green blue purple", "colors") + >>> lsm.add_text("white black grey gray brown pink", 1) + >>> print(lsm.categorize_query("pink")) + + .. versionadded:: 0.1.0 + """ + LatentSemanticMapping.LSMMapStartTraining(self.map) + if category not in self.__dataset and category not in self.__categories: + raise ValueError(f"Invalid category: {category}") + + loc = Foundation.CFLocaleGetSystem() + text_ref = LatentSemanticMapping.LSMTextCreate(None, self.map) + LatentSemanticMapping.LSMTextAddWords(text_ref, text, loc, LatentSemanticMapping.kLSMTextPreserveAcronyms) + LatentSemanticMapping.LSMMapAddTextWithWeight(self.map, text_ref, self.__categories[category], weight) + LatentSemanticMapping.LSMMapCompile(self.map)
+ +
[docs] def categorize_query(self, query: str, num_results: int = 1) -> list[tuple[int, float]]: + """Categorizes the query based on the current weights in the map. + + :param query: The query to categorize + :type query: str + :param num_results: The number of categorizations to show, defaults to 1 + :type num_results: int, optional + :return: A list of tuples identifying categories and their associated score. A higher score indicates better fit. If not matching categorization is found, the list will be empty. + :rtype: list[tuple[int, float]] + + :Example: + + >>> import PyXA + >>> dataset = { + >>> # 1 + >>> "color": ["red", "orange", "yellow", "green", "emerald", "blue", "purple", "white", "black", "brown", "pink", "grey", "gray"], + >>> + >>> # 2 + >>> "number": ["One Two Three Four Five Six Seven Eight Nine Ten"] + >>> } + >>> lsm = PyXA.XALSM(dataset) + >>> queries = ["emerald green three", "one hundred five", "One o' clock", "sky blue", "ninety nine", "purple pink"] + >>> + >>> for query in queries: + >>> category = "Unknown" + >>> categorization_tuple = lsm.categorize_query(query) + >>> if len(categorization_tuple) > 0: + >>> category = list(dataset.keys())[categorization_tuple[0][0] - 1] + >>> print(query, "is a", category) + emerald green three is a color + one hundred five is a number + One o' clock is a number + sky blue is a color + ninety nine is a number + purple pink is a color + + .. versionadded:: 0.1.0 + """ + loc = Foundation.CFLocaleGetSystem() + text_ref = LatentSemanticMapping.LSMTextCreate(None, self.map) + LatentSemanticMapping.LSMTextAddWords(text_ref, query, loc, 0) + rows = LatentSemanticMapping.LSMResultCreate(None, self.map, text_ref, 10, LatentSemanticMapping.kLSMTextPreserveAcronyms) + + categorization = [] + num_results = min(num_results, LatentSemanticMapping.LSMResultGetCount(rows)) + for i in range(0, num_results): + category_num = LatentSemanticMapping.LSMResultGetCategory(rows, i) + score = LatentSemanticMapping.LSMResultGetScore(rows, i) + categorization.append((category_num, score)) + return categorization
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/Additions/Speech.html b/docs/_modules/PyXA/Additions/Speech.html new file mode 100644 index 0000000..b982b31 --- /dev/null +++ b/docs/_modules/PyXA/Additions/Speech.html @@ -0,0 +1,365 @@ + + + + + + PyXA.Additions.Speech — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.Additions.Speech

+""".. versionadded:: 0.1.1
+
+A collection of classes for handling speak input and output.
+"""
+
+import time
+from datetime import datetime, timedelta
+from typing import Any, Callable, Union
+
+import AppKit
+import AVFoundation
+import Speech
+from PyObjCTools import AppHelper
+
+from PyXA import XABase
+
+
+
[docs]class XACommandDetector(): + """A command-based query detector. + + .. versionadded:: 0.0.9 + """ + def __init__(self, command_function_map: Union[dict[str, Callable[[], Any]], None] = None): + """Creates a command detector object. + + :param command_function_map: A dictionary mapping command strings to function objects + :type command_function_map: dict[str, Callable[[], Any]] + + .. versionadded:: 0.0.9 + """ + self.command_function_map = command_function_map or {} #: The dictionary of commands and corresponding functions to run upon detection + +
[docs] def on_detect(self, command: str, function: Callable[[], Any]): + """Adds or replaces a command to listen for upon calling :func:`listen`, and associates the given function with that command. + + :param command: The command to listen for + :type command: str + :param function: The function to call when the command is heard + :type function: Callable[[], Any] + + :Example: + + >>> detector = PyXA.XACommandDetector() + >>> detector.on_detect("go to google", PyXA.XAURL("http://google.com").open) + >>> detector.listen() + + .. versionadded:: 0.0.9 + """ + self.command_function_map[command] = function
+ +
[docs] def listen(self) -> Any: + """Begins listening for the specified commands. + + :return: The execution return value of the corresponding command function + :rtype: Any + + :Example: + + >>> import PyXA + >>> PyXA.speak("What app do you want to open?") + >>> PyXA.XACommandDetector({ + >>> "safari": PyXA.Application("Safari").activate, + >>> "messages": PyXA.Application("Messages").activate, + >>> "shortcuts": PyXA.Application("Shortcuts").activate, + >>> "mail": PyXA.Application("Mail").activate, + >>> "calendar": PyXA.Application("Calendar").activate, + >>> "notes": PyXA.Application("Notes").activate, + >>> "music": PyXA.Application("Music").activate, + >>> "tv": PyXA.Application("TV").activate, + >>> "pages": PyXA.Application("Pages").activate, + >>> "numbers": PyXA.Application("Numbers").activate, + >>> "keynote": PyXA.Application("Keynote").activate, + >>> }).listen() + + .. versionadded:: 0.0.9 + """ + command_function_map = self.command_function_map + return_value = None + class NSSpeechRecognizerDelegate(AppKit.NSObject): + def speechRecognizer_didRecognizeCommand_(self, recognizer, cmd): + return_value = command_function_map[cmd]() + AppHelper.stopEventLoop() + + recognizer = AppKit.NSSpeechRecognizer.alloc().init() + recognizer.setCommands_(list(command_function_map.keys())) + recognizer.setBlocksOtherRecognizers_(True) + recognizer.setDelegate_(NSSpeechRecognizerDelegate.alloc().init().retain()) + recognizer.startListening() + AppHelper.runConsoleEventLoop() + + return return_value
+ + + + +
[docs]class XASpeechRecognizer(): + """A rule-based query detector. + + .. versionadded:: 0.0.9 + """ + def __init__(self, finish_conditions: Union[None, dict[Callable[[str], bool], Callable[[str], bool]]] = None): + """Creates a speech recognizer object. + + By default, with no other rules specified, the Speech Recognizer will timeout after 10 seconds once :func:`listen` is called. + + :param finish_conditions: A dictionary of rules and associated methods to call when a rule evaluates to true, defaults to None + :type finish_conditions: Union[None, dict[Callable[[str], bool], Callable[[str], bool]]], optional + + .. versionadded:: 0.0.9 + """ + default_conditions = { + lambda x: self.time_elapsed > timedelta(seconds = 10): lambda x: self.spoken_query, + } + self.finish_conditions: Callable[[str], bool] = finish_conditions or default_conditions #: A dictionary of rules and associated methods to call when a rule evaluates to true + self.spoken_query: str = "" #: The recognized spoken input + self.start_time: datetime #: The time that the Speech Recognizer begins listening + self.time_elapsed: timedelta #: The amount of time passed since the start time + + def __prepare(self): + # Request microphone access if we don't already have it + Speech.SFSpeechRecognizer.requestAuthorization_(None) + + # Set up audio session + self.audio_session = AVFoundation.AVAudioSession.sharedInstance() + self.audio_session.setCategory_mode_options_error_(AVFoundation.AVAudioSessionCategoryRecord, AVFoundation.AVAudioSessionModeMeasurement, AVFoundation.AVAudioSessionCategoryOptionDuckOthers, None) + self.audio_session.setActive_withOptions_error_(True, AVFoundation.AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation, None) + + # Set up recognition request + self.recognizer = Speech.SFSpeechRecognizer.alloc().init() + self.recognition_request = Speech.SFSpeechAudioBufferRecognitionRequest.alloc().init() + self.recognition_request.setShouldReportPartialResults_(True) + + # Set up audio engine + self.audio_engine = AVFoundation.AVAudioEngine.alloc().init() + self.input_node = self.audio_engine.inputNode() + recording_format = self.input_node.outputFormatForBus_(0) + self.input_node.installTapOnBus_bufferSize_format_block_(0, 1024, recording_format, + lambda buffer, _when: self.recognition_request.appendAudioPCMBuffer_(buffer)) + self.audio_engine.prepare() + self.audio_engine.startAndReturnError_(None) + +
[docs] def on_detect(self, rule: Callable[[str], bool], method: Callable[[str], bool]): + """Sets the given rule to call the specified method if a spoken query passes the rule. + + :param rule: A function that takes the spoken query as a parameter and returns a boolean value depending on whether the query passes a desired rule + :type rule: Callable[[str], bool] + :param method: A function that takes the spoken query as a parameter and acts on it + :type method: Callable[[str], bool] + + .. versionadded:: 0.0.9 + """ + self.finish_conditions[rule] = method
+ +
[docs] def listen(self) -> Any: + """Begins listening for a query until a rule returns True. + + :return: The value returned by the method invoked upon matching some rule + :rtype: Any + + .. versionadded:: 0.0.9 + """ + self.start_time = datetime.now() + self.time_elapsed = None + self.__prepare() + + old_self = self + def detect_speech(transcription, error): + if error is not None: + print("Failed to detect speech. Error: ", error) + else: + old_self.spoken_query = transcription.bestTranscription().formattedString() + print(old_self.spoken_query) + + recognition_task = self.recognizer.recognitionTaskWithRequest_resultHandler_(self.recognition_request, detect_speech) + while self.spoken_query == "" or not any(x(self.spoken_query) for x in self.finish_conditions): + self.time_elapsed = datetime.now() - self.start_time + AppKit.NSRunLoop.currentRunLoop().runUntilDate_(datetime.now() + timedelta(seconds = 0.5)) + + self.audio_engine.stop() + for rule, method in self.finish_conditions.items(): + if rule(self.spoken_query): + return method(self.spoken_query)
+ + + + +
[docs]class XASpeech(): + def __init__(self, message: str = "", voice: Union[str, None] = None, volume: float = 0.5, rate: int = 200): + self.message: str = message #: The message to speak + self.voice: Union[str, None] = voice #: The voice that the message is spoken in + self.volume: float = volume #: The speaking volume + self.rate: int = rate #: The speaking rate + +
[docs] def voices(self) -> list[str]: + """Gets the list of voice names available on the system. + + :return: The list of voice names + :rtype: list[str] + + :Example: + + >>> import PyXA + >>> speaker = PyXA.XASpeech() + >>> print(speaker.voices()) + ['Agnes', 'Alex', 'Alice', 'Allison', + + .. versionadded:: 0.0.9 + """ + ls = AppKit.NSSpeechSynthesizer.availableVoices() + return [x.replace("com.apple.speech.synthesis.voice.", "").replace(".premium", "").title() for x in ls]
+ +
[docs] def speak(self, path: Union[str, XABase.XAPath, None] = None): + """Speaks the provided message using the desired voice, volume, and speaking rate. + + :param path: The path to a .AIFF file to output sound to, defaults to None + :type path: Union[str, XAPath, None], optional + + :Example 1: Speak a message aloud + + >>> import PyXA + >>> PyXA.XASpeech("This is a test").speak() + + :Example 2: Output spoken message to an AIFF file + + >>> import PyXA + >>> speaker = PyXA.XASpeech("Hello, world!") + >>> speaker.speak("/Users/steven/Downloads/Hello.AIFF") + + :Example 3: Control the voice, volume, and speaking rate + + >>> import PyXA + >>> speaker = PyXA.XASpeech( + >>> message = "Hello, world!", + >>> voice = "Alex", + >>> volume = 1, + >>> rate = 500 + >>> ) + >>> speaker.speak() + + .. versionadded:: 0.0.9 + """ + # Get the selected voice by name + voice = None + for v in AppKit.NSSpeechSynthesizer.availableVoices(): + if self.voice.lower() in v.lower(): + voice = v + + # Set up speech synthesis object + synthesizer = AppKit.NSSpeechSynthesizer.alloc().initWithVoice_(voice) + synthesizer.setVolume_(self.volume) + synthesizer.setRate_(self.rate) + + # Start speaking + if path is None: + synthesizer.startSpeakingString_(self.message) + else: + if isinstance(path, str): + path = XABase.XAPath(path) + synthesizer.startSpeakingString_toURL_(self.message, path.xa_elem) + + # Wait for speech to complete + while synthesizer.isSpeaking(): + time.sleep(0.01)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/Additions/UI.html b/docs/_modules/PyXA/Additions/UI.html new file mode 100644 index 0000000..44faa2f --- /dev/null +++ b/docs/_modules/PyXA/Additions/UI.html @@ -0,0 +1,1864 @@ + + + + + + PyXA.Additions.UI — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.Additions.UI

+""".. versionadded:: 0.1.2
+
+Classes for creating and displaying various UI elements.
+"""
+
+from datetime import datetime, timedelta
+from enum import Enum
+from time import sleep
+from typing import Any, Callable, Union, Literal
+
+import AppKit
+from PyObjCTools import AppHelper
+
+from PyXA import XABase
+
+
+
[docs]class XASwitch(): + """A switch UI element. Wrapper around AppKit.NSSwitch functionality. + + .. versionadded:: 0.1.2 + """ + def __init__(self, action: Union[Callable[['XASwitch', int, Any], None], None] = None, args: Union[list[Any], None] = None): + """Initializes a switch object. + + :param action: The method to run when the switch's state changes, defaults to None + :type action: Union[Callable[[XASwitch, int, Any], None], None], optional + :param args: The arguments to pass to the action method upon execution, defaults to None + :type args: Union[list[Any], None], optional + + .. versionadded:: 0.1.2 + """ + self.action = action #: The method to run when the switch's state changes + self.args = args or [] #: The arguments to pass to the action method upon execution + switch = AppKit.NSSwitch.alloc().init() + switch.setFrame_(AppKit.NSMakeRect(0, 0, 100, 32)) + switch.setAction_("run:action:") + switch.setTarget_(self) + self.xa_elem = switch + + @property + def state(self) -> bool: + """The current state of the switch. + """ + return self.xa_elem.state() == AppKit.NSControlStateValueOn + + @state.setter + def state(self, state: bool): + if state: + self.xa_elem.setState_(AppKit.NSControlStateValueOn) + else: + self.xa_elem.setState_(AppKit.NSControlStateValueOff) + +
[docs] def run_action_(self, slider, _): + """Runs the action method attached to the switch. + + :param switch: The NSSwitch object associated with this object + :type switch: AppKit.NSSwitch + + .. versionadded:: 0.1.2 + """ + button = AppKit.NSApplication.sharedApplication().currentEvent().buttonNumber() + if callable(self.action): + self.action(self, button, *self.args)
+ +
[docs] def toggle(self): + """Toggles the switch on or off. + + .. versionadded:: 0.1.2 + """ + if self.xa_elem.state() == AppKit.NSControlStateValueOn: + self.xa_elem.setState_(AppKit.NSControlStateValueOff) + else: + self.xa_elem.setState_(AppKit.NSControlStateValueOn)
+ + + + +
[docs]class XASlider(): + """A slider UI element. Wrapper around AppKit.NSSlider functionality. + + .. versionadded:: 0.1.2 + """ + def __init__(self, action: Union[Callable[['XASlider', int, Any], None], None] = None, args: Union[list[Any], None] = None, value: float = 50.0, min_value: float = 0, max_value: float = 100): + """Initializes a new slider object. + + :param action: The method to call when the value of the slider changes, defaults to None + :type action: Union[Callable[[XASlider, int, Any], None], None], optional + :param args: The arguments to pass to the action method upon execution, defaults to None + :type args: Union[list[Any], None], optional + :param value: The starting value of the slider, defaults to 50.0 + :type value: float, optional + :param min_value: The minimum value of the slider, defaults to 0 + :type min_value: float, optional + :param max_value: The maximum value of the slider, defaults to 100 + :type max_value: float, optional + + .. versionadded:: 0.1.2 + """ + self.action = action #: The method to run when the value of the slider changes + self.args = args or [] #: The arguments to pass to the action method upon execution + slider = AppKit.NSSlider.sliderWithTarget_action_(None, 'action:') + slider.setMinValue_(min_value) + slider.setMaxValue_(max_value) + slider.setDoubleValue_(value) + slider.setFrameSize_(AppKit.NSMakeSize(100, 25)) + slider.setAction_("run:action:") + slider.setTarget_(self) + self.xa_elem = slider + + @property + def value(self) -> float: + """The current value of the slider. + """ + return self.xa_elem.doubleValue() + + @value.setter + def value(self, value: float): + self.xa_elem.setDoubleValue_(value) + + @property + def min_value(self) -> float: + """The minimum value that the slider can be set to. + """ + return self.xa_elem.minValue() + + @min_value.setter + def min_value(self, min_value: float): + self.xa_elem.setMinValue_(min_value) + + @property + def max_value(self) -> float: + """The maximum value that the slider can be set to. + """ + return self.xa_elem.maxValue() + + @max_value.setter + def max_value(self, max_value: float): + self.xa_elem.setMaxValue_(max_value) + +
[docs] def run_action_(self, slider, _): + """Runs the action method associated with the slider. + + .. versionadded:: 0.1.2 + """ + button = AppKit.NSApplication.sharedApplication().currentEvent().buttonNumber() + if callable(self.action): + self.action(self, button, *self.args)
+ + + + +
[docs]class XASegmentedControl(): + """A segmented control UI element. Wrapper around AppKit.NSSegmentedControl functionality. + + .. versionadded:: 0.1.2 + """ + def __init__(self, segments: Union[list[str], list[XABase.XAImage]], action: Union[Callable[['XASlider', int, Any], None], None] = None, args: Union[list[Any], None] = None, multiselect: bool = False): + """Initializes a new slider object. + + :param segments: The labels or images to display as available options + :type segments: Union[list[str], list[XABase.XAImage]] + :param action: The method to call when the value of the slider changes, defaults to None + :type action: Union[Callable[[XASlider, int, Any], None], None], optional + :param args: The arguments to pass to the action method upon execution, defaults to None + :type args: Union[list[Any], None], optional + :param multiselect: Controls whether one or multiple options can be selected, defaults to False + :type multiselect: bool, optional + + .. versionadded:: 0.1.2 + """ + if not isinstance(segments, list): + raise TypeError("Must provided a list of segment names (strings) or images (of the XABase.XAImage class).") + + all_strings = all([isinstance(segment, str) for segment in segments]) + all_images = all(isinstance(segment, XABase.XAImage) for segment in segments) + if not all_strings and not all_images: + raise TypeError("Segments must be either *all* strings or *all* images.") + + self.__segments = segments + self.__state = [False for _ in segments] + + if multiselect: + multiselect = AppKit.NSSegmentSwitchTrackingSelectAny + else: + multiselect = AppKit.NSSegmentSwitchTrackingSelectOne + + if all_strings: + control = AppKit.NSSegmentedControl.segmentedControlWithLabels_trackingMode_target_action_(segments, multiselect, self, 'run:action:') + else: + images = [image.xa_elem for image in segments] + control = AppKit.NSSegmentedControl.segmentedControlWithImages_trackingMode_target_action_(images, multiselect, self, 'run:action:') + + self.__multiselect = multiselect + self.action = action #: The method to run when the value of the slider changes + self.args = args or [] #: The arguments to pass to the action method upon execution + self.xa_elem = control + + @property + def selection(self) -> Union[list[str], list[XABase.XAImage]]: + """The list of currently selected segments. + + .. versionadded:: 0.1.2 + """ + selected_segments = [] + for index, segment in enumerate(self.__segments): + if self.__state[index] is True: + selected_segments.append(segment) + + return selected_segments + + @selection.setter + def selection(self, selection: Union[list[str], list[XABase.XAImage]]): + self.xa_elem.setSelectedSegment_(-1) + for new_segment in selection: + for index, segment in enumerate(self.__segments): + if new_segment == segment: + self.xa_elem.setSelected_forSegment_(True, index) + +
[docs] def run_action_(self, slider, _): + """Runs the action method associated with the segmented control. + + .. versionadded:: 0.1.2 + """ + index = self.xa_elem.selectedSegment() + if not self.__multiselect: + self.__state = [False for _ in self.__state] + self.__state[index] = not self.__state[index] + + button = AppKit.NSApplication.sharedApplication().currentEvent().buttonNumber() + if callable(self.action): + self.action(self, button, *self.args)
+ + + + +
[docs]class XAHUD(): + """A momentary HUD window that displays a message to the user. + + .. versionadded:: 0.1.1 + """ + + def __init__(self, message: str, font_size: int = 20, duration: float = 3.0, background_color: Union['XABase.XAColor', None] = None, text_color: Union['XABase.XAColor', None] = None): + self.message = message #: The HUD's message text + self.font_size = font_size #: The font size of the HUD's message text + self.duration: float = duration #: The amount of time to display the HUD for, in seconds + self.background_color: XABase.XAColor = background_color or XABase.XAColor(0, 0, 0, 0.3) #: The background color of the HUD window + self.text_color: XABase.XAColor = text_color or XABase.XAColor(1, 1, 1, 1) #: The text color of the HUD's message text + +
[docs] def display(self): + """Displays the HUD in the center of the screen. + + .. versionadded:: 0.1.2 + """ + # Adjust text frame bounds according to current font size + text = AppKit.NSText.alloc().initWithFrame_(AppKit.NSMakeRect(0, 0, 500, 50)) + text.setString_(self.message) + text.setDrawsBackground_(False) + text.setSelectable_(False) + text.setAlignment_(AppKit.NSTextAlignmentCenter) + text.setTextColor_(self.text_color.xa_elem) + font = AppKit.NSFont.systemFontOfSize_(font_size) + text.setFont_(font) + text.sizeToFit() + + # Create a HUD panel, add the text as a subview + panel = AppKit.NSPanel.alloc().initWithContentRect_styleMask_backing_defer_(text.frame(), AppKit.NSWindowStyleMaskFullSizeContentView | AppKit.NSWindowStyleMaskUtilityWindow | AppKit.NSTitledWindowMask | AppKit.NSWindowStyleMaskHUDWindow, AppKit.NSBackingStoreBuffered, False) + panel.setTitlebarAppearsTransparent_(True) + panel.contentView().addSubview_(text) + panel.contentView().setBackgroundColor_(self.background_color.xa_elem) + + # Vertically center the text within the panel frame + font_size = text.font().boundingRectForFont().size.height + offset = text.frame().size.height - font_size / 2 + new_text_rect = AppKit.NSInsetRect(text.frame(), 0, offset) + text.setFrame_(new_text_rect) + + # Center the panel in the display + panel.center() + + # Display the HUD for the specified duration + panel.makeKeyAndOrderFront_(panel) + app = AppKit.NSApplication.sharedApplication() + app.setActivationPolicy_(AppKit.NSApplicationActivationPolicyAccessory) + app.activateIgnoringOtherApps_(True) + AppKit.NSRunLoop.currentRunLoop().runUntilDate_(datetime.now() + timedelta(seconds = self.duration))
+ + + + +
[docs]class XAAlertStyle(Enum): + """Options for which alert style an alert should display with. + """ + INFORMATIONAL = AppKit.NSAlertStyleInformational + WARNING = AppKit.NSAlertStyleWarning + CRITICAL = AppKit.NSAlertStyleCritical
+ +
[docs]class XAAlert(): + """A class for creating and interacting with an alert dialog window. + + .. versionadded:: 0.0.5 + """ + def __init__(self, title: str = "Alert!", message: str = "", style: XAAlertStyle = XAAlertStyle.INFORMATIONAL, buttons = ["Ok", "Cancel"], icon: Union['XABase.XAImage', None] = None): + """Initializes an alert object. + + :param title: The title text of the alert + :type title: str + :param message: The detail message text of the alert, defaults to "" + :type message: str, optional + :param style: The style of the alert (i.e. informational, warning, or critical), deprecated as of PyXA 0.1.2 + :type style: XAAlertStyle, optional + :param buttons: A list specifying the buttons available for the user to click + :type buttons: list[str] + :param icon: The icon displayed in the alert window + :type icon: XABase.XAImage + """ + self.title: str = title #: The title text of the alert + self.message: str = message #: The detail message text of the alert + self.style: XAAlertStyle = style + """The style of the alert. + + .. deprecated:: 0.1.2 + + To customize the icon, set the :attr:`icon` attribute instead. + """ + + self.buttons: list[str] = buttons #: A list specifying the buttons available for the user to click + self.icon = icon #: The icon displayed in the alert window + self.__return_value = None + + def __display(self): + # Actual logic for displaying the alert, run on main thread via display() + alert = AppKit.NSAlert.alloc().init() + alert.setInformativeText_(self.title) + alert.setMessageText_(self.message) + + if self.icon is not None: + alert.setIcon_(self.icon.xa_elem) + + for button in self.buttons: + alert.addButtonWithTitle_(button) + self.__return_value = alert.runModal() + +
[docs] def display(self) -> int: + """Displays the alert. + + :return: A number representing the button that the user selected, if any + :rtype: int + + .. versionadded:: 0.0.5 + """ + loop_mode = AppKit.NSRunLoop.mainRunLoop().currentMode() + if loop_mode is None: + # Not in run loop; run normally (must be done on main thread) + self.__display() + else: + # In run loop; force run on main thread + AppHelper.callAfter(self.__display) + + # Wait for user to click some button + while self.__return_value is None: + sleep(0.01) + return self.__return_value
+ + + + +
[docs]class XANotification(): + """A class for managing and interacting with notifications. + + .. versionadded:: 0.0.9 + """ + def __init__(self, text: str, title: Union[str, None] = None, subtitle: Union[str, None] = None, image: Union['XABase.XAImage', None] = None, sound_name: Union[str, None] = None, primary_button_title: Union[str, None] = None, show_reply_button: bool = False, click_action: Union[Callable[[], None], None] = None, primary_action: Union[Callable[[], None], None] = None, reply_action: Union[Callable[[], None], None] = None, timeout: float = -1): + """Initializes a notification object. + + :param text: The main text of the notification + :type text: str + :param title: The title of the notification, defaults to None + :type title: Union[str, None], optional + :param subtitle: The subtitle of the notification, defaults to None + :type subtitle: Union[str, None], optional + :param image: The content image of the notification, defaults to None + :type image: Union[XABase.XAImage, None], optional + :param sound_name: The sound to play when the notification is displayed, defaults to None + :type sound_name: Union[str, None], optional + :param primary_button_title: The name of the primary action button, defaults to None + :type primary_button_title: str, optional + :param click_action: The method to run when the user clicks the notification + :type click_action: Union[Callable[[XANotification], None], None], optional + :param primary_action: The method to run when the user clicks the primary action button, defaults to None + :type primary_action: Union[Callable[[XANotification], None], None], optional + :param reply_action: The method to run when the user replies to the notification, defaults to None + :type reply_action: Union[Callable[[XANotification, str], None], None], optional + :param timeout: The number of seconds to wait for the user to act on the notification, or -1 to wait infinitely, defaults to -1 + :type timeout: float + + .. versionadded:: 0.0.9 + """ + self.text: str = text #: The main text of the notification + self.title: str = title #: The title of the notification + self.subtitle: str = subtitle #: The subtitle of the notification + self.image: XABase.XAImage = image #: The content image of the notification + self.sound_name = sound_name #: The sound to play when the notification is displayed + self.primary_button_title: str = primary_button_title #: The name of the primary action button + self.click_action: Union[Callable[[XANotification], None], None] = click_action or (lambda x: None) #: The method to run when the user clicks the notification + self.primary_action: Union[Callable[[XANotification], None], None] = primary_action or (lambda x: None) #: The method to run when the user clicks the primary action button + self.reply_action: Union[Callable[[XANotification, str], None], None] = reply_action #: The method to run when the user replies to the notification. Overrides the primary action and replaces the primary action button with a "Reply" button. + self.timeout: float = timeout #: The number of seconds to wait for the user to act on the notification, or -1 to wait infinitely + +
[docs] def display(self): + """Displays the notification. + + .. versionadded:: 0.0.9 + """ + nc = AppKit.NSUserNotificationCenter.defaultUserNotificationCenter() + parent = self + + class NotificationCenterDelegate(AppKit.NSObject): + def userNotificationCenter_didActivateNotification_(self, nc, notification): + activation_type = notification.activationType() + if activation_type == 1: + parent.click_action(parent) + elif activation_type == 2: + parent.primary_action(parent) + elif activation_type == 3: + parent.reply_action(parent, notification.response().string()) + + nc.removeDeliveredNotification_(notification) + + nc.setDelegate_(NotificationCenterDelegate.alloc().init().retain()) + notification = AppKit.NSUserNotification.alloc().init() + + if isinstance(self.title, str): + notification.setTitle_(self.title) + + if isinstance(self.subtitle, str): + notification.setSubtitle_(self.subtitle) + + notification.setInformativeText_(self.text) + + if isinstance(self.image, XABase.XAImage): + notification.setContentImage_(self.image.xa_elem) + + if isinstance(self.sound_name, str): + notification.setSoundName_(self.sound_name) + + if isinstance(self.primary_button_title, str): + notification.setActionButtonTitle_(self.primary_button_title) + self.__dismiss = False + else: + notification.setHasActionButton_(False) + + if callable(self.reply_action): + notification.setHasReplyButton_(True) + self.__dismiss = False + + notification.setDeliveryDate_(datetime.now()) + nc.scheduleNotification_(notification) + + # Wait for notification to be delivered + while notification not in nc.deliveredNotifications(): + sleep(0.01) + + # Wait for user to do some action on the notification + while notification in nc.deliveredNotifications(): + AppKit.NSRunLoop.mainRunLoop().runUntilDate_(datetime.now() + timedelta(seconds=0.01))
+ + + + +
[docs]class XAMenuBar(): + def __init__(self): + """Creates a new menu bar object for interacting with the system menu bar. + + :Example: + + >>> import PyXA + >>> menubar = PyXA.XAMenuBar() + >>> menu_icon = PyXA.XAImage.symbol("sparkles") + >>> menu = menubar.new_menu(icon=menu_icon) + >>> + >>> button_item = menu.new_item("Click me", action=lambda item, button: print(item.text)) + >>> url_item = menu.new_url_item("www.github.com") + >>> image_item = menu.new_image_item("/Users/steven/Desktop/Screenshot 2022-12-06 at 21.40.37.png", tooltip="An image") + >>> switch_item = menu.new_switch_item(label="Toggle", action=lambda switch, button: print(switch.state)) + >>> segmented_control_item = menu.new_segmented_control_item(["A", "B", "C"], multiselect=True, action=lambda control, button: print(control.selection)) + >>> segmented_control_item = menu.new_segmented_control_item(["1", "2", "3"], action=lambda control, button: print(control.selection)) + >>> slider_item = menu.new_slider_item(action=lambda slider, button: print(slider.value)) + >>> menu.new_separator() + >>> + >>> menubar.display() + + .. versionadded:: 0.0.9 + """ + self.menus = {} #: The menus to be displayed in the status bar, keyed by ID + + app = AppKit.NSApplication.sharedApplication() + detector = self + + def get_all_subitems(menu): + items = [] + for item_key, item in menu.items.items(): + items.append(item) + items.extend(get_all_subitems(item)) + return items + + class MyApplicationAppDelegate(AppKit.NSObject): + def menu_willHighlightItem_(self, menu, item): + if hasattr(item, "submenu") and item.submenu() is not None: + self.action_(item) + + def menuWillOpen_(self, selected_menu): + button = app.currentEvent().buttonNumber() + for menu_key, menu in detector.menus.items(): + if menu.xa_elem == selected_menu: + menu._run_action(button) + + def action_(self, menu_item): + button = app.currentEvent().buttonNumber() + if app.currentEvent().type() == AppKit.NSEventTypeMouseMoved: + button = -1 + + for menu_key, menu in detector.menus.items(): + subitems = get_all_subitems(menu) + for subitem in subitems: + if subitem.xa_elem == menu_item: + subitem._run_action(button) + break + + # popover = AppKit.NSPopover.alloc().init() + # popover.setContentSize_((100, 200)) + # # popover.setBehavior_(AppKit.NSPopoverBehaviorTransient) + # view_controller = AppKit.NSViewController.alloc().init() + # view_controller.setView_(AppKit.NSView.alloc().init()) + # popover.setContentViewController_(view_controller) + # popover.showRelativeToRect_ofView_preferredEdge_(menu._status_item.button().bounds(), menu._status_item.button(), AppKit.NSRectEdgeMinY) + + self.__delegate = MyApplicationAppDelegate.alloc().init().retain() + app.setDelegate_(self.__delegate) + app.setActivationPolicy_(AppKit.NSApplicationActivationPolicyAccessory) + +
[docs] def add_menu(self, title: str, image: Union['XABase.XAImage', None] = None, tool_tip: Union[str, None] = None, img_width: int = 30, img_height: int = 30): + """Adds a new menu to be displayed in the system menu bar. + + :param title: The name of the menu + :type title: str + :param image: The image to display for the menu, defaults to None + :type image: Union[XABase.XAImage, None], optional + :param tool_tip: The tooltip to display on hovering over the menu, defaults to None + :type tool_tip: Union[str, None], optional + :param img_width: The width of the image, in pixels, defaults to 30 + :type img_width: int, optional + :param img_height: The height of the image, in pixels, defaults to 30 + :type img_height: int, optional + + :Example: + + >>> import PyXA + >>> menu_bar = PyXA.XAMenuBar() + >>> img = PyXA.XAImage("/Users/steven/Downloads/Blackness.jpg") + >>> menu_bar.add_menu("Menu 1", image=img, img_width=100, img_height=100) + >>> menu_bar.display() + + .. deprecated:: 0.1.1 + + Use :func:`new_menu` instead. + + .. versionadded:: 0.0.9 + """ + self.new_menu(title, image, tool_tip, (img_width, img_height))
+ +
[docs] def new_menu(self, content: Union[str, int, float, XABase.XAImage, XABase.XAURL, XABase.XAPath, None] = None, icon: Union[XABase.XAImage, None] = None, tooltip: Union[str, None] = None, icon_dimensions: tuple[int, int] = (30, 30), action: Callable[['XAMenuBarMenu', None], None] = None, id: Union[str, None] = None, index: int = -1) -> 'XAMenuBarMenu': + """Adds a new menu to be displayed in the system menu bar. + + :param content: The content of the menu (the string or icon shown in the menubar), defaults to None + :type content: Union[str, int, float, XABase.XAImage, XABase.XAURL, XABase.XAPath, None], optional + :param icon: The icon for the menu, defaults to None + :type icon: Union[XABase.XAImage, None], optional + :param tooltip: The tooltip to display on hovering over the menu, defaults to None + :type tooltip: Union[str, None], optional + :param icon_dimensions: The width and height of the image, in pixels, defaults to (30, 30) + :type icon_dimensions: tuple[int, int], optional + :param action: The method, if any, to associate with the menu (the method called when the menu is opened), defaults to None + :type action: Callable[[XAMenuBarMenu, None], None], optional + :param id: A unique identifier for the menu, or None to use the title, defaults to None + :type id: Union[str, None], optional + :param index: The position to insert the menu in the list of menus, defaults to -1 + :type index: int, optional + :param label: The label for the menu item, defaults to None + :rtype: XAMenuBarMenu + + :Example: + + >>> import random + >>> import threading + >>> import time + >>> + >>> emojis = ["😀", "😍", "🙂", "😎", "🤩", "🤯", "😭", "😱", "😴", "🤒", "😈", "🤠"] + >>> + >>> menu_bar = PyXA.XAMenuBar() + >>> emoji_bar = menu_bar.new_menu() + >>> + >>> def update_display(): + >>> while True: + >>> new_emoji = random.choice(emojis) + >>> emoji_bar.title = new_emoji + >>> time.sleep(0.25) + >>> + >>> threading.Thread(target=update_display).start() + >>> menu_bar.display() + + .. versionadded:: 0.1.1 + """ + content = content or "" + id = id or content + while id in self.menus: + id += "_" + + self.menus[id] = XAMenuBarMenu(content, icon, tooltip, icon_dimensions, action, id, index) + return self.menus[id]
+ +
[docs] def add_item(self, menu: str, item_name: str, action: Union[Callable[[], None], None] = None, image: Union['XABase.XAImage', None] = None, img_width: int = 20, img_height: int = 20): + """Adds an item to a menu, creating the menu if necessary. + + :param menu: The name of the menu to add an item to, or the name of the menu to create + :type menu: str + :param item_name: The name of the item + :type item_name: str + :param action: The method to associate with the item (the method called when the item is clicked) + :type action: Callable[[], None] + :param image: The image for the item, defaults to None + :type image: Union[XABase.XAImage, None], optional + :param img_width: The width of image, in pixels, defaults to 30 + :type img_width: int, optional + :param img_height: The height of the image, in pixels, defaults to 30 + :type img_height: int, optional + + :Example: + + >>> import PyXA + >>> menu_bar = PyXA.XAMenuBar() + >>> + >>> menu_bar.add_menu("Menu 1") + >>> menu_bar.add_item(menu="Menu 1", item_name="Item 1", method=lambda : print("Action 1")) + >>> menu_bar.add_item(menu="Menu 1", item_name="Item 2", method=lambda : print("Action 2")) + >>> + >>> menu_bar.add_item(menu="Menu 2", item_name="Item 1", method=lambda : print("Action 1")) + >>> img = PyXA.XAImage("/Users/exampleUser/Downloads/example.jpg") + >>> menu_bar.add_item("Menu 2", "Item 1", lambda : print("Action 1"), image=img, img_width=100) + >>> menu_bar.display() + + .. deprecated:: 0.1.1 + + Use :func:`XAMenuBarMenu.new_item` instead. + + .. versionadded:: 0.0.9 + """ + if menu not in self.menus: + self.add_menu(menu) + + menu = self.menus[menu] + menu.new_item(item_name, action, [], image, (img_width, img_height))
+ +
[docs] def set_image(self, item_name: str, image: 'XABase.XAImage', img_width: int = 30, img_height: int = 30): + """Sets the image displayed for a menu or menu item. + + :param item_name: The name of the item to update + :type item_name: str + :param image: The image to display + :type image: XAImage + :param img_width: The width of the image, in pixels, defaults to 30 + :type img_width: int, optional + :param img_height: The height of the image, in pixels, defaults to 30 + :type img_height: int, optional + + :Example: Set Image on State Change + + >>> import PyXA + >>> current_state = True # On + >>> img_on = PyXA.XAImage("/Users/exampleUser/Documents/on.jpg") + >>> img_off = PyXA.XAImage("/Users/exampleUser/Documents/off.jpg") + >>> menu_bar = PyXA.XAMenuBar() + >>> menu_bar.add_menu("Status", image=img_on) + >>> + >>> def update_state(): + >>> global current_state + >>> if current_state is True: + >>> # ... (Actions for turning off) + >>> menu_bar.set_text("Turn off", "Turn on") + >>> menu_bar.set_image("Status", img_off) + >>> current_state = False + >>> else: + >>> # ... (Actions for turning on) + >>> menu_bar.set_text("Turn off", "Turn off") + >>> menu_bar.set_image("Status", img_on) + >>> current_state = True + + menu_bar.add_item("Status", "Turn off", update_state) + menu_bar.display() + + .. deprecated:: 0.1.1 + + Set the :attr:`XAMenuBarMenu.image` and :attr:`XAMenuBarMenuItem.image` attributes directly instead. + + .. versionadded:: 0.0.9 + """ + img = image.xa_elem.copy() + img.setScalesWhenResized_(True) + img.setSize_((img_width, img_height)) + + for menu_key, menu in self.menus.items(): + if menu_key == item_name: + menu._status_item.button().setImage_(img) + + else: + for item_key, item in menu.items.items(): + if item_key == item_name: + item.xa_elem.setImage_(img)
+ +
[docs] def set_text(self, item_name: str, text: str): + """Sets the text displayed for a menu or menu item. + + :param item_name: The name of the item to update + :type item_name: str + :param text: The new text to display + :type text: str + + .. deprecated:: 0.1.1 + + Set the :attr:`XAMenuBarMenu.title` and :attr:`XAMenuBarMenuItem.title` attributes directly instead. + + .. versionadded:: 0.0.9 + """ + for menu_key, menu in self.menus.items(): + if menu_key == item_name: + menu._status_item.button().setTitle_(item_name) + + else: + for item_key, item in menu.items.items(): + if item_key == item_name: + item.xa_elem.setTitle_(item_name)
+ +
[docs] def remove_menu(self, id): + """Removes a menu from the status bar. + + :param id: The ID of the menu to remove + :type id: str + + .. versionadded:: 0.1.1 + """ + menu = self.menus.pop(id) + status_bar = AppKit.NSStatusBar.systemStatusBar() + status_bar.removeStatusItem_(menu._status_item)
+ +
[docs] def display(self): + """Displays the custom menus on the menu bar. + + :Example: + + >>> import PyXA + >>> menu_bar = PyXA.XAMenuBar() + >>> menu_bar.new_menu("🔥", tooltip="Fire") + >>> menu_bar.new_menu("💧", tooltip="Water") + >>> menu_bar.display() + + .. versionadded:: 0.0.9 + """ + for menu in self.menus: + # Add a 'Quit' item to the bottom of each menu + menu = self.menus[menu] + item = AppKit.NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Quit', 'terminate:', '') + menu.xa_elem.addItem_(item) + menu.xa_elem.setDelegate_(self.__delegate) + + for item in menu.xa_elem.itemArray(): + view = item.view() + if view is None: + continue + + menu_width = max(menu.xa_elem.size().width, 100) + view_height = view.frame().size.height + view.setFrameSize_((menu_width, view_height)) + + if isinstance(view, AppKit.NSImageView): + view.image().setSize_(AppKit.NSMakeSize(menu_width * 0.9, view_height * 0.95)) + + for subview in view.subviews(): + if isinstance(subview, AppKit.NSSwitch): + subview_height = subview.frame().size.height + subview.sizeToFit() + subview.setFrame_(AppKit.NSMakeRect(menu_width * 0.95 - subview.frame().size.width, 0, subview.frame().size.width, subview_height)) + + elif not isinstance(subview, AppKit.NSText): + subview_y = subview.frame().origin.y + subview_height = subview.frame().size.height + subview.setFrame_(AppKit.NSMakeRect((menu_width - menu_width * 0.9) / 2, subview_y, menu_width * 0.9, subview_height)) + + try: + if len(self.menus) > 0: + AppHelper.installMachInterrupt() + AppHelper.runEventLoop() + except Exception as e: + print(e)
+ + + + +
[docs]class XAMenuBarMenu(): + def __init__(self, content: Union[str, int, float, XABase.XAObject], icon: Union[XABase.XAImage, None] = None, tooltip: Union[str, None] = None, icon_dimensions: tuple[int, int] = (30, 30), action: Callable[['XAMenuBarMenu', None], None] = None, id: Union[str, None] = None, index: int = -1): + """Initializes a new menu to be displayed in the system menu bar. + + :param content: The content of the menu (the string or icon shown in the menubar) + :type content: str + :param icon: The icon associated with the menu + :type icon: XABase.XAImage + :param tooltip: The tooltip to display on hovering over the menu, defaults to None + :type tooltip: Union[str, None], optional + :param icon_dimensions: The width and height of the image, in pixels, defaults to (30, 30) + :type icon_dimensions: int, optional + :param action: The method, if any, to associate with the menu (the method called when the menu is opened), defaults to None + :type action: Callable[[XAMenuBarMenu, None], None], optional + :param id: A unique identifier for the menu, or None to use the title, defaults to None + :type id: Union[str, None], optional + :param index: The position to insert the menu in the list of menus, defaults to -1 + :type index: int, optional + + .. versionadded:: 0.1.1 + """ + self.__content = content + self.__icon = icon + self.__icon_dimensions = icon_dimensions + self.__tooltip = tooltip + self.action = action #: The method to call when the menu is opened + self.id = id or str(content) #: The unique identifier for the menu + self.items = {} #: The menu items, keyed by their IDs + self.index = index + + # Create a new status bar item + self.__status_bar = AppKit.NSStatusBar.systemStatusBar() + self._status_item = self.__status_bar.statusItemWithLength_(AppKit.NSVariableStatusItemLength).retain() + + # Add an image to the status bar item, if necessary + if icon is not None: + self.icon = icon + + self.content = content + + # Add a tooltip to the status bar item, if necessary + if isinstance(tooltip, str): + self.tooltip = tooltip + + # Create a new menu and associate it to the status bar item + # Disable auto-enabling items so that users have the option to disable them + self.xa_elem = AppKit.NSMenu.alloc().init() + self.xa_elem.setAutoenablesItems_(False) + self._status_item.setMenu_(self.xa_elem) + + @property + def content(self) -> str: + """The content of the menu. + """ + return self.__content + + @content.setter + def content(self, content: str): + self.__content = content + if isinstance(content, str): + self._status_item.setTitle_(content) + elif isinstance(content, XABase.XAImage): + self.__icon = content + img = content.xa_elem.copy() + img.setScalesWhenResized_(True) + img.setSize_(self.__icon_dimensions) + self._status_item.button().setImage_(img) + + @property + def icon(self) -> 'XABase.XAImage': + """The image associated with the menu. + """ + return self.__icon + + @icon.setter + def icon(self, icon: 'XABase.XAImage'): + self.__icon = icon + img = icon.xa_elem.copy() + img.setScalesWhenResized_(True) + img.setSize_(self.__icon_dimensions) + self._status_item.button().setImage_(img) + + @property + def icon_dimensions(self) -> tuple[int, int]: + """The width and height of the menu's image, in pixels. + """ + return self.__icon_dimensions + + @icon_dimensions.setter + def icon_dimensions(self, icon_dimensions: tuple[int, int]): + self.__icon_dimensions = icon_dimensions + size = AppKit.NSSizeFromCGSize(icon_dimensions) + self._status_item.button().image().setSize_(size) + + @property + def tooltip(self) -> str: + """The tooltip that appears when hovering over the menu. + """ + return self.__tooltip + + @tooltip.setter + def tooltip(self, tooltip: str): + self.__tooltip = tooltip + self._status_item.setToolTip_(tooltip) + +
[docs] def new_item(self, content: Union[str, None] = None, icon: Union['XABase.XAImage', None] = None, action: Union[Callable[[], None], None] = None, args: Union[list[Any], None] = None, icon_dimensions: tuple[int, int] = (20, 20), id: Union[str, None] = None, index: int = -1, label: Union[str, None] = None, tooltip: Union[str, None] = None, multiselect: bool = False) -> 'XAMenuBarMenuItem': + """Creates a new menu item and adds it to this menu at the current insertion point. + + :param content: The title text of the item, defaults to None + :type content: Union[str, None], optional + :param icon: The image for the item, defaults to None + :type icon: Union[XABase.XAImage, None], optional + :param action: The method to call when the item is clicked, defaults to None + :type action: Union[Callable[[], None], None], optional + :param args: The arguments to pass to the action method upon execution, defaults to None + :type args: Union[list[Any], None], optional + :param icon_dimensions: The width and height of the image, in pixels, defaults to (20, 20) + :type icon_dimensions: tuple[int, int], optional + :param id: A unique identifier for the item, defaults to None + :type id: Union[str, None], optional + :param index: The position to insert the item in the list of menu items, defaults to -1 + :type index: int, optional + :param label: The label to the left of the item's content + :type label: Union[str, None], optional + :param tooltip: The tooltip text for the menu item, defaults to None + :type tooltip: Union[str, None], optional + :param multiselect: Whether multiple options in a segmented control item can be selected at once, defaults to False + :type multiselect: bool, optional + :return: The newly created menu item object + :rtype: XAMenuBarMenuItem + + :Example: + + >>> import PyXA + >>> menu_bar = PyXA.XAMenuBar() + >>> + >>> img1 = PyXA.XAColor.red().make_swatch(10, 10) + >>> img2 = PyXA.XAImage("https://avatars.githubusercontent.com/u/7865925?v=4") + >>> img3 = PyXA.XAImage.symbol("flame.circle") + >>> + >>> m1 = menu_bar.new_menu("Menu 1") + >>> m1.new_item("Item 1", lambda _: print("Action 1"), [], img1, (100, 100)) + >>> m1.new_item("Item 2", lambda _: print("Action 2"), [], img2, (100, 100)) + >>> + >>> m2 = menu_bar.new_menu("Menu 2") + >>> m2.new_item("Item 1", lambda _: print("Action 3"), image=img3, icon_dimensions=(50, 50)) + >>> + >>> menu_bar.display() + + .. versionadded:: 0.1.1 + """ + # If no ID provided, use the title, then make it unique + content = content or "" + + id = id or str(content) + while id in self.items: + id += "_" + + if index == -1: + index = self.xa_elem.numberOfItems() + + if content == "separator": + self.items[id] = XASeparatorMenuItem(self) + elif content == "slider": + self.items[id] = XASliderMenuItem(self, tooltip, action, args) + elif content == "switch": + self.items[id] = XASwitchMenuItem(self, label, tooltip, action, args) + elif isinstance(content, list): + self.items[id] = XASegmentedControlMenuItem(self, content, tooltip, action, args, multiselect) + elif isinstance(content, XABase.XAImage): + self.items[id] = XAImageMenuItem(self, content, tooltip) + elif isinstance(content, XABase.XAURL) or isinstance(content, XABase.XAPath): + self.items[id] = XAURLMenuItem(self, content, label, icon, icon_dimensions, tooltip, action, args) + elif isinstance(content, str) or isinstance(content, int) or isinstance(content, float) or isinstance(content, bool): + self.items[id] = XATextMenuItem(self, str(content), icon, icon_dimensions, tooltip, action, args) + else: + self.items[id] = XAMenuBarMenuItem(self, content, icon, action, args, icon_dimensions, id, index, label, tooltip) + + self.xa_elem.insertItem_atIndex_(self.items[id].xa_elem, index) + return self.items[id]
+ +
[docs] def add_separator(self, id: Union[str, None] = None) -> 'XAMenuBarMenuItem': + """Adds a separator to the menu at the current insertion point. + + :param id: A unique identifier for the separator, defaults to None + :type id: Union[str, None], optional + :return: The newly created separator menu item object + :rtype: XAMenuBarMenuItem + + .. deprecated:: 0.1.2 + + Use :func:`new_separator` instead. + + .. versionadded:: 0.1.1 + """ + id = id or "separator" + while id in self.items: + id += "_" + + self.items[id] = XAMenuBarMenuItem(self, id) + self.xa_elem.addItem_(self.items[id].xa_elem) + return self.items[id]
+ +
[docs] def new_url_item(self, url: Union[str, XABase.XAURL, XABase.XAPath], label: Union[str, None] = None, icon: Union[XABase.XAImage, None] = None, icon_dimensions: tuple[int, int] = (20, 20), tooltip: Union[str, None] = None, action: Union[Callable[['XAURLMenuItem'], None], None] = None, args: Union[list[Any], None] = None, index: int = -1) -> 'XAURLMenuItem': + """Creates a new URL menu item at the specified index or the current insertion point. + + :param url: The URL or file path that the item will link to + :type url: Union[str, XABase.XAURL, XABase.XAPath] + :param label: The label for the item, or None to use the full URL as the label + :type label: Union[str, None] + :param icon: The icon to display to the left of the label, defaults to None + :type icon: Union[XABase.XAImage, None], optional + :param icon_dimensions: The dimensions of the icon, defaults to (20, 20) + :type icon_dimensions: tuple[int, int], optional + :param tooltip: The tooltip text to display when the cursor hovers over this item, defaults to None + :type tooltip: Union[str, None], optional + :param action: The method to call when the user clicks this item, or None to open the URL using standard methods, defaults to None + :type action: Union[Callable[[XAURLMenuItem], None], None], optional + :param args: The arguments to pass to the action method upon execution, defaults to None + :type args: Union[list[Any], None], optional + :param index: The position to insert the separator in the list of menu items, defaults to -1 + :type index: int, optional + :return: The newly created URL menu item + :rtype: XAURLMenuItem + + .. versionadded:: 0.1.2 + """ + # Convert string URL to XAURL + if isinstance(url, str): + url = XABase.XAURL(url) + return self.new_item(url, icon, action, args, icon_dimensions, None, index, label, tooltip)
+ +
[docs] def new_image_item(self, image: Union[str, XABase.XAImage], tooltip: Union[str, None] = None, index: int = -1) -> 'XAImageMenuItem': + """Creates a new image menu item at the specified index or the current insertion point. + + :param image: An image object or the path to an image file to display in the menu + :type image: Union[str, XABase.XAImage] + :param tooltip: The tooltip text to display when the cursor hovers over the image, defaults to None + :type tooltip: Union[str, None], optional + :param index: The position to insert the separator in the list of menu items, defaults to -1 + :type index: int, optional + :return: The newly created image menu item + :rtype: XAImageMenuItem + + .. versionadded:: 0.1.2 + """ + # Convert image path to XAImage + if isinstance(image, str): + image = XABase.XAImage(image) + return self.new_item(image, tooltip=tooltip, index=index)
+ +
[docs] def new_segmented_control_item(self, segments: Union[list[str], list[XABase.XAImage]], tooltip: Union[str, None] = None, action: Union[Callable[[XASlider], None], None] = None, args: Union[list[Any], None] = None, multiselect: bool = False, index: int = -1) -> 'XASegmentedControlMenuItem': + """Creates a new segmented control menu item at the specified index or the current insertion point. + + :param segments: The strings or images to display as button options + :type segments: Union[list[str], list[XABase.XAImage]] + :param tooltip: The tooltip to display when the cursor hovers over the segmented control, defaults to None + :type tooltip: Union[str, None], optional + :param action: The method to call when the user changes the state of the segmented control (when the user activates/deactivates a button), defaults to None + :type action: Union[Callable[[XASlider], None], None], optional + :param args: The arguments to pass to the action method upon execution, defaults to None + :type args: Union[list[Any], None], optional + :param multiselect: Whether multiple options can be selected at a time, defaults to False + :type multiselect: bool optional + :param index: The position to insert the separator in the list of menu items, defaults to -1 + :type index: int, optional + :return: The newly created segmented control menu item + :rtype: XASegmentedControlMenuItem + + .. versionadded:: 0.1.2 + """ + return self.new_item(segments, tooltip=tooltip, action=action, args=args, multiselect=multiselect, index=index)
+ +
[docs] def new_switch_item(self, label: Union[str, None] = None, tooltip: Union[str, None] = None, action: Union[Callable[[XASlider], None], None] = None, args: Union[list[Any], None] = None, index: int = -1) -> 'XASwitchMenuItem': + """Creates a new switch menu item at the specified index or the current insertion point. + + :param label: The label text to display left of the switch, defaults to None + :type label: Union[str, None], optional + :param tooltip: The tooltip text to display when the cursor hovers over the switch, defaults to None + :type tooltip: Union[str, None], optional + :param action: The method to call when the user changes the switch's state, defaults to None + :type action: Union[Callable[[XASlider], None], None], optional + :param args: The arguments to pass to the action method upon execution, defaults to None + :type args: Union[list[Any], None], optional + :param index: The position to insert the separator in the list of menu items, defaults to -1 + :type index: int, optional + :return: The newly created switch menu item + :rtype: XASwitchMenuItem + + .. versionadded:: 0.1.2 + """ + return self.new_item("switch", label=label, tooltip=tooltip, action=action, args=args, index=index)
+ +
[docs] def new_slider_item(self, tooltip: Union[str, None] = None, action: Union[Callable[[XASlider], None], None] = None, args: Union[list[Any], None] = None, index: int = -1) -> 'XASliderMenuItem': + """Creates a new slider menu item at the specified index or the current insertion point. + + :param tooltip: The tooltip text to display when the cursor hovers over the item, defaults to None + :type tooltip: Union[str, None], optional + :param action: The method to call when the user changes the slider's value, defaults to None + :type action: Union[Callable[[XASlider], None], None], optional + :param args: The arguments to pass to the action method upon execution, defaults to None + :type args: Union[list[Any], None], optional + :param index: The position to insert the separator in the list of menu items, defaults to -1 + :type index: int, optional + :return: The newly created slider menu item + :rtype: XASliderMenuItem + + .. versionadded:: 0.1.2 + """ + return self.new_item("slider", tooltip=tooltip, action=action, args=args, index=index)
+ +
[docs] def new_separator(self, id: Union[str, None] = None, index: int = -1) -> 'XAMenuBarMenuItem': + """Adds a separator to the menu at the current insertion point. + + :param id: A unique identifier for the separator, defaults to None + :type id: Union[str, None], optional + :param index: The position to insert the separator in the list of menu items, defaults to -1 + :type index: int, optional + :return: The newly created separator menu item object + :rtype: XAMenuBarMenuItem + + .. versionadded:: 0.1.1 + """ + return self.new_item("separator", index=index)
+ + def _run_action(self, button: int): + """Runs the action associated with this menu. + + .. versionadded:: 0.1.1 + """ + if callable(self.action): + self.action(self, button) + +
[docs] def remove_item(self, id): + """Removes an item from this menu. + + :param id: The ID of the item to remove + :type id: str + + .. versionadded:: 0.1.1 + """ + item = self.items.pop(id) + self.xa_elem.removeItem_(item.xa_elem)
+ +
[docs] def delete(self): + """Deletes the menu. + + .. versionadded:: 0.1.2 + """ + self.__status_bar.removeStatusItem_(self._status_item)
+ + + + +
[docs]class XAMenuBarMenuItem(XAMenuBarMenu): + def __init__(self, parent: XAMenuBarMenu, content: Union[str, int, float, XABase.XAImage, XABase.XAURL, XABase.XAPath], icon: Union['XABase.XAImage', None] = None, action: Union[Callable[['XAMenuBarMenuItem', Any], None], None] = None, args: Union[list[Any], None] = None, tooltip: Union[str, None] = None): + """Initializes an item of a menu. + + :param parent: The menu which owns this menu item + :type parent: XAMenuBarMenu + :param content: The content of the item + :type content: Union[str, int, float, XABase.XAImage, XABase.XAURL, XABase.XAPath] + :param icon: The image for the item, defaults to None + :type icon: Union[XABase.XAImage, None], optional + :param action: The method to associate with the item (the method called when the item is clicked), defaults to None + :type action: Callable[[XAMenuBarMenuItem], None] + :param args: The arguments to call the method with, defaults to None + :type args: Union[list[Any], None], optional + :param tooltip: The tooltip text for the menu item, defaults to None + :type tooltip: Union[str, None], optional + + .. versionadded:: 0.1.1 + """ + self.parent = parent #: The parent menu or menu item of this item + self.args = args or [] #: The arguments to pass to the action method upon execution + self.action = None #: The method to call when this menu item is clicked + + self.items = {} + + if isinstance(self.xa_elem, AppKit.NSView): + # Menu item with subviews has been initialized by subclass + new_elem = AppKit.NSMenuItem.alloc().init() + new_elem.setView_(self.xa_elem) + self.xa_elem = new_elem + + if tooltip is not None: + self.xa_elem.setToolTip_(tooltip) + + if self.action is None: + self.action = action + + @property + def tooltip(self) -> str: + """The tooltip text displayed when the cursor hovers over the menu item. + """ + return self.xa_elem.toolTip() + + @tooltip.setter + def tooltip(self, tooltip: str): + self.xa_elem.setToolTip_(tooltip) + + def _run_action(self, button: int): + """Runs the action associated with this menu item. + + .. versionadded:: 0.1.1 + """ + if callable(self.action): + self.action(self, button, *self.args) + +
[docs] def new_item(self, content: Union[str, None] = None, icon: Union['XABase.XAImage', None] = None, action: Union[Callable[[], None], None] = None, args: Union[list[Any], None] = None, icon_dimensions: tuple[int, int] = (20, 20), id: Union[str, None] = None, index: int = -1, label: Union[str, None] = None, tooltip: Union[str, None] = None, multiselect: bool = False) -> 'XAMenuBarMenuItem': + """Creates a new menu item and places it in a submenu of this item. + + This will create a new submenu as needed, or will append to the existing submenu if one is already available on this item. + + :param content: The title text of the item, defaults to None + :type content: Union[str, None], optional + :param icon: The image for the item, defaults to None + :type icon: Union[XABase.XAImage, None], optional + :param action: The method to call when the item is clicked, defaults to None + :type action: Union[Callable[[], None], None], optional + :param args: The arguments to pass to the action method upon execution, defaults to None + :type args: Union[list[Any], None], optional + :param icon_dimensions: The width and height of the image, in pixels, defaults to (20, 20) + :type icon_dimensions: tuple[int, int], optional + :param id: A unique identifier for the item, defaults to None + :type id: Union[str, None], optional + :param index: The position to insert the item in the list of menu items, defaults to -1 + :type index: int, optional + :param label: The label to the left of the item's content + :type label: Union[str, None], optional + :param tooltip: The tooltip text for the menu item, defaults to None + :type tooltip: Union[str, None], optional + :param multiselect: Controls whether one or multiple options can be selected in a segmented control menu item, defaults to False + :type multiselect: bool, optional + :return: The newly created menu item object + :rtype: XAMenuBarMenuItem + + :Example: + + >>> import PyXA + >>> menu_bar = PyXA.XAMenuBar() + >>> m1 = menu_bar.new_menu("Menu 1") + >>> i1 = m1.new_item("Item 1") + >>> i2 = i1.new_subitem("Item 1.1") + >>> i3 = i2.new_subitem("Item 1.1.1") + >>> i4 = i3.new_subitem("Item 1.1.1.1") + >>> menu_bar.display() + + .. versionadded:: 0.1.2 + """ + # If no ID provided, use the title, then make it unique + content = content or "" + id = id or str(content) + while id in self.items: + id += "_" + + # Create a new submenu, if necessary + submenu = self.xa_elem.submenu() + if submenu is None: + submenu = AppKit.NSMenu.alloc().init() + + if index == -1: + index = submenu.numberOfItems() + + subitem = None + if content == "separator": + subitem = XASeparatorMenuItem(self) + elif content == "slider": + subitem = XASliderMenuItem(self, tooltip, action, args) + elif content == "switch": + subitem = XASwitchMenuItem(self, label, tooltip, action, args) + elif isinstance(content, list): + subitem = XASegmentedControlMenuItem(self, content, tooltip, action, args, multiselect) + elif isinstance(content, XABase.XAImage): + subitem = XAImageMenuItem(self, content, tooltip) + elif isinstance(content, XABase.XAURL) or isinstance(content, XABase.XAPath): + subitem = XAURLMenuItem(self, content, label, icon, icon_dimensions, tooltip, action, args) + elif isinstance(content, str) or isinstance(content, int) or isinstance(content, float) or isinstance(content, bool): + subitem = XATextMenuItem(self, str(content), icon, icon_dimensions, tooltip, action, args) + else: + subitem = XAMenuBarMenuItem(self, content, icon, action, args, icon_dimensions, id, index, label, tooltip) + + submenu.insertItem_atIndex_(subitem.xa_elem, index) + self.xa_elem.menu().setSubmenu_forItem_(submenu, self.xa_elem) + self.items[id] = subitem + return self.items[id]
+ +
[docs] def new_subitem(self, content: Union[str, None] = None, icon: Union['XABase.XAImage', None] = None, action: Union[Callable[[], None], None] = None, args: Union[list[Any], None] = None, icon_dimensions: tuple[int, int] = (20, 20), id: Union[str, None] = None, index: int = -1, label: Union[str, None] = None, tooltip: Union[str, None] = None, multiselect: bool = False) -> 'XAMenuBarMenuItem': + """Creates a new menu item and places it in a submenu of this item. + + .. deprecated:: 0.1.2 + + Use :func:`new_item` instead. + + .. versionadded:: 0.1.2 + """ + return self.new_item(content, icon, action, args, icon_dimensions, id, index, label, tooltip, multiselect)
+ +
[docs] def remove_item(self, id: str): + """Removes a subitem from this item's submenu. + + :param id: The ID of the subitem to remove + :type id: str + + .. deprecated:: 0.1.2 + + Use :func:`remove_item` instead. + + .. versionadded:: 0.1.1 + """ + item = self.items.pop(id) + self.xa_elem.submenu().removeItem_(item.xa_elem)
+ +
[docs] def remove_subitem(self, id: str): + """Removes a subitem from this item's submenu. + + :param id: The ID of the subitem to remove + :type id: str + + .. deprecated:: 0.1.2 + + Use :func:`remove_item` instead. + + .. versionadded:: 0.1.1 + """ + item = self.items.pop(id) + self.xa_elem.submenu().removeItem_(item.xa_elem)
+ +
[docs] def delete(self): + """Deletes the item. + + .. versionadded:: 0.1.2 + """ + if isinstance(self.parent, XAMenuBarMenu): + self.parent.xa_elem.removeItem_(self.xa_elem) + else: + self.parent.xa_elem.submenu().removeItem_(self.xa_elem)
+ + + + +
[docs]class XASliderMenuItem(XAMenuBarMenuItem): + """A menu item containing a slider. + + .. versionadded:: 0.1.2 + """ + def __init__(self, parent: XAMenuBarMenu, tooltip: Union[str, None] = None, action: Union[Callable[['XASlider', Any], None], None] = None, args: Union[list[Any], None] = None, value: float = 50, min_value: float = 0, max_value: float = 100): + """Initializes a new slider menu item. + + :param parent: The menu containing this item + :type parent: XAMenuBarMenu + :param tooltip: The tooltip text for this item, defaults to None + :type tooltip: Union[str, None], optional + :param action: The method to call when the slider's value changes, defaults to None + :type action: Union[Callable[[XASlider, Any], None], None], optional + :param args: The arguments to pass to the action method upon execution, defaults to None + :type args: Union[list[Any], None], optional + :param value: The starting value of the slider, defaults to 50 + :type value: float, optional + :param min_value: The minimum value of the slider, defaults to 0 + :type min_value: float, optional + :param max_value: The maximum value of the slider, defaults to 100 + :type max_value: float, optional + + .. versionadded:: 0.1.2 + """ + slider_view = AppKit.NSView.alloc().initWithFrame_(AppKit.NSMakeRect(0, 0, 100, 30)) + self.slider = XASlider(action, args, value, min_value, max_value) + slider_view.addSubview_(self.slider.xa_elem) + self.xa_elem = slider_view + super().__init__(parent, None) + + @property + def value(self) -> float: + return self.slider.value + + @value.setter + def value(self, value: float): + self.slider.value = value
+ + + +
[docs]class XASegmentedControlMenuItem(XAMenuBarMenuItem): + """A menu item containing a segmented control. + + .. versionadded:: 0.1.2 + """ + def __init__(self, parent: XAMenuBarMenu, segments: Union[list[str], list[XABase.XAImage]], tooltip: Union[str, None] = None, action: Union[Callable[['XASlider', Any], None], None] = None, args: Union[list[Any], None] = None, multiselect: bool = False): + """Initializes a new segmented control menu item. + + :param parent: The menu containing this item + :type parent: XAMenuBarMenu + :param segments: The strings or images to display as button options + :type segments: Union[list[str], list[XABase.XAImage]] + :param tooltip: The tooltip text for this item, defaults to None + :type tooltip: Union[str, None], optional + :param action: The method to call when the slider's value changes, defaults to None + :type action: Union[Callable[[XASlider, Any], None], None], optional + :param args: The arguments to pass to the action method upon execution, defaults to None + :type args: Union[list[Any], None], optional + :param multiselect: Whether multiple options can be selected at once, defaults to False + :type multiselect: bool, optional + + .. versionadded:: 0.1.2 + """ + self.xa_elem = AppKit.NSView.alloc().initWithFrame_(AppKit.NSMakeRect(0, 0, 100, 25)) + self.segmented_control = XASegmentedControl(segments, action, args, multiselect) + self.xa_elem.addSubview_(self.segmented_control.xa_elem) + super().__init__(parent, None)
+ + + + +
[docs]class XAImageMenuItem(XAMenuBarMenuItem): + """A menu item containing an image. + + .. versionadded:: 0.1.2 + """ + def __init__(self, parent: XAMenuBarMenu, image: Union[str, int, float, XABase.XAImage, XABase.XAURL, XABase.XAPath], tooltip: Union[str, None] = None): + """Initializes an image menu item. + + :param parent: The menu containing this item + :type parent: XAMenuBarMenu + :param image: The image to display in the menu + :type image: Union[str, int, float, XABase.XAImage, XABase.XAURL, XABase.XAPath] + + .. versionadded:: 0.1.2 + """ + self.xa_elem = AppKit.NSImageView.alloc().initWithFrame_(AppKit.NSMakeRect(0, 0, 200, image.size[1] * 200/image.size[0])) + rounded_img = AppKit.NSImage.alloc().initWithSize_(image.xa_elem.size()) + rounded_img.setScalesWhenResized_(True) + rounded_img.lockFocus() + + ctx = AppKit.NSGraphicsContext.currentContext() + ctx.setImageInterpolation_(AppKit.NSImageInterpolationHigh) + + image_frame = AppKit.NSMakeRect(0, 0, *image.xa_elem.size()) + clip_path = AppKit.NSBezierPath.bezierPathWithRoundedRect_xRadius_yRadius_(image_frame, 50, 50) + clip_path.setWindingRule_(AppKit.NSWindingRuleEvenOdd) + clip_path.addClip() + + image.xa_elem.drawAtPoint_fromRect_operation_fraction_(AppKit.NSZeroPoint, image_frame, AppKit.NSCompositingOperationSourceOver, 1) + rounded_img.unlockFocus() + + self.xa_elem.setImage_(rounded_img) + super().__init__(parent, image)
+ + + + +
[docs]class XASwitchMenuItem(XAMenuBarMenuItem): + """A menu item containing a labelled switch. + + .. versionadded:: 0.1.2 + """ + def __init__(self, parent: XAMenuBarMenu, label: Union[str, None] = None, tooltip: Union[str, None] = None, action: Union[Callable[['XASwitch', int, Any], None], None] = None, args: Union[list[Any], None] = None): + """Initializes a new switch menu item. + + :param parent: The menu containing this item + :type parent: XAMenuBarMenu + :param label: The label displayed to the left of the switch, defaults to None + :type label: Union[str, None], optional + :param action: The method to call when the switch changes state, defaults to None + :type action: Union[Callable[[XASwitch, int, Any], None], None], optional + :param args: The arguments to pass to the action method upon execution, defaults to None + :type args: Union[list[Any], None], optional + + .. versionadded:: 0.1.2 + """ + self.xa_elem = AppKit.NSView.alloc().initWithFrame_(AppKit.NSMakeRect(0, 0, 100, 30)) + if label is not None: + self.__text = AppKit.NSText.alloc().initWithFrame_(AppKit.NSMakeRect(9, -7, 151, 32)) + self.__text.setString_(label) + self.__text.setDrawsBackground_(False) + + font = AppKit.NSFont.menuBarFontOfSize_(0) + self.__text.setFont_(font) + self.xa_elem.addSubview_(self.__text) + + self.switch = XASwitch(action, args) + self.xa_elem.addSubview_(self.switch.xa_elem) + + self.xa_elem.setWantsLayer_(True) + self.xa_elem.setCanDrawSubviewsIntoLayer_(True) + self.xa_elem.layer().setBackgroundColor_(XABase.XAColor(1, 0, 0).xa_elem) + super().__init__(parent, None) + + @property + def label(self) -> str: + """The label for this switch menu item. + """ + return self.__text.string() + + @label.setter + def label(self, label: str): + self.__text.setString_(label)
+ + + + +
[docs]class XASeparatorMenuItem(XAMenuBarMenuItem): + """A menu item containing a separator. + + .. versionadded:: 0.1.2 + """ + def __init__(self, parent: XAMenuBarMenu): + """Initializes a separator menu item. + + :param parent: The menu containing this item + :type parent: XAMenuBarMenu + + .. versionadded:: 0.1.2 + """ + self.xa_elem = AppKit.NSMenuItem.separatorItem() + super().__init__(parent, None)
+ + + + +
[docs]class XATextMenuItem(XAMenuBarMenuItem): + """A menu item containing text. + + .. versionadded:: 0.1.2 + """ + def __init__(self, parent: XAMenuBarMenu, text: str, icon: Union['XABase.XAImage', None] = None, icon_dimensions: tuple[int, int] = (20, 20), tooltip: Union[str, None] = None, action: Union[Callable[['XAURLMenuItem', int, Any], None], None] = None, args: Union[list[Any], None] = None): + """Initializes a text menu item. + + :param parent: The menu containing this item + :type parent: XAMenuBarMenu + :param text: The text string to display + :type text: str + :param icon: The image for the item, defaults to None + :type icon: Union[XABase.XAImage, None], optional + :param icon_dimensions: The width and height of the icon, in pixels, defaults to (20, 20) + :type icon_dimensions: tuple[int, int], optional + :param action: The method to call when the user clicks the menu item, defaults to None + :type action: Union[Callable[[XAURLMenuItem, int, Any], None], None], optional + :param args: The arguments to pass to the action method upon execution, defaults to None + :type args: Union[list[Any], None], optional + + .. versionadded:: 0.1.2 + """ + self.__text = text + self.xa_elem = AppKit.NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(text, 'action:', '') + + if isinstance(icon, XABase.XAImage): + img = icon.xa_elem.copy() + img.setScalesWhenResized_(True) + img.setSize_(icon_dimensions) + self.xa_elem.setImage_(img) + + super().__init__(parent, None, action=action, args=args) + + @property + def text(self) -> str: + return self.__text + + @text.setter + def text(self, text: str): + self.__text = text + self.xa_elem.setTitle_(text) + + @property + def icon(self) -> 'XABase.XAImage': + """The image associated with the menu item. + """ + img_obj = self.xa_elem.image() + if img_obj is None: + return None + return self.__icon + + @icon.setter + def icon(self, icon: 'XABase.XAImage'): + self.__icon = icon + img = icon.xa_elem.copy() + img.setScalesWhenResized_(True) + img.setSize_(self.__icon_dimensions) + self.xa_elem.setImage_(img) + + @property + def icon_dimensions(self) -> tuple[int, int]: + """The width and height of the menu item's image, in pixels. + """ + return self.__icon_dimensions + + @icon_dimensions.setter + def icon_dimensions(self, icon_dimensions: tuple[int, int]): + self.__icon_dimensions = icon_dimensions + size = AppKit.NSSizeFromCGSize(icon_dimensions) + self.xa_elem.image().setSize_(size) + + @property + def indent(self) -> int: + """The level of indentation of the menu item, from 0 to 15. + """ + return self.__indent + + @indent.setter + def indent(self, indent: int): + self.__indent = indent + self.xa_elem.setIndentationLevel_(indent) + + @property + def enabled(self) -> int: + """Whether the menu item is enabled (vs. appearing grayed out). + """ + return self.__enabled + + @enabled.setter + def enabled(self, enabled: bool): + self.__enabled = enabled + self.xa_elem.setEnabled_(enabled) + + def _run_action(self, button: int): + """Runs the action associated with this menu item. + + .. versionadded:: 0.1.1 + """ + if callable(self.action): + self.action(self, button, *self.args) + +
[docs] def new_subitem(self, content: Union[str, None] = None, icon: Union['XABase.XAImage', None] = None, action: Union[Callable[[], None], None] = None, args: Union[list[Any], None] = None, icon_dimensions: tuple[int, int] = (20, 20), id: Union[str, None] = None, index: int = -1, label: Union[str, None] = None, tooltip: Union[str, None] = None) -> 'XAMenuBarMenuItem': + """Creates a new menu item and places it in a submenu of this item. + + This will create a new submenu as needed, or will append to the existing submenu if one is already available on this item. + + :param content: The title text of the item, defaults to None + :type content: Union[str, None], optional + :param icon: The image for the item, defaults to None + :type icon: Union[XABase.XAImage, None], optional + :param action: The method to call when the item is clicked, defaults to None + :type action: Union[Callable[[], None], None], optional + :param args: The arguments to pass to the action method upon execution, defaults to None + :type args: Union[list[Any], None], optional + :param icon_dimensions: The width and height of the image, in pixels, defaults to (20, 20) + :type icon_dimensions: tuple[int, int], optional + :param id: A unique identifier for the item, defaults to None + :type id: Union[str, None], optional + :param index: The position to insert the item in the list of menu items, defaults to -1 + :type index: int, optional + :param label: The label to the left of the item's content + :type label: Union[str, None], optional + :param tooltip: The tooltip text for the menu item, defaults to None + :type tooltip: Union[str, None], optional + :return: The newly created menu item object + :rtype: XAMenuBarMenuItem + + :Example: + + >>> import PyXA + >>> menu_bar = PyXA.XAMenuBar() + >>> m1 = menu_bar.new_menu("Menu 1") + >>> i1 = m1.new_item("Item 1") + >>> i2 = i1.new_subitem("Item 1.1") + >>> i3 = i2.new_subitem("Item 1.1.1") + >>> i4 = i3.new_subitem("Item 1.1.1.1") + >>> menu_bar.display() + + .. versionadded:: 0.1.1 + """ + # If no ID provided, use the title, then make it unique + content = content or "" + id = id or str(content) + while id in self.items: + id += "_" + + # Create a new submenu, if necessary + submenu = self.xa_elem.submenu() + if submenu is None: + submenu = AppKit.NSMenu.alloc().init() + + if index == -1: + index = submenu.numberOfItems() + + subitem = None + if content == "separator": + subitem = XASeparatorMenuItem(self) + elif content == "slider": + subitem = XASliderMenuItem(self, action, tooltip, args) + elif content == "switch": + subitem = XASwitchMenuItem(self, label, tooltip, action, args) + elif isinstance(content, XABase.XAImage): + subitem = XAImageMenuItem(self, content, tooltip) + elif isinstance(content, XABase.XAURL) or isinstance(content, XABase.XAPath): + subitem = XAURLMenuItem(self, content, label, icon, icon_dimensions, tooltip, action, args) + elif isinstance(content, str) or isinstance(content, int) or isinstance(content, float) or isinstance(content, bool): + subitem = XATextMenuItem(self, str(content), icon, icon_dimensions, tooltip, action, args) + else: + subitem = XAMenuBarMenuItem(self, content, icon, action, args, icon_dimensions, id, index, label, tooltip) + + submenu.insertItem_atIndex_(subitem.xa_elem, index) + self.xa_elem.menu().setSubmenu_forItem_(submenu, self.xa_elem) + self.items[id] = subitem + return self.items[id]
+ +
[docs] def remove_subitem(self, id: str): + """Removes a subitem from this item's submenu. + + :param id: The ID of the subitem to remove + :type id: str + + .. versionadded:: 0.1.1 + """ + item = self.items.pop(id) + self.xa_elem.submenu().removeItem_(item.xa_elem)
+ + + +
[docs]class XAURLMenuItem(XATextMenuItem): + """A menu item containing a URL or path. + + .. versionadded:: 0.1.2 + """ + def __init__(self, parent: XAMenuBarMenu, url: Union[XABase.XAURL, XABase.XAPath], label: Union[str, None] = None, icon: Union['XABase.XAImage', None] = None, icon_dimensions: tuple[int, int] = (20, 20), tooltip: Union[str, None] = None, action: Union[Callable[['XAURLMenuItem', int, Any], None], None] = None, args: Union[list[Any], None] = None): + """Initializes a URL menu item. + + :param parent: The menu containing this item + :type parent: XAMenuBarMenu + :param url: The URL or path to display + :type url: Union[XABase.XAURL, XABase.XAPath] + :param label: The text displayed for the item, or None to use the raw URL/path, defaults to None + :type label: Union[str, None], optional + :param icon: The image for the item, defaults to None + :type icon: Union[XABase.XAImage, None], optional + :param icon_dimensions: The width and height of the icon, in pixels, defaults to (20, 20) + :type icon_dimensions: tuple[int, int], optional + :param action: The method to call when the user clicks the menu item, defaults to None + :type action: Union[Callable[[XAURLMenuItem, int, Any], None], None], optional + :param args: The arguments to pass to the action method upon execution, defaults to None + :type args: Union[list[Any], None], optional + + .. versionadded:: 0.1.2 + """ + self.__location = url + self.xa_elem = AppKit.NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(label or str(url.xa_elem), 'action:', '') + if action is None: + action = lambda item, button, *args: url.open() if button != -1 else None + super().__init__(parent, label or str(url.xa_elem), icon=icon, icon_dimensions=icon_dimensions, tooltip=tooltip, action=action, args=args) + + @property + def location(self) -> Union[XABase.XAURL, XABase.XAPath]: + """The URL or path that the menu item refers to.""" + return self.__location + + @location.setter + def location(self, location: Union[XABase.XAURL, XABase.XAPath]): + self.__location = location + self.xa_elem.setTitle_(self.label or str(location.xa_elem)) + + @property + def label(self) -> str: + return self.xa_elem.title() + + @label.setter + def label(self, label: Union[str, None]): + self.xa_elem.setTitle_(label or str(self.content.xa_elem))
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/Additions/Utils.html b/docs/_modules/PyXA/Additions/Utils.html new file mode 100644 index 0000000..dd9f182 --- /dev/null +++ b/docs/_modules/PyXA/Additions/Utils.html @@ -0,0 +1,399 @@ + + + + + + PyXA.Additions.Utils — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.Additions.Utils

+""".. versionadded:: 0.1.1
+
+A collection of classes for interacting with macOS features in various ways.
+"""
+
+import AppKit
+import xml.etree.ElementTree as ET
+from typing import Union, Callable, Any, Literal
+from PyObjCTools import AppHelper
+from PyXA import XABase
+from datetime import datetime, timedelta
+from enum import Enum
+from time import sleep
+
+
[docs]class SDEFParser(): + def __init__(self, sdef_file: Union['XABase.XAPath', str]): + if isinstance(sdef_file, str): + sdef_file = XABase.XAPath(sdef_file) + self.file = sdef_file #: The full path to the SDEF file to parse + + self.app_name = "" + self.scripting_suites = [] + +
[docs] def parse(self): + app_name = self.file.path.split("/")[-1][:-5].title() + xa_prefix = "XA" + app_name + + tree = ET.parse(self.file.path) + + suites = [] + + scripting_suites = tree.findall("suite") + for suite in scripting_suites: + classes = [] + commands = {} + + ### Class Extensions + class_extensions = suite.findall("class-extension") + for extension in class_extensions: + properties = [] + elements = [] + responds_to_commands = [] + + class_name = xa_prefix + extension.attrib.get("extends", "").title() + class_comment = extension.attrib.get("description", "") + + ## Class Extension Properties + class_properties = extension.findall("property") + for property in class_properties: + property_type = property.attrib.get("type", "") + if property_type == "text": + property_type = "str" + elif property_type == "boolean": + property_type = "bool" + elif property_type == "number": + property_type = "float" + elif property_type == "integer": + property_type = "int" + elif property_type == "rectangle": + property_type = "tuple[int, int, int, int]" + else: + property_type = "XA" + app_name + property_type.title() + + property_name = property.attrib.get("name", "").replace(" ", "_").lower() + property_comment = property.attrib.get("description", "") + + properties.append({ + "type": property_type, + "name": property_name, + "comment": property_comment + }) + + ## Class Extension Elements + class_elements = extension.findall("element") + for element in class_elements: + element_name = (element.attrib.get("type", "") + "s").replace(" ", "_").lower() + element_type = "XA" + app_name + element.attrib.get("type", "").title() + + elements.append({ + "name": element_name, + "type": element_type + }) + + ## Class Extension Responds-To Commands + class_responds_to_commands = extension.findall("responds-to") + for command in class_responds_to_commands: + command_name = command.attrib.get("command", "").replace(" ", "_").lower() + responds_to_commands.append(command_name) + + classes.append({ + "name": class_name, + "comment": class_comment, + "properties": properties, + "elements": elements, + "responds-to": responds_to_commands + }) + + ### Classes + scripting_classes = suite.findall("class") + for scripting_class in scripting_classes: + properties = [] + elements = [] + responds_to_commands = [] + + class_name = xa_prefix + scripting_class.attrib.get("name", "").title() + class_comment = scripting_class.attrib.get("description", "") + + ## Class Properties + class_properties = scripting_class.findall("property") + for property in class_properties: + property_type = property.attrib.get("type", "") + if property_type == "text": + property_type = "str" + elif property_type == "boolean": + property_type = "bool" + elif property_type == "number": + property_type = "float" + elif property_type == "integer": + property_type = "int" + elif property_type == "rectangle": + property_type = "tuple[int, int, int, int]" + else: + property_type = "XA" + app_name + property_type.title() + + property_name = property.attrib.get("name", "").replace(" ", "_").lower() + property_comment = property.attrib.get("description", "") + + properties.append({ + "type": property_type, + "name": property_name, + "comment": property_comment + }) + + ## Class Elements + class_elements = scripting_class.findall("element") + for element in class_elements: + element_name = (element.attrib.get("type", "") + "s").replace(" ", "_").lower() + element_type = "XA" + app_name + element.attrib.get("type", "").title() + + elements.append({ + "name": element_name, + "type": element_type + }) + + ## Class Responds-To Commands + class_responds_to_commands = scripting_class.findall("responds-to") + for command in class_responds_to_commands: + command_name = command.attrib.get("command", "").replace(" ", "_").lower() + responds_to_commands.append(command_name) + + classes.append({ + "name": class_name, + "comment": class_comment, + "properties": properties, + "elements": elements, + "responds-to": responds_to_commands + }) + + + ### Commands + script_commands = suite.findall("command") + for command in script_commands: + command_name = command.attrib.get("name", "").lower().replace(" ", "_") + command_comment = command.attrib.get("description", "") + + parameters = [] + direct_param = command.find("direct-parameter") + if direct_param is not None: + direct_parameter_type = direct_param.attrib.get("type", "") + if direct_parameter_type == "specifier": + direct_parameter_type = "XABase.XAObject" + + direct_parameter_comment = direct_param.attrib.get("description") + + parameters.append({ + "name": "direct_param", + "type": direct_parameter_type, + "comment": direct_parameter_comment + }) + + if not "_" in command_name and len(parameters) > 0: + command_name += "_" + + command_parameters = command.findall("parameter") + for parameter in command_parameters: + parameter_type = parameter.attrib.get("type", "") + if parameter_type == "specifier": + parameter_type = "XAObject" + + parameter_name = parameter.attrib.get("name", "").lower().replace(" ", "_") + parameter_comment = parameter.attrib.get("description", "") + + parameters.append({ + "name": parameter_name, + "type": parameter_type, + "comment": parameter_comment, + }) + + commands[command_name] = { + "name": command_name, + "comment": command_comment, + "parameters": parameters + } + + suites.append({ + "classes": classes, + "commands": commands + }) + + self.scripting_suites = suites + return suites
+ +
[docs] def export(self, output_file: Union['XABase.XAPath', str]): + if isinstance(output_file, XABase.XAPath): + output_file = output_file.path + + lines = [] + + lines.append("from typing import Any, Callable, Union") + lines.append("\nfrom PyXA import XABase") + lines.append("from PyXA.XABase import OSType") + lines.append("from PyXA import XABaseScriptable") + + for suite in self.scripting_suites: + for scripting_class in suite["classes"]: + lines.append("\n\n") + lines.append("class " + scripting_class["name"].replace(" ", "") + "List:") + lines.append("\t\"\"\"A wrapper around lists of " + scripting_class["name"].lower() + "s that employs fast enumeration techniques.") + lines.append("\n\tAll properties of tabs can be called as methods on the wrapped list, returning a list containing each tab's value for the property.") + lines.append("\n\t.. versionadded:: " + XABase.VERSION) + lines.append("\t\"\"\"") + + lines.append("\tdef __init__(self, properties: dict, filter: Union[dict, None] = None):") + lines.append("\t\tsuper().__init__(properties, " + scripting_class["name"].replace(" ", "") + ", filter)") + + for property in scripting_class["properties"]: + lines.append("") + lines.append("\tdef " + property["name"] + "(self) -> list['" + property["type"].replace(" ", "") + "']:") + lines.append("\t\t\"\"\"" + property["comment"] + "\n\n\t\t.. versionadded:: " + XABase.VERSION + "\n\t\t\"\"\"") + lines.append("\t\treturn list(self.xa_elem.arrayByApplyingSelector_(\"" + property["name"] + "\"))") + + for property in scripting_class["properties"]: + lines.append("") + lines.append("\tdef by_" + property["name"] + "(self, " + property["name"] + ") -> '" + scripting_class["name"].replace(" ", "") + "':") + lines.append("\t\t\"\"\"Retrieves the " + scripting_class["comment"] + "whose " + property["name"] + " matches the given " + property["name"] + ".\n\n\t\t.. versionadded:: " + XABase.VERSION + "\n\t\t\"\"\"") + lines.append("\t\treturn self.by_property(\"" + property["name"] + "\", " + property["name"] + ")") + + + lines.append("") + lines.append("class " + scripting_class["name"].replace(" ", "") + ":") + lines.append("\t\"\"\"" + scripting_class["comment"] + "\n\n\t.. versionadded:: " + XABase.VERSION + "\n\t\"\"\"") + + for property in scripting_class["properties"]: + lines.append("") + lines.append("\t@property") + lines.append("\tdef " + property["name"] + "(self) -> '" + property["type"].replace(" ", "") + "':") + lines.append("\t\t\"\"\"" + property["comment"] + "\n\n\t\t.. versionadded:: " + XABase.VERSION + "\n\t\t\"\"\"") + lines.append("\t\treturn self.xa_elem." + property["name"] + "()") + + for element in scripting_class["elements"]: + lines.append("") + lines.append("\tdef " + element["name"].replace(" ", "") + "(self, filter: Union[dict, None] = None) -> '" + element["type"].replace(" ", "") + "':") + lines.append("\t\t\"\"\"Returns a list of " + element["name"] + ", as PyXA objects, matching the given filter.") + lines.append("\n\t\t.. versionadded:: " + XABase.VERSION) + lines.append("\t\t\"\"\"") + lines.append("\t\tself._new_element(self.xa_elem." + element["name"] + "(), " + element["type"].replace(" ", "") + "List, filter)") + + for command in scripting_class["responds-to"]: + if command in suite["commands"]: + lines.append("") + command_str = "\tdef " + suite["commands"][command]["name"] + "(self, " + + for parameter in suite["commands"][command]["parameters"]: + command_str += parameter["name"] + ": '" + parameter["type"] + "', " + + command_str = command_str[:-2] + "):" + lines.append(command_str) + + lines.append("\t\t\"\"\"" + suite["commands"][command]["comment"]) + lines.append("\n\t\t.. versionadded:: " + XABase.VERSION) + lines.append("\t\t\"\"\"") + + cmd_call_str = "self.xa_elem." + suite["commands"][command]["name"] + "(" + + if len(suite["commands"][command]["parameters"]) > 0: + for parameter in suite["commands"][command]["parameters"]: + cmd_call_str += parameter["name"] + ", " + + cmd_call_str = cmd_call_str[:-2] + ")" + else: + cmd_call_str += ")" + + lines.append("\t\t" + cmd_call_str) + + data = "\n".join(lines) + with open(output_file, "w") as f: + f.write(data)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/Additions/Web.html b/docs/_modules/PyXA/Additions/Web.html new file mode 100644 index 0000000..c1d6958 --- /dev/null +++ b/docs/_modules/PyXA/Additions/Web.html @@ -0,0 +1,563 @@ + + + + + + PyXA.Additions.Web — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.Additions.Web

+""".. versionadded:: 0.1.0
+
+Internet-related automation features that extend PyXA scripting functionality.
+"""
+
+
+from datetime import datetime
+from typing import List, Union
+
+import AppKit
+import requests
+from bs4 import BeautifulSoup
+
+from PyXA import XABase
+
+
+
[docs]class RSSFeed(XABase.XAObject): + """An RSS feed reader. + + .. versionadded:: 0.1.0 + """ + def __init__(self, url: Union[str, XABase.XAURL]): + self.xa_apsp = AppKit.NSApplication.sharedApplication() + self.xa_wksp = AppKit.NSWorkspace.sharedWorkspace() + self.xa_aref = None + self.xa_sevt = None + + if isinstance(url, XABase.XAURL): + url = url.url + self.url = url + request = requests.get(url) + self.__soup = BeautifulSoup(request.content, features='xml') + +
[docs] def items(self) -> 'RSSItemList': + """Retrieves all item and/or entry tags in the RSS feed as :class:`RSSItem` objects. + + :return: The list of items and/or entries + :rtype: RSSItemList + + :Example: + + >>> import PyXA + >>> reader = PyXA.RSSFeed("http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml") + >>> print(reader.items()) + <<class 'PyXA.extensions.XAWeb.RSSItemList'>['Hold Me Closer - Elton John & Britney Spears', 'Only Ever Wanted - Timcast', "I Ain't Worried - OneRepublic", 'wait in the truck - HARDY & Lainey Wilson', 'Bring Me to Life - Evanescence', 'Running Up That Hill (A Deal with God) - Kate Bush', 'Beer With My Friends - Kenny Chesney & Old Dominion', 'American Pie (Full Length Version) - Don Mclean', 'She Had Me At Heads Carolina - Cole Swindell', 'You Proof - Morgan Wallen']> + + .. versionadded:: 0.1.0 + """ + articles = self.__soup.findAll('entry') + if articles == []: + articles = self.__soup.findAll('item') + + return self._new_element(articles, RSSItemList)
+ +
[docs] def refetch(self): + """Resends the GET request for the RSS feed URL and updates this object's data accordingly. + + :Example: Get the top 10 songs on iTunes every hour + + >>> import PyXA + >>> from time import sleep + >>> reader = PyXA.RSSFeed("http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml") + >>> while True: + >>> reader.refetch() + >>> print(reader.items()) + >>> sleep(3600) + + .. versionadded:: 0.1.0 + """ + request = requests.get(self.url) + self.__soup = BeautifulSoup(request.content, features='xml')
+ + + + +
[docs]class RSSItemList(XABase.XAList): + def __init__(self, properties): + super().__init__(properties, RSSItem) + +
[docs] def xml(self) -> List[str]: + """Gets the raw XML of each item in the list. + + :return: The list of XML strings + :rtype: List[str] + + .. versionadded:: 0.1.0 + """ + return [str(x) for x in self.xa_elem]
+ +
[docs] def content(self) -> 'RSSItemContentList': + """Gets the content of each item as :class:`RSSItemContent` objects. + + :return: The list of item contents + :rtype: RSSItemContentList + + .. versionadded:: 0.1.0 + """ + contents = [] + for item in self.xa_elem: + html = str(item.find("content").string) + content_object = BeautifulSoup(html, 'html.parser') + contents.append(content_object) + return self._new_element(contents, RSSItemContentList)
+ +
[docs] def title(self) -> List[str]: + """Gets the title of each item in the list. + + :return: The list of RSS item titles + :rtype: List[str] + + .. versionadded:: 0.1.0 + """ + return [x.find("title").text for x in self.xa_elem]
+ +
[docs] def author(self) -> List[str]: + """Gets the author of each item in the list. + + :return: The list of RSS item authors + :rtype: List[str] + + .. versionadded:: 0.1.0 + """ + return [x.find("author").text for x in self.xa_elem]
+ +
[docs] def category(self) -> List[str]: + """Gets the category of each item in the list. + + :return: The list of RSS item categories + :rtype: List[str] + + .. versionadded:: 0.1.0 + """ + return [x.find("category").text for x in self.xa_elem]
+ +
[docs] def comments(self) -> List[str]: + """Gets the comments of each item in the list. + + :return: The list of RSS item comments + :rtype: List[str] + + .. versionadded:: 0.1.0 + """ + return [x.find("comments").text for x in self.xa_elem]
+ +
[docs] def description(self) -> 'RSSItemContentList': + """Gets the description of each item as :class:`RSSItemContent` objects. + + :return: The list of item descriptions + :rtype: RSSItemContentList + + .. versionadded:: 0.1.0 + """ + contents = [] + for item in self.xa_elem: + html = str(item.find("description").string) + content_object = BeautifulSoup(html, 'html.parser') + contents.append(content_object) + return self._new_element(contents, RSSItemContentList)
+ +
[docs] def enclosure(self) -> List[str]: + """Gets the enclosure of each item in the list. + + :return: The list of RSS item enclosures + :rtype: List[str] + + .. versionadded:: 0.1.0 + """ + return [x.find("enclosure").text for x in self.xa_elem]
+ + + +
[docs] def publication_date(self) -> List[datetime]: + """Gets the publication date of each item in the list. + + :return: The list of RSS item publication dates + :rtype: List[datetime] + + .. versionadded:: 0.1.0 + """ + return [x.find("pubDate").text for x in self.xa_elem]
+ +
[docs] def source(self) -> List[str]: + """Gets the source of each item in the list. + + :return: The list of RSS item sources + :rtype: List[str] + + .. versionadded:: 0.1.0 + """ + return [x.find("source").text for x in self.xa_elem]
+ +
[docs] def copyright(self) -> List[str]: + """Gets the copyright of each item in the list. + + :return: The list of RSS item copyrights + :rtype: List[str] + + .. versionadded:: 0.1.0 + """ + return [x.find("copyright").text for x in self.xa_elem]
+ +
[docs] def text(self) -> List[str]: + """Gets the text of each item in the list. + + :return: The list of RSS item texts + :rtype: List[str] + + .. versionadded:: 0.1.0 + """ + return [x.text for x in self.xa_elem]
+ + + + def __repr__(self): + return "<" + str(type(self)) + str(self.title()) + ">"
+ +
[docs]class RSSItem(XABase.XAObject): + """An item or entry in an RSS feed. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + self.xml: str #: The raw XML of the entry + self.content: str #: The raw content of the entry + self.author: str #: The author of the entry + self.category: str #: The category of the entry + self.comments: str #: The comments of the entry + self.description: str #: The description of the entry + self.enclosure: str #: The media idea enclosed in the entry + self.link: str #: The hyperlink to the entry + self.publication_date: datetime #: The most recent publication date of the entry + self.source: str #: The third-party source of the entry + self.title: str #: The title of the RSS entry + self.copyright: str #: The copyright text of the entry + self.text: str #: All text within the entry (not just the description/content text!) + + @property + def xml(self) -> str: + return str(self.xa_elem) + + @property + def content(self) -> type: + html = str(self.xa_elem.find("content").string) + content_object = BeautifulSoup(html, 'html.parser') + return self._new_element(content_object, RSSItemContent) + + @property + def author(self) -> str: + tag = self.xa_elem.find("author") + if tag is not None: + return tag.text + + @property + def category(self) -> str: + tag = self.xa_elem.find("category") + if tag is not None: + return tag.get("label") + + @property + def comments(self) -> str: + tag = self.xa_elem.find("comments") + if tag is not None: + return tag.text + + @property + def description(self) -> str: + tag = self.xa_elem.find("description") + if tag is not None: + return tag.string + + @property + def enclosure(self) -> str: + return self.xa_elem.find("enclosure").get("url") + + @property + def link(self) -> Union[str, None]: + tag = self.xa_elem.find("link") + if tag is not None: + return tag.text + + @property + def publication_date(self) -> Union[str, None]: + tag = self.xa_elem.find("pubDate") + if tag is not None: + return tag.text + + @property + def source(self) -> str: + tag = self.xa_elem.find("source") + if tag is not None: + return tag.text + + @property + def title(self) -> str: + tag = self.xa_elem.find("title") + if tag is not None: + return tag.text + + @property + def copyright(self) -> str: + tag = self.xa_elem.find("copyright") + if tag is None: + tag = self.xa_elem.find("rights") + if tag is not None: + return tag.text + + @property + def text(self) -> str: + return self.xa_elem.text() + + + + def __repr__(self): + return "<" + str(type(self)) + self.title + ">"
+ + + + +
[docs]class RSSItemContentList(XABase.XAList): + def __init__(self, properties): + super().__init__(properties, RSSItemContent) + +
[docs] def html(self) -> List[str]: + """Gets the raw HTML of each item in the list. + + :return: The list of HTML strings + :rtype: List[str] + + .. versionadded:: 0.1.0 + """ + return [str(x) for x in self.xa_elem]
+ +
[docs] def text(self) -> List[str]: + """Gets the text of each item in the list. + + :return: The list of content texts + :rtype: List[str] + + .. versionadded:: 0.1.0 + """ + return [x.text for x in self.xa_elem]
+ + + +
[docs] def images(self) -> List[XABase.XAImage]: + """Gets the images contained in each item of the list as :class:`XABase.XAImage` objects. + + :return: The list of links + :rtype: List[XABase.XAImage] + + .. versionadded:: 0.1.0 + """ + img_objects = [] + for content_item in self.xa_elem: + imgs = content_item.findAll("img") + img_objects.extend([AppKit.NSImage.alloc().initWithContentsOfURL_(AppKit.NSURL.alloc().initWithString_(x.get("src"))) for x in imgs]) + return self._new_element(img_objects, XABase.XAImageList)
+ + def __repr__(self): + return "<" + str(type(self)) + "Length: " + str(len(self)) + ">"
+ +
[docs]class RSSItemContent(XABase.XAObject): + """The content of an RSS entry. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + self.html: str #: The raw html of the content + self.text: str #: The visible text of the content + + @property + def html(self) -> str: + return str(self.xa_elem) + + @property + def text(self) -> str: + return self.xa_elem.text + + + +
[docs] def images(self) -> List[XABase.XAImage]: + """Retrieves the image referenced by each image element as a list of :class:`XABase.XAImage` objects. + + :return: The list of images + :rtype: List[XABase.XAImage] + + :Example: + + >>> import PyXA + >>> reader = PyXA.RSSFeed("http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml") + >>> content = reader.items()[0].content + >>> print(content.images()) + [<PyXA.XABase.XAImage object at 0x10635ee80>, <PyXA.XABase.XAImage object at 0x10635ebb0>] + + .. versionadded:: 0.1.0 + """ + imgs = self.xa_elem.findAll("img") + img_objects = [AppKit.NSImage.alloc().initWithContentsOfURL_(AppKit.NSURL.alloc().initWithString_(x.get("src"))) for x in imgs] + return self._new_element(img_objects, XABase.XAImageList)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/PyXA.html b/docs/_modules/PyXA/PyXA.html new file mode 100644 index 0000000..2bfc0b4 --- /dev/null +++ b/docs/_modules/PyXA/PyXA.html @@ -0,0 +1,584 @@ + + + + + + PyXA.PyXA — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.PyXA

+from datetime import datetime
+from time import sleep
+from typing import Any, Callable, List, Union
+import importlib
+
+import AppKit
+from Quartz import CGWindowListCopyWindowInfo, kCGNullWindowID, kCGWindowListOptionAll
+
+from .XABase import *
+from PyXA import XABaseScriptable
+from .apps import application_classes
+
+from .XAErrors import ApplicationNotFoundError
+
+supported_applications: List[str] = list(application_classes.keys())
+"""A list of names of supported scriptable applications
+
+.. deprecated:: 0.1.1
+
+   Use :attr:`XABase.supported_applications` instead.
+"""
+
+
[docs]class XAApplicationList(XAList): + """A wrapper around a list of applications. + + .. deprecated:: 0.1.1 + + Use :class:`XABase.XAApplicationList` instead. + + .. versionadded:: 0.0.5 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAApplication, filter) + + if filter is not None: + self.xa_elem = XAPredicate().from_dict(filter).evaluate(self.xa_elem) + +
[docs] def first(self) -> XAObject: + """Retrieves the first element of the list as a wrapped PyXA application object. + + :return: The wrapped object + :rtype: XAObject + + .. versionadded:: 0.0.5 + """ + return self.__getitem__(0)
+ +
[docs] def last(self) -> XAObject: + """Retrieves the last element of the list as a wrapped PyXA application object. + + :return: The wrapped object + :rtype: XAObject + + .. versionadded:: 0.0.5 + """ + return self.__getitem__(-1)
+ +
[docs] def pop(self, index: int = -1) -> XAObject: + """Removes the application at the specified index from the list and returns it. + + .. versionadded:: 0.0.5 + """ + removed = self.xa_elem.lastObject() + self.xa_elem.removeLastObject() + app_name = removed["kCGWindowOwnerName"] + return Application(app_name)
+ + def __getitem__(self, key: Union[int, slice]): + """Retrieves the wrapped application object(s) at the specified key.""" + if isinstance(key, slice): + arr = AppKit.NSArray.alloc().initWithArray_([self.xa_elem[index] for index in range(key.start, key.stop, key.step or 1)]) + return self._new_element(arr, self.__class__) + app_name = self.xa_elem[key]["kCGWindowOwnerName"] + return Application(app_name) + +
[docs] def bundle_identifier(self) -> List[str]: + """Gets the bundle identifier of every application in the list. + + :return: The list of application bundle identifiers + :rtype: List[str] + + .. versionadded:: 0.0.5 + """ + return [app.bundle_identifier for app in self]
+ +
[docs] def bundle_url(self) -> List[XAURL]: + """Gets the bundle URL of every application in the list. + + :return: The list of application bundle URLs + :rtype: List[XAURL] + + .. versionadded:: 0.0.5 + """ + return [XAURL(app.bundle_url)for app in self]
+ +
[docs] def executable_url(self) -> List[XAURL]: + """Gets the executable URL of every application in the list. + + :return: The list of application executable URLs + :rtype: List[XAURL] + + .. versionadded:: 0.0.5 + """ + return [XAURL(app.executable_url) for app in self]
+ +
[docs] def launch_date(self) -> List[datetime]: + """Gets the launch date of every application in the list. + + :return: The list of application launch dates + :rtype: List[str] + + .. versionadded:: 0.0.5 + """ + return [app.launch_date for app in self]
+ +
[docs] def localized_name(self) -> List[str]: + """Gets the localized name of every application in the list. + + :return: The list of application localized names + :rtype: List[str] + + .. versionadded:: 0.0.5 + """ + return [x.get("kCGWindowOwnerName") for x in self.xa_elem]
+ +
[docs] def process_identifier(self) -> List[str]: + """Gets the process identifier of every application in the list. + + :return: The list of application process identifiers + :rtype: List[str] + + .. versionadded:: 0.0.5 + """ + return [x.get("kCGWindowOwnerPID") for x in self.xa_elem]
+ +
[docs] def hide(self): + """Hides all applications in the list. + + :Example 1: Hide all visible running applications + + >>> import PyXA + >>> apps = PyXA.running_applications() + >>> apps.hide() + + .. seealso:: :func:`unhide` + + .. versionadded:: 0.0.5 + """ + for app in self: + app.hide()
+ +
[docs] def unhide(self): + """Unhides all applications in the list. + + :Example 1: Hide then unhide all visible running applications + + >>> import PyXA + >>> apps = PyXA.running_applications() + >>> apps.hide() + >>> apps.unhide() + + .. seealso:: :func:`hide` + + .. versionadded:: 0.0.5 + """ + for app in self: + app.unhide()
+ +
[docs] def terminate(self): + """Quits (terminates) all applications in the list. Synonymous with :func:`quit`. + + :Example 1: Terminate all visible running applications + + >>> import PyXA + >>> apps = PyXA.running_applications() + >>> apps.terminate() + + .. versionadded:: 0.0.5 + """ + for app in self: + app.terminate()
+ +
[docs] def quit(self): + """Quits (terminates) all applications in the list. Synonymous with :func:`terminate`. + + :Example 1: Quit all visible running applications + + >>> import PyXA + >>> apps = PyXA.running_applications() + >>> apps.quit() + + .. versionadded:: 0.0.5 + """ + for app in self: + app.terminate()
+ +
[docs] def windows(self) -> 'XACombinedWindowList': + """Retrieves a list of every window belonging to each application in the list. + + Operations on the list of windows will specialized to scriptable and non-scriptable application window operations as necessary. + + :return: A list containing both scriptable and non-scriptable windows + :rtype: XACombinedWindowList + + :Example: + + >>> import PyXA + >>> windows = PyXA.running_applications().windows() + >>> windows.collapse() + >>> sleep(1) + >>> windows.uncollapse() + + .. versionadded:: 0.0.5 + """ + ls = [] + for app in self: + ls.extend(app.windows().xa_elem) + ls = AppKit.NSArray.alloc().initWithArray_(ls) + window_list = self._new_element(ls, XACombinedWindowList) + return window_list
+ + def __iter__(self): + return (Application(object["kCGWindowOwnerName"]) for object in self.xa_elem.objectEnumerator()) + + def __contains__(self, item): + if isinstance(item, XAApplication): + return item.process_identifier in self.process_identifier() + + def __repr__(self): + return "<" + str(type(self)) + str(self.localized_name()) + ">"
+ +
[docs]class Application(XAObject): + """ + .. deprecated:: 0.1.1 + + Use :class:`XABase.Application` instead. + """ + _shared_app = None + _workspace = None + app_paths: List[str] = [] #: A list containing the path to each application + + def __init__(self, app_name: str): + """Creates a new application object. + + :param app_name: The name of the target application + :type app_name: str + + .. versionadded:: 0.1.0 + """ + # Elevate to XAApplication + new_self = self.__get_application(app_name) + self.__class__ = new_self.__class__ + self.__dict__.update(new_self.__dict__) + + @property + def shared_app(self): + if Application._shared_app == None: + Application._shared_app = AppKit.NSApplication.sharedApplication() + yield Application._shared_app + + @property + def workspace(self): + if Application._workspace == None: + Application._workspace = AppKit.NSWorkspace.sharedWorkspace() + return Application._workspace + + def __xa_get_path_to_app(self, app_identifier: str) -> str: + self.__xa_load_app_paths() + for path in self.app_paths: + if app_identifier.lower() in path.lower(): + return path + + raise ApplicationNotFoundError(app_identifier) + + def __xa_load_app_paths(self): + if self.app_paths == []: + search = XASpotlight() + search.predicate = "kMDItemContentType == 'com.apple.application-bundle'" + search.run() + self.app_paths = [x.path for x in search.results] + + def __get_application(self, app_identifier: str) -> XAApplication: + """Retrieves a PyXA application object representation of the target application without launching or activating the application. + + :param app_identifier: The name of the application to get an object of. + :type app_identifier: str + :return: A PyXA application object referencing the target application. + :rtype: XAApplication + + .. versionadded:: 0.0.1 + """ + app_identifier_l = app_identifier.lower() + + def _match_open_app(obj, index, stop): + res = obj.localizedName().lower() == app_identifier_l + return res, res + + running_apps = self.workspace.runningApplications() + idx_set = running_apps.indexesOfObjectsPassingTest_(_match_open_app) + if idx_set.count() == 1: + index = idx_set.firstIndex() + app = running_apps[index] + properties = { + "parent": None, + "appspace": self.shared_app, + "workspace": self.workspace, + "element": app, + "appref": app, + } + + app_obj = application_classes.get(app_identifier_l, XAApplication) + if isinstance(app_obj, tuple): + module = importlib.import_module("PyXA.apps." + app_obj[0]) + app_class = getattr(module, app_obj[1], None) + if app_class is not None: + application_classes[app_identifier_l] = app_class + app = app_class + else: + raise NotImplementedError() + + # Check if the app is supported by PyXA + app_ref = application_classes.get(app_identifier_l, XAApplication)(properties) + return app_ref + + app_path = app_identifier + if not app_identifier.startswith("/"): + app_path = self.__xa_get_path_to_app(app_identifier) + bundle = AppKit.NSBundle.alloc().initWithPath_(app_path) + url = self.workspace.URLForApplicationWithBundleIdentifier_(bundle.bundleIdentifier()) + + config = AppKit.NSWorkspaceOpenConfiguration.alloc().init() + config.setActivates_(False) + config.setHides_(True) + + app_ref = None + def _launch_completion_handler(app, _error): + nonlocal app_ref + properties = { + "parent": None, + "appspace": self.shared_app, + "workspace": self.workspace, + "element": app, + "appref": app, + } + + app_obj = application_classes.get(app_identifier_l, None) + if isinstance(app_obj, tuple): + module = importlib.import_module("PyXA.apps." + app_obj[0]) + app_class = getattr(module, app_obj[1], None) + if app_class is not None: + application_classes[app_identifier_l] = app_class + app = app_class + else: + raise NotImplementedError() + + app_ref = application_classes.get(app_identifier_l, XAApplication)(properties) + + self.workspace.openApplicationAtURL_configuration_completionHandler_(url, config, _launch_completion_handler) + while app_ref is None: + sleep(0.01) + return app_ref
+ + + + +
[docs]class XACombinedWindowList(XAList): + """A wrapper around a combined list of both scriptable and non-scriptable windows. + + This class contains methods that specialize to XAWindow and XASBWindow methods as necessary. + + .. deprecated:: 0.1.1 + + Use :class:`XABase.XACombinedWindowList` instead. + + .. versionadded:: 0.0.5 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAWindow, filter) + +
[docs] def collapse(self) -> 'XACombinedWindowList': + """Collapses all windows in the list. + + :return: The window list object + :rtype: XACombinedWindowList + + :Example 1: Collapse all windows for all currently visible running applications + + >>> import PyXA + >>> apps = PyXA.running_applications() + >>> apps.windows().collapse() + + .. versionadded:: 0.0.5 + """ + for window in self: + if not hasattr(window.xa_elem, "buttons"): + # Specialize to XASBWindow + window = self.xa_prnt._new_element(window.xa_elem, XABaseScriptable.XASBWindow) + window.collapse() + return self
+ +
[docs] def uncollapse(self) -> 'XACombinedWindowList': + """Uncollapses all windows in the list. + + :return: The window list object + :rtype: XACombinedWindowList + + .. versionadded:: 0.1.0 + """ + for window in self: + if not hasattr(window.xa_elem, "buttons"): + # Specialize to XASBWindow + window = self.xa_prnt._new_element(window.xa_elem, XABaseScriptable.XASBWindow) + window.uncollapse() + return self
+ + + + +
[docs]def running_applications() -> List[XAApplication]: + """Gets PyXA references to all currently visible (not hidden or minimized) running applications whose app bundles are stored in typical application directories. + + :return: A list of PyXA application objects. + :rtype: List[XAApplication] + + :Example 1: Get the name of each running application + + >>> import PyXA + >>> apps = PyXA.running_applications() + >>> print(apps.localized_name()) + ['GitHub Desktop', 'Safari', 'Code', 'Terminal', 'Notes', 'Messages', 'TV'] + + .. deprecated:: 0.1.1 + + Use :func:`XABase.running_applications` instead. + + .. versionadded:: 0.0.1 + """ + windows = CGWindowListCopyWindowInfo(kCGWindowListOptionAll, kCGNullWindowID) + ls = XAPredicate.evaluate_with_format(windows, "kCGWindowIsOnscreen == 1 && kCGWindowLayer == 0") + properties = { + "appspace": AppKit.NSApplication.sharedApplication(), + "workspace": AppKit.NSWorkspace.sharedWorkspace(), + "element": ls, + } + arr = XAApplicationList(properties) + return arr
+ + + + +
[docs]def current_application() -> XAApplication: + """Retrieves a PyXA representation of the frontmost application. + + :return: A PyXA application object referencing the current application. + :rtype: XAApplication + + .. deprecated:: 0.1.1 + + Use :func:`XABase.current_application` instead. + + .. versionadded:: 0.0.1 + """ + return Application(AppKit.NSWorkspace.sharedWorkspace().frontmostApplication().localizedName())
+ + + + +
[docs]def application(app_identifier: str) -> XAApplication: + """Retrieves a PyXA application object representation of the target application without launching or activating the application. + + :param app_identifier: The name of the application to get an object of. + :type app_identifier: str + :return: A PyXA application object referencing the target application. + :rtype: XAApplication + + .. deprecated:: 0.1.0 + + Use :class:`Application` instead. + + .. versionadded:: 0.0.1 + """ + return Application(app_identifier)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/XABase.html b/docs/_modules/PyXA/XABase.html new file mode 100644 index 0000000..0c66380 --- /dev/null +++ b/docs/_modules/PyXA/XABase.html @@ -0,0 +1,8764 @@ + + + + + + PyXA.XABase — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.XABase

+""".. versionadded:: 0.0.1
+
+General classes and methods applicable to any PyXA object.
+"""
+
+import importlib
+import math
+import os
+import random
+import sys
+import tempfile
+import threading
+import time
+from datetime import datetime, timedelta
+from enum import Enum
+from pprint import pprint
+from typing import Any, Callable, Literal, Self, Union
+
+import AppKit
+import Quartz
+import requests
+import ScriptingBridge
+from bs4 import BeautifulSoup, element
+from PyObjCTools import AppHelper
+
+from PyXA.XAErrors import ApplicationNotFoundError, InvalidPredicateError
+from PyXA.XAProtocols import XACanOpenPath, XAClipboardCodable, XAPathLike
+
+from .apps import application_classes
+
+
+
[docs]def OSType(s: str): + return int.from_bytes(s.encode("UTF-8"), "big")
+ +
[docs]def unOSType(i: int): + return i.to_bytes((i.bit_length() + 7) // 8, 'big').decode()
+ +VERSION = "0.1.2" #: The installed version of PyXA +supported_applications: list[str] = list(application_classes.keys()) #: A list of names of supported scriptable applications + +workspace = None + +############### +### General ### +############### +
[docs]class XAObject(): + """A general class for PyXA scripting objects. + + .. seealso:: :class:`XABaseScriptable.XASBObject` + + .. versionadded:: 0.0.1 + """ + _xa_sevt = None + _xa_estr = None + _xa_wksp = None + +
[docs] def __init__(self, properties: dict = None): + """Instantiates a PyXA scripting object. + + :param properties: A dictionary of properties to assign to this object. + :type properties: dict, optional + + .. versionchanged:: 0.0.3 + Removed on-the-fly creation of class attributes. All objects should concretely define their properties. + + .. versionadded:: 0.0.1 + """ + if properties is not None: + self.xa_prnt = properties.get("parent", None) + self.xa_elem = properties.get("element", None) + self.xa_scel = properties.get("scriptable_element", None) + self.xa_aref = properties.get("appref", None)
+ + @property + def xa_wksp(self): + return workspace + + @property + def xa_sevt(self): + if XAObject._xa_sevt is None: + XAObject._xa_sevt = Application("System Events") + return XAObject._xa_sevt + + @property + def xa_estr(self): + if XAObject._xa_estr is None: + import EventKit + XAObject._xa_estr = self._exec_suppresed(EventKit.EKEventStore.alloc().init) + return XAObject._xa_estr + + def _exec_suppresed(self, f: Callable[..., Any], *args: Any) -> Any: + """Silences unwanted and otherwise unavoidable warning messages. + + Taken from: https://stackoverflow.com/a/3946828 + + :param f: The function to execute + :type f: Callable[...] + :param args: The parameters to pass to the specified function + :type args: Any + :raises error: Any exception that occurs while trying to run the specified function + :return: The value returned by the specified function upon execution + :rtype: Any + + .. versionadded:: 0.0.2 + """ + error = None + value = None + + old_stderr = os.dup(sys.stderr.fileno()) + fd = os.open('/dev/null', os.O_CREAT | os.O_WRONLY) + os.dup2(fd, sys.stderr.fileno()) + try: + value = f(*args) + except Exception as e: + error = e + os.dup2(old_stderr, sys.stderr.fileno()) + + if error is not None: + raise error + return value + + def _new_element(self, obj: 'AppKit.NSObject', obj_class: type = 'XAObject', *args: list[Any]) -> 'XAObject': + """Wrapper for creating a new PyXA object. + + :param folder_obj: The Objective-C representation of an object. + :type folder_obj: NSObject + :return: The PyXA representation of the object. + :rtype: XAObject + + .. versionchannged:: 0.1.2 + + Now returns `None` if no object is provided or if the object itself is `None`. + + .. versionadded:: 0.0.1 + """ + if obj is None: + return None + + properties = { + "parent": self, + "element": obj, + "appref": getattr(self, "xa_aref", None), + } + return obj_class(properties, *args) + + def _spawn_thread(self, function: Callable[..., Any], args: Union[list[Any], None] = None, kwargs: Union[list[Any], None] = None, daemon: bool = True) -> threading.Thread: + """Spawns a new thread running the specified function. + + :param function: The function to run in the new thread + :type function: Callable[..., Any] + :param args: Arguments to pass to the function + :type args: list[Any] + :param kwargs: Keyword arguments to pass to the function + :type kwargs: list[Any] + :param daemon: Whether the thread should be a daemon thread, defaults to True + :type daemon: bool, optional + :return: The thread object + :rtype: threading.Thread + + .. versionadded:: 0.0.9 + """ + new_thread = threading.Thread(target=function, args=args or [], kwargs=kwargs or {}, daemon=daemon) + new_thread.start() + return new_thread + +
[docs] def has_element(self) -> bool: + """Whether this object has an AppleScript/JXA/Objective-C scripting element associated with it. + + :return: True if this object's element attribute is set, False otherwise. + :rtype: bool + + .. deprecated:: 0.0.9 + + Perform this check manually instead. + + .. versionadded:: 0.0.1 + """ + return self.xa_elem is not None
+ +
[docs] def has_element_properties(self) -> bool: + """Whether the scripting element associated with this object has properties attached to it. + + :return: True if this object's properties attribute is set, False otherwise. + :rtype: bool + + .. deprecated:: 0.0.8 + All elements now have a properties dictionary, even if it is empty. + + .. versionadded:: 0.0.1 + """ + return self.element_properties != None
+ +
[docs] def set_element(self, element: 'XAObject') -> 'XAObject': + """Sets the element attribute to the supplied element and updates the properties attribute accordingly. + + :param element: The new scripting element to reference via the element attribute. + :type element: XAObject + :return: A reference to this PyXA object. + :rtype: XAObject + + .. deprecated:: 0.0.9 + + Set the element attribute directly instead. + + .. versionadded:: 0.0.1 + """ + self.xa_elem = element + return self
+ +
[docs] def set_properties(self, properties: dict) -> 'XAObject': + """Updates the value of multiple properties of the scripting element associated with this object. + + :param properties: A dictionary defining zero or more property names and updated values as key-value pairs. + :type properties: dict + :return: A reference to this PyXA object. + :rtype: XAObject + + .. versionadded:: 0.0.1 + """ + property_dict = {} + for key in properties: + parts = key.split("_") + titled_parts = [part.title() for part in parts[1:]] + property_name = parts[0] + "".join(titled_parts) + property_dict[property_name] = properties[key] + self.xa_elem.setValuesForKeysWithDictionary_(property_dict) + return self
+ +
[docs] def set_property(self, property_name: str, value: Any) -> 'XAObject': + """Updates the value of a single property of the scripting element associated with this object. + + :param property: The name of the property to assign a new value to. + :type property: str + :param value: The value to assign to the specified property. + :type value: Any + :return: A reference to this PyXA object. + :rtype: XAObject + + .. versionadded:: 0.0.1 + """ + if "_" in property_name: + parts = property_name.split("_") + titled_parts = [part.title() for part in parts[1:]] + property_name = parts[0] + "".join(titled_parts) + self.xa_elem.setValue_forKey_(value, property_name) + return self
+ +
[docs] def __eq__(self, other: 'XAObject'): + if other is None: + return False + + if hasattr(self.xa_elem, "get"): + return self.xa_elem.get() == other.xa_elem.get() + + if isinstance(other, list) or isinstance(other.xa_elem, AppKit.NSArray): + return len(self.xa_elem) == len(other.xa_elem) and all([x == y for x, y in zip(self.xa_elem, other.xa_elem)]) + + return self.xa_elem == other.xa_elem
+ + + + +
[docs]class XAList(XAObject): + """A wrapper around NSArray and NSMutableArray objects enabling fast enumeration and lazy evaluation of Objective-C objects. + + .. versionadded:: 0.0.3 + """ +
[docs] def __init__(self, properties: dict, object_class: type = None, filter: Union[dict, None] = None): + """Creates an efficient wrapper object around a list of scriptable elements. + + :param properties: PyXA properties passed to this object for utility purposes + :type properties: dict + :param object_class: _description_, defaults to None + :type object_class: type, optional + :param filter: A dictionary of properties and values to filter items by, defaults to None + :type filter: Union[dict, None], optional + + .. versionchanged:: 0.0.8 + The filter property is deprecated and will be removed in a future version. Use the :func:`filter` method instead. + + .. versionadded:: 0.0.3 + """ + super().__init__(properties) + self.xa_ocls = object_class + + if not isinstance(self.xa_elem, AppKit.NSArray): + self.xa_elem = AppKit.NSMutableArray.alloc().initWithArray_(self.xa_elem) + + if filter is not None: + self.xa_elem = XAPredicate().from_dict(filter).evaluate(self.xa_elem)
+ +
[docs] def by_property(self, property: str, value: Any) -> XAObject: + """Retrieves the first element whose property value matches the given value, if one exists. + + :param property: The property to match + :type property: str + :param value: The value to match + :type value: Any + :return: The matching element, if one is found + :rtype: XAObject + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Photos") + >>> photo = app.media_items().by_property("id", "CB24FE9F-E9DC-4A5C-A0B0-CC779B1CEDCE/L0/001") + >>> print(photo) + <<class 'PyXA.apps.PhotosApp.XAPhotosMediaItem'>id=CB24FE9F-E9DC-4A5C-A0B0-CC779B1CEDCE/L0/001> + + .. versionadded:: 0.0.6 + """ + predicate = XAPredicate() + predicate.add_eq_condition(property, value) + ls = predicate.evaluate(self.xa_elem) + # if hasattr(ls, "get"): + # ls = predicate.evaluate(self.xa_elem).get() + + if len(ls) == 0: + return None + + obj = ls[0] + return self._new_element(obj, self.xa_ocls)
+ +
[docs] def equalling(self, property: str, value: str) -> XAObject: + """Retrieves all elements whose property value equals the given value. + + :param property: The property to match + :type property: str + :param value: The value to search for + :type value: str + :return: The list of matching elements + :rtype: XAList + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("TV") + >>> print(app.tracks().equalling("playedCount", 0)) + <<class 'PyXA.apps.TV.XATVTrackList'>['Frozen', 'Sunshine', 'The Hunger Games: Mockingjay - Part 2', ...]> + + .. versionadded:: 0.1.0 + """ + predicate = XAPredicate() + predicate.add_eq_condition(property, value) + ls = predicate.evaluate(self.xa_elem) + return self._new_element(ls, self.__class__)
+ +
[docs] def not_equalling(self, property: str, value: str) -> XAObject: + """Retrieves all elements whose property value does not equal the given value. + + :param property: The property to match + :type property: str + :param value: The value to search for + :type value: str + :return: The list of matching elements + :rtype: XAList + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("TV") + >>> print(app.tracks().not_equalling("playedCount", 0)) + <<class 'PyXA.apps.TV.XATVTrackList'>['The Avatar State', 'The Cave of Two Lovers', 'Return to Omashu', ...]> + + .. versionadded:: 0.1.0 + """ + predicate = XAPredicate() + predicate.add_neq_condition(property, value) + ls = predicate.evaluate(self.xa_elem) + return self._new_element(ls, self.__class__)
+ +
[docs] def containing(self, property: str, value: str) -> XAObject: + """Retrieves all elements whose property value contains the given value. + + :param property: The property to match + :type property: str + :param value: The value to search for + :type value: str + :return: The list of matching elements + :rtype: XAList + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Reminders") + >>> print(app.reminders().containing("name", "PyXA")) + <<class 'PyXA.apps.Reminders.XARemindersReminderList'>['PyXA v0.1.0 release']> + + .. versionadded:: 0.0.6 + """ + predicate = XAPredicate() + predicate.add_contains_condition(property, value) + ls = predicate.evaluate(self.xa_elem) + return self._new_element(ls, self.__class__)
+ +
[docs] def not_containing(self, property: str, value: str) -> XAObject: + """Retrieves all elements whose property value does not contain the given value. + + :param property: The property to match + :type property: str + :param value: The value to search for + :type value: str + :return: The list of matching elements + :rtype: XAList + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Reminders") + >>> print(app.reminders().not_containing("name", " ")) + <<class 'PyXA.apps.Reminders.XARemindersReminderList'>['Trash', 'Thing', 'Reminder', ...]> + + .. versionadded:: 0.1.0 + """ + ls = XAPredicate.evaluate_with_format(self.xa_elem, f"NOT {property} CONTAINS \"{value}\"") + return self._new_element(ls, self.__class__)
+ +
[docs] def beginning_with(self, property: str, value: str) -> XAObject: + """Retrieves all elements whose property value begins with the given value. + + :param property: The property to match + :type property: str + :param value: The value to search for + :type value: str + :return: The list of matching elements + :rtype: XAList + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("System Events") + >>> print(app.downloads_folder.files().beginning_with("name", "Example")) + <<class 'PyXA.apps.SystemEvents.XASystemEventsFileList'>['Example.png', 'ExampleImage.png', ...]> + + .. versionadded:: 0.1.0 + """ + predicate = XAPredicate() + predicate.add_begins_with_condition(property, value) + ls = predicate.evaluate(self.xa_elem) + return self._new_element(ls, self.__class__)
+ +
[docs] def ending_with(self, property: str, value: str) -> XAObject: + """Retrieves all elements whose property value ends with the given value. + + :param property: The property to match + :type property: str + :param value: The value to search for + :type value: str + :return: The list of matching elements + :rtype: XAList + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("System Events") + >>> print(app.downloads_folder.files().ending_with("name", ".png")) + <<class 'PyXA.apps.SystemEvents.XASystemEventsFileList'>['Example.png', 'Image.png', ...]> + + .. versionadded:: 0.1.0 + """ + predicate = XAPredicate() + predicate.add_ends_with_condition(property, value) + ls = predicate.evaluate(self.xa_elem) + return self._new_element(ls, self.__class__)
+ +
[docs] def greater_than(self, property: str, value: Union[int, float]) -> XAObject: + """Retrieves all elements whose property value is greater than the given value. + + :param property: The property to match + :type property: str + :param value: The value to compare against + :type value: Union[int, float] + :return: The list of matching elements + :rtype: XAList + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Photos") + >>> print(app.media_items().greater_than("altitude", 10000)[0].spotlight()) + <<class 'PyXA.apps.PhotosApp.XAPhotosMediaItem'>id=53B0F28E-0B39-446B-896C-484CD0DC2D3C/L0/001> + + .. versionadded:: 0.1.0 + """ + predicate = XAPredicate() + predicate.add_gt_condition(property, value) + ls = predicate.evaluate(self.xa_elem) + return self._new_element(ls, self.__class__)
+ +
[docs] def less_than(self, property: str, value: Union[int, float]) -> XAObject: + """Retrieves all elements whose property value is less than the given value. + + :param property: The property to match + :type property: str + :param value: The value to compare against + :type value: Union[int, float] + :return: The list of matching elements + :rtype: XAList + + :Example: + + >>> app = PyXA.Application("Music") + >>> tracks = app.tracks() + >>> print(tracks.less_than("playedCount", 5).name()) + ['Outrunning Karma', 'Death of a Hero', '1994', 'Mind Is a Prison'] + + .. versionadded:: 0.1.0 + """ + predicate = XAPredicate() + predicate.add_lt_condition(property, value) + ls = predicate.evaluate(self.xa_elem) + return self._new_element(ls, self.__class__)
+ +
[docs] def between(self, property: str, value1: Union[int, float], value2: Union[int, float]) -> XAObject: + """Retrieves all elements whose property value is between the given values. + + :param property: The property to match + :type property: str + :param value1: The lower-end of the range to match + :type value1: Union[int, float] + :param value2: The upper-end of the range to match + :type value2: Union[int, float] + :return: The list of matching elements + :rtype: XAList + + :Example: + + >>> import PyXA + >>> from datetime import datetime, timedelta + >>> + >>> app = PyXA.Application("Calendar") + >>> events = app.calendars()[3].events() + >>> now = datetime.now() + >>> print(events.between("startDate", now, now + timedelta(days=1))) + <<class 'PyXA.apps.Calendar.XACalendarEventList'>['Capstone Meeting', 'Lunch with Dan']> + + .. versionadded:: 0.1.0 + """ + predicate = XAPredicate() + predicate.add_gt_condition(property, value1) + predicate.add_lt_condition(property, value2) + ls = predicate.evaluate(self.xa_elem).get() + return self._new_element(ls, self.__class__)
+ +
[docs] def filter(self, filter: str, comparison_operation: Union[str, None] = None, value1: Union[Any, None] = None, value2: Union[Any, None] = None) -> 'XAList': + """Filters the list by the given parameters. + + The filter may be either a format string, used to create an NSPredicate, or up to 4 arguments specifying the filtered property name, the comparison operation, and up to two values to compare against. + + :param filter: A format string or a property name + :type filter: str + :param comparison_operation: The symbol or name of a comparison operation, such as > or <, defaults to None + :type comparison_operation: Union[str, None], optional + :param value1: The first value to compare each list item's property value against, defaults to None + :type value1: Union[Any, None], optional + :param value2: The second value to compare each list item's property value against, defaults to None + :type value2: Union[Any, None], optional + :return: The filtered XAList object + :rtype: XAList + + :Example 1: Get the last file sent by you (via this machine) in Messages.app + + >>> import PyXA + >>> app = PyXA.Application("Messages") + >>> last_file_transfer = app.file_transfers().filter("direction", "==", app.MessageDirection.OUTGOING)[-1] + >>> print(last_file_transfer) + <<class 'PyXA.apps.Messages.XAMessagesFileTransfer'>Test.jpg> + + :Example 2: Get the list of favorite photos/videos from Photos.app + + >>> import PyXA + >>> app = PyXA.Application("Photos") + >>> favorites = app.media_items().filter("favorite", "==", True) + >>> print(favorites) + <<class 'PyXA.apps.PhotosApp.XAPhotosMediaItemList'>['CB24FE9F-E9DC-4A5C-A0B0-CC779B1CEDCE/L0/001', 'EFEB7F37-8373-4972-8E43-21612F597185/L0/001', ...]> + + .. note:: + + For properties that appear to be boolean but fail to return expected filter results, try using the corresponding 0 or 1 value instead. + + :Example 3: Provide a custom format string + + >>> import PyXA + >>> app = PyXA.Application("Photos") + >>> photo = app.media_items().filter("id == 'CB24FE9F-E9DC-4A5C-A0B0-CC779B1CEDCE/L0/001'")[0] + >>> print(photo) + <<class 'PyXA.apps.PhotosApp.XAPhotosMediaItem'>id=CB24FE9F-E9DC-4A5C-A0B0-CC779B1CEDCE/L0/001> + + .. versionadded:: 0.0.8 + """ + if comparison_operation is not None and value1 is not None: + predicate = XAPredicate() + if comparison_operation in ["=", "==", "eq", "EQ", "equals", "EQUALS"]: + predicate.add_eq_condition(filter, value1) + elif comparison_operation in ["!=", "!==", "neq", "NEQ", "not equal to", "NOT EQUAL TO"]: + predicate.add_neq_condition(filter, value1) + elif comparison_operation in [">", "gt", "GT", "greater than", "GREATER THAN"]: + predicate.add_gt_condition(filter, value1) + elif comparison_operation in ["<", "lt", "LT", "less than", "LESS THAN"]: + predicate.add_lt_condition(filter, value1) + elif comparison_operation in [">=", "geq", "GEQ", "greater than or equal to", "GREATER THAN OR EQUAL TO"]: + predicate.add_geq_condition(filter, value1) + elif comparison_operation in ["<=", "leq", "LEQ", "less than or equal to", "LESS THAN OR EQUAL TO"]: + predicate.add_leq_condition(filter, value1) + elif comparison_operation in ["begins with", "beginswith", "BEGINS WITH", "BEGINSWITH"]: + predicate.add_begins_with_condition(filter, value1) + elif comparison_operation in ["contains", "CONTAINS"]: + predicate.add_contains_condition(filter, value1) + elif comparison_operation in ["ends with", "endswith", "ENDS WITH", "ENDSWITH"]: + predicate.add_ends_with_condition(filter, value1) + elif comparison_operation in ["between", "BETWEEN"]: + predicate.add_between_condition(filter, value1, value2) + elif comparison_operation in ["matches", "MATCHES"]: + predicate.add_match_condition(filter, value1) + + filtered_list = predicate.evaluate(self.xa_elem) + return super()._new_element(filtered_list, self.__class__) + else: + filtered_list = XAPredicate.evaluate_with_format(self.xa_elem, filter) + return super()._new_element(filtered_list, self.__class__)
+ +
[docs] def at(self, index: int) -> XAObject: + """Retrieves the element at the specified index. + + :param index: The index of the desired element + :type index: int + :return: The PyXA-wrapped element object + :rtype: XAObject + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem[index], self.xa_ocls)
+ + @property + def first(self) -> XAObject: + """Retrieves the first element of the list as a wrapped PyXA object. + + :return: The wrapped object + :rtype: XAObject + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_elem.firstObject(), self.xa_ocls) + + @property + def last(self) -> XAObject: + """Retrieves the last element of the list as a wrapped PyXA object. + + :return: The wrapped object + :rtype: XAObject + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_elem.lastObject(), self.xa_ocls) + +
[docs] def shuffle(self) -> 'XAList': + """Randomizes the order of objects in the list. + + :return: A reference to the shuffled XAList + :rtype: XAList + + .. versionadded:: 0.0.3 + """ + try: + self.xa_elem = self.xa_elem.shuffledArray() + except AttributeError: + random.shuffle(self.xa_elem) + return self
+ +
[docs] def extend(self, ls: Union['XAList', list]): + """Appends all elements of the supplied list to the end of this list. + + :param ls: _description_ + :type ls: Union[XAList, list] + + .. versionadded:: 0.1.1 + """ + arr1 = AppKit.NSMutableArray.alloc().initWithArray_(self.xa_elem) + + if isinstance(ls, XAList): + ls = ls.xa_elem + else: + ls = AppKit.NSMutableArray.alloc().initWithArray_(ls) + + arr1.addObjectsFromArray_(ls) + self.xa_elem = arr1
+ +
[docs] def push(self, *elements: list[XAObject]) -> Union[XAObject, list[XAObject], None]: + """Appends the object referenced by the provided PyXA wrapper to the end of the list. + + .. versionadded:: 0.0.3 + """ + objects = [] + num_added = 0 + + for element in elements: + len_before = len(self.xa_elem) + self.xa_elem.addObject_(element.xa_elem) + len_after = len(self.xa_elem) + + if len_after == len_before: + # Object wasn't added -- try force-getting the list before adding + self.xa_elem.get().addObject_(element.xa_elem) + + if len_after > len_before: + num_added += 1 + objects.append(self[len_after - 1]) + + if num_added == 1: + return objects[0] + + if num_added == 0: + return None + + return objects
+ +
[docs] def insert(self, element: XAObject, index: int): + """Inserts the object referenced by the provided PyXA wrapper at the specified index. + + .. versionadded:: 0.0.3 + """ + self.xa_elem.insertObject_atIndex_(element.xa_elem, index)
+ +
[docs] def pop(self, index: int = -1) -> XAObject: + """Removes the object at the specified index from the list and returns it. + + .. versionadded:: 0.0.3 + """ + removed = self.xa_elem.lastObject() + self.xa_elem.removeLastObject() + return self._new_element(removed, self.xa_ocls)
+ +
[docs] def index(self, element: XAObject) -> int: + """Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list. + + .. versionadded:: 0.1.2 + """ + for index, item in enumerate(self.xa_elem): + if item == element.xa_elem: + return index + + for index, item in enumerate(self): + if item == element: + return index + + return -1
+ +
[docs] def count(self, count_function: Callable[[object], bool]) -> int: + """Counts the number of entries in the list for which the provided function is True. + + :param count_function: The function to check entries against + :type count_function: Callable[[object], bool] + :return: The number of entries for which the given function is True. + :rtype: int + + .. versionadded:: 0.1.0 + """ + count = 0 + for index in range(len(self)): + in_count = False + try: + in_count = count_function(self.xa_elem[index]) + except: + # TODO: Add logging message here + pass + + if not in_count: + try: + in_count = count_function(self[index]) + except: + pass + + if in_count: + count += 1 + return count
+ +
[docs] def __getitem__(self, key: Union[int, slice]): + if isinstance(key, slice): + arr = AppKit.NSMutableArray.alloc().initWithArray_([self.xa_elem[index] for index in range(key.start, key.stop, key.step or 1)]) + return self._new_element(arr, self.__class__) + if key < 0: + key = self.xa_elem.count() + key + return self._new_element(self.xa_elem.objectAtIndex_(key), self.xa_ocls)
+ +
[docs] def __len__(self): + return len(self.xa_elem)
+ +
[docs] def __reversed__(self): + self.xa_elem = self.xa_elem.reverseObjectEnumerator().allObjects() + return self
+ +
[docs] def __iter__(self): + return (self._new_element(object, self.xa_ocls) for object in self.xa_elem.objectEnumerator())
+ +
[docs] def __contains__(self, item): + if isinstance(item, XAObject): + item = item.xa_elem + return item in self.xa_elem
+ +
[docs] def __repr__(self): + return "<" + str(type(self)) + str(self.xa_elem) + ">"
+ + + + +
[docs]class XAApplicationList(XAList): + """A wrapper around a list of applications. + + .. versionadded:: 0.0.5 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAApplication, filter) + + if filter is not None: + self.xa_elem = XAPredicate().from_dict(filter).evaluate(self.xa_elem)
+ +
[docs] def first(self) -> XAObject: + """Retrieves the first element of the list as a wrapped PyXA application object. + + :return: The wrapped object + :rtype: XAObject + + .. versionadded:: 0.0.5 + """ + return self.__getitem__(0)
+ +
[docs] def last(self) -> XAObject: + """Retrieves the last element of the list as a wrapped PyXA application object. + + :return: The wrapped object + :rtype: XAObject + + .. versionadded:: 0.0.5 + """ + return self.__getitem__(-1)
+ +
[docs] def pop(self, index: int = -1) -> XAObject: + """Removes the application at the specified index from the list and returns it. + + .. versionadded:: 0.0.5 + """ + removed = self.xa_elem.lastObject() + self.xa_elem.removeLastObject() + app_name = removed["kCGWindowOwnerName"] + return Application(app_name)
+ +
[docs] def __getitem__(self, key: Union[int, slice]): + """Retrieves the wrapped application object(s) at the specified key. + """ + if isinstance(key, slice): + arr = AppKit.NSArray.alloc().initWithArray_([self.xa_elem[index] for index in range(key.start, key.stop, key.step or 1)]) + return self._new_element(arr, self.__class__) + app_name = self.xa_elem[key]["kCGWindowOwnerName"] + return Application(app_name)
+ +
[docs] def bundle_identifier(self) -> list[str]: + return [app.bundle_identifier for app in self]
+ +
[docs] def bundle_url(self) -> list['XAURL']: + return [XAURL(app.bundle_url)for app in self]
+ +
[docs] def executable_url(self) -> list['XAURL']: + return [XAURL(app.executable_url) for app in self]
+ +
[docs] def launch_date(self) -> list[datetime]: + return [app.launch_date for app in self]
+ +
[docs] def localized_name(self) -> list[str]: + return [x.get("kCGWindowOwnerName") for x in self.xa_elem]
+ +
[docs] def process_identifier(self) -> list[str]: + return [x.get("kCGWindowOwnerPID") for x in self.xa_elem]
+ +
[docs] def by_bundle_identifier(self, bundle_identifier: str) -> Union['XAApplication', None]: + for app in self: + if app.bundle_identifier == bundle_identifier: + return app
+ +
[docs] def by_bundle_url(self, bundle_url: Union['XAURL', str]) -> Union['XAApplication', None]: + if isinstance(bundle_url, str): + bundle_url = XAURL(bundle_url) + + for app in self: + if app.bundle_url.xa_elem == bundle_url.xa_elem: + return app
+ +
[docs] def by_executable_url(self, executable_url: Union['XAURL', str]) -> Union['XAApplication', None]: + if isinstance(executable_url, str): + executable_url = XAURL(executable_url) + + for app in self: + if app.executable_url.xa_elem == executable_url.xa_elem: + return app
+ +
[docs] def by_launch_date(self, launch_date: datetime) -> Union['XAApplication', None]: + for app in self: + if app.launch_date == launch_date: + return app
+ +
[docs] def by_localized_name(self, localized_name: str) -> Union['XAApplication', None]: + for index, app in enumerate(self.xa_elem): + if app.get("kCGWindowOwnerName") == localized_name: + return self.__getitem__(index)
+ +
[docs] def by_process_identifier(self, process_identifier: str) -> Union['XAApplication', None]: + for index, app in enumerate(self.xa_elem): + if app.get("kCGWindowOwnerPID") == process_identifier: + return self.__getitem__(index)
+ +
[docs] def hide(self): + """Hides all applications in the list. + + :Example 1: Hide all visible running applications + + >>> import PyXA + >>> apps = PyXA.running_applications() + >>> apps.hide() + + .. seealso:: :func:`unhide` + + .. versionadded:: 0.0.5 + """ + for app in self: + app.hide()
+ +
[docs] def unhide(self): + """Unhides all applications in the list. + + :Example 1: Hide then unhide all visible running applications + + >>> import PyXA + >>> apps = PyXA.running_applications() + >>> apps.hide() + >>> apps.unhide() + + .. seealso:: :func:`hide` + + .. versionadded:: 0.0.5 + """ + for app in self: + app.unhide()
+ +
[docs] def terminate(self): + """Quits (terminates) all applications in the list. Synonymous with :func:`quit`. + + :Example 1: Terminate all visible running applications + + >>> import PyXA + >>> apps = PyXA.running_applications() + >>> apps.terminate() + + .. versionadded:: 0.0.5 + """ + for app in self: + app.terminate()
+ +
[docs] def quit(self): + """Quits (terminates) all applications in the list. Synonymous with :func:`terminate`. + + :Example 1: Quit all visible running applications + + >>> import PyXA + >>> apps = PyXA.running_applications() + >>> apps.quit() + + .. versionadded:: 0.0.5 + """ + for app in self: + app.terminate()
+ +
[docs] def windows(self) -> 'XAList': + """Retrieves a list of every window belonging to each application in the list. + + Operations on the list of windows will specialized to scriptable and non-scriptable application window operations as necessary. + + :return: A list containing both scriptable and non-scriptable windows + :rtype: XAList + + :Example: + + >>> import PyXA + >>> windows = PyXA.running_applications().windows() + >>> windows.collapse() + >>> sleep(1) + >>> windows.uncollapse() + + .. versionchanged 0.1.2 + + Now returns an instance of :class:`PyXA.apps.SystemEvents.XASystemEventsWindowList` + + .. versionchanged:: 0.1.1 + + Now returns an instance of :class:`XAWindowList` instead of :class:`XACombinedWindowList`. + + .. versionadded:: 0.0.5 + """ + return self.xa_sevt.processes().windows()
+ +
[docs] def __iter__(self): + return (Application(object["kCGWindowOwnerName"]) for object in self.xa_elem.objectEnumerator())
+ +
[docs] def __contains__(self, item): + if isinstance(item, XAApplication): + return item.process_identifier in self.process_identifier()
+ +
[docs] def __repr__(self): + return "<" + str(type(self)) + str(self.localized_name()) + ">"
+ +
[docs]class Application(XAObject): + """A wrapper around a macOS application providing access to its scripting functionality. + + .. versionchanged:: 0.1.1 + + Moved into the XABase module. + + .. versionadded:: 0.1.0 + """ + + app_paths: list[str] = [] #: A list containing the path to each application + +
[docs] def __init__(self, app_name: str): + """Creates a new application object. + + :param app_name: The name of the target application + :type app_name: str + + .. versionadded:: 0.1.0 + """ + # Elevate to XAApplication + new_self = self.__get_application(app_name) + self.__class__ = new_self.__class__ + self.__dict__.update(new_self.__dict__)
+ + def __xa_get_path_to_app(self, app_identifier: str) -> str: + self.__xa_load_app_paths() + for path in self.app_paths: + if app_identifier.lower() in path.lower(): + return path + + raise ApplicationNotFoundError(app_identifier) + + def __xa_load_app_paths(self): + if self.app_paths == []: + search = XASpotlight() + search.predicate = "kMDItemContentType == 'com.apple.application-bundle'" + search.run() + self.app_paths = [x.path for x in search.results] + + def __get_application(self, app_identifier: str) -> 'XAApplication': + """Retrieves a PyXA application object representation of the target application without launching or activating the application. + + :param app_identifier: The name of the application to get an object of. + :type app_identifier: str + :return: A PyXA application object referencing the target application. + :rtype: XAApplication + + .. versionadded:: 0.0.1 + """ + global workspace + if workspace is None: + workspace = AppKit.NSWorkspace.sharedWorkspace() + + app_identifier_l = app_identifier.lower() + + def _match_open_app(obj, index, stop): + res = obj.localizedName().lower() == app_identifier_l + return res, res + + idx_set = workspace.runningApplications().indexesOfObjectsPassingTest_(_match_open_app) + if idx_set.count() == 1: + index = idx_set.firstIndex() + app = workspace.runningApplications()[index] + properties = { + "parent": None, + "element": app, + "appref": app, + } + + app_obj = application_classes.get(app_identifier_l, XAApplication) + if isinstance(app_obj, tuple): + module = importlib.import_module("PyXA.apps." + app_obj[0]) + app_class = getattr(module, app_obj[1], None) + if app_class is not None: + application_classes[app_identifier_l] = app_class + app = app_class + else: + raise NotImplementedError() + + # Check if the app is supported by PyXA + app_ref = application_classes.get(app_identifier_l, XAApplication)(properties) + return app_ref + + app_path = app_identifier + if not app_identifier.startswith("/"): + app_path = self.__xa_get_path_to_app(app_identifier) + bundle = AppKit.NSBundle.alloc().initWithPath_(app_path) + url = workspace.URLForApplicationWithBundleIdentifier_(bundle.bundleIdentifier()) + + config = AppKit.NSWorkspaceOpenConfiguration.alloc().init() + config.setActivates_(False) + config.setHides_(True) + + app_ref = None + def _launch_completion_handler(app, _error): + nonlocal app_ref + properties = { + "parent": None, + "element": app, + "appref": app, + } + + app_obj = application_classes.get(app_identifier_l, None) + if isinstance(app_obj, tuple): + module = importlib.import_module("PyXA.apps." + app_obj[0]) + app_class = getattr(module, app_obj[1], None) + if app_class is not None: + application_classes[app_identifier_l] = app_class + app = app_class + else: + raise NotImplementedError() + + app_ref = application_classes.get(app_identifier_l, XAApplication)(properties) + + workspace.openApplicationAtURL_configuration_completionHandler_(url, config, _launch_completion_handler) + while app_ref is None: + time.sleep(0.01) + return app_ref
+ + +
[docs]def current_application() -> 'XAApplication': + """Retrieves a PyXA representation of the frontmost application. + + :return: A PyXA application object referencing the current application. + :rtype: XAApplication + + .. versionchanged:: 0.1.1 + + Moved into the XABase module. + + .. versionadded:: 0.0.1 + """ + global workspace + if workspace is None: + workspace = AppKit.NSWorkspace.sharedWorkspace() + return Application(workspace.frontmostApplication().localizedName())
+ + +
[docs]def running_applications() -> list['XAApplication']: + """Gets PyXA references to all currently visible (not hidden or minimized) running applications whose app bundles are stored in typical application directories. + + :return: A list of PyXA application objects. + :rtype: list[XAApplication] + + :Example 1: Get the name of each running application + + >>> import PyXA + >>> apps = PyXA.running_applications() + >>> print(apps.localized_name()) + ['GitHub Desktop', 'Safari', 'Code', 'Terminal', 'Notes', 'Messages', 'TV'] + + .. versionadded:: 0.0.1 + """ + windows = Quartz.CGWindowListCopyWindowInfo(Quartz.kCGWindowListOptionAll, Quartz.kCGNullWindowID) + ls = XAPredicate.evaluate_with_format(windows, "kCGWindowIsOnscreen == 1 && kCGWindowLayer == 0") + properties = { + "element": ls, + } + arr = XAApplicationList(properties) + return arr
+ + +
[docs]class XAApplication(XAObject, XAClipboardCodable): + """A general application class for both officially scriptable and non-scriptable applications. + + .. versionadded:: 0.0.1 + """ +
[docs] def __init__(self, properties): + super().__init__(properties) + self.__xa_prcs = None
+ + @property + def xa_apsc(self): + import appscript + return appscript.app(self.bundle_url.path()) + + @property + def xa_prcs(self): + if self.__xa_prcs == None: + processes = self.xa_sevt.processes() + self.__xa_prcs = processes.by_displayed_name(self.xa_elem.localizedName()) + return self.__xa_prcs + + @property + def bundle_identifier(self) -> str: + """The bundle identifier for the application. + + .. versionadded:: 0.0.1 + """ + return self.xa_elem.bundleIdentifier() + + @property + def bundle_url(self) -> str: + """The file URL of the application bundle. + + .. versionadded:: 0.0.1 + """ + return self.xa_elem.bundleURL() + + @property + def executable_url(self) -> str: + """The file URL of the application's executable. + + .. versionadded:: 0.0.1 + """ + return self.xa_elem.executableURL() + + @property + def frontmost(self) -> bool: + """Whether the application is the active application. + + .. versionadded:: 0.0.1 + """ + return self.xa_elem.isActive() + + @frontmost.setter + def frontmost(self, frontmost: bool): + if frontmost is True: + self.xa_elem.activateWithOptions_(AppKit.NSApplicationActivateIgnoringOtherApps) + + @property + def launch_date(self) -> datetime: + """The date and time that the application was launched. + + .. versionadded:: 0.0.1 + """ + return self.xa_elem.launchDate() + + @property + def localized_name(self) -> str: + """The application's name. + + .. versionadded:: 0.0.1 + """ + return self.xa_elem.localizedName() + + @property + def owns_menu_bar(self) -> bool: + """Whether the application owns the top menu bar. + + .. versionadded:: 0.0.1 + """ + return self.xa_elem.ownsMenuBar() + + @property + def process_identifier(self) -> str: + """The process identifier for the application instance. + + .. versionadded:: 0.0.1 + """ + return self.xa_elem.processIdentifier() + + @property + def icon(self) -> 'XAImage': + """The application's icon. + + .. versionadded:: 0.1.1 + """ + return XAImage(self.xa_elem.icon()) + +
[docs] def launch(self) -> Self: + """Launches the application. + + :return: The application object. + :rtype: Self + + .. versionadded:: 0.1.1 + """ + config = AppKit.NSWorkspaceOpenConfiguration.alloc().init() + config.setActivates_(False) + config.setHides_(True) + + finished_launching = False + def test(app, error): + nonlocal finished_launching + finished_launching = True + + self.xa_wksp.openApplicationAtURL_configuration_completionHandler_(self.bundle_url, config, test) + + while not finished_launching: + time.sleep(0.05) + + return self
+ +
[docs] def activate(self) -> 'XAApplication': + """Activates the application, bringing its window(s) to the front and launching the application beforehand if necessary. + + :return: A reference to the PyXA application object. + :rtype: XAApplication + + .. seealso:: :func:`terminate`, :func:`unhide`, :func:`focus` + + .. versionadded:: 0.0.1 + """ + if not self.xa_elem.isFinishedLaunching(): + self.launch() + + if self.xa_elem.isHidden(): + self.unhide() + + self.xa_elem.activateWithOptions_(AppKit.NSApplicationActivateAllWindows | AppKit.NSApplicationActivateIgnoringOtherApps) + return self
+ +
[docs] def terminate(self) -> 'XAApplication': + """Quits the application. Synonymous with quit(). + + :return: A reference to the PyXA application object. + :rtype: XAApplication + + :Example: + + >>> import PyXA + >>> safari = PyXA.Application("Safari") + >>> safari.terminate() + + .. seealso:: :func:`quit`, :func:`activate` + + .. versionadded:: 0.0.1 + """ + self.xa_elem.terminate() + return self
+ +
[docs] def quit(self) -> 'XAApplication': + """Quits the application. Synonymous with terminate(). + + :return: A reference to the PyXA application object. + :rtype: XAApplication + + :Example: + + >>> import PyXA + >>> safari = PyXA.Application("Safari") + >>> safari.quit() + + .. seealso:: :func:`terminate`, :func:`activate` + + .. versionadded:: 0.0.1 + """ + self.xa_elem.terminate() + return self
+ +
[docs] def hide(self) -> 'XAApplication': + """Hides all windows of the application. + + :return: A reference to the PyXA application object. + :rtype: XAApplication + + :Example: + + >>> import PyXA + >>> safari = PyXA.Application("Safari") + >>> safari.hide() + + .. seealso:: :func:`unhide` + + .. versionadded:: 0.0.1 + """ + self.xa_elem.hide() + return self
+ +
[docs] def unhide(self) -> 'XAApplication': + """Unhides (reveals) all windows of the application, but does not does not activate them. + + :return: A reference to the PyXA application object. + :rtype: XAApplication + + :Example: + + >>> import PyXA + >>> safari = PyXA.Application("Safari") + >>> safari.unhide() + + .. seealso:: :func:`hide` + + .. versionadded:: 0.0.1 + """ + self.xa_elem.unhide() + return self
+ +
[docs] def focus(self) -> 'XAApplication': + """Hides the windows of all applications except this one. + + :return: A reference to the PyXA application object. + :rtype: XAApplication + + :Example: + + >>> import PyXA + >>> safari = PyXA.Application("Safari") + >>> safari.focus() + + .. seealso:: :func:`unfocus` + + .. versionadded:: 0.0.1 + """ + for app in self.xa_wksp.runningApplications(): + if app.localizedName() != self.xa_elem.localizedName(): + app.hide() + else: + app.unhide() + return self
+ +
[docs] def unfocus(self) -> 'XAApplication': + """Unhides (reveals) the windows of all other applications, but does not activate them. + + :return: A reference to the PyXA application object. + :rtype: XAApplication + + :Example: + + >>> import PyXA + >>> safari = PyXA.Application("Safari") + >>> safari.unfocus() + + .. seealso:: :func:`focus` + + .. versionadded:: 0.0.1 + """ + for app in self.xa_wksp.runningApplications(): + app.unhide() + return self
+ + def _get_processes(self, processes): + for process in self.xa_sevt.processes(): + processes.append(process) + +
[docs] def windows(self, filter: dict = None) -> XAList: + return self.xa_prcs.windows(filter)
+ + @property + def front_window(self) -> XAObject: + """The frontmost window of the application. + """ + return self.xa_prcs.front_window + +
[docs] def menu_bars(self, filter: dict = None) -> XAList: + return self.xa_prcs.menu_bars(filter)
+ +
[docs] def get_clipboard_representation(self) -> list[Union[str, 'AppKit.NSURL', 'AppKit.NSImage']]: + """Gets a clipboard-codable representation of the application. + + When the clipboard content is set to an application, three items are placed on the clipboard: + 1. The application's name + 2. The URL to the application bundle + 3. The application icon + + After copying an application to the clipboard, pasting will have the following effects: + - In Finder: Paste a copy of the application bundle in the current directory + - In Terminal: Paste the name of the application followed by the path to the application + - In iWork: Paste the application name + - In Safari: Paste the application name + - In Notes: Attach a copy of the application bundle to the active note + The pasted content may be different for other applications. + + :return: The clipboard-codable representation + :rtype: list[Union[str, AppKit.NSURL, AppKit.NSImage]] + + .. versionadded:: 0.0.8 + """ + return [self.xa_elem.localizedName(), self.xa_elem.bundleURL(), self.xa_elem.icon()]
+ +
[docs] def __getattr__(self, attr): + attributes = [x for y in [cls.__dict__.keys() for cls in self.__class__.__mro__ if cls.__name__ != "object"] for x in y] + if attr in attributes: + # If possible, use PyXA attribute + return super().__getattribute__(attr) + else: + # Otherwise, fall back to appscript + return getattr(self.xa_apsc, attr)
+ + + + +###################### +### PyXA Utilities ### +###################### +
[docs]class AppleScript(): + """A class for constructing and executing AppleScript scripts. + + .. versionadded:: 0.0.5 + """ +
[docs] def __init__(self, script: Union[str, list[str], None] = None): + """Creates a new AppleScript object. + + :param script: A string or list of strings representing lines of AppleScript code, or the path to a script plaintext file, defaults to None + :type script: Union[str, list[str], None], optional + + .. versionadded:: 0.0.5 + """ + self.script: list[str] #: The lines of AppleScript code contained in the script + self.last_result: Any #: The return value of the last execution of the script + self.file_path: XAPath #: The file path of this script, if one exists + + if isinstance(script, str): + if script.startswith("/"): + with open(script, 'r') as f: + script = f.readlines() + else: + self.script = [script] + elif isinstance(script, list): + self.script = script + elif script == None: + self.script = []
+ + @property + def last_result(self) -> Any: + return self.__last_result + + @property + def file_path(self) -> 'XAPath': + return self.__file_path + +
[docs] def add(self, script: Union[str, list[str], 'AppleScript']): + """Adds the supplied string, list of strings, or script as a new line entry in the script. + + :param script: The script to append to the current script string. + :type script: Union[str, list[str], AppleScript] + + :Example: + + >>> import PyXA + >>> script = PyXA.AppleScript("tell application \"Safari\"") + >>> script.add("print the document of window 1") + >>> script.add("end tell") + >>> script.run() + + .. versionadded:: 0.0.5 + """ + if isinstance(script, str): + self.script.append(script) + elif isinstance(script, list): + self.script.extend(script) + elif isinstance(script, AppleScript): + self.script.extend(script.script)
+ +
[docs] def insert(self, index: int, script: Union[str, list[str], 'AppleScript']): + """Inserts the supplied string, list of strings, or script as a line entry in the script starting at the given line index. + + :param index: The line index to begin insertion at + :type index: int + :param script: The script to insert into the current script + :type script: Union[str, list[str], AppleScript] + + :Example: + + >>> import PyXA + >>> script = PyXA.AppleScript.load("/Users/exampleUser/Downloads/Test.scpt") + >>> script.insert(1, "activate") + >>> script.run() + + .. versionadded:: 0.0.9 + """ + if isinstance(script, str): + self.script.insert(index, script) + elif isinstance(script, list): + for line in script: + self.script.insert(index, line) + index += 1 + elif isinstance(script, AppleScript): + for line in script.script: + self.script.insert(index, line) + index += 1
+ +
[docs] def pop(self, index: int = -1) -> str: + """Removes the line at the given index from the script. + + :param index: The index of the line to remove + :type index: int + :return: The text of the removed line + :rtype: str + + :Example: + + >>> import PyXA + >>> script = PyXA.AppleScript.load("/Users/exampleUser/Downloads/Test.scpt") + >>> print(script.pop(1)) + get chats + + .. versionadded:: 0.0.9 + """ + return self.script.pop(index)
+ +
[docs] def load(path: Union['XAPath', str]) -> 'AppleScript': + """Loads an AppleScript (.scpt) file as a runnable AppleScript object. + + :param path: The path of the .scpt file to load + :type path: Union[XAPath, str] + :return: The newly loaded AppleScript object + :rtype: AppleScript + + :Example 1: Load and run a script + + >>> import PyXA + >>> script = PyXA.AppleScript.load("/Users/exampleUser/Downloads/Test.scpt") + >>> print(script.run()) + { + 'string': None, + 'int': 0, + 'bool': False, + 'float': 0.0, + 'date': None, + 'file_url': None, + 'type_code': 845507684, + 'data': {length = 8962, bytes = 0x646c6532 00000000 6c697374 000022f2 ... 6e756c6c 00000000 }, + 'event': <NSAppleEventDescriptor: [ 'obj '{ ... } ]> + } + + :Example 2: Load, modify, and run a script + + >>> import PyXA + >>> script = PyXA.AppleScript.load("/Users/exampleUser/Downloads/Test.scpt") + >>> script.pop(1) + >>> script.insert(1, "activate") + >>> script.run() + + .. versionadded:: 0.0.8 + """ + if isinstance(path, str): + path = XAPath(path) + script = AppKit.NSAppleScript.alloc().initWithContentsOfURL_error_(path.xa_elem, None)[0] + + attributed_string = script.richTextSource() + attributed_string = str(attributed_string).split("}") + parts = [] + for x in attributed_string: + parts.extend(x.split("{")) + + for x in parts: + if "=" in x: + parts.remove(x) + + script = AppleScript("".join(parts).split("\n")) + script.__file_path = path + return script
+ +
[docs] def save(self, path: Union['XAPath', str, None] = None): + """Saves the script to the specified file path, or to the path from which the script was loaded. + + :param path: The path to save the script at, defaults to None + :type path: Union[XAPath, str, None], optional + + :Example 1: Save the script to a specified path + + >>> import PyXA + >>> script = PyXA.AppleScript(f\"\"\" + >>> tell application "Safari" + >>> activate + >>> end tell + >>> \"\"\") + >>> script.save("/Users/exampleUser/Downloads/Example.scpt") + + :Example 2: Load a script, modify it, then save it + + >>> import PyXA + >>> script = PyXA.AppleScript.load("/Users/steven/Downloads/Example.scpt") + >>> script.insert(2, "delay 2") + >>> script.insert(3, "set the miniaturized of window 1 to true") + >>> script.save() + + .. versionadded:: 0.0.9 + """ + if path is None and self.file_path is None: + print("No path to save script to!") + return + + if isinstance(path, str): + path = XAPath(path) + + script = "" + for line in self.script: + script += line + "\n" + script = AppKit.NSAppleScript.alloc().initWithSource_(script) + script.compileAndReturnError_(None) + source = (script.richTextSource().string()) + + if path is not None: + self.__file_path = path + + with open(self.file_path.xa_elem.path(), "w") as f: + f.write(source)
+ +
[docs] def parse_result_data(result: dict) -> list[tuple[str, str]]: + """Extracts string data from an AppleScript execution result dictionary. + + :param result: The execution result dictionary to extract data from + :type result: dict + :return: A list of responses contained in the result structured as tuples + :rtype: list[tuple[str, str]] + + :Example: + + >>> import PyXA + >>> script = PyXA.AppleScript.load("/Users/exampleUser/Downloads/Test.scpt") + >>> print(script.script) + >>> result = script.run() + >>> print(PyXA.AppleScript.parse_result_data(result)) + ['tell application "Messages"', '\\tget chats', 'end tell'] + [('ID', 'iMessage;-;+12345678910'), ('ID', 'iMessage;-;+12345678911'), ('ID', 'iMessage;-;example@icloud.com'), ...] + + .. versionadded:: 0.0.9 + """ + result = result["event"] + response_objects = [] + num_responses = result.numberOfItems() + for response_index in range(1, num_responses + 1): + response = result.descriptorAtIndex_(response_index) + + data = () + num_params = response.numberOfItems() + if num_params == 0: + data = response.stringValue().strip() + + else: + for param_index in range(1, num_params + 1): + param = response.descriptorAtIndex_(param_index).stringValue() + if param is not None: + data += (param.strip(), ) + response_objects.append(data) + + return response_objects
+ +
[docs] def run(self) -> Any: + """Compiles and runs the script, returning the result. + + :return: The return value of the script. + :rtype: Any + + :Example: + + >>> import PyXA + >>> script = PyXA.AppleScript(f\"\"\"tell application "System Events" + >>> return 1 + 2 + >>> end tell + >>> \"\"\") + >>> print(script.run()) + { + 'string': '3', + 'int': 3, + 'bool': False, + 'float': 3.0, + 'date': None, + 'file_url': None, + 'type_code': 3, + 'data': {length = 4, bytes = 0x03000000}, + 'event': <NSAppleEventDescriptor: 3> + } + + .. versionadded:: 0.0.5 + """ + script = "" + for line in self.script: + script += line + "\n" + script = AppKit.NSAppleScript.alloc().initWithSource_(script) + + result = script.executeAndReturnError_(None)[0] + if result is not None: + self.__last_result = { + "string": result.stringValue(), + "int": result.int32Value(), + "bool": result.booleanValue(), + "float": result.doubleValue(), + "date": result.dateValue(), + "file_url": result.fileURLValue(), + "type_code": result.typeCodeValue(), + "data": result.data(), + "event": result, + } + return self.last_result
+ +
[docs] def __repr__(self): + return "<" + str(type(self)) + str(self.script) + ">"
+ + + + +
[docs]class XAPredicate(XAObject, XAClipboardCodable): + """A predicate used to filter arrays. + + .. versionadded:: 0.0.4 + """ +
[docs] def __init__(self): + self.keys: list[str] = [] + self.operators: list[str] = [] + self.values: list[str] = []
+ +
[docs] def from_dict(self, ref_dict: dict) -> 'XAPredicate': + """Populates the XAPredicate object from the supplied dictionary. + + The predicate will use == for all comparisons. + + :param ref_dict: A specification of key, value pairs + :type ref_dict: dict + :return: The populated predicate object + :rtype: XAPredicate + + .. versionadded:: 0.0.4 + """ + for key, value in ref_dict.items(): + self.keys.append(key) + self.operators.append("==") + self.values.append(value) + return self
+ +
[docs] def from_args(self, *args) -> 'XAPredicate': + """Populates the XAPredicate object from the supplied key, value argument pairs. + + The number of keys and values must be equal. The predicate will use == for all comparisons. + + :raises InvalidPredicateError: Raised when the number of keys does not match the number of values + :return: The populated predicate object + :rtype: XAPredicate + + .. versionadded:: 0.0.4 + """ + arg_num = len(args) + if arg_num % 2 != 0: + raise InvalidPredicateError("The number of keys and values must be equal; the number of arguments must be an even number.") + + for index, value in enumerate(args): + if index % 2 == 0: + self.keys.append(value) + self.operators.append("==") + self.values.append(args[index + 1]) + return self
+ +
[docs] def evaluate(self, target: Union['AppKit.NSArray', XAList]) -> 'AppKit.NSArray': + """Evaluates the predicate on the given array. + + :param target: The array to evaluate against the predicate + :type target: AppKit.NSArray + :return: The filtered array + :rtype: AppKit.NSArray + + .. versionadded:: 0.0.4 + """ + target_list = target + if isinstance(target, XAList): + target_list = target.xa_elem + + placeholders = ["%@"] * len(self.values) + expressions = [" ".join(expr) for expr in zip(self.keys, self.operators, placeholders)] + format = "( " + " ) && ( ".join(expressions) + " )" + + ls = [] + predicate = AppKit.NSPredicate.predicateWithFormat_(format, *self.values) + try: + # Not sure why this is necessary sometimes, but it is. + ls = target_list.filteredArrayUsingPredicate_(AppKit.NSPredicate.predicateWithFormat_(str(predicate))) + except ValueError: + ls = target_list.filteredArrayUsingPredicate_(predicate) + + if isinstance(target, XAList): + return target.__class__({ + "parent": target, + "element": ls, + "appref": self.xa_aref, + }) + return ls
+ +
[docs] def evaluate_with_format(target: Union['AppKit.NSArray', XAList], fmt: str) -> 'AppKit.NSArray': + """Evaluates the specified array against a predicate with the given format. + + :param target: The array to filter + :type target: AppKit.NSArray + :param fmt: The format string for the predicate + :type fmt: str + :return: The filtered array + :rtype: AppKit.NSArray + + .. versionadded:: 0.0.4 + """ + target_list = target + if isinstance(target, XAList): + target_list = target.xa_elem + + predicate = AppKit.NSPredicate.predicateWithFormat_(fmt) + ls = target_list.filteredArrayUsingPredicate_(predicate) + + if isinstance(target, XAList): + return target.__class__({ + "parent": target, + "element": ls, + "appref": AppKit.NSApplication.sharedApplication(), + }) + return ls
+ +
[docs] def evaluate_with_dict(target: Union['AppKit.NSArray', XAList], properties_dict: dict) -> 'AppKit.NSArray': + """Evaluates the specified array against a predicate constructed from the supplied dictionary. + + The predicate will use == for all comparisons. + + :param target: The array to filter + :type target: AppKit.NSArray + :param properties_dict: The specification of key, value pairs + :type properties_dict: dict + :return: The filtered array + :rtype: AppKit.NSArray + + .. versionadded:: 0.0.4 + """ + target_list = target + if isinstance(target, XAList): + target_list = target.xa_elem + + fmt = "" + for key, value in properties_dict.items(): + if isinstance(value, str): + value = "'" + value + "'" + fmt += f"( {key} == {value} ) &&" + + predicate = AppKit.NSPredicate.predicateWithFormat_(fmt[:-3]) + ls = target_list.filteredArrayUsingPredicate_(predicate) + + if isinstance(target, XAList): + return target.__class__({ + "parent": target, + "element": ls, + "appref": AppKit.NSApplication.sharedApplication(), + }) + return ls
+ + # EQUAL +
[docs] def add_eq_condition(self, property: str, value: Any): + """Appends an `==` condition to the end of the predicate format. + + The added condition will have the form `property == value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.append(property) + self.operators.append("==") + self.values.append(value)
+ +
[docs] def insert_eq_condition(self, index: int, property: str, value: Any): + """Inserts an `==` condition to the predicate format at the desired location, specified by index. + + The added condition will have the form `property == value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.insert(index, property) + self.operators.insert(index, "==") + self.values.insert(index, value)
+ + # NOT EQUAL +
[docs] def add_neq_condition(self, property: str, value: Any): + """Appends a `!=` condition to the end of the predicate format. + + The added condition will have the form `property != value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.append(property) + self.operators.append("!=") + self.values.append(value)
+ +
[docs] def insert_neq_condition(self, index: int, property: str, value: Any): + """Inserts a `!=` condition to the predicate format at the desired location, specified by index. + + The added condition will have the form `property != value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.insert(index, property) + self.operators.insert(index, "!=") + self.values.insert(index, value)
+ + # GREATER THAN OR EQUAL +
[docs] def add_geq_condition(self, property: str, value: Any): + """Appends a `>=` condition to the end of the predicate format. + + The added condition will have the form `property >= value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.append(property) + self.operators.append(">=") + self.values.append(value)
+ +
[docs] def insert_geq_condition(self, index: int, property: str, value: Any): + """Inserts a `>=` condition to the predicate format at the desired location, specified by index. + + The added condition will have the form `property >= value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.insert(index, property) + self.operators.insert(index, ">=") + self.values.insert(index, value)
+ + # LESS THAN OR EQUAL +
[docs] def add_leq_condition(self, property: str, value: Any): + """Appends a `<=` condition to the end of the predicate format. + + The added condition will have the form `property <= value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.append(property) + self.operators.append("<=") + self.values.append(value)
+ +
[docs] def insert_leq_condition(self, index: int, property: str, value: Any): + """Inserts a `<=` condition to the predicate format at the desired location, specified by index. + + The added condition will have the form `property <= value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.insert(index, property) + self.operators.insert(index, "<=") + self.values.insert(index, value)
+ + # GREATER THAN +
[docs] def add_gt_condition(self, property: str, value: Any): + """Appends a `>` condition to the end of the predicate format. + + The added condition will have the form `property > value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.append(property) + self.operators.append(">") + self.values.append(value)
+ +
[docs] def insert_gt_condition(self, index: int, property: str, value: Any): + """Inserts a `>` condition to the predicate format at the desired location, specified by index. + + The added condition will have the form `property > value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.insert(index, property) + self.operators.insert(index, ">") + self.values.insert(index, value)
+ + # LESS THAN +
[docs] def add_lt_condition(self, property: str, value: Any): + """Appends a `<` condition to the end of the predicate format. + + The added condition will have the form `property < value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.append(property) + self.operators.append("<") + self.values.append(value)
+ +
[docs] def insert_lt_condition(self, index: int, property: str, value: Any): + """Inserts a `<` condition to the predicate format at the desired location, specified by index. + + The added condition will have the form `property < value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.insert(index, property) + self.operators.insert(index, "<") + self.values.insert(index, value)
+ + # BETWEEN +
[docs] def add_between_condition(self, property: str, value1: Union[int, float], value2: Union[int, float]): + """Appends a `BETWEEN` condition to the end of the predicate format. + + The added condition will have the form `property BETWEEN [value1, value2]`. + + :param property: A property of an object to check the condition against + :type property: str + :param value1: The lower target value of the condition + :type value1: Union[int, float] + :param value2: The upper target value of the condition + :type value2: Union[int, float] + + .. versionadded:: 0.0.4 + """ + self.keys.append(property) + self.operators.append("BETWEEN") + self.values.append([value1, value2])
+ +
[docs] def insert_between_condition(self, index: int, property: str, value1: Union[int, float], value2: Union[int, float]): + """Inserts a `BETWEEN` condition to the predicate format at the desired location, specified by index. + + The added condition will have the form `property BETWEEN [value1, value2]`. + + :param property: A property of an object to check the condition against + :type property: str + :param value1: The lower target value of the condition + :type value1: Union[int, float] + :param value2: The upper target value of the condition + :type valu2e: Union[int, float] + + .. versionadded:: 0.0.4 + """ + self.keys.insert(index, property) + self.operators.insert(index, "BETWEEN") + self.values.insert(index, [value1, value2])
+ + # BEGINSWITH +
[docs] def add_begins_with_condition(self, property: str, value: Any): + """Appends a `BEGINSWITH` condition to the end of the predicate format. + + The added condition will have the form `property BEGINSWITH value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.append(property) + self.operators.append("BEGINSWITH") + self.values.append(value)
+ +
[docs] def insert_begins_with_condition(self, index: int, property: str, value: Any): + """Inserts a `BEGINSWITH` condition to the predicate format at the desired location, specified by index. + + The added condition will have the form `property BEGINSWITH value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.insert(index, property) + self.operators.insert(index, "BEGINSWITH") + self.values.insert(index, value)
+ + # ENDSWITH +
[docs] def add_ends_with_condition(self, property: str, value: Any): + """Appends a `ENDSWITH` condition to the end of the predicate format. + + The added condition will have the form `property ENDSWITH value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.append(property) + self.operators.append("ENDSWITH") + self.values.append(value)
+ +
[docs] def insert_ends_with_condition(self, index: int, property: str, value: Any): + """Inserts a `ENDSWITH` condition to the predicate format at the desired location, specified by index. + + The added condition will have the form `property ENDSWITH value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.insert(index, property) + self.operators.insert(index, "ENDSWITH") + self.values.insert(index, value)
+ + # CONTAINS +
[docs] def add_contains_condition(self, property: str, value: Any): + """Appends a `CONTAINS` condition to the end of the predicate format. + + The added condition will have the form `property CONTAINS value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.append(property) + self.operators.append("CONTAINS") + self.values.append(value)
+ +
[docs] def insert_contains_condition(self, index: int, property: str, value: Any): + """Inserts a `CONTAINS` condition to the predicate format at the desired location, specified by index. + + The added condition will have the form `property CONTAINS value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.insert(index, property) + self.operators.insert(index, "CONTAINS") + self.values.insert(index, value)
+ + # MATCHES +
[docs] def add_match_condition(self, property: str, value: Any): + """Appends a `MATCHES` condition to the end of the predicate format. + + The added condition will have the form `property MATCHES value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.append(property) + self.operators.append("MATCHES") + self.values.append(value)
+ +
[docs] def insert_match_condition(self, index: int, property: str, value: Any): + """Inserts a `MATCHES` condition to the predicate format at the desired location, specified by index. + + The added condition will have the form `property MATCHES value`. + + :param property: A property of an object to check the condition against + :type property: str + :param value: The target value of the condition + :type value: Any + + .. versionadded:: 0.0.4 + """ + self.keys.insert(index, property) + self.operators.insert(index, "MATCHES") + self.values.insert(index, value)
+ +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of the predicate. + + When a predicate is copied to the clipboard, the string representation of the predicate is added to the clipboard. + + :return: The string representation of the predicate + :rtype: str + + .. versionadded:: 0.0.8 + """ + placeholders = ["%@"] * len(self.values) + expressions = [" ".join(expr) for expr in zip(self.keys, self.operators, placeholders)] + format = "( " + " ) && ( ".join(expressions) + " )" + predicate = AppKit.NSPredicate.predicateWithFormat_(format, *self.values) + return predicate.predicateFormat()
+ + + + +
[docs]class XAURLList(XAList): + """A list of URLs. Supports bulk operations. + + .. versionadded:: 0.1.2 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAURL, filter)
+ +
[docs] def base_url(self) -> list[str]: + return [url.base_url for url in self]
+ +
[docs] def parameters(self) -> list[str]: + return [url.parameters for url in self]
+ +
[docs] def scheme(self) -> list[str]: + return [url.scheme for url in self]
+ +
[docs] def fragment(self) -> list[str]: + return [url.fragment for url in self]
+ +
[docs] def port(self) -> list[int]: + return [url.port for url in self]
+ +
[docs] def html(self) -> list[element.Tag]: + return [url.html for url in self]
+ +
[docs] def title(self) -> list[str]: + return [url.title for url in self]
+ +
[docs] def open(self): + """Opens each URL in the list. + + .. versionadded:: 0.1.2 + """ + for url in self: + url.open()
+ +
[docs] def extract_text(self) -> list[list[str]]: + """Extracts the visible text of each URL in the list. + + .. versionadded:: 0.1.2 + """ + ls = [url.extract_text() for url in self] + return ls
+ +
[docs] def extract_images(self) -> list[list['XAImage']]: + """Extracts the images of each URL in the list. + + .. versionadded:: 0.1.2 + """ + ls = [url.extract_images() for url in self] + return ls
+ +
[docs]class XAURL(XAObject, XAClipboardCodable): + """A URL using any scheme recognized by the system. This can be a file URL. + + .. versionadded:: 0.0.5 + """ +
[docs] def __init__(self, url: Union[str, 'AppKit.NSURL', 'XAURL', 'XAPath']): + super().__init__() + self.soup: BeautifulSoup = None #: The bs4 object for the URL, starts as None until a bs4-related action is made + self.url: str #: The string form of the URL + + if isinstance(url, list): + # Elevate to XAURLList + new_self = XAURLList({"element": AppKit.NSArray.alloc().initWithArray_(url)}) + self.__dict__ = new_self.__dict__ + self.__class__ = new_self.__class__ + self = new_self + return + + if isinstance(url, dict): + # Initialized via XAURLList + url = url["element"] + + if isinstance(url, str): + # URL-encode spaces + url = url.replace(" ", "%20") + + if url.startswith("/"): + # Prepend file scheme + url = "file://" + url + elif url.replace(".", "").isdecimal(): + # URL is an IP -- must add http:// prefix + if ":" not in url: + # No port provided, add port 80 by default + url = "http://" + url + ":80" + else: + url = "http://" + url + elif "://" not in url: + # URL is not currently valid, try prepending http:// + url = "http://" + url + + self.url = url + url = AppKit.NSURL.alloc().initWithString_(url) + elif isinstance(url, XAURL) or isinstance(url, XAPath): + self.url = url.url + url = url.xa_elem + else: + self.url = str(url) + + self.xa_elem = url
+ + @property + def base_url(self) -> str: + return self.xa_elem.host() + + @property + def parameters(self) -> str: + """The query parameters of the URL. + """ + return self.xa_elem.query() + + @property + def scheme(self) -> str: + """The URI scheme of the URL. + """ + return self.xa_elem.scheme() + + @property + def fragment(self) -> str: + """The fragment identifier following a # symbol in the URL. + """ + return self.xa_elem.fragment() + + @property + def port(self) -> int: + """The port that the URL points to. + """ + return self.xa_elem.port() + + @property + def html(self) -> element.Tag: + """The html of the URL. + """ + if self.soup is None: + self.__get_soup() + return self.soup.html + + @property + def title(self) -> str: + """The title of the URL. + """ + if self.soup is None: + self.__get_soup() + return self.soup.title.text + + def __get_soup(self): + req = requests.get(str(self.xa_elem)) + self.soup = BeautifulSoup(req.text, "html.parser") + +
[docs] def open(self): + """Opens the URL in the appropriate default application. + + .. versionadded:: 0.0.5 + """ + global workspace + if workspace is None: + workspace = AppKit.NSWorkspace.sharedWorkspace() + workspace.openURL_(self.xa_elem)
+ +
[docs] def extract_text(self) -> list[str]: + """Extracts the visible text from the webpage that the URL points to. + + :return: The list of extracted lines of text + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + if self.soup is None: + self.__get_soup() + return self.soup.get_text().splitlines()
+ +
[docs] def extract_images(self) -> list['XAImage']: + """Extracts all images from HTML of the webpage that the URL points to. + + :return: The list of extracted images + :rtype: list[XAImage] + + .. versionadded:: 0.0.8 + """ + data = AppKit.NSData.alloc().initWithContentsOfURL_(AppKit.NSURL.URLWithString_(str(self.xa_elem))) + image = AppKit.NSImage.alloc().initWithData_(data) + + if image is not None: + image_object = XAImage(image, name = self.xa_elem.pathComponents()[-1]) + return [image_object] + else: + if self.soup is None: + self.__get_soup() + + images = self.soup.findAll("img") + image_objects = [] + for image in images: + image_src = image["src"] + if image_src.startswith("/"): + image_src = str(self) + str(image["src"]) + + data = AppKit.NSData.alloc().initWithContentsOfURL_(AppKit.NSURL.URLWithString_(image_src)) + image = AppKit.NSImage.alloc().initWithData_(data) + if image is not None: + image_object = XAImage(image) + image_objects.append(image_object) + + return image_objects
+ +
[docs] def get_clipboard_representation(self) -> list[Union['AppKit.NSURL', str]]: + """Gets a clipboard-codable representation of the URL. + + When the clipboard content is set to a URL, the raw URL data and the string representation of the URL are added to the clipboard. + + :return: The clipboard-codable form of the URL + :rtype: Any + + .. versionadded:: 0.0.8 + """ + return [self.xa_elem, str(self.xa_elem)]
+ +
[docs] def __eq__(self, other: 'XAURL'): + if not isinstance(other, XAURL): + return False + + if self.xa_elem == other.xa_elem: + return True + + return self.url == other.url
+ +
[docs] def __str__(self): + return str(self.xa_elem)
+ +
[docs] def __repr__(self): + return "<" + str(type(self)) + str(self.xa_elem) + ">"
+ + + + +
[docs]class XAPath(XAObject, XAClipboardCodable): + """A path to a file on the disk. + + .. versionadded:: 0.0.5 + """ +
[docs] def __init__(self, path: Union[str, 'AppKit.NSURL']): + super().__init__() + if isinstance(path, str): + path = AppKit.NSURL.alloc().initFileURLWithPath_(path) + self.xa_elem = path + self.path = path.path() #: The path string without the file:// prefix + self.url = str(self.xa_elem) #: The path string with the file:// prefix included
+ +
[docs] def open(self): + """Opens the file in its default application. + + .. versionadded: 0.0.5 + """ + global workspace + if workspace is None: + workspace = AppKit.NSWorkspace.sharedWorkspace() + workspace.openURL_(self.xa_elem)
+ +
[docs] def show_in_finder(self): + """Opens a Finder window showing the folder containing this path, with the associated file selected. Synonymous with :func:`select`. + + .. versionadded: 0.0.9 + """ + self.select()
+ +
[docs] def select(self): + """Opens a Finder window showing the folder containing this path, with the associated file selected. Synonymous with :func:`show_in_finder`. + + .. versionadded: 0.0.5 + """ + global workspace + if workspace is None: + workspace = AppKit.NSWorkspace.sharedWorkspace() + workspace.activateFileViewerSelectingURLs_([self.xa_elem])
+ +
[docs] def get_clipboard_representation(self) -> list[Union['AppKit.NSURL', str]]: + """Gets a clipboard-codable representation of the path. + + When the clipboard content is set to a path, the raw file URL data and the string representation of the path are added to the clipboard. + + :return: The clipboard-codable form of the path + :rtype: Any + + .. versionadded:: 0.0.8 + """ + return [self.xa_elem, self.xa_elem.path()]
+ +
[docs] def __eq__(self, other: 'XAPath'): + if not isinstance(other, XAPath): + return False + + if self.xa_elem == other.xa_elem: + return True + + return self.path == other.path
+ +
[docs] def __repr__(self): + return "<" + str(type(self)) + str(self.xa_elem) + ">"
+ + + +######################## +### System Utilities ### +######################## +
[docs]class XAClipboard(XAObject): + """A wrapper class for managing and interacting with the system clipboard. + + .. versionadded:: 0.0.5 + """ +
[docs] def __init__(self): + self.xa_elem = AppKit.NSPasteboard.generalPasteboard()
+ + @property + def content(self) -> dict[str, list[Any]]: + """The content of the clipboard. + """ + info_by_type = {} + for item in self.xa_elem.pasteboardItems(): + for item_type in item.types(): + info_by_type[item_type] = { + "data": item.dataForType_(item_type), + "properties": item.propertyListForType_(item_type), + "strings": item.stringForType_(item_type), + } + return info_by_type + + @content.setter + def content(self, value: list[Any]): + if not isinstance(value, list): + value = [value] + self.xa_elem.clearContents() + for index, item in enumerate(value): + if item == None: + value[index] = "" + elif isinstance(item, XAObject): + if not isinstance(item, XAClipboardCodable): + print(item, "is not a clipboard-codable object.") + continue + if isinstance(item.xa_elem, ScriptingBridge.SBElementArray) and item.xa_elem.get() is None: + value[index] = "" + else: + content = item.get_clipboard_representation() + if isinstance(content, list): + value.pop(index) + value += content + else: + value[index] = content + elif isinstance(item, int) or isinstance(item, float): + value[index] = str(item) + self.xa_elem.writeObjects_(value) + +
[docs] def clear(self): + """Clears the system clipboard. + + .. versionadded:: 0.0.5 + """ + self.xa_elem.clearContents()
+ +
[docs] def get_strings(self) -> list[str]: + """Retrieves string type data from the clipboard, if any such data exists. + + :return: The list of strings currently copied to the clipboard + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + items = [] + for item in self.xa_elem.pasteboardItems(): + string = item.stringForType_(AppKit.NSPasteboardTypeString) + if string is not None: + items.append(string) + return items
+ +
[docs] def get_urls(self) -> list['XAURL']: + """Retrieves URL type data from the clipboard, as instances of :class:`XAURL` and :class:`XAPath`, if any such data exists. + + :return: The list of file URLs and web URLs currently copied to the clipboard + :rtype: list[XAURL] + + .. versionadded:: 0.0.8 + """ + items = [] + for item in self.xa_elem.pasteboardItems(): + url = None + string = item.stringForType_(AppKit.NSPasteboardTypeURL) + if string is None: + string = item.stringForType_(AppKit.NSPasteboardTypeFileURL) + if string is not None: + url = XAPath(XAURL(string).xa_elem) + else: + url = XAURL(string) + + if url is not None: + items.append(url) + return items
+ +
[docs] def get_images(self) -> list['XAImage']: + """Retrieves image type data from the clipboard, as instances of :class:`XAImage`, if any such data exists. + + :return: The list of images currently copied to the clipboard + :rtype: list[XAImage] + + .. versionadded:: 0.0.8 + """ + image_types = [AppKit.NSPasteboardTypePNG, AppKit.NSPasteboardTypeTIFF, 'public.jpeg', 'com.apple.icns'] + items = [] + for item in self.xa_elem.pasteboardItems(): + for image_type in image_types: + if image_type in item.types(): + img = XAImage(data = item.dataForType_(image_type)) + items.append(img) + return items
+ +
[docs] def set_contents(self, content: list[Any]): + """Sets the content of the clipboard + + :param content: A list of the content to add fill the clipboard with. + :type content: list[Any] + + .. deprecated:: 0.0.8 + Set the :attr:`content` property directly instead. + + .. versionadded:: 0.0.5 + """ + self.xa_elem.clearContents() + self.xa_elem.writeObjects_(content)
+ + + + +
[docs]class XASpotlight(XAObject): + """A Spotlight query for files on the disk. + + .. versionadded:: 0.0.9 + """ +
[docs] def __init__(self, *query: list[Any]): + self.query: list[Any] = query #: The query terms to search + self.timeout: int = 10 #: The amount of time in seconds to timeout the search after + self.predicate: Union[str, XAPredicate] = None #: The predicate to filter search results by + self.results: list[XAPath] #: The results of the search + self.__results = None + + self.query_object = AppKit.NSMetadataQuery.alloc().init() + nc = AppKit.NSNotificationCenter.defaultCenter() + nc.addObserver_selector_name_object_(self, '_queryNotification:', None, self.query_object)
+ + @property + def results(self) -> list['XAPath']: + if len(self.query) == 0 and self.predicate is None: + return [] + self.run() + total_time = 0 + while self.__results is None and total_time < self.timeout: + AppKit.NSRunLoop.currentRunLoop().runUntilDate_(datetime.now() + timedelta(seconds = 0.01)) + total_time += 0.01 + if self.__results is None: + return [] + return self.__results + +
[docs] def run(self): + """Runs the search. + + :Example: + + >>> import PyXA + >>> from datetime import date, datetime, time + >>> date1 = datetime.combine(date(2022, 5, 17), time(0, 0, 0)) + >>> date2 = datetime.combine(date(2022, 5, 18), time(0, 0, 0)) + >>> search = PyXA.XASpotlight(date1, date2) + >>> print(search.results) + [<<class 'PyXA.XAPath'>file:///Users/exampleUser/Downloads/>, <<class 'PyXA.XAPath'>file:///Users/exampleUser/Downloads/Example.txt>, ...] + + .. versionadded:: 0.0.9 + """ + if self.predicate is not None: + # Search with custom predicate + if isinstance(self.predicate, XAPredicate): + self.predicate = self.predicate.get_clipboard_representation() + self.__search_with_predicate(self.predicate) + elif len(self.query) == 1 and isinstance(self.query[0], datetime): + # Search date + or - 24 hours + self.__search_by_date(self.query) + elif len(self.query) == 2 and isinstance(self.query[0], datetime) and isinstance(self.query[1], datetime): + # Search date range + self.__search_by_date_range(self.query[0], self.query[1]) + elif all(isinstance(x, str) or isinstance(x, int) or isinstance(x, float) for x in self.query): + # Search matching multiple strings + self.__search_by_strs(self.query) + elif isinstance(self.query[0], datetime) and all(isinstance(x, str) or isinstance(x, int) or isinstance(x, float) for x in self.query[1:]): + # Search by date and string + self.__search_by_date_strings(self.query[0], self.query[1:]) + elif isinstance(self.query[0], datetime) and isinstance(self.query[1], datetime) and all(isinstance(x, str) or isinstance(x, int) or isinstance(x, float) for x in self.query[2:]): + # Search by date range and string + self.__search_by_date_range_strings(self.query[0], self.query[1], self.query[2:]) + + AppKit.NSRunLoop.currentRunLoop().runUntilDate_(datetime.now() + timedelta(seconds = 0.01))
+ +
[docs] def show_in_finder(self): + """Shows the search in Finder. This might not reveal the same search results. + + .. versionadded:: 0.0.9 + """ + global workspace + if workspace is None: + workspace = AppKit.NSWorkspace.sharedWorkspace() + workspace.showSearchResultsForQueryString_(str(self.query))
+ + def __search_by_strs(self, terms: tuple[str]): + expanded_terms = [x for y in terms for x in [y]*3] + format = "((kMDItemDisplayName CONTAINS %@) OR (kMDItemTextContent CONTAINS %@) OR (kMDItemFSName CONTAINS %@)) AND " * len(terms) + self.__search_with_predicate(format[:-5], *expanded_terms) + + def __search_by_date(self, date: datetime): + self.__search_with_predicate(f"((kMDItemContentCreationDate > %@) AND (kMDItemContentCreationDate < %@)) OR ((kMDItemContentModificationDate > %@) AND (kMDItemContentModificationDate < %@)) OR ((kMDItemFSCreationDate > %@) AND (kMDItemFSCreationDate < %@)) OR ((kMDItemFSContentChangeDate > %@) AND (kMDItemFSContentChangeDate < %@)) OR ((kMDItemDateAdded > %@) AND (kMDItemDateAdded < %@))", *[date - timedelta(hours=12), date + timedelta(hours=12)]*5) + + def __search_by_date_range(self, date1: datetime, date2: datetime): + self.__search_with_predicate(f"((kMDItemContentCreationDate > %@) AND (kMDItemContentCreationDate < %@)) OR ((kMDItemContentModificationDate > %@) AND (kMDItemContentModificationDate < %@)) OR ((kMDItemFSCreationDate > %@) AND (kMDItemFSCreationDate < %@)) OR ((kMDItemFSContentChangeDate > %@) AND (kMDItemFSContentChangeDate < %@)) OR ((kMDItemDateAdded > %@) AND (kMDItemDateAdded < %@))", *[date1, date2]*5) + + def __search_by_date_strings(self, date: datetime, terms: tuple[str]): + expanded_terms = [x for y in terms for x in [y]*3] + format = "((kMDItemDisplayName CONTAINS %@) OR (kMDItemTextContent CONTAINS %@) OR (kMDItemFSName CONTAINS %@)) AND " * len(terms) + format += "(((kMDItemContentCreationDate > %@) AND (kMDItemContentCreationDate < %@)) OR ((kMDItemContentModificationDate > %@) AND (kMDItemContentModificationDate < %@)) OR ((kMDItemFSCreationDate > %@) AND (kMDItemFSCreationDate < %@)) OR ((kMDItemFSContentChangeDate > %@) AND (kMDItemFSContentChangeDate < %@)) OR ((kMDItemDateAdded > %@) AND (kMDItemDateAdded < %@)))" + self.__search_with_predicate(format, *expanded_terms, *[date - timedelta(hours=12), date + timedelta(hours=12)]*5) + + def __search_by_date_range_strings(self, date1: datetime, date2: datetime, terms: tuple[str]): + expanded_terms = [x for y in terms for x in [y]*3] + format = "((kMDItemDisplayName CONTAINS %@) OR (kMDItemTextContent CONTAINS %@) OR (kMDItemFSName CONTAINS %@)) AND " * len(terms) + format += "(((kMDItemContentCreationDate > %@) AND (kMDItemContentCreationDate < %@)) OR ((kMDItemContentModificationDate > %@) AND (kMDItemContentModificationDate < %@)) OR ((kMDItemFSCreationDate > %@) AND (kMDItemFSCreationDate < %@)) OR ((kMDItemFSContentChangeDate > %@) AND (kMDItemFSContentChangeDate < %@)) OR ((kMDItemDateAdded > %@) AND (kMDItemDateAdded < %@)))" + self.__search_with_predicate(format, *expanded_terms, *[date1, date2]*5) + + def __search_with_predicate(self, predicate_format: str, *args: list[Any]): + predicate = AppKit.NSPredicate.predicateWithFormat_(predicate_format, *args) + self.query_object.setPredicate_(predicate) + self.query_object.startQuery() + + def _queryNotification_(self, notification): + if notification.name() == AppKit.NSMetadataQueryDidFinishGatheringNotification: + self.query_object.stopQuery() + results = notification.object().results() + self.__results = [XAPath(x.valueForAttribute_(AppKit.NSMetadataItemPathKey)) for x in results]
+ + + + +############ +### Text ### +############ +
[docs]class XATextDocumentList(XAList, XAClipboardCodable): + """A wrapper around lists of text documents that employs fast enumeration techniques. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XATextDocument + super().__init__(properties, obj_class, filter)
+ +
[docs] def properties(self) -> list[dict]: + ls = self.xa_elem.arrayByApplyingSelector_("properties") or [] + return [dict(x) for x in ls]
+ +
[docs] def text(self) -> 'XATextList': + ls = self.xa_elem.arrayByApplyingSelector_("text") or [] + return self._new_element(ls, XATextList)
+ +
[docs] def by_properties(self, properties: dict) -> Union['XATextDocument', None]: + return self.by_property("properties", properties)
+ +
[docs] def by_text(self, text: str) -> Union['XATextDocument', None]: + return self.by_property("text", text)
+ +
[docs] def paragraphs(self) -> 'XAParagraphList': + ls = self.xa_elem.arrayByApplyingSelector_("paragraphs") or [] + return self._new_element([plist for plist in ls], XAParagraphList)
+ +
[docs] def words(self) -> 'XAWordList': + ls = self.xa_elem.arrayByApplyingSelector_("words") or [] + return [self._new_element([plist for plist in ls], XAWordList)]
+ +
[docs] def characters(self) -> 'XACharacterList': + ls = self.xa_elem.arrayByApplyingSelector_("characters") or [] + return [self._new_element([plist for plist in ls], XACharacterList)]
+ +
[docs] def attribute_runs(self) -> 'XAAttributeRunList': + ls = self.xa_elem.arrayByApplyingSelector_("attributeRuns") or [] + return [self._new_element([plist for plist in ls], XAAttributeRunList)]
+ +
[docs] def attachments(self) -> 'XAAttachmentList': + ls = self.xa_elem.arrayByApplyingSelector_("attachments") or [] + return [self._new_element([plist for plist in ls], XAAttachmentList)]
+ +
[docs] def get_clipboard_representation(self) -> list[Union[str, 'AppKit.NSURL']]: + """Gets a clipboard-codable representation of each document in the list. + + When the clipboard content is set to a list of documents, each documents's file URL and name are added to the clipboard. + + :return: A list of each document's file URL and name + :rtype: list[Union[str, AppKit.NSURL]] + + .. versionadded:: 0.0.8 + """ + return [str(x) for x in self.text()]
+ +
[docs] def __repr__(self): + return "<" + str(type(self)) + str(self.text()) + ">"
+ +
[docs]class XATextDocument(XAObject): + """A class for managing and interacting with text documents. + + .. versionadded:: 0.0.1 + """ +
[docs] def __init__(self, properties): + super().__init__(properties)
+ + @property + def text(self) -> 'XAText': + """The text of the document. + """ + return self._new_element(self.xa_elem.text(), XAText) + + @text.setter + def text(self, text: Union[str, 'XAText']): + if isinstance(text, XAText): + text = text.xa_elem + self.set_property("text", text) + +
[docs] def prepend(self, text: str) -> 'XATextDocument': + """Inserts the provided text at the beginning of the document. + + :param text: The text to insert. + :type text: str + :return: A reference to the document object. + :rtype: XATextDocument + + .. seealso:: :func:`append`, :func:`set_text` + + .. versionadded:: 0.0.1 + """ + old_text = str(self.text) + self.set_property("text", text + old_text) + return self
+ +
[docs] def append(self, text: str) -> 'XATextDocument': + """Appends the provided text to the end of the document. + + :param text: The text to append. + :type text: str + :return: A reference to the document object. + :rtype: XATextDocument + + .. seealso:: :func:`prepend`, :func:`set_text` + + .. versionadded:: 0.0.1 + """ + old_text = str(self.text) + self.set_property("text", old_text + text) + return self
+ +
[docs] def reverse(self) -> 'XATextDocument': + """Reverses the text of the document. + + :return: A reference to the document object. + :rtype: XATextDocument + + .. versionadded:: 0.0.4 + """ + self.set_property("text", reversed(str(self.text))) + return self
+ +
[docs] def paragraphs(self, filter: dict = None) -> 'XAParagraphList': + return self.text.paragraphs(filter)
+ +
[docs] def sentences(self, filter: dict = None) -> 'XASentenceList': + return self.text.sentences(filter)
+ +
[docs] def words(self, filter: dict = None) -> 'XAWordList': + return self.text.words(filter)
+ +
[docs] def characters(self, filter: dict = None) -> 'XACharacterList': + return self.text.characters(filter)
+ +
[docs] def attribute_runs(self, filter: dict = None) -> 'XAAttributeRunList': + return self.text.attribute_runs(filter)
+ +
[docs] def attachments(self, filter: dict = None) -> 'XAAttachmentList': + return self.text.attachments(filter)
+ + + + +
[docs]class XATextList(XAList): + """A wrapper around lists of text objects that employs fast enumeration techniques. + + .. versionadded:: 0.0.4 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAText + super().__init__(properties, obj_class, filter)
+ +
[docs] def paragraphs(self, filter: dict = None) -> 'XAParagraphList': + ls = [] + if hasattr(self.xa_elem, "get"): + ls = self.xa_elem.arrayByApplyingSelector_("paragraphs") or [] + else: + ls = [x.xa_elem.split("\n") for x in self] + ls = [paragraph for paragraphlist in ls for paragraph in paragraphlist if paragraph.strip() != ''] + return self._new_element(ls, XAParagraphList, filter)
+ +
[docs] def sentences(self) -> 'XASentenceList': + ls = [x.sentences() for x in self] + ls = [sentence for sentencelist in ls for sentence in sentencelist] + return self._new_element(ls, XASentenceList)
+ +
[docs] def words(self, filter: dict = None) -> 'XAWordList': + ls = [] + if hasattr(self.xa_elem, "get"): + ls = self.xa_elem.arrayByApplyingSelector_("words") or [] + else: + ls = [x.xa_elem.split() for x in self] + ls = [word for wordlist in ls for word in wordlist] + return self._new_element(ls, XAWordList, filter)
+ +
[docs] def characters(self, filter: dict = None) -> 'XACharacterList': + ls = [] + if hasattr(self.xa_elem, "get"): + ls = self.xa_elem.arrayByApplyingSelector_("characters") or [] + else: + ls = [list(x.xa_elem) for x in self] + ls = [character for characterlist in ls for character in characterlist] + return self._new_element(ls, XACharacterList, filter)
+ +
[docs] def attribute_runs(self, filter: dict = None) -> 'XAAttributeRunList': + ls = [] + if hasattr(self.xa_elem, "get"): + ls = self.xa_elem.arrayByApplyingSelector_("attributeRuns") or [] + ls = [attribute_run for attribute_run_list in ls for attribute_run in attribute_run_list] + return self._new_element(ls, XAAttributeRunList, filter)
+ +
[docs] def attachments(self, filter: dict = None) -> 'XAAttachmentList': + ls = [] + if hasattr(self.xa_elem, "get"): + ls = self.xa_elem.arrayByApplyingSelector_("attachments") or [] + ls = [attachment for attachment_list in ls for attachment in attachment_list] + return self._new_element(ls, XAAttachmentList, filter)
+ +
[docs] def __repr__(self): + try: + if isinstance(self.xa_elem[0], ScriptingBridge.SBObject): + # List items will not resolved to text upon dereferencing the list; need to resolve items individually + count = self.xa_elem.count() + if count <= 500: + # Too many unresolved pointers, save time by just reporting the length + return "<" + str(type(self)) + str([x.get() for x in self.xa_elem]) + ">" + return "<" + str(type(self)) + "length: " + str(self.xa_elem.count()) + ">" + + # List items will resolve to text upon dereferencing the list + return "<" + str(type(self)) + str(self.xa_elem.get()) + ">" + except: + return "<" + str(type(self)) + str(list(self.xa_elem)) + ">"
+ +
[docs]class XAText(XAObject): + """A class for managing and interacting with the text of documents. + + .. versionadded:: 0.0.1 + """ +
[docs] def __init__(self, properties): + if isinstance(properties, dict): + super().__init__(properties) + elif isinstance(properties, str): + super().__init__({"element": properties}) + + self.text: str #: The plaintext contents of the rich text + self.color: XAColor #: The color of the first character + self.font: str #: The name of the font of the first character + self.size: int #: The size in points of the first character
+ + @property + def text(self) -> str: + if isinstance(self.xa_elem, str): + return self.xa_elem + else: + return self.xa_elem.text() + + @text.setter + def text(self, text: str): + if isinstance(self.xa_elem, str): + self.xa_elem = text + else: + self.set_property("text", text) + + @property + def color(self) -> 'XAColor': + if isinstance(self.xa_elem, str): + return None + else: + return XAColor(self.xa_elem.color()) + + @color.setter + def color(self, color: 'XAColor'): + if isinstance(self.xa_elem, str): + self.color = color.xa_elem + else: + self.set_property("color", color.xa_elem) + + @property + def font(self) -> str: + if isinstance(self.xa_elem, str): + return None + else: + return self.xa_elem.font() + + @font.setter + def font(self, font: str): + if isinstance(self.xa_elem, str): + self.font = font + else: + self.set_property("font", font) + + @property + def size(self) -> int: + if isinstance(self.xa_elem, str): + return 0 + else: + return self.xa_elem.size() + + @size.setter + def size(self, size: int): + if isinstance(self.xa_elem, str): + self.size = size + else: + self.set_property("size", size) + +
[docs] def tag_parts_of_speech(self, unit: Literal["word", "sentence", "paragraph", "document"] = "word") -> list[tuple[str, str]]: + """Tags each word of the text with its associated part of speech. + + :param unit: The grammatical unit to divide the text into for tagging, defaults to "word" + :type unit: Literal["word", "sentence", "paragraph", "document"] + :return: A list of tuples identifying each word of the text and its part of speech + :rtype: list[tuple[str, str]] + + :Example 1: Extract nouns from a text + + >>> import PyXA + >>> text = PyXA.XAText("Here’s to the crazy ones. The misfits. The rebels.") + >>> nouns = [pos[0] for pos in text.tag_parts_of_speech() if pos[1] == "Noun"] + >>> print(nouns) + ['ones', 'misfits', 'rebels'] + + .. versionadded:: 0.1.0 + """ + import NaturalLanguage + tagger = NaturalLanguage.NLTagger.alloc().initWithTagSchemes_([NaturalLanguage.NLTagSchemeLexicalClass]) + tagger.setString_(str(self.xa_elem)) + + if unit == "word": + unit = NaturalLanguage.NLTokenUnitWord + elif unit == "sentence": + unit = NaturalLanguage.NLTokenUnitSentence + elif unit == "paragraph": + unit = NaturalLanguage.NLTokenUnitParagraph + elif unit == "document": + unit = NaturalLanguage.NLTokenUnitDocument + + tagged_pos = [] + def apply_tags(tag, token_range, error): + word_phrase = str(self.xa_elem)[token_range.location:token_range.location + token_range.length] + tagged_pos.append((word_phrase, tag)) + + tagger.enumerateTagsInRange_unit_scheme_options_usingBlock_((0, len(str(self.xa_elem))), unit, NaturalLanguage.NLTagSchemeLexicalClass, NaturalLanguage.NLTaggerOmitPunctuation | NaturalLanguage.NLTaggerOmitWhitespace, apply_tags) + return tagged_pos
+ +
[docs] def tag_languages(self, unit: Literal["word", "sentence", "paragraph", "document"] = "paragraph") -> list[tuple[str, str]]: + """Tags each paragraph of the text with its language. + + :param unit: The grammatical unit to divide the text into for tagging, defaults to "paragraph" + :type unit: Literal["word", "sentence", "paragraph", "document"] + :return: A list of tuples identifying each paragraph of the text and its language + :rtype: list[tuple[str, str]] + + :Example: + + >>> import PyXA + >>> text = PyXA.XAText("This is English.\\nQuesto è Italiano.\\nDas ist deutsch.\\nこれは日本語です。") + >>> print(text.tag_languages()) + [('This is English.\\n', 'en'), ('Questo è Italiano.\\n', 'it'), ('Das ist deutsch.\\n', 'de'), ('これは日本語です。', 'ja')] + + .. versionadded:: 0.1.0 + """ + import NaturalLanguage + tagger = NaturalLanguage.NLTagger.alloc().initWithTagSchemes_([NaturalLanguage.NLTagSchemeLanguage]) + tagger.setString_(str(self.xa_elem)) + + if unit == "word": + unit = NaturalLanguage.NLTokenUnitWord + elif unit == "sentence": + unit = NaturalLanguage.NLTokenUnitSentence + elif unit == "paragraph": + unit = NaturalLanguage.NLTokenUnitParagraph + elif unit == "document": + unit = NaturalLanguage.NLTokenUnitDocument + + tagged_languages = [] + def apply_tags(tag, token_range, error): + paragraph = str(self.xa_elem)[token_range.location:token_range.location + token_range.length] + if paragraph.strip() != "": + tagged_languages.append((paragraph, tag)) + + tagger.enumerateTagsInRange_unit_scheme_options_usingBlock_((0, len(str(self.xa_elem))), unit, NaturalLanguage.NLTagSchemeLanguage, NaturalLanguage.NLTaggerOmitPunctuation | NaturalLanguage.NLTaggerOmitWhitespace, apply_tags) + return tagged_languages
+ +
[docs] def tag_entities(self, unit: Literal["word", "sentence", "paragraph", "document"] = "word") -> list[tuple[str, str]]: + """Tags each word of the text with either the category of entity it represents (i.e. person, place, or organization) or its part of speech. + + :param unit: The grammatical unit to divide the text into for tagging, defaults to "word" + :type unit: Literal["word", "sentence", "paragraph", "document"] + :return: A list of tuples identifying each word of the text and its entity category or part of speech + :rtype: list[tuple[str, str]] + + :Example: + + >>> import PyXA + >>> text = PyXA.XAText("Tim Cook is the CEO of Apple.") + >>> print(text.tag_entities()) + [('Tim', 'PersonalName'), ('Cook', 'PersonalName'), ('is', 'Verb'), ('the', 'Determiner'), ('CEO', 'Noun'), ('of', 'Preposition'), ('Apple', 'OrganizationName')] + + .. versionadded:: 0.1.0 + """ + import NaturalLanguage + tagger = NaturalLanguage.NLTagger.alloc().initWithTagSchemes_([NaturalLanguage.NLTagSchemeNameTypeOrLexicalClass]) + tagger.setString_(str(self.xa_elem)) + + if unit == "word": + unit = NaturalLanguage.NLTokenUnitWord + elif unit == "sentence": + unit = NaturalLanguage.NLTokenUnitSentence + elif unit == "paragraph": + unit = NaturalLanguage.NLTokenUnitParagraph + elif unit == "document": + unit = NaturalLanguage.NLTokenUnitDocument + + tagged_languages = [] + def apply_tags(tag, token_range, error): + word_phrase = str(self.xa_elem)[token_range.location:token_range.location + token_range.length] + if word_phrase.strip() != "": + tagged_languages.append((word_phrase, tag)) + + tagger.enumerateTagsInRange_unit_scheme_options_usingBlock_((0, len(str(self.xa_elem))), unit, NaturalLanguage.NLTagSchemeNameTypeOrLexicalClass, NaturalLanguage.NLTaggerOmitPunctuation | NaturalLanguage.NLTaggerOmitWhitespace, apply_tags) + return tagged_languages
+ +
[docs] def tag_lemmas(self, unit: Literal["word", "sentence", "paragraph", "document"] = "word") -> list[tuple[str, str]]: + """Tags each word of the text with its stem word. + + :param unit: The grammatical unit to divide the text into for tagging, defaults to "word" + :type unit: Literal["word", "sentence", "paragraph", "document"] + :return: A list of tuples identifying each word of the text and its stem words + :rtype: list[tuple[str, str]] + + :Example 1: Lemmatize each word in a text + + >>> import PyXA + >>> text = PyXA.XAText("Here’s to the crazy ones. The misfits. The rebels.") + >>> print(text.tag_lemmas()) + [('Here’s', 'here'), ('to', 'to'), ('the', 'the'), ('crazy', 'crazy'), ('ones', 'one'), ('The', 'the'), ('misfits', 'misfit'), ('The', 'the'), ('rebels', 'rebel')] + + :Example 2: Combine parts of speech tagging and lemmatization + + >>> import PyXA + >>> text = PyXA.XAText("The quick brown fox tries to jump over the sleeping lazy dog.") + >>> verbs = [pos[0] for pos in text.tag_parts_of_speech() if pos[1] == "Verb"] + >>> for index, verb in enumerate(verbs): + >>> print(index, PyXA.XAText(verb).tag_lemmas()) + 0 [('tries', 'try')] + 1 [('jump', 'jump')] + 2 [('sleeping', 'sleep')] + + .. versionadded:: 0.1.0 + """ + import NaturalLanguage + tagger = NaturalLanguage.NLTagger.alloc().initWithTagSchemes_([NaturalLanguage.NLTagSchemeLemma]) + tagger.setString_(str(self.xa_elem)) + + if unit == "word": + unit = NaturalLanguage.NLTokenUnitWord + elif unit == "sentence": + unit = NaturalLanguage.NLTokenUnitSentence + elif unit == "paragraph": + unit = NaturalLanguage.NLTokenUnitParagraph + elif unit == "document": + unit = NaturalLanguage.NLTokenUnitDocument + + tagged_lemmas = [] + def apply_tags(tag, token_range, error): + word_phrase = str(self.xa_elem)[token_range.location:token_range.location + token_range.length] + if word_phrase.strip() != "": + tagged_lemmas.append((word_phrase, tag)) + + tagger.enumerateTagsInRange_unit_scheme_options_usingBlock_((0, len(str(self.xa_elem))), unit, NaturalLanguage.NLTagSchemeLemma, NaturalLanguage.NLTaggerOmitPunctuation | NaturalLanguage.NLTaggerOmitWhitespace | NaturalLanguage.NLTaggerJoinContractions, apply_tags) + return tagged_lemmas
+ +
[docs] def tag_sentiments(self, sentiment_scale: list[str] = None, unit: Literal["word", "sentence", "paragraph", "document"] = "paragraph") -> list[tuple[str, str]]: + """Tags each paragraph of the text with a sentiment rating. + + :param sentiment_scale: A list of terms establishing a range of sentiments from most negative to most postive + :type sentiment_scale: list[str] + :param unit: The grammatical unit to divide the text into for tagging, defaults to "paragraph" + :type unit: Literal["word", "sentence", "paragraph", "document"] + :return: A list of tuples identifying each paragraph of the text and its sentiment rating + :rtype: list[tuple[str, str]] + + :Example 1: Assess the sentiment of a string + + >>> import PyXA + >>> text = PyXA.XAText("This sucks.\\nBut this is great!") + >>> print(text.tag_sentiments()) + [('This sucks.\\n', 'Negative'), ('But this is great!', 'Positive')] + + :Example 2: Use a custom sentiment scale + + >>> import PyXA + >>> text = PyXA.XAText("This sucks.\\nBut this is good!\\nAnd this is great!") + >>> print(text.tag_sentiments(sentiment_scale=["Very Negative", "Negative", "Somewhat Negative", "Neutral", "Somewhat Positive", "Positive", "Very Positive"])) + [('This sucks.\\n', 'Very Negative'), ('But this is good!\\n', 'Neutral'), ('And this is great!', 'Very Positive')] + + :Example 3: Use other tag units + + >>> import PyXA + >>> text = PyXA.XAText("This sucks.\\nBut this is good!\\nAnd this is great!") + >>> print(1, text.tag_sentiments()) + >>> print(2, text.tag_sentiments(unit="word")) + >>> print(3, text.tag_sentiments(unit="document")) + 1 [('This sucks.\\n', 'Negative'), ('But this is good!\\n', 'Neutral'), ('And this is great!', 'Positive')] + 2 [('This', 'Negative'), ('sucks', 'Negative'), ('.', 'Negative'), ('But', 'Neutral'), ('this', 'Neutral'), ('is', 'Neutral'), ('good', 'Neutral'), ('!', 'Neutral'), ('And', 'Positive'), ('this', 'Positive'), ('is', 'Positive'), ('great', 'Positive'), ('!', 'Positive')] + 3 [('This sucks.\\nBut this is good!\\nAnd this is great!', 'Neutral')] + + .. versionadded:: 0.1.0 + """ + import NaturalLanguage + if sentiment_scale is None or len(sentiment_scale) == 0: + sentiment_scale = ["Negative", "Neutral", "Positive"] + + if unit == "word": + unit = NaturalLanguage.NLTokenUnitWord + elif unit == "sentence": + unit = NaturalLanguage.NLTokenUnitSentence + elif unit == "paragraph": + unit = NaturalLanguage.NLTokenUnitParagraph + elif unit == "document": + unit = NaturalLanguage.NLTokenUnitDocument + + tagger = NaturalLanguage.NLTagger.alloc().initWithTagSchemes_([NaturalLanguage.NLTagSchemeSentimentScore]) + tagger.setString_(str(self.xa_elem)) + + tagged_sentiments = [] + def apply_tags(tag, token_range, error): + paragraph = str(self.xa_elem)[token_range.location:token_range.location + token_range.length] + if paragraph.strip() != "": + # Map raw tag value to range length + raw_value = float(tag or 0) + scaled = (raw_value + 1.0) / 2.0 * (len(sentiment_scale) - 1) + + label = sentiment_scale[int(scaled)] + tagged_sentiments.append((paragraph, label)) + + tagger.enumerateTagsInRange_unit_scheme_options_usingBlock_((0, len(self.xa_elem)), unit, NaturalLanguage.NLTagSchemeSentimentScore, 0, apply_tags) + return tagged_sentiments
+ +
[docs] def paragraphs(self, filter: dict = None) -> 'XAParagraphList': + """Gets a list of paragraphs in the text. + + :param filter: The properties and associated values to filter paragraphs by, defaults to None + :type filter: dict, optional + :return: The list of paragraphs + :rtype: XAParagraphList + + :Example 1: Get paragraphs of a text string + + >>> import PyXA + >>> string = \"\"\"This is the first paragraph. + >>> + >>> This is the second paragraph.\"\"\" + >>> text = PyXA.XAText(string) + >>> print(text.paragraphs()) + <<class 'PyXA.XAWordList'>['This is the first paragraph.', 'This is the second paragraph. Neat! Very cool.']> + + :Example 2: Get paragraphs of a Note + + >>> import PyXA + >>> app = PyXA.Application("Notes") + >>> note = app.notes()[0] + >>> text = PyXA.XAText(note.plaintext) + >>> print(text.paragraphs()) + <<class 'PyXA.XAWordList'>['This is the first paragraph.', 'This is the second paragraph. Neat! Very cool.']> + + .. versionadded:: 0.0.1 + """ + if isinstance(self.xa_elem, str): + ls = [x for x in self.xa_elem.split("\n") if x.strip() != ''] + return self._new_element(ls, XAWordList, filter) + else: + return self._new_element(self.xa_elem.paragraphs(), XAParagraphList, filter)
+ +
[docs] def sentences(self) -> 'XASentenceList': + """Gets a list of sentences in the text. + + :return: The list of sentencnes + :rtype: XASentenceList + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Notes") + >>> note = app.notes()[0] + >>> text = PyXA.XAText(note.plaintext) + >>> print(text.sentences()) + <<class 'PyXA.XASentenceList'>['This is the first paragraph.\\n', '\\n', 'This is the second paragraph. ', 'Neat! ', 'Very cool.']> + + .. versionadded:: 0.1.0 + """ + raw_string = self.xa_elem + if hasattr(self.xa_elem, "get"): + raw_string = self.xa_elem.get() + + sentences = [] + tokenizer = AppKit.NLTokenizer.alloc().initWithUnit_(AppKit.kCFStringTokenizerUnitSentence) + tokenizer.setString_(raw_string) + for char_range in tokenizer.tokensForRange_((0, len(raw_string))): + start = char_range.rangeValue().location + end = start + char_range.rangeValue().length + sentences.append(raw_string[start:end]) + + ls = AppKit.NSArray.alloc().initWithArray_(sentences) + return self._new_element(sentences, XASentenceList)
+ +
[docs] def words(self, filter: dict = None) -> 'XAWordList': + """Gets a list of words in the text. + + :return: The list of words + :rtype: XAWordList + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Notes") + >>> note = app.notes()[0] + >>> text = PyXA.XAText(note.plaintext) + >>> print(text.words()) + <<class 'PyXA.XAWordList'>['This', 'is', 'the', 'first', 'paragraph.', 'This', 'is', 'the', 'second', 'paragraph.', 'Neat!', 'Very', 'cool.']> + + .. versionadded:: 0.0.1 + """ + if isinstance(self.xa_elem, str): + ls = self.xa_elem.split() + return self._new_element(ls, XAWordList, filter) + else: + return self._new_element(self.xa_elem.words(), XAWordList, filter)
+ +
[docs] def characters(self, filter: dict = None) -> 'XACharacterList': + """Gets a list of characters in the text. + + :return: The list of characters + :rtype: XACharacterList + + :Example 1: Get all characters in a text + + >>> import PyXA + >>> app = PyXA.Application("Notes") + >>> note = app.notes()[0] + >>> text = PyXA.XAText(note.plaintext) + >>> print(text.characters()) + <<class 'PyXA.XACharacterList'>['T', 'h', 'i', 's', ' ', 'i', 's', ' ', 't', 'h', 'e', ' ', 'f', 'i', 'r', 's', 't', ' ', 'p', 'a', 'r', 'a', 'g', 'r', 'a', 'p', 'h', '.', '\\n', '\\n', 'T', 'h', 'i', 's', ' ', 'i', 's', ' ', 't', 'h', 'e', ' ', 's', 'e', 'c', 'o', 'n', 'd', ' ', 'p', 'a', 'r', 'a', 'g', 'r', 'a', 'p', 'h', '.', ' ', 'N', 'e', 'a', 't', '!', ' ', 'V', 'e', 'r', 'y', ' ', 'c', 'o', 'o', 'l', '.']> + + :Example 2: Get the characters of the first word in a text + + >>> import PyXA + >>> app = PyXA.Application("Notes") + >>> note = app.notes()[0] + >>> text = PyXA.XAText(note.plaintext) + >>> print(text.words()[0].characters()) + <<class 'PyXA.XACharacterList'>['T', 'h', 'i', 's']> + + .. versionadded:: 0.0.1 + """ + if isinstance(self.xa_elem, str): + ls = list(self.xa_elem) + return self._new_element(ls, XACharacterList, filter) + else: + return self._new_element(self.xa_elem.characters().get(), XACharacterList, filter)
+ +
[docs] def attribute_runs(self, filter: dict = None) -> 'XAAttributeRunList': + """Gets a list of attribute runs in the text. For formatted text, this returns all sequences of characters sharing the same attributes. + + :param filter: The properties and associated values to filter attribute runs by, defaults to None + :type filter: dict, optional + :return: The list of attribute runs + :rtype: XAAttributeRunList + + .. versionadded:: 0.0.1 + """ + if isinstance(self.xa_elem, str): + return [] + else: + return self._new_element(self.xa_elem.attributeRuns(), XAAttributeRunList, filter)
+ +
[docs] def attachments(self, filter: dict = None) -> 'XAAttachmentList': + """Gets a list of attachments of the text. + + :param filter: The properties and associated values to filter attachments by, defaults to None + :type filter: dict, optional + :return: The list of attachments + :rtype: XAAttachmentList + + .. versionadded:: 0.0.1 + """ + if isinstance(self.xa_elem, str): + return [] + else: + return self._new_element(self.xa_elem.attachments(), XAAttachmentList, filter)
+ +
[docs] def __len__(self): + return len(self.xa_elem.get())
+ +
[docs] def __str__(self): + if isinstance(self.xa_elem, str): + return self.xa_elem + return str(self.xa_elem.get())
+ +
[docs] def __repr__(self): + if isinstance(self.xa_elem, str): + return self.xa_elem + return str(self.xa_elem.get())
+ + + + +
[docs]class XAParagraphList(XATextList): + """A wrapper around lists of paragraphs that employs fast enumeration techniques. + + .. versionadded:: 0.0.5 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAParagraph)
+ +
[docs]class XAParagraph(XAText): + """A class for managing and interacting with paragraphs in text documents. + + .. versionadded:: 0.0.1 + """ +
[docs] def __init__(self, properties): + super().__init__(properties)
+ + + +
[docs]class XASentenceList(XATextList): + """A wrapper around lists of sentences that employs fast enumeration techniques. + + .. versionadded:: 0.0.5 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASentence)
+ +
[docs]class XASentence(XAText): + """A class for managing and interacting with sentences in text documents. + + .. versionadded:: 0.0.1 + """ +
[docs] def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAWordList(XATextList): + """A wrapper around lists of words that employs fast enumeration techniques. + + .. versionadded:: 0.0.5 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAWord)
+ +
[docs]class XAWord(XAText): + """A class for managing and interacting with words in text documents. + + .. versionadded:: 0.0.1 + """ +
[docs] def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XACharacterList(XATextList): + """A wrapper around lists of characters that employs fast enumeration techniques. + + .. versionadded:: 0.0.5 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XACharacter)
+ +
[docs]class XACharacter(XAText): + """A class for managing and interacting with characters in text documents. + + .. versionadded:: 0.0.1 + """ +
[docs] def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAAttributeRunList(XATextList): + """A wrapper around lists of attribute runs that employs fast enumeration techniques. + + .. versionadded:: 0.0.5 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAAttributeRun)
+ +
[docs]class XAAttributeRun(XAText): + """A class for managing and interacting with attribute runs in text documents. + + .. versionadded:: 0.0.1 + """ +
[docs] def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAAttachmentList(XATextList): + """A wrapper around lists of text attachments that employs fast enumeration techniques. + + .. versionadded:: 0.0.5 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAAttachment)
+ +
[docs]class XAAttachment(XAObject): + """A class for managing and interacting with attachments in text documents. + + .. versionadded:: 0.0.1 + """ +
[docs] def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAColorList(XATextList): + """A wrapper around lists of colors that employs fast enumeration techniques. + + .. versionadded:: 0.0.6 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAColor, filter)
+ +
[docs]class XAColor(XAObject, XAClipboardCodable): +
[docs] def __init__(self, *args): + if len(args) == 0: + # No color specified -- default to white + self.xa_elem = XAColor.white_color().xa_elem + elif len(args) == 1 and isinstance(args[0], AppKit.NSColor): + # Initialize copy of non-mutable NSColor object + self.copy_color(args[0]) + elif len(args) == 1 and isinstance(args[0], XAColor): + # Initialize copy of another XAColor object + self.copy_color(args[0].xa_elem) + else: + # Initialize from provided RGBA values + red = args[0] if len(args) >= 0 else 255 + green = args[1] if len(args) >= 1 else 255 + blue = args[2] if len(args) >= 3 else 255 + alpha = args[3] if len(args) == 4 else 1.0 + self.xa_elem = AppKit.NSCalibratedRGBColor.alloc().initWithRed_green_blue_alpha_(red, green, blue, alpha)
+ +
[docs] def red() -> 'XAColor': + """Initializes and returns a pure red :class:`XAColor` object. + + .. versionadded:: 0.1.0 + """ + return XAColor(65535, 0, 0)
+ +
[docs] def orange() -> 'XAColor': + """Initializes and returns an :class:`XAColor` object whose RGB values are (1.0, 0.5, 0.0). + + .. versionadded:: 0.1.0 + """ + return XAColor(AppKit.NSColor.orangeColor())
+ +
[docs] def yellow() -> 'XAColor': + """Initializes and returns an :class:`XAColor` object whose RGB values are (1.0, 1.0, 0.0). + + .. versionadded:: 0.1.0 + """ + return XAColor(AppKit.NSColor.yellowColor())
+ +
[docs] def green() -> 'XAColor': + """Initializes and returns a pure green :class:`XAColor` object. + + .. versionadded:: 0.1.0 + """ + return XAColor(0, 65535, 0)
+ +
[docs] def cyan() -> 'XAColor': + """Initializes and returns an :class:`XAColor` object whose RGB values are (0.0, 1.0, 1.0). + + .. versionadded:: 0.1.0 + """ + return XAColor(AppKit.NSColor.cyanColor())
+ +
[docs] def blue() -> 'XAColor': + """Initializes and returns a pure blue :class:`XAColor` object. + + .. versionadded:: 0.1.0 + """ + return XAColor(0, 0, 65535)
+ +
[docs] def magenta() -> 'XAColor': + """Initializes and returns an :class:`XAColor` object whose RGB values are (1.0, 0.0, 1.0). + + .. versionadded:: 0.1.0 + """ + return XAColor(AppKit.NSColor.magentaColor())
+ +
[docs] def purple() -> 'XAColor': + """Initializes and returns an :class:`XAColor` object whose RGB values are (0.5, 0.0, 0.5). + + .. versionadded:: 0.1.0 + """ + return XAColor(AppKit.NSColor.purpleColor())
+ +
[docs] def brown() -> 'XAColor': + """Initializes and returns an :class:`XAColor` object whose RGB values are (0.6, 0.4, 0.2). + + .. versionadded:: 0.1.0 + """ + return XAColor(AppKit.NSColor.brownColor())
+ +
[docs] def white() -> 'XAColor': + """Initializes and returns a pure white :class:`XAColor` object. + + .. versionadded:: 0.1.0 + """ + return XAColor(65535, 65535, 65535)
+ +
[docs] def gray() -> 'XAColor': + """Initializes and returns an :class:`XAColor` object whose RGB values are (0.5, 0.5, 0.5). + + .. versionadded:: 0.1.0 + """ + return XAColor(0.5, 0.5, 0.5)
+ +
[docs] def black() -> 'XAColor': + """Initializes and returns a pure black :class:`XAColor` object. + + .. versionadded:: 0.1.0 + """ + return XAColor(0, 0, 0)
+ +
[docs] def clear() -> 'XAColor': + """Initializes and returns a an :class:`XAColor` object whose alpha value is 0.0. + + .. versionadded:: 0.1.0 + """ + return XAColor(0, 0, 0, 0)
+ + @property + def hex_value(self) -> str: + """The HEX representation of the color. + + .. versionadded:: 0.1.1 + """ + return f"{hex(int(self.red_value * 255))[2:]}{hex(int(self.green_value * 255))[2:]}{hex(int(self.blue_value * 255))[2:]}".upper() + + @property + def red_value(self) -> float: + """The red value of the color on the scale of 0.0 to 1.0. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.redComponent() + + @red_value.setter + def red_value(self, red_value: float): + self.xa_elem = AppKit.NSCalibratedRGBColor.alloc().initWithRed_green_blue_alpha_(red_value, self.green_value, self.blue_value, self.alpha_value) + + @property + def green_value(self) -> float: + """The green value of the color on the scale of 0.0 to 1.0. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.greenComponent() + + @green_value.setter + def green_value(self, green_value: float): + self.xa_elem = AppKit.NSCalibratedRGBColor.alloc().initWithRed_green_blue_alpha_(self.red_value, green_value, self.blue_value, self.alpha_value) + + @property + def blue_value(self) -> float: + """The blue value of the color on the scale of 0.0 to 1.0. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.blueComponent() + + @blue_value.setter + def blue_value(self, blue_value: float): + self.xa_elem = AppKit.NSCalibratedRGBColor.alloc().initWithRed_green_blue_alpha_(self.red_value, self.green_value, blue_value, self.alpha_value) + + @property + def alpha_value(self) -> float: + """The alpha value of the color on the scale of 0.0 to 1.0. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.alphaComponent() + + @alpha_value.setter + def alpha_value(self, alpha_value: float): + self.xa_elem = AppKit.NSCalibratedRGBColor.alloc().initWithRed_green_blue_alpha_(self.red_value, self.green_value, self.blue_value, alpha_value) + + @property + def hue_value(self): + """The hue value of the color on the scale of 0.0 to 1.0. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.hueComponent() + + @hue_value.setter + def hue_value(self, hue_value: float): + self.xa_elem = AppKit.NSCalibratedRGBColor.initWithHue_saturation_brightness_alpha_(hue_value, self.saturation_value, self.brightness_value, self.alpha_value) + + @property + def saturation_value(self): + """The staturation value of the color on the scale of 0.0 to 1.0. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.saturationComponent() + + @saturation_value.setter + def saturation_value(self, saturation_value: float): + self.xa_elem = AppKit.NSCalibratedRGBColor.initWithHue_saturation_brightness_alpha_(self.hue_value, saturation_value, self.brightness_value, self.alpha_value) + + @property + def brightness_value(self): + """The brightness value of the color on the scale of 0.0 to 1.0. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.brightnessComponent() + + @brightness_value.setter + def brightness_value(self, brightness_value: float): + self.xa_elem = AppKit.NSCalibratedRGBColor.initWithHue_saturation_brightness_alpha_(self.hue_value, self.saturation_value, brightness_value, self.alpha_value) + +
[docs] def copy_color(self, color: 'AppKit.NSColor') -> 'XAColor': + """Initializes a XAColor copy of an NSColor object. + + :param color: The NSColor to copy + :type color: AppKit.NSColor + :return: The newly created XAColor object + :rtype: XAColor + + .. versionadded:: 0.1.0 + """ + self.xa_elem = AppKit.NSCalibratedRGBColor.alloc().initWithRed_green_blue_alpha_( + color.redComponent(), + color.greenComponent(), + color.blueComponent(), + color.alphaComponent() + ) + return self
+ +
[docs] def set_rgba(self, red: float, green: float, blue: float, alpha: float) -> 'XAColor': + """Sets the RGBA values of the color. + + :param red: The red value of the color, from 0.0 to 1.0 + :type red: float + :param green: The green value of the color, from 0.0 to 1.0 + :type green: float + :param blue: The blue value of the color, from 0.0 to 1.0 + :type blue: float + :param alpha: The opacity of the color, from 0.0 to 1.0 + :type alpha: float + :return: The XAColor object + :rtype: XAColor + + .. versionadded:: 0.1.0 + """ + self.xa_elem = AppKit.NSCalibratedRGBColor.alloc().initWithRed_green_blue_alpha_(red, green, blue, alpha) + return self
+ +
[docs] def set_hsla(self, hue: float, saturation: float, brightness: float, alpha: float) -> 'XAColor': + """Sets the HSLA values of the color. + + :param hue: The hue value of the color, from 0.0 to 1.0 + :type hue: float + :param saturation: The saturation value of the color, from 0.0 to 1.0 + :type saturation: float + :param brightness: The brightness value of the color, from 0.0 to 1.0 + :type brightness: float + :param alpha: The opacity of the color, from 0.0 to 1.0 + :type alpha: float + :return: The XAColor object + :rtype: XAColor + + .. versionadded:: 0.1.0 + """ + self.xa_elem = AppKit.NSCalibratedRGBColor.initWithHue_saturation_brightness_alpha_(hue, saturation, brightness, alpha) + return self
+ +
[docs] def mix_with(self, color: 'XAColor', fraction: int = 0.5) -> 'XAColor': + """Blends this color with the specified fraction of another. + + :param color: The color to blend this color with + :type color: XAColor + :param fraction: The fraction of the other color to mix into this color, from 0.0 to 1.0, defaults to 0.5 + :type fraction: int, optional + :return: The resulting color after mixing + :rtype: XAColor + + .. versionadded:: 0.1.0 + """ + new_color = self.xa_elem.blendedColorWithFraction_ofColor_(fraction, color.xa_elem) + return XAColor(new_color.redComponent(), new_color.greenComponent(), new_color.blueComponent(), new_color.alphaComponent())
+ +
[docs] def brighten(self, fraction: float = 0.5) -> 'XAColor': + """Brightens the color by mixing the specified fraction of the system white color into it. + + :param fraction: The amount (fraction) of white to mix into the color, defaults to 0.5 + :type fraction: float, optional + :return: The resulting color after brightening + :rtype: XAColor + + .. versionadded:: 0.1.0 + """ + self.xa_elem = self.xa_elem.highlightWithLevel_(fraction) + return self
+ +
[docs] def darken(self, fraction: float = 0.5) -> 'XAColor': + """Darkens the color by mixing the specified fraction of the system black color into it. + + :param fraction: The amount (fraction) of black to mix into the color, defaults to 0.5 + :type fraction: float, optional + :return: The resulting color after darkening + :rtype: XAColor + + .. versionadded:: 0.1.0 + """ + self.xa_elem = self.xa_elem.shadowWithLevel_(fraction) + return self
+ +
[docs] def make_swatch(self, width: int = 100, height: int = 100) -> 'XAImage': + """Creates an image swatch of the color with the specified dimensions. + + :param width: The width of the swatch image, in pixels, defaults to 100 + :type width: int, optional + :param height: The height of the swatch image, in pixels, defaults to 100 + :type height: int, optional + :return: The image swatch as an XAImage object + :rtype: XAImage + + :Example: View swatches in Preview + + >>> import PyXA + >>> from time import sleep + >>> + >>> blue = PyXA.XAColor.blue() + >>> red = PyXA.XAColor.red() + >>> + >>> swatches = [ + >>> blue.make_swatch(), + >>> blue.darken(0.5).make_swatch(), + >>> blue.mix_with(red).make_swatch() + >>> ] + >>> + >>> for swatch in swatches: + >>> swatch.show_in_preview() + >>> sleep(0.2) + + .. versionadded:: 0.1.0 + """ + img = AppKit.NSImage.alloc().initWithSize_(AppKit.NSMakeSize(width, height)) + img.lockFocus() + self.xa_elem.drawSwatchInRect_(AppKit.NSMakeRect(0, 0, width, height)) + img.unlockFocus() + return XAImage(img)
+ +
[docs] def get_clipboard_representation(self) -> 'AppKit.NSColor': + """Gets a clipboard-codable representation of the color. + + When the clipboard content is set to a color, the raw color data is added to the clipboard. + + :return: The raw color data + :rtype: AppKit.NSColor + + .. versionadded:: 0.1.0 + """ + return self.xa_elem
+ +
[docs] def __repr__(self): + return f"<{str(type(self))}r={str(self.red_value)}, g={self.green_value}, b={self.blue_value}, a={self.alpha_value}>"
+ + + + +
[docs]class XALocation(XAObject): + """A location with a latitude and longitude, along with other data. + + .. versionadded:: 0.0.2 + """ + current_location: 'XALocation' #: The current location of the device + +
[docs] def __init__(self, raw_value = None, title: str = None, latitude: float = 0, longitude: float = 0, altitude: float = None, radius: int = 0, address: str = None): + self.raw_value = raw_value #: The raw CLLocation object + self.title = title #: The name of the location + self.latitude = latitude #: The latitude of the location + self.longitude = longitude #: The longitude of the location + self.altitude = altitude #: The altitude of the location + self.radius = radius #: The horizontal accuracy of the location measurement + self.address = address #: The address of the location + + import CoreLocation + if self.raw_value is None: + if latitude is not None and longitude is not None: + self.raw_value = CoreLocation.CLLocation.alloc().initWithLatitude_longitude_(latitude, longitude)
+ + @property + def raw_value(self): + return self.__raw_value + + @raw_value.setter + def raw_value(self, raw_value): + self.__raw_value = raw_value + if raw_value is not None: + self.latitude = raw_value.coordinate()[0] + self.longitude = raw_value.coordinate()[1] + self.altitude = raw_value.altitude() + self.radius = raw_value.horizontalAccuracy() + + @property + def current_location(self) -> 'XALocation': + """The location of the user's computer. + """ + self.raw_value = None + self._spawn_thread(self.__get_current_location) + while self.raw_value is None: + time.sleep(0.01) + return self + +
[docs] def show_in_maps(self): + """Shows the location in Maps.app. + + .. versionadded:: 0.0.6 + """ + XAURL(f"maps://?q={self.title},ll={self.latitude},{self.longitude}").open()
+ +
[docs] def reverse_geocode(self) -> dict[str, str]: + """Obtains reverse-geocode information from the location's latitude and longitude. + + :return: A dictionary containing the location's name, street address, locality, state, country, timezone, and notable features. + :rtype: dict[str, str] + + :Example: + + >>> import PyXA + >>> loc = PyXA.XALocation(latitude=44.460552, longitude=-110.82807) + >>> print(loc.reverse_geocode()) + {'name': 'Old Faithful', 'street_number': None, 'street': 'Upper Geyser Basin Trail', 'sub_locality': None, 'locality': 'Alta', 'county': 'Teton County', 'state': 'WY', 'postal_code': '83414', 'country': 'United States', 'timezone': America/Denver (MST) offset -25200, 'notable_features': ( + "Old Faithful", + "Yellowstone National Park" + )} + + .. versionadded:: 0.1.1 + """ + self._placemark = None + + def get_place(place, error): + if place is not None: + self._placemark = place[0] + AppHelper.stopEventLoop() + + import CoreLocation + CoreLocation.CLGeocoder.alloc().init().reverseGeocodeLocation_completionHandler_(self.raw_value, get_place) + AppHelper.runConsoleEventLoop() + + return { + "name": self._placemark.name(), + "street_number": self._placemark.subThoroughfare(), + "street": self._placemark.thoroughfare(), + "sub_locality": self._placemark.subLocality(), + "locality": self._placemark.locality(), + "county": self._placemark.subAdministrativeArea(), + "state": self._placemark.administrativeArea(), + "postal_code": self._placemark.postalCode(), + "country": self._placemark.country(), + "timezone": self._placemark.timeZone(), + "notable_features": self._placemark.areasOfInterest(), + }
+ + def __get_current_location(self): + import CoreLocation + location_manager = CoreLocation.CLLocationManager.alloc().init() + old_self = self + class CLLocationManagerDelegate(AppKit.NSObject): + def locationManager_didUpdateLocations_(self, manager, locations): + if locations is not None: + old_self.raw_value = locations[0] + AppHelper.stopEventLoop() + + def locationManager_didFailWithError_(self, manager, error): + print(manager, error) + + location_manager.requestWhenInUseAuthorization() + location_manager.setDelegate_(CLLocationManagerDelegate.alloc().init().retain()) + location_manager.requestLocation() + + AppHelper.runConsoleEventLoop() + +
[docs] def __repr__(self): + return "<" + str(type(self)) + str((self.latitude, self.longitude)) + ">"
+ + + + +
[docs]class XAColorPickerStyle(Enum): + """Options for which tab a color picker should display when first opened. + """ + GRAYSCALE = AppKit.NSColorPanelModeGray + RGB_SLIDERS = AppKit.NSColorPanelModeRGB + CMYK_SLIDERS = AppKit.NSColorPanelModeCMYK + HSB_SLIDERS = AppKit.NSColorPanelModeHSB + COLOR_LIST = AppKit.NSColorPanelModeColorList + COLOR_WHEEL = AppKit.NSColorPanelModeWheel + CRAYONS = AppKit.NSColorPanelModeCrayon + IMAGE_PALETTE = AppKit.NSColorPanelModeCustomPalette
+ +
[docs]class XAColorPicker(XAObject): + """A class for creating and interacting with a color picker window. + + .. versionadded:: 0.0.5 + """ +
[docs] def __init__(self, style: XAColorPickerStyle = XAColorPickerStyle.COLOR_WHEEL): + super().__init__() + self.style = style
+ +
[docs] def display(self) -> XAColor: + """Displays the color picker. + + :return: The color that the user selected + :rtype: XAColor + + .. versionadded:: 0.0.5 + """ + panel = AppKit.NSColorPanel.sharedColorPanel() + panel.setMode_(self.style.value) + panel.setShowsAlpha_(True) + + def run_modal(panel): + initial_color = panel.color() + time.sleep(0.5) + while panel.isVisible() and panel.color() == initial_color: + time.sleep(0.01) + AppKit.NSApp.stopModal() + + modal_thread = threading.Thread(target=run_modal, args=(panel, ), name="Run Modal", daemon=True) + modal_thread.start() + + AppKit.NSApp.runModalForWindow_(panel) + return XAColor(panel.color())
+ + + + +
[docs]class XADialog(XAObject): + """A custom dialog window. + + .. versionadded:: 0.0.8 + """ +
[docs] def __init__(self, text: str = "", title: Union[str, None] = None, buttons: Union[None, list[Union[str, int]]] = None, hidden_answer: bool = False, default_button: Union[str, int, None] = None, cancel_button: Union[str, int, None] = None, icon: Union[Literal["stop", "note", "caution"], None] = None, default_answer: Union[str, int, None] = None): + super().__init__() + self.text: str = text + self.title: str = title + self.buttons: Union[None, list[Union[str, int]]] = buttons or [] + self.hidden_answer: bool = hidden_answer + self.icon: Union[str, None] = icon + self.default_button: Union[str, int, None] = default_button + self.cancel_button: Union[str, int, None] = cancel_button + self.default_answer: Union[str, int, None] = default_answer
+ +
[docs] def display(self) -> Union[str, int, None, list[str]]: + """Displays the dialog, waits for the user to select an option or cancel, then returns the selected button or None if cancelled. + + :return: The selected button or None if no value was selected + :rtype: Union[str, int, None, list[str]] + + .. versionadded:: 0.0.8 + """ + buttons = [x.replace("'", "") for x in self.buttons] + buttons = str(buttons).replace("'", '"') + + default_button = str(self.default_button).replace("'", "") + default_button_str = "default button \"" + default_button + "\"" if self.default_button is not None else "" + + cancel_button = str(self.cancel_button).replace("'", "") + cancel_button_str = "cancel button \"" + cancel_button + "\"" if self.cancel_button is not None else "" + + icon_str = "with icon " + self.icon + "" if self.icon is not None else "" + + default_answer = str(self.default_answer).replace("'", '"') + default_answer_str = "default answer \"" + default_answer + "\"" if self.default_answer is not None else "" + + script = AppleScript(f""" + tell application "System Events" + display dialog \"{self.text}\" with title \"{self.title}\" buttons {buttons} {default_button_str} {cancel_button_str} {icon_str} {default_answer_str} hidden answer {self.hidden_answer} + end tell + """) + + result = script.run()["event"] + if result is not None: + if result.numberOfItems() > 1: + return [result.descriptorAtIndex_(1).stringValue(), result.descriptorAtIndex_(2).stringValue()] + else: + return result.descriptorAtIndex_(1).stringValue()
+ + + + +
[docs]class XAMenu(XAObject): + """A custom list item selection menu. + + .. versionadded:: 0.0.8 + """ +
[docs] def __init__(self, menu_items: list[Any], title: str = "Select Item", prompt: str = "Select an item", default_items: Union[list[str], None] = None, ok_button_name: str = "Okay", cancel_button_name: str = "Cancel", multiple_selections_allowed: bool = False, empty_selection_allowed: bool = False): + super().__init__() + self.menu_items: list[Union[str, int]] = menu_items #: The items the user can choose from + self.title: str = title #: The title of the dialog window + self.prompt: str = prompt #: The prompt to display in the dialog box + self.default_items: list[str] = default_items or [] #: The items to initially select + self.ok_button_name: str = ok_button_name #: The name of the OK button + self.cancel_button_name: str = cancel_button_name #: The name of the Cancel button + self.multiple_selections_allowed: bool = multiple_selections_allowed #: Whether multiple items can be selected + self.empty_selection_allowed: bool = empty_selection_allowed #: Whether the user can click OK without selecting anything
+ +
[docs] def display(self) -> Union[str, int, bool, list[str], list[int]]: + """Displays the menu, waits for the user to select an option or cancel, then returns the selected value or False if cancelled. + + :return: The selected value or False if no value was selected + :rtype: Union[str, int, bool, list[str], list[int]] + + .. versionadded:: 0.0.8 + """ + menu_items = [x.replace("'", "") for x in self.menu_items] + menu_items = str(menu_items).replace("'", '"') + default_items = str(self.default_items).replace("'", '"') + script = AppleScript(f""" + tell application "System Events" + choose from list {menu_items} with title \"{self.title}\" with prompt \"{self.prompt}\" default items {default_items} OK button name \"{self.ok_button_name}\" cancel button name \"{self.cancel_button_name}\" multiple selections allowed {self.multiple_selections_allowed} empty selection allowed {self.empty_selection_allowed} + end tell + """) + result = script.run()["event"] + if result is not None: + if self.multiple_selections_allowed: + values = [] + for x in range(1, result.numberOfItems() + 1): + desc = result.descriptorAtIndex_(x) + values.append(desc.stringValue()) + return values + else: + if result.stringValue() == "false": + return False + return result.stringValue()
+ + + + +
[docs]class XAFilePicker(XAObject): + """A file selection window. + + .. versionadded:: 0.0.8 + """ +
[docs] def __init__(self, prompt: str = "Choose File", types: list[str] = None, default_location: Union[str, None] = None, show_invisibles: bool = False, multiple_selections_allowed: bool = False, show_package_contents: bool = False): + super().__init__() + self.prompt: str = prompt #: The prompt to display in the dialog box + self.types: list[str] = types #: The file types/type identifiers to allow for selection + self.default_location: Union[str, None] = default_location #: The default file location + self.show_invisibles: bool = show_invisibles #: Whether invisible files and folders are shown + self.multiple_selections_allowed: bool = multiple_selections_allowed #: Whether the user can select multiple files + self.show_package_contents: bool = show_package_contents #: Whether to show the contents of packages
+ +
[docs] def display(self) -> Union[XAPath, None]: + """Displays the file chooser, waits for the user to select a file or cancel, then returns the selected file URL or None if cancelled. + + :return: The selected file URL or None if no file was selected + :rtype: Union[XAPath, None] + + .. versionadded:: 0.0.8 + """ + types = [x.replace("'", "") for x in self.types] + types = str(types).replace("'", '"') + types_str = "of type " + types if self.types is not None else "" + + default_location_str = "default location \"" + self.default_location + "\"" if self.default_location is not None else "" + + script = AppleScript(f""" + tell application "System Events" + choose file with prompt \"{self.prompt}\" {types_str}{default_location_str} invisibles {self.show_invisibles} multiple selections allowed {self.multiple_selections_allowed} showing package contents {self.show_package_contents} + end tell + """) + result = script.run()["event"] + + if result is not None: + if self.multiple_selections_allowed: + values = [] + for x in range(1, result.numberOfItems() + 1): + desc = result.descriptorAtIndex_(x) + values.append(XAPath(desc.fileURLValue())) + return values + else: + return XAPath(result.fileURLValue())
+ + + + +
[docs]class XAFolderPicker(XAObject): + """A folder selection window. + + .. versionadded:: 0.0.8 + """ +
[docs] def __init__(self, prompt: str = "Choose Folder", default_location: Union[str, None] = None, show_invisibles: bool = False, multiple_selections_allowed: bool = False, show_package_contents: bool = False): + super().__init__() + self.prompt: str = prompt #: The prompt to display in the dialog box + self.default_location: Union[str, None] = default_location #: The default folder location + self.show_invisibles: bool = show_invisibles #: Whether invisible files and folders are shown + self.multiple_selections_allowed: bool = multiple_selections_allowed #: Whether the user can select multiple folders + self.show_package_contents: bool = show_package_contents #: Whether to show the contents of packages
+ +
[docs] def display(self) -> Union[XAPath, None]: + """Displays the folder chooser, waits for the user to select a folder or cancel, then returns the selected folder URL or None if cancelled. + + :return: The selected folder URL or None if no folder was selected + :rtype: Union[XAPath, None] + + .. versionadded:: 0.0.8 + """ + + default_location_str = "default location \"" + self.default_location + "\"" if self.default_location is not None else "" + + script = AppleScript(f""" + tell application "System Events" + choose folder with prompt \"{self.prompt}\" {default_location_str} invisibles {self.show_invisibles} multiple selections allowed {self.multiple_selections_allowed} showing package contents {self.show_package_contents} + end tell + """) + result = script.run()["event"] + if result is not None: + if self.multiple_selections_allowed: + values = [] + for x in range(1, result.numberOfItems() + 1): + desc = result.descriptorAtIndex_(x) + values.append(XAPath(desc.fileURLValue())) + return values + else: + return XAPath(result.fileURLValue())
+ + + + +
[docs]class XAApplicationPicker(XAObject): + """An application selection window. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, title: Union[str, None] = None, prompt: Union[str, None] = None, multiple_selections_allowed: bool = False): + super().__init__() + self.title: str = title #: The dialog window title + self.prompt: str = prompt #: The prompt to be displayed in the dialog box + self.multiple_selections_allowed: bool = multiple_selections_allowed #: Whether to allow multiple items to be selected
+ +
[docs] def display(self) -> str: + """Displays the application chooser, waits for the user to select an application or cancel, then returns the selected application's name or None if cancelled. + + :return: The name of the selected application + :rtype: str + + .. versionadded:: 0.0.8 + """ + + script = AppleScript("tell application \"System Events\"") + dialog_str = "choose application " + if self.title is not None: + dialog_str += f"with title \"{self.title}\" " + if self.prompt is not None: + dialog_str += f"with prompt \"{self.prompt}\"" + dialog_str += f"multiple selections allowed {self.multiple_selections_allowed} " + script.add(dialog_str) + script.add("end tell") + + return script.run()["string"]
+ + + + +
[docs]class XAFileNameDialog(XAObject): + """A file name input window. + + .. versionadded:: 0.0.8 + """ +
[docs] def __init__(self, prompt: str = "Specify file name and location", default_name: str = "New File", default_location: Union[str, None] = None): + super().__init__() + self.prompt: str = prompt #: The prompt to display in the dialog box + self.default_name: str = default_name #: The default name for the new file + self.default_location: Union[str, None] = default_location #: The default file location
+ +
[docs] def display(self) -> Union[XAPath, None]: + """Displays the file name input window, waits for the user to input a name and location or cancel, then returns the specified file URL or None if cancelled. + + :return: The specified file URL or None if no file name was inputted + :rtype: Union[XAPath, None] + + .. versionadded:: 0.0.8 + """ + + default_location_str = "default location \"" + self.default_location + "\"" if self.default_location is not None else "" + + script = AppleScript(f""" + tell application "System Events" + choose file name with prompt \"{self.prompt}\" default name \"{self.default_name}\" {default_location_str} + end tell + """) + result = script.run()["event"] + if result is not None: + return XAPath(result.fileURLValue())
+ + + + +############################# +### System / Image Events ### +############################# +# ? Move into separate XAFileSystemBase.py file? +
[docs]class XAEventsApplication(XACanOpenPath): + """A base class for the System and Image events applications. + + .. versionadded:: 0.1.0 + """ +
[docs] class Format(Enum): + """Disk format options. + """ + APPLE_PHOTO = OSType("dfph") + APPLESHARE = OSType("dfas") + AUDIO = OSType("dfau") + HIGH_SIERRA = OSType("dfhs") + ISO_9660 = OSType("fd96") + MACOS_EXTENDED = OSType("dfh+") + MACOS = OSType("dfhf") + MSDOS = OSType("dfms") + NFS = OSType("dfnf") + PRODOS = OSType("dfpr") + QUICKTAKE = OSType("dfqt") + UDF = OSType("dfud") + UFS = OSType("dfuf") + UNKNOWN = OSType("df$$") + WEBDAV = OSType("dfwd")
+ +
[docs]class XADiskItemList(XAList): + """A wrapper around lists of disk items that employs fast enumeration techniques. + + All properties of disk items can be called as methods on the wrapped list, returning a list containing each item's value for the property. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None, object_class = None): + if object_class is None: + object_class = XADiskItem + super().__init__(properties, object_class, filter)
+ +
[docs] def busy_status(self) -> list['bool']: + return list(self.xa_elem.arrayByApplyingSelector_("busyStatus") or [])
+ +
[docs] def container(self) -> 'XADiskItemList': + ls = self.xa_elem.arrayByApplyingSelector_("container") or [] + return self._new_element(ls, XADiskItemList)
+ +
[docs] def creation_date(self) -> list['datetime']: + return list(self.xa_elem.arrayByApplyingSelector_("creationDate") or [])
+ +
[docs] def displayed_name(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("displayedName") or [])
+ +
[docs] def id(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def modification_date(self) -> list['datetime']: + return list(self.xa_elem.arrayByApplyingSelector_("modificationDate") or [])
+ +
[docs] def name(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def name_extension(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("nameExtension") or [])
+ +
[docs] def package_folder(self) -> list['bool']: + return list(self.xa_elem.arrayByApplyingSelector_("packageFolder") or [])
+ +
[docs] def path(self) -> list['XAPath']: + ls = self.xa_elem.arrayByApplyingSelector_("path") or [] + return [XAPath(x) for x in ls]
+ +
[docs] def physical_size(self) -> list['int']: + return list(self.xa_elem.arrayByApplyingSelector_("physicalSize") or [])
+ +
[docs] def posix_path(self) -> list[XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("POSIXPath") or [] + return [XAPath(x) for x in ls]
+ +
[docs] def size(self) -> list['int']: + return list(self.xa_elem.arrayByApplyingSelector_("size") or [])
+ +
[docs] def url(self) -> list['XAURL']: + ls = self.xa_elem.arrayByApplyingSelector_("URL") or [] + return [XAURL(x) for x in ls]
+ +
[docs] def visible(self) -> list['bool']: + return list(self.xa_elem.arrayByApplyingSelector_("visible") or [])
+ +
[docs] def volume(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("volume") or [])
+ +
[docs] def by_busy_status(self, busy_status: bool) -> Union['XADiskItem', None]: + return self.by_property("busyStatus", busy_status)
+ +
[docs] def by_container(self, container: 'XADiskItem') -> Union['XADiskItem', None]: + return self.by_property("container", container.xa_elem)
+ +
[docs] def by_creation_date(self, creation_date: datetime) -> Union['XADiskItem', None]: + return self.by_property("creationDate", creation_date)
+ +
[docs] def by_displayed_name(self, displayed_name: str) -> Union['XADiskItem', None]: + return self.by_property("displayedName", displayed_name)
+ +
[docs] def by_id(self, id: str) -> Union['XADiskItem', None]: + return self.by_property("id", id)
+ +
[docs] def by_modification_date(self, modification_date: datetime) -> Union['XADiskItem', None]: + return self.by_property("modificationDate", modification_date)
+ +
[docs] def by_name(self, name: str) -> Union['XADiskItem', None]: + return self.by_property("name", name)
+ +
[docs] def by_name_extension(self, name_extension: str) -> Union['XADiskItem', None]: + return self.by_property("nameExtension", name_extension)
+ +
[docs] def by_package_folder(self, package_folder: bool) -> Union['XADiskItem', None]: + return self.by_property("packageFolder", package_folder)
+ +
[docs] def by_path(self, path: Union[XAPath, str]) -> Union['XADiskItem', None]: + if isinstance(path, XAPath): + path = path.path + return self.by_property("path", path)
+ +
[docs] def by_physical_size(self, physical_size: int) -> Union['XADiskItem', None]: + return self.by_property("physicalSize", physical_size)
+ +
[docs] def by_posix_path(self, posix_path: Union[XAPath, str]) -> Union['XADiskItem', None]: + if isinstance(posix_path, XAPath): + posix_path = posix_path.path + return self.by_property("POSIXPath", posix_path)
+ +
[docs] def by_size(self, size: int) -> Union['XADiskItem', None]: + return self.by_property("size", size)
+ +
[docs] def by_url(self, url: XAURL) -> Union['XADiskItem', None]: + return self.by_property("URL", url.xa_elem)
+ +
[docs] def by_visible(self, visible: bool) -> Union['XADiskItem', None]: + return self.by_property("visible", visible)
+ +
[docs] def by_volume(self, volume: str) -> Union['XADiskItem', None]: + return self.by_property("volume", volume)
+ +
[docs] def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XADiskItem(XAObject, XAPathLike): + """An item stored in the file system. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties): + super().__init__(properties)
+ + @property + def busy_status(self) -> 'bool': + """Whether the disk item is busy. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.busyStatus() + + @property + def container(self) -> 'XADiskItem': + """The folder or disk which has this disk item as an element. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.container(), XADiskItem) + + @property + def creation_date(self) -> 'datetime': + """The date on which the disk item was created. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.creationDate() + + @property + def displayed_name(self) -> 'str': + """The name of the disk item as displayed in the User Interface. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.displayedName() + + @property + def id(self) -> 'str': + """The unique ID of the disk item. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.id() + + @property + def modification_date(self) -> 'datetime': + """The date on which the disk item was last modified. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.modificationDate() + + @property + def name(self) -> 'str': + """The name of the disk item. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.name() + + @property + def name_extension(self) -> 'str': + """The extension portion of the name. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.nameExtension() + + @property + def package_folder(self) -> 'bool': + """Whether the disk item is a package. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.packageFolder() + + @property + def path(self) -> 'XAPath': + """The file system path of the disk item. + + .. versionadded:: 0.1.0 + """ + return XAPath(self.xa_elem.path()) + + @property + def physical_size(self) -> 'int': + """The actual space used by the disk item on disk. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.physicalSize() + + @property + def posix_path(self) -> XAPath: + """The POSIX file system path of the disk item. + + .. versionadded:: 0.1.0 + """ + return XAPath(self.xa_elem.POSIXPath()) + + @property + def size(self) -> 'int': + """The logical size of the disk item. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.size() + + @property + def url(self) -> 'XAURL': + """The URL of the disk item. + + .. versionadded:: 0.1.0 + """ + return XAURL(self.xa_elem.URL()) + + @property + def visible(self) -> 'bool': + """Whether the disk item is visible. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.visible() + + @property + def volume(self) -> 'str': + """The volume on which the disk item resides. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.volume() + +
[docs] def open(self) -> Self: + """Opens the item in its default application. + + + :return: The item object + :rtype: Self + + .. versionadded:: 0.1.1 + """ + self.xa_elem.open() + return self
+ +
[docs] def get_path_representation(self) -> XAPath: + return self.posix_path
+ +
[docs] def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAAliasList(XADiskItemList): + """A wrapper around lists of aliases that employs fast enumeration techniques. + + All properties of aliases can be called as methods on the wrapped list, returning a list containing each alias' value for the property. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAAlias)
+ +
[docs] def creator_type(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("creatorType") or [])
+ +
[docs] def default_application(self) -> 'XADiskItemList': + ls = self.xa_elem.arrayByApplyingSelector_("defaultApplication") or [] + return self._new_element(ls, XADiskItemList)
+ +
[docs] def file_type(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("fileType") or [])
+ +
[docs] def kind(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("kind") or [])
+ +
[docs] def product_version(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("productVersion") or [])
+ +
[docs] def short_version(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("shortVersion") or [])
+ +
[docs] def stationery(self) -> list['bool']: + return list(self.xa_elem.arrayByApplyingSelector_("stationery") or [])
+ +
[docs] def type_identifier(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("typeIdentifier") or [])
+ +
[docs] def version(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("version") or [])
+ +
[docs] def by_creator_type(self, creator_type: str) -> Union['XAAlias', None]: + return self.by_property("creatorType", creator_type)
+ +
[docs] def by_default_application(self, default_application: 'XADiskItem') -> Union['XAAlias', None]: + return self.by_property("defaultApplication", default_application.xa_elem)
+ +
[docs] def by_file_type(self, file_type: str) -> Union['XAAlias', None]: + return self.by_property("fileType", file_type)
+ +
[docs] def by_kind(self, kind: str) -> Union['XAAlias', None]: + return self.by_property("kind", kind)
+ +
[docs] def by_product_version(self, product_version: str) -> Union['XAAlias', None]: + return self.by_property("productVersion", product_version)
+ +
[docs] def by_short_version(self, short_version: str) -> Union['XAAlias', None]: + return self.by_property("shortVersion", short_version)
+ +
[docs] def by_stationery(self, stationery: bool) -> Union['XAAlias', None]: + return self.by_property("stationery", stationery)
+ +
[docs] def by_type_identifier(self, type_identifier: str) -> Union['XAAlias', None]: + return self.by_property("typeIdentifier", type_identifier)
+ +
[docs] def by_version(self, version: str) -> Union['XAAlias', None]: + return self.by_property("version", version)
+ +
[docs]class XAAlias(XADiskItem): + """An alias in the file system. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties): + super().__init__(properties)
+ + @property + def creator_type(self) -> 'str': + """The OSType identifying the application that created the alias. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.creatorType() + + @property + def default_application(self) -> 'XADiskItem': + """The application that will launch if the alias is opened. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.defaultApplication(), XADiskItem) + + @property + def file_type(self) -> 'str': + """The OSType identifying the type of data contained in the alias. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.fileType() + + @property + def kind(self) -> 'str': + """The kind of alias, as shown in Finder. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.kind() + + @property + def product_version(self) -> 'str': + """The version of the product (visible at the top of the "Get Info" window). + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.productVersion() + + @property + def short_version(self) -> 'str': + """The short version of the application bundle referenced by the alias. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.shortVersion() + + @property + def stationery(self) -> 'bool': + """Whether the alias is a stationery pad. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.stationery() + + @property + def type_identifier(self) -> 'str': + """The type identifier of the alias. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.typeIdentifier() + + @property + def version(self) -> 'str': + """The version of the application bundle referenced by the alias (visible at the bottom of the "Get Info" window). + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.version() + +
[docs] def aliases(self, filter: Union[dict, None] = None) -> 'XAAliasList': + """Returns a list of aliases, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.aliases(), XAAliasList, filter)
+ +
[docs] def disk_items(self, filter: Union[dict, None] = None) -> 'XADiskItemList': + """Returns a list of disk items, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.diskItems(), XADiskItemList, filter)
+ +
[docs] def files(self, filter: Union[dict, None] = None) -> 'XAFileList': + """Returns a list of files, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.files(), XAFileList, filter)
+ +
[docs] def file_packages(self, filter: Union[dict, None] = None) -> 'XAFilePackageList': + """Returns a list of file packages, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.filePackages(), XAFilePackageList, filter)
+ +
[docs] def folders(self, filter: Union[dict, None] = None) -> 'XAFolderList': + """Returns a list of folders, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.folders(), XAFolderList, filter)
+ + + + +
[docs]class XADiskList(XADiskItemList): + """A wrapper around lists of disks that employs fast enumeration techniques. + + All properties of disks can be called as methods on the wrapped list, returning a list containing each disk's value for the property. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XADisk)
+ +
[docs] def capacity(self) -> list['float']: + return list(self.xa_elem.arrayByApplyingSelector_("capacity") or [])
+ +
[docs] def ejectable(self) -> list['bool']: + return list(self.xa_elem.arrayByApplyingSelector_("ejectable") or [])
+ +
[docs] def format(self) -> list['XAEventsApplication.Format']: + ls = self.xa_elem.arrayByApplyingSelector_("format") or [] + return [XAEventsApplication.Format(OSType(x.stringValue())) for x in ls]
+ +
[docs] def free_space(self) -> list['float']: + return list(self.xa_elem.arrayByApplyingSelector_("freeSpace") or [])
+ +
[docs] def ignore_privileges(self) -> list['bool']: + return list(self.xa_elem.arrayByApplyingSelector_("ignorePrivileges") or [])
+ +
[docs] def local_volume(self) -> list['bool']: + return list(self.xa_elem.arrayByApplyingSelector_("localVolume") or [])
+ +
[docs] def server(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("server") or [])
+ +
[docs] def startup(self) -> list['bool']: + return list(self.xa_elem.arrayByApplyingSelector_("startup") or [])
+ +
[docs] def zone(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("zone") or [])
+ +
[docs] def by_capacity(self, capacity: float) -> Union['XADisk', None]: + return self.by_property("capacity", capacity)
+ +
[docs] def by_ejectable(self, ejectable: bool) -> Union['XADisk', None]: + return self.by_property("ejectable", ejectable)
+ +
[docs] def by_format(self, format: 'XAEventsApplication.Format') -> Union['XADisk', None]: + return self.by_property("format", format.value)
+ +
[docs] def by_free_space(self, free_space: float) -> Union['XADisk', None]: + return self.by_property("freeSpace", free_space)
+ +
[docs] def by_ignore_privileges(self, ignore_privileges: bool) -> Union['XADisk', None]: + return self.by_property("ignorePrivileges", ignore_privileges)
+ +
[docs] def by_local_volume(self, local_volume: bool) -> Union['XADisk', None]: + return self.by_property("localVolume", local_volume)
+ +
[docs] def by_server(self, server: str) -> Union['XADisk', None]: + return self.by_property("server", server)
+ +
[docs] def by_startup(self, startup: bool) -> Union['XADisk', None]: + return self.by_property("startup", startup)
+ +
[docs] def by_zone(self, zone: str) -> Union['XADisk', None]: + return self.by_property("zone", zone)
+ +
[docs]class XADisk(XADiskItem): + """A disk in the file system. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties): + super().__init__(properties)
+ + @property + def capacity(self) -> 'float': + """The total number of bytes (free or used) on the disk. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.capacity() + + @property + def ejectable(self) -> 'bool': + """Whether the media can be ejected (floppies, CD's, and so on). + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.ejectable() + + @property + def format(self) -> 'XAEventsApplication.Format': + """The file system format of the disk. + + .. versionadded:: 0.1.0 + """ + return XAEventsApplication.Format(self.xa_elem.format()) + + @property + def free_space(self) -> 'float': + """The number of free bytes left on the disk. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.freeSpace() + + @property + def ignore_privileges(self) -> 'bool': + """Whether to ignore permissions on this disk. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.ignorePrivileges() + + @property + def local_volume(self) -> 'bool': + """Whether the media is a local volume (as opposed to a file server). + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.localVolume() + + @property + def server(self) -> 'str': + """The server on which the disk resides, AFP volumes only. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.server() + + @property + def startup(self) -> 'bool': + """Whether this disk is the boot disk. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.startup() + + @property + def zone(self) -> 'str': + """The zone in which the disk's server resides, AFP volumes only. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.zone() + +
[docs] def aliases(self, filter: Union[dict, None] = None) -> 'XAAliasList': + """Returns a list of aliases, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.aliases(), XAAliasList, filter)
+ +
[docs] def disk_items(self, filter: Union[dict, None] = None) -> 'XADiskItemList': + """Returns a list of disk items, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.diskItems(), XADiskItemList, filter)
+ +
[docs] def files(self, filter: Union[dict, None] = None) -> 'XAFileList': + """Returns a list of files, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.files(), XAFileList, filter)
+ +
[docs] def file_packages(self, filter: Union[dict, None] = None) -> 'XAFilePackageList': + """Returns a list of file packages, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.fileOackages(), XAFilePackageList, filter)
+ +
[docs] def folders(self, filter: Union[dict, None] = None) -> 'XAFolderList': + """Returns a list of folders, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.folders(), XAFolderList, filter)
+ + + + +
[docs]class XADomainList(XAList): + """A wrapper around lists of domains that employs fast enumeration techniques. + + All properties of domains can be called as methods on the wrapped list, returning a list containing each domain's value for the property. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XADomain, filter)
+ +
[docs] def id(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def name(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def by_id(self, id: str) -> Union['XADomain', None]: + return self.by_property("id", id)
+ +
[docs] def by_name(self, name: str) -> Union['XADomain', None]: + return self.by_property("name", name)
+ +
[docs] def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XADomain(XAObject): + """A domain in the file system. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties): + super().__init__(properties)
+ + @property + def application_support_folder(self) -> 'XAFolder': + """The Application Support folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.applicationSupportFolder(), XAFolder) + + @property + def applications_folder(self) -> 'XAFolder': + """The Applications folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.applicationsFolder(), XAFolder) + + @property + def desktop_pictures_folder(self) -> 'XAFolder': + """The Desktop Pictures folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.desktopPicturesFolder(), XAFolder) + + @property + def folder_action_scripts_folder(self) -> 'XAFolder': + """The Folder Action Scripts folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.folderActionScriptsFolder(), XAFolder) + + @property + def fonts_folder(self) -> 'XAFolder': + """The Fonts folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.fontsFolder(), XAFolder) + + @property + def id(self) -> 'str': + """The unique identifier of the domain. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.id() + + @property + def library_folder(self) -> 'XAFolder': + """The Library folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.libraryFolder(), XAFolder) + + @property + def name(self) -> 'str': + """The name of the domain. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.name() + + @property + def preferences_folder(self) -> 'XAFolder': + """The Preferences folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.preferencesFolder(), XAFolder) + + @property + def scripting_additions_folder(self) -> 'XAFolder': + """The Scripting Additions folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.scriptingAdditionsFolder(), XAFolder) + + @property + def scripts_folder(self) -> 'XAFolder': + """The Scripts folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.scriptsFolder(), XAFolder) + + @property + def shared_documents_folder(self) -> 'XAFolder': + """The Shared Documents folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.sharedDocumentsFolder(), XAFolder) + + @property + def speakable_items_folder(self) -> 'XAFolder': + """The Speakable Items folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.speakableItemsFolder(), XAFolder) + + @property + def utilities_folder(self) -> 'XAFolder': + """The Utilities folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.utilitiesFolder(), XAFolder) + + @property + def workflows_folder(self) -> 'XAFolder': + """The Automator Workflows folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.workflowsFolder(), XAFolder) + +
[docs] def folders(self, filter: Union[dict, None] = None) -> 'XAFolderList': + """Returns a list of folders, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.folders(), XAFolderList, filter)
+ +
[docs] def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAClassicDomainObject(XADomain): + """The Classic domain in the file system. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties): + super().__init__(properties)
+ + @property + def apple_menu_folder(self) -> 'XAFolder': + """The Apple Menu Items folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.appleMenuFolder(), XAFolder) + + @property + def control_panels_folder(self) -> 'XAFolder': + """The Control Panels folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.controlPanelsFolder(), XAFolder) + + @property + def control_strip_modules_folder(self) -> 'XAFolder': + """The Control Strip Modules folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.controlStripModulesFolder(), XAFolder) + + @property + def desktop_folder(self) -> 'XAFolder': + """The Classic Desktop folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.desktopFolder(), XAFolder) + + @property + def extensions_folder(self) -> 'XAFolder': + """The Extensions folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.extensionsFolder(), XAFolder) + + @property + def fonts_folder(self) -> 'XAFolder': + """The Fonts folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.fontsFolder(), XAFolder) + + @property + def launcher_items_folder(self) -> 'XAFolder': + """The Launcher Items folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.launcherItemsFolder(), XAFolder) + + @property + def preferences_folder(self) -> 'XAFolder': + """The Classic Preferences folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.preferencesFolder(), XAFolder) + + @property + def shutdown_folder(self) -> 'XAFolder': + """The Shutdown Items folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.shutdownFolder(), XAFolder) + + @property + def startup_items_folder(self) -> 'XAFolder': + """The StartupItems folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.startupItemsFolder(), XAFolder) + + @property + def system_folder(self) -> 'XAFolder': + """The System folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.systemFolder(), XAFolder) + +
[docs] def folders(self, filter: Union[dict, None] = None) -> 'XAFolderList': + """Returns a list of folders, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.folders(), XAFolderList, filter)
+ + + + +
[docs]class XAFileList(XADiskItemList): + """A wrapper around lists of files that employs fast enumeration techniques. + + All properties of files can be called as methods on the wrapped list, returning a list containing each file's value for the property. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None, object_class = None): + if object_class is None: + object_class = XAFile + super().__init__(properties, filter, object_class)
+ +
[docs] def creator_type(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("creatorType") or [])
+ +
[docs] def default_application(self) -> 'XADiskItemList': + ls = self.xa_elem.arrayByApplyingSelector_("defaultApplication") or [] + return self._new_element(ls, XADiskItemList)
+ +
[docs] def file_type(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("fileType") or [])
+ +
[docs] def kind(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("kind") or [])
+ +
[docs] def product_version(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("productVersion") or [])
+ +
[docs] def short_version(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("shortVersion") or [])
+ +
[docs] def stationery(self) -> list['bool']: + return list(self.xa_elem.arrayByApplyingSelector_("stationery") or [])
+ +
[docs] def type_identifier(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("typeIdentifier") or [])
+ +
[docs] def version(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("version") or [])
+ +
[docs] def by_creator_type(self, creator_type: str) -> Union['XAFile', None]: + return self.by_property("creatorType", creator_type)
+ +
[docs] def by_default_application(self, default_application: 'XADiskItem') -> Union['XAFile', None]: + return self.by_property("defaultApplication", default_application.xa_elem)
+ +
[docs] def by_file_type(self, file_type: str) -> Union['XAFile', None]: + return self.by_property("fileType", file_type)
+ +
[docs] def by_kind(self, kind: str) -> Union['XAFile', None]: + return self.by_property("kind", kind)
+ +
[docs] def by_product_version(self, product_version: str) -> Union['XAFile', None]: + return self.by_property("productVersion", product_version)
+ +
[docs] def by_short_version(self, short_version: str) -> Union['XAFile', None]: + return self.by_property("shortVersion", short_version)
+ +
[docs] def by_stationery(self, stationery: bool) -> Union['XAFile', None]: + return self.by_property("stationery", stationery)
+ +
[docs] def by_type_identifier(self, type_identifier: str) -> Union['XAFile', None]: + return self.by_property("typeIdentifier", type_identifier)
+ +
[docs] def by_version(self, version: str) -> Union['XAFile', None]: + return self.by_property("version", version)
+ +
[docs]class XAFile(XADiskItem): + """A file in the file system. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties): + super().__init__(properties)
+ + @property + def creator_type(self) -> 'str': + """The OSType identifying the application that created the file. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.creatorType() + + @property + def default_application(self) -> 'XADiskItem': + """The application that will launch if the file is opened. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.defaultApplication(), XADiskItem) + + @default_application.setter + def default_application(self, default_application: XADiskItem): + self.set_property('defaultApplication', default_application.xa_elem) + + @property + def file_type(self) -> 'str': + """The OSType identifying the type of data contained in the file. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.fileType() + + @property + def kind(self) -> 'str': + """The kind of file, as shown in Finder. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.kind() + + @property + def product_version(self) -> 'str': + """The version of the product (visible at the top of the "Get Info" window). + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.productVersion() + + @property + def short_version(self) -> 'str': + """The short version of the file. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.shortVersion() + + @property + def stationery(self) -> 'bool': + """Whether the file is a stationery pad. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.stationery() + + @property + def type_identifier(self) -> 'str': + """The type identifier of the file. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.typeIdentifier() + + @property + def version(self) -> 'str': + """The version of the file (visible at the bottom of the "Get Info" window). + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.version()
+ + + + +
[docs]class XAFilePackageList(XAFileList): + """A wrapper around lists of file packages that employs fast enumeration techniques. + + All properties of file packages can be called as methods on the wrapped list, returning a list containing each package's value for the property. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAFilePackage)
+ +
[docs]class XAFilePackage(XAFile): + """A file package in the file system. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties): + super().__init__(properties)
+ +
[docs] def aliases(self, filter: Union[dict, None] = None) -> 'XAAliasList': + """Returns a list of aliases, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.aliases(), XAAliasList, filter)
+ +
[docs] def disk_items(self, filter: Union[dict, None] = None) -> 'XADiskItemList': + """Returns a list of disk items, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.diskItems(), XADiskItemList, filter)
+ +
[docs] def files(self, filter: Union[dict, None] = None) -> 'XAFileList': + """Returns a list of files, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.files(), XAFileList, filter)
+ +
[docs] def file_packages(self, filter: Union[dict, None] = None) -> 'XAFilePackageList': + """Returns a list of file packages, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.filePackages(), XAFilePackageList, filter)
+ +
[docs] def folders(self, filter: Union[dict, None] = None) -> 'XAFolderList': + """Returns a list of folders, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.folders(), XAFolderList, filter)
+ + + + +
[docs]class XAFolderList(XADiskItemList): + """A wrapper around lists of folders that employs fast enumeration techniques. + + All properties of folders can be called as methods on the wrapped list, returning a list containing each folder's value for the property. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAFolder)
+ +
[docs]class XAFolder(XADiskItem): + """A folder in the file system. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties): + super().__init__(properties)
+ +
[docs] def aliases(self, filter: Union[dict, None] = None) -> 'XAAliasList': + """Returns a list of aliases, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.aliases(), XAAliasList, filter)
+ +
[docs] def disk_items(self, filter: Union[dict, None] = None) -> 'XADiskItemList': + """Returns a list of disk items, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.diskItems(), XADiskItemList, filter)
+ +
[docs] def files(self, filter: Union[dict, None] = None) -> 'XAFileList': + """Returns a list of files, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.files(), XAFileList, filter)
+ +
[docs] def file_packages(self, filter: Union[dict, None] = None) -> 'XAFilePackageList': + """Returns a list of file packages, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.filePackages(), XAFilePackageList, filter)
+ +
[docs] def folders(self, filter: Union[dict, None] = None) -> 'XAFolderList': + """Returns a list of folders, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned folders will have, or None + :type filter: Union[dict, None] + :return: The list of folders + :rtype: XAFolderList + + .. versionadded:: 0.1.0 + """ + self._new_element(self.xa_elem.folders(), XAFolderList, filter)
+ + + + +
[docs]class XALocalDomainObject(XADomain): + """The local domain in the file system. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XANetworkDomainObject(XADomain): + """The network domain in the file system. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemDomainObject(XADomain): + """The system domain in the file system. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAUserDomainObject(XADomain): + """The user domain in the file system. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties): + super().__init__(properties)
+ + @property + def desktop_folder(self) -> 'XAFolder': + """The user's Desktop folder + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.desktopFolder(), XAFolder) + + @property + def documents_folder(self) -> 'XAFolder': + """The user's Documents folder + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.documentsFolder(), XAFolder) + + @property + def downloads_folder(self) -> 'XAFolder': + """The user's Downloads folder + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.downloadsFolder(), XAFolder) + + @property + def favorites_folder(self) -> 'XAFolder': + """The user's Favorites folder + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.favoritesFolder(), XAFolder) + + @property + def home_folder(self) -> 'XAFolder': + """The user's Home folder + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.homeFolder(), XAFolder) + + @property + def movies_folder(self) -> 'XAFolder': + """The user's Movies folder + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.moviesFolder(), XAFolder) + + @property + def music_folder(self) -> 'XAFolder': + """The user's Music folder + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.musicFolder(), XAFolder) + + @property + def pictures_folder(self) -> 'XAFolder': + """The user's Pictures folder + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.picturesFolder(), XAFolder) + + @property + def public_folder(self) -> 'XAFolder': + """The user's Public folder + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.publicFolder(), XAFolder) + + @property + def sites_folder(self) -> 'XAFolder': + """The user's Sites folder + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.sitesFolder(), XAFolder) + + @property + def temporary_items_folder(self) -> 'XAFolder': + """The Temporary Items folder + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.temporaryItemsFolder(), XAFolder)
+ + + + +############# +### Media ### +############# +
[docs]class XAImageList(XAList, XAClipboardCodable): + """A wrapper around lists of images that employs fast enumeration techniques. + + .. versionadded:: 0.0.3 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAImage + super().__init__(properties, obj_class, filter) + + self.modified = False #: Whether the list of images has been modified since it was initialized
+ + def __partial_init(self): + images = [None] * self.xa_elem.count() + + def init_images(ref, index, stop): + if isinstance(ref, str): + ref = AppKit.NSImage.alloc().initWithContentsOfURL_(XAPath(ref).xa_elem) + elif isinstance(ref, ScriptingBridge.SBObject): + ref = AppKit.NSImage.alloc().initWithContentsOfURL_(XAPath(ref.imageFile().POSIXPath()).xa_elem) + elif isinstance(ref, XAObject): + ref = AppKit.NSImage.alloc().initWithContentsOfURL_(ref.image_file.posix_path.xa_elem) + images[index] = ref + + self.xa_elem.enumerateObjectsUsingBlock_(init_images) + return AppKit.NSMutableArray.alloc().initWithArray_(images) + + def __apply_filter(self, filter_block, *args): + images = self.__partial_init() + + filtered_images = [None] * images.count() + def filter_image(image, index, *args): + img = Quartz.CIImage.imageWithCGImage_(image.CGImage()) + filter = filter_block(image, *args) + filter.setValue_forKey_(img, "inputImage") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + + # Crop the result to the original image size + cropped = uncropped.imageByCroppingToRect_(Quartz.CGRectMake(0, 0, image.size().width * 2, image.size().height * 2)) + + # Convert back to NSImage + rep = AppKit.NSCIImageRep.imageRepWithCIImage_(cropped) + result = AppKit.NSImage.alloc().initWithSize_(rep.size()) + result.addRepresentation_(rep) + filtered_images[index] = result + + threads = [None] * images.count() + for index, image in enumerate(images): + threads[index] = self._spawn_thread(filter_image, [image, index, *args]) + + while any([t.is_alive() for t in threads]): + time.sleep(0.01) + + self.modified = True + self.xa_elem = AppKit.NSMutableArray.alloc().initWithArray_(filtered_images) + return self + +
[docs] def file(self) -> list[XAPath]: + return [x.file for x in self]
+ +
[docs] def horizontal_stitch(self) -> 'XAImage': + """Horizontally stacks each image in the list. + + The first image in the list is placed at the left side of the resulting image. + + :return: The resulting image after stitching + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + return XAImage.horizontal_stitch(self)
+ +
[docs] def vertical_stitch(self) -> 'XAImage': + """Vertically stacks each image in the list. + + The first image in the list is placed at the bottom side of the resulting image. + + :return: The resulting image after stitching + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + return XAImage.vertical_stitch(self)
+ +
[docs] def additive_composition(self) -> 'XAImage': + """Creates a composition image by adding the color values of each image in the list. + + :param images: The images to add together + :type images: list[XAImage] + :return: The resulting image composition + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + image_data = [None] * self.xa_elem.count() + for index, image in enumerate(self.xa_elem): + if isinstance(image, str): + image = AppKit.NSImage.alloc().initWithContentsOfURL_(XAPath(image).xa_elem) + image_data[index] = Quartz.CIImage.imageWithData_(image.TIFFRepresentation()) + + current_composition = None + while len(image_data) > 1: + img1 = image_data.pop(0) + img2 = image_data.pop(0) + composition_filter = Quartz.CIFilter.filterWithName_("CIAdditionCompositing") + composition_filter.setDefaults() + composition_filter.setValue_forKey_(img1, "inputImage") + composition_filter.setValue_forKey_(img2, "inputBackgroundImage") + current_composition = composition_filter.outputImage() + image_data.insert(0, current_composition) + + composition_rep = AppKit.NSCIImageRep.imageRepWithCIImage_(current_composition) + composition = AppKit.NSImage.alloc().initWithSize_(composition_rep.size()) + composition.addRepresentation_(composition_rep) + return XAImage(composition)
+ +
[docs] def subtractive_composition(self) -> 'XAImage': + """Creates a composition image by subtracting the color values of each image in the list successively. + + :param images: The images to create the composition from + :type images: list[XAImage] + :return: The resulting image composition + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + image_data = [None] * self.xa_elem.count() + for index, image in enumerate(self.xa_elem): + if isinstance(image, str): + image = AppKit.NSImage.alloc().initWithContentsOfURL_(XAPath(image).xa_elem) + image_data[index] = Quartz.CIImage.imageWithData_(image.TIFFRepresentation()) + + current_composition = None + while len(image_data) > 1: + img1 = image_data.pop(0) + img2 = image_data.pop(0) + composition_filter = Quartz.CIFilter.filterWithName_("CISubtractBlendMode") + composition_filter.setDefaults() + composition_filter.setValue_forKey_(img1, "inputImage") + composition_filter.setValue_forKey_(img2, "inputBackgroundImage") + current_composition = composition_filter.outputImage() + image_data.insert(0, current_composition) + + composition_rep = AppKit.NSCIImageRep.imageRepWithCIImage_(current_composition) + composition = AppKit.NSImage.alloc().initWithSize_(composition_rep.size()) + composition.addRepresentation_(composition_rep) + return XAImage(composition)
+ +
[docs] def edges(self, intensity: float = 1.0) -> 'XAImageList': + """Detects the edges in each image of the list and highlights them colorfully, blackening other areas of the images. + + :param intensity: The degree to which edges are highlighted. Higher is brighter. Defaults to 1.0 + :type intensity: float + :return: The resulting images after applying the filter + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + def filter_block(image, intensity): + filter = Quartz.CIFilter.filterWithName_("CIEdges") + filter.setDefaults() + filter.setValue_forKey_(intensity, "inputIntensity") + return filter + + return self.__apply_filter(filter_block, intensity)
+ +
[docs] def gaussian_blur(self, intensity: float = 10) -> 'XAImageList': + """Blurs each image in the list using a Gaussian filter. + + :param intensity: The strength of the blur effect, defaults to 10 + :type intensity: float + :return: The resulting images after applying the filter + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + def filter_block(image, intensity): + filter = Quartz.CIFilter.filterWithName_("CIGaussianBlur") + filter.setDefaults() + filter.setValue_forKey_(intensity, "inputRadius") + return filter + + return self.__apply_filter(filter_block, intensity)
+ +
[docs] def reduce_noise(self, noise_level: float = 0.02, sharpness: float = 0.4) -> 'XAImageList': + """Reduces noise in each image of the list by sharpening areas with a luminance delta below the specified noise level threshold. + + :param noise_level: The threshold for luminance changes in an area below which will be considered noise, defaults to 0.02 + :type noise_level: float + :param sharpness: The sharpness of the resulting images, defaults to 0.4 + :type sharpness: float + :return: The resulting images after applying the filter + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + def filter_block(image, noise_level, sharpness): + filter = Quartz.CIFilter.filterWithName_("CINoiseReduction") + filter.setDefaults() + filter.setValue_forKey_(noise_level, "inputNoiseLevel") + filter.setValue_forKey_(sharpness, "inputSharpness") + return filter + + return self.__apply_filter(filter_block, noise_level, sharpness)
+ +
[docs] def pixellate(self, pixel_size: float = 8.0) -> 'XAImageList': + """Pixellates each image in the list. + + :param pixel_size: The size of the pixels, defaults to 8.0 + :type pixel_size: float + :return: The resulting images after applying the filter + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + def filter_block(image, pixel_size): + filter = Quartz.CIFilter.filterWithName_("CIPixellate") + filter.setDefaults() + filter.setValue_forKey_(pixel_size, "inputScale") + return filter + + return self.__apply_filter(filter_block, pixel_size)
+ +
[docs] def outline(self, threshold: float = 0.1) -> 'XAImageList': + """Outlines detected edges within each image of the list in black, leaving the rest transparent. + + :param threshold: The threshold to use when separating edge and non-edge pixels. Larger values produce thinner edge lines. Defaults to 0.1 + :type threshold: float + :return: The resulting images after applying the filter + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + def filter_block(image, threshold): + filter = Quartz.CIFilter.filterWithName_("CILineOverlay") + filter.setDefaults() + filter.setValue_forKey_(threshold, "inputThreshold") + return filter + + return self.__apply_filter(filter_block, threshold)
+ +
[docs] def invert(self) -> 'XAImageList': + """Inverts the colors of each image in the list. + + :return: The resulting images after applying the filter + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + def filter_block(image): + filter = Quartz.CIFilter.filterWithName_("CIColorInvert") + filter.setDefaults() + return filter + + return self.__apply_filter(filter_block)
+ +
[docs] def sepia(self, intensity: float = 1.0) -> 'XAImageList': + """Applies a sepia filter to each image in the list; maps all colors of the images to shades of brown. + + :param intensity: The opacity of the sepia effect. A value of 0 will have no impact on the image. Defaults to 1.0 + :type intensity: float + :return: The resulting images after applying the filter + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + def filter_block(image, intensity): + filter = Quartz.CIFilter.filterWithName_("CISepiaTone") + filter.setDefaults() + filter.setValue_forKey_(intensity, "inputIntensity") + return filter + + return self.__apply_filter(filter_block, intensity)
+ +
[docs] def vignette(self, intensity: float = 1.0) -> 'XAImageList': + """Applies vignette shading to the corners of each image in the list. + + :param intensity: The intensity of the vignette effect, defaults to 1.0 + :type intensity: float + :return: The resulting images after applying the filter + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + def filter_block(image, intensity): + filter = Quartz.CIFilter.filterWithName_("CIVignette") + filter.setDefaults() + filter.setValue_forKey_(intensity, "inputIntensity") + return filter + + return self.__apply_filter(filter_block, intensity)
+ +
[docs] def depth_of_field(self, focal_region: Union[tuple[tuple[int, int], tuple[int, int]], None] = None, intensity: float = 10.0, focal_region_saturation: float = 1.5) -> 'XAImageList': + """Applies a depth of field filter to each image in the list, simulating a tilt & shift effect. + + :param focal_region: Two points defining a line within each image to focus the effect around (pixels around the line will be in focus), or None to use the center third of the image, defaults to None + :type focal_region: Union[tuple[tuple[int, int], tuple[int, int]], None] + :param intensity: Controls the amount of distance around the focal region to keep in focus. Higher values decrease the distance before the out-of-focus effect starts. Defaults to 10.0 + :type intensity: float + :param focal_region_saturation: Adjusts the saturation of the focial region. Higher values increase saturation. Defaults to 1.5 (1.5x default saturation) + :type focal_region_saturation: float + :return: The resulting images after applying the filter + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + def filter_block(image, focal_region, intensity, focal_region_saturation): + if focal_region is None: + center_top = Quartz.CIVector.vectorWithX_Y_(image.size().width / 2, image.size().height / 3) + center_bottom = Quartz.CIVector.vectorWithX_Y_(image.size().width / 2, image.size().height / 3 * 2) + focal_region = (center_top, center_bottom) + else: + point1 = Quartz.CIVector.vectorWithX_Y_(focal_region[0]) + point2 = Quartz.CIVector.vectorWithX_Y_(focal_region[1]) + focal_region = (point1, point2) + + filter = Quartz.CIFilter.filterWithName_("CIDepthOfField") + filter.setDefaults() + filter.setValue_forKey_(focal_region[0], "inputPoint0") + filter.setValue_forKey_(focal_region[1], "inputPoint1") + filter.setValue_forKey_(intensity, "inputRadius") + filter.setValue_forKey_(focal_region_saturation, "inputSaturation") + return filter + + return self.__apply_filter(filter_block, focal_region, intensity, focal_region_saturation)
+ +
[docs] def crystallize(self, crystal_size: float = 20.0) -> 'XAImageList': + """Applies a crystallization filter to each image in the list. Creates polygon-shaped color blocks by aggregating pixel values. + + :param crystal_size: The radius of the crystals, defaults to 20.0 + :type crystal_size: float + :return: The resulting images after applying the filter + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + def filter_block(image, crystal_size): + filter = Quartz.CIFilter.filterWithName_("CICrystallize") + filter.setDefaults() + filter.setValue_forKey_(crystal_size, "inputRadius") + return filter + + return self.__apply_filter(filter_block, crystal_size)
+ +
[docs] def comic(self) -> 'XAImageList': + """Applies a comic filter to each image in the list. Outlines edges and applies a color halftone effect. + + :return: The resulting images after applying the filter + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + def filter_block(image): + filter = Quartz.CIFilter.filterWithName_("CIComicEffect") + filter.setDefaults() + return filter + + return self.__apply_filter(filter_block)
+ +
[docs] def pointillize(self, point_size: float = 20.0) -> 'XAImageList': + """Applies a pointillization filter to each image in the list. + + :param crystal_size: The radius of the points, defaults to 20.0 + :type crystal_size: float + :return: The resulting images after applying the filter + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + def filter_block(image, point_size): + filter = Quartz.CIFilter.filterWithName_("CIPointillize") + filter.setDefaults() + filter.setValue_forKey_(point_size, "inputRadius") + return filter + + return self.__apply_filter(filter_block, point_size)
+ +
[docs] def bloom(self, intensity: float = 0.5) -> 'XAImageList': + """Applies a bloom effect to each image in the list. Softens edges and adds a glow. + + :param intensity: The strength of the softening and glow effects, defaults to 0.5 + :type intensity: float + :return: The resulting images after applying the filter + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + def filter_block(image, intensity): + filter = Quartz.CIFilter.filterWithName_("CIBloom") + filter.setDefaults() + filter.setValue_forKey_(intensity, "inputIntensity") + return filter + + return self.__apply_filter(filter_block, intensity)
+ +
[docs] def monochrome(self, color: XAColor, intensity: float = 1.0) -> 'XAImageList': + """Remaps the colors of each image in the list to shades of the specified color. + + :param color: The color of map each images colors to + :type color: XAColor + :param intensity: The strength of recoloring effect. Higher values map colors to darker shades of the provided color. Defaults to 1.0 + :type intensity: float + :return: The resulting images after applying the filter + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + ci_color = Quartz.CIColor.alloc().initWithColor_(color.xa_elem) + + def filter_block(image, intensity): + filter = Quartz.CIFilter.filterWithName_("CIColorMonochrome") + filter.setDefaults() + filter.setValue_forKey_(ci_color, "inputColor") + filter.setValue_forKey_(intensity, "inputIntensity") + return filter + + return self.__apply_filter(filter_block, intensity)
+ +
[docs] def bump(self, center: Union[tuple[int, int], None] = None, radius: float = 300.0, curvature: float = 0.5) -> 'XAImageList': + """Adds a concave (inward) or convex (outward) bump to each image in the list at the specified location within each image. + + :param center: The center point of the effect, or None to use the center of the image, defaults to None + :type center: Union[tuple[int, int], None] + :param radius: The radius of the bump in pixels, defaults to 300.0 + :type radius: float + :param curvature: Controls the direction and intensity of the bump's curvature. Positive values create convex bumps while negative values create concave bumps. Defaults to 0.5 + :type curvature: float + :return: The resulting images after applying the distortion + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + images = self.__partial_init() + + bumped_images = [None] * images.count() + def bump_image(image, index, center, radius, curvature): + if center is None: + center = Quartz.CIVector.vectorWithX_Y_(image.size().width / 2, image.size().height / 2) + else: + center = Quartz.CIVector.vectorWithX_Y_(center[0], center[1]) + + img = Quartz.CIImage.imageWithCGImage_(image.CGImage()) + filter = Quartz.CIFilter.filterWithName_("CIBumpDistortion") + filter.setDefaults() + filter.setValue_forKey_(img, "inputImage") + filter.setValue_forKey_(center, "inputCenter") + filter.setValue_forKey_(radius, "inputRadius") + filter.setValue_forKey_(curvature, "inputScale") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + + # Crop the result to the original image size + cropped = uncropped.imageByCroppingToRect_(Quartz.CGRectMake(0, 0, image.size().width * 2, image.size().height * 2)) + + # Convert back to NSImage + rep = AppKit.NSCIImageRep.imageRepWithCIImage_(cropped) + result = AppKit.NSImage.alloc().initWithSize_(rep.size()) + result.addRepresentation_(rep) + bumped_images[index] = result + + threads = [None] * images.count() + for index, image in enumerate(images): + threads[index] = self._spawn_thread(bump_image, [image, index, center, radius, curvature]) + + while any([t.is_alive() for t in threads]): + time.sleep(0.01) + + self.modified = True + self.xa_elem = AppKit.NSMutableArray.alloc().initWithArray_(bumped_images) + return self
+ +
[docs] def pinch(self, center: Union[tuple[int, int], None] = None, intensity: float = 0.5) -> 'XAImageList': + """Adds an inward pinch distortion to each image in the list at the specified location within each image. + + :param center: The center point of the effect, or None to use the center of the image, defaults to None + :type center: Union[tuple[int, int], None] + :param intensity: Controls the scale of the pinch effect. Higher values stretch pixels away from the specified center to a greater degree. Defaults to 0.5 + :type intensity: float + :return: The resulting images after applying the distortion + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + images = self.__partial_init() + + pinched_images = [None] * images.count() + def pinch_image(image, index, center, intensity): + if center is None: + center = Quartz.CIVector.vectorWithX_Y_(image.size().width / 2, image.size().height / 2) + else: + center = Quartz.CIVector.vectorWithX_Y_(center[0], center[1]) + + img = Quartz.CIImage.imageWithCGImage_(image.CGImage()) + filter = Quartz.CIFilter.filterWithName_("CIPinchDistortion") + filter.setDefaults() + filter.setValue_forKey_(img, "inputImage") + filter.setValue_forKey_(center, "inputCenter") + filter.setValue_forKey_(intensity, "inputScale") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + + # Crop the result to the original image size + cropped = uncropped.imageByCroppingToRect_(Quartz.CGRectMake(0, 0, image.size().width * 2, image.size().height * 2)) + + # Convert back to NSImage + rep = AppKit.NSCIImageRep.imageRepWithCIImage_(cropped) + result = AppKit.NSImage.alloc().initWithSize_(rep.size()) + result.addRepresentation_(rep) + pinched_images[index] = result + + threads = [None] * images.count() + for index, image in enumerate(images): + threads[index] = self._spawn_thread(pinch_image, [image, index, center, intensity]) + + while any([t.is_alive() for t in threads]): + time.sleep(0.01) + + self.modified = True + self.xa_elem = AppKit.NSMutableArray.alloc().initWithArray_(pinched_images) + return self
+ +
[docs] def twirl(self, center: Union[tuple[int, int], None] = None, radius: float = 300.0, angle: float = 3.14) -> 'XAImageList': + """Adds a twirl distortion to each image in the list by rotating pixels around the specified location within each image. + + :param center: The center point of the effect, or None to use the center of the image, defaults to None + :type center: Union[tuple[int, int], None] + :param radius: The pixel radius around the centerpoint that defines the area to apply the effect to, defaults to 300.0 + :type radius: float + :param angle: The angle of the twirl in radians, defaults to 3.14 + :type angle: float + :return: The resulting images after applying the distortion + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + images = self.__partial_init() + + twirled_images = [None] * images.count() + def twirl_image(image, index, center, radius, angle): + if center is None: + center = Quartz.CIVector.vectorWithX_Y_(image.size().width / 2, image.size().height / 2) + else: + center = Quartz.CIVector.vectorWithX_Y_(center[0], center[1]) + + img = Quartz.CIImage.imageWithCGImage_(image.CGImage()) + filter = Quartz.CIFilter.filterWithName_("CITwirlDistortion") + filter.setDefaults() + filter.setValue_forKey_(img, "inputImage") + filter.setValue_forKey_(center, "inputCenter") + filter.setValue_forKey_(radius, "inputRadius") + filter.setValue_forKey_(angle, "inputAngle") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + + # Crop the result to the original image size + cropped = uncropped.imageByCroppingToRect_(Quartz.CGRectMake(0, 0, image.size().width * 2, image.size().height * 2)) + + # Convert back to NSImage + rep = AppKit.NSCIImageRep.imageRepWithCIImage_(cropped) + result = AppKit.NSImage.alloc().initWithSize_(rep.size()) + result.addRepresentation_(rep) + twirled_images[index] = result + + threads = [None] * images.count() + for index, image in enumerate(images): + threads[index] = self._spawn_thread(twirl_image, [image, index, center, radius, angle]) + + while any([t.is_alive() for t in threads]): + time.sleep(0.01) + + self.modified = True + self.xa_elem = AppKit.NSMutableArray.alloc().initWithArray_(twirled_images) + return self
+ +
[docs] def auto_enhance(self, correct_red_eye: bool = False, crop_to_features: bool = False, correct_rotation: bool = False) -> 'XAImageList': + """Attempts to enhance each image in the list by applying suggested filters. + + :param correct_red_eye: Whether to attempt red eye removal, defaults to False + :type correct_red_eye: bool, optional + :param crop_to_features: Whether to crop the images to focus on their main features, defaults to False + :type crop_to_features: bool, optional + :param correct_rotation: Whether attempt perspective correction by rotating the images, defaults to False + :type correct_rotation: bool, optional + :return: The list of enhanced images + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + images = self.__partial_init() + + enhanced_images = [None] * images.count() + def enhance_image(image, index): + ci_image = Quartz.CIImage.imageWithCGImage_(image.CGImage()) + + options = { + Quartz.kCIImageAutoAdjustRedEye: correct_red_eye, + Quartz.kCIImageAutoAdjustCrop: crop_to_features, + Quartz.kCIImageAutoAdjustLevel: correct_rotation + } + + enhancements = ci_image.autoAdjustmentFiltersWithOptions_(options) + for filter in enhancements: + filter.setValue_forKey_(ci_image, "inputImage") + ci_image = filter.outputImage() + + # Crop the result to the original image size + cropped = ci_image.imageByCroppingToRect_(Quartz.CGRectMake(0, 0, image.size().width * 2, image.size().height * 2)) + + # Convert back to NSImage + rep = AppKit.NSCIImageRep.imageRepWithCIImage_(cropped) + result = AppKit.NSImage.alloc().initWithSize_(rep.size()) + result.addRepresentation_(rep) + enhanced_images[index] = result + + threads = [None] * images.count() + for index, image in enumerate(images): + threads[index] = self._spawn_thread(enhance_image, [image, index]) + + while any([t.is_alive() for t in threads]): + time.sleep(0.01) + + self.modified = True + self.xa_elem = AppKit.NSMutableArray.alloc().initWithArray_(enhanced_images) + return self
+ +
[docs] def flip_horizontally(self) -> 'XAImageList': + """Flips each image in the list horizontally. + + :return: The list of flipped images + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + images = self.__partial_init() + + flipped_images = [None] * images.count() + def flip_image(image, index): + flipped_image = AppKit.NSImage.alloc().initWithSize_(image.size()) + imageBounds = AppKit.NSMakeRect(0, 0, image.size().width, image.size().height) + + transform = AppKit.NSAffineTransform.alloc().init() + transform.translateXBy_yBy_(image.size().width, 0) + transform.scaleXBy_yBy_(-1, 1) + + flipped_image.lockFocus() + transform.concat() + image.drawInRect_fromRect_operation_fraction_(imageBounds, Quartz.CGRectZero, AppKit.NSCompositingOperationCopy, 1.0) + flipped_image.unlockFocus() + flipped_images[index] = flipped_image + + threads = [None] * images.count() + for index, image in enumerate(images): + threads[index] = self._spawn_thread(flip_image, [image, index]) + + while any([t.is_alive() for t in threads]): + time.sleep(0.01) + + self.modified = True + self.xa_elem = AppKit.NSMutableArray.alloc().initWithArray_(flipped_images) + return self
+ +
[docs] def flip_vertically(self) -> 'XAImageList': + """Flips each image in the list vertically. + + :return: The list of flipped images + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + images = self.__partial_init() + + flipped_images = [None] * images.count() + def flip_image(image, index): + flipped_image = AppKit.NSImage.alloc().initWithSize_(image.size()) + imageBounds = AppKit.NSMakeRect(0, 0, image.size().width, image.size().height) + + transform = AppKit.NSAffineTransform.alloc().init() + transform.translateXBy_yBy_(0, image.size().height) + transform.scaleXBy_yBy_(1, -1) + + flipped_image.lockFocus() + transform.concat() + image.drawInRect_fromRect_operation_fraction_(imageBounds, Quartz.CGRectZero, AppKit.NSCompositingOperationCopy, 1.0) + flipped_image.unlockFocus() + flipped_images[index] = flipped_image + + threads = [None] * images.count() + for index, image in enumerate(images): + threads[index] = self._spawn_thread(flip_image, [image, index]) + + while any([t.is_alive() for t in threads]): + time.sleep(0.01) + + self.modified = True + self.xa_elem = AppKit.NSMutableArray.alloc().initWithArray_(flipped_images) + return self
+ +
[docs] def rotate(self, degrees: float) -> 'XAImageList': + """Rotates each image in the list by the specified amount of degrees. + + :param degrees: The number of degrees to rotate the images by + :type degrees: float + :return: The list of rotated images + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + sinDegrees = abs(math.sin(degrees * math.pi / 180.0)) + cosDegrees = abs(math.cos(degrees * math.pi / 180.0)) + + images = self.__partial_init() + + rotated_images = [None] * images.count() + def rotate_image(image, index): + new_size = Quartz.CGSizeMake(image.size().height * sinDegrees + image.size().width * cosDegrees, image.size().width * sinDegrees + image.size().height * cosDegrees) + rotated_image = AppKit.NSImage.alloc().initWithSize_(new_size) + + imageBounds = Quartz.CGRectMake((new_size.width - image.size().width) / 2, (new_size.height - image.size().height) / 2, image.size().width, image.size().height) + + transform = AppKit.NSAffineTransform.alloc().init() + transform.translateXBy_yBy_(new_size.width / 2, new_size.height / 2) + transform.rotateByDegrees_(degrees) + transform.translateXBy_yBy_(-new_size.width / 2, -new_size.height / 2) + + rotated_image.lockFocus() + transform.concat() + image.drawInRect_fromRect_operation_fraction_(imageBounds, Quartz.CGRectZero, AppKit.NSCompositingOperationCopy, 1.0) + rotated_image.unlockFocus() + + rotated_images[index] = rotated_image + + threads = [None] * images.count() + for index, image in enumerate(images): + threads[index] = self._spawn_thread(rotate_image, [image, index]) + + while any([t.is_alive() for t in threads]): + time.sleep(0.01) + + self.modified = True + self.xa_elem = AppKit.NSMutableArray.alloc().initWithArray_(rotated_images) + return self
+ +
[docs] def crop(self, size: tuple[int, int], corner: Union[tuple[int, int], None] = None) -> 'XAImageList': + """Crops each image in the list to the specified dimensions. + + :param size: The dimensions to crop each image to + :type size: tuple[int, int] + :param corner: The bottom-left location to crom each image from, or None to use (0, 0), defaults to None + :type corner: Union[tuple[int, int], None] + :return: The list of cropped images + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + if corner is None: + # No corner provided -- use (0,0) by default + corner = (0, 0) + + images = self.__partial_init() + + cropped_images = [None] * images.count() + def crop_image(image, index): + cropped_image = AppKit.NSImage.alloc().initWithSize_(AppKit.NSMakeSize(size[0], size[1])) + imageBounds = AppKit.NSMakeRect(corner[0], corner[1], image.size().width, image.size().height) + + cropped_image.lockFocus() + image.drawInRect_(imageBounds) + cropped_image.unlockFocus() + cropped_images[index] = cropped_image + + threads = [None] * images.count() + for index, image in enumerate(images): + threads[index] = self._spawn_thread(crop_image, [image, index]) + + while any([t.is_alive() for t in threads]): + time.sleep(0.01) + + self.modified = True + self.xa_elem = AppKit.NSMutableArray.alloc().initWithArray_(cropped_images) + return self
+ +
[docs] def scale(self, scale_factor_x: float, scale_factor_y: Union[float, None] = None) -> 'XAImageList': + """Scales each image in the list by the specified horizontal and vertical factors. + + :param scale_factor_x: The factor by which to scale each image in the X dimension + :type scale_factor_x: float + :param scale_factor_y: The factor by which to scale each image in the Y dimension, or None to match the horizontal factor, defaults to None + :type scale_factor_y: Union[float, None] + :return: The list of scaled images + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + if scale_factor_y is None: + scale_factor_y = scale_factor_x + + images = self.__partial_init() + + scaled_images = [None] * self.xa_elem.count() + def scale_image(image, index): + scaled_image = AppKit.NSImage.alloc().initWithSize_(AppKit.NSMakeSize(image.size().width * scale_factor_x, image.size().height * scale_factor_y)) + imageBounds = AppKit.NSMakeRect(0, 0, image.size().width, image.size().height) + + transform = AppKit.NSAffineTransform.alloc().init() + transform.scaleXBy_yBy_(scale_factor_x, scale_factor_y) + + scaled_image.lockFocus() + transform.concat() + image.drawInRect_fromRect_operation_fraction_(imageBounds, Quartz.CGRectZero, AppKit.NSCompositingOperationCopy, 1.0) + scaled_image.unlockFocus() + scaled_images[index] = scaled_image + + threads = [None] * self.xa_elem.count() + for index, image in enumerate(images): + threads[index] = self._spawn_thread(scale_image, [image, index]) + + while any([t.is_alive() for t in threads]): + time.sleep(0.01) + + self.modified = True + self.xa_elem = AppKit.NSMutableArray.alloc().initWithArray_(scaled_images) + return self
+ +
[docs] def resize(self, width: int, height: Union[int, None] = None) -> Self: + """Resizes each image in the list to the specified width and height. + + :param width: The width of the resulting images + :type width: int + :param height: The height of the resulting images, or None to maintain width:height proportions, defaults to None + :type height: Union[int, None] + :return: The list of scaled images + :rtype: Self + + .. versionadded:: 0.1.1 + """ + images = self.__partial_init() + + scaled_images = [None] * self.xa_elem.count() + def scale_image(image, index): + nonlocal height + img_width = image.size().width + img_height = image.size().height + + if height is None: + height = img_height + + scaled_image = AppKit.NSImage.alloc().initWithSize_(AppKit.NSMakeSize(img_width * width / img_width, img_height * height / img_height)) + imageBounds = AppKit.NSMakeRect(0, 0, image.size().width, image.size().height) + + transform = AppKit.NSAffineTransform.alloc().init() + transform.scaleXBy_yBy_(width / img_width, height / img_height) + + scaled_image.lockFocus() + transform.concat() + image.drawInRect_fromRect_operation_fraction_(imageBounds, Quartz.CGRectZero, AppKit.NSCompositingOperationCopy, 1.0) + scaled_image.unlockFocus() + scaled_images[index] = scaled_image + + threads = [None] * self.xa_elem.count() + for index, image in enumerate(images): + threads[index] = self._spawn_thread(scale_image, [image, index]) + + while any([t.is_alive() for t in threads]): + time.sleep(0.01) + + self.modified = True + self.xa_elem = AppKit.NSMutableArray.alloc().initWithArray_(scaled_images) + return self
+ +
[docs] def pad(self, horizontal_border_width: int = 50, vertical_border_width: int = 50, pad_color: Union[XAColor, None] = None) -> 'XAImageList': + """Pads each image in the list with the specified color; add a border around each image in the list with the specified vertical and horizontal width. + + :param horizontal_border_width: The border width, in pixels, in the x-dimension, defaults to 50 + :type horizontal_border_width: int + :param vertical_border_width: The border width, in pixels, in the y-dimension, defaults to 50 + :type vertical_border_width: int + :param pad_color: The color of the border, or None for a white border, defaults to None + :type pad_color: Union[XAColor, None] + :return: The list of padded images + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + if pad_color is None: + # No color provided -- use white by default + pad_color = XAColor.white() + + images = self.__partial_init() + + padded_images = [None] * images.count() + def pad_image(image, index): + new_width = image.size().width + horizontal_border_width * 2 + new_height = image.size().height + vertical_border_width * 2 + color_swatch = pad_color.make_swatch(new_width, new_height) + + color_swatch.xa_elem.lockFocus() + bounds = AppKit.NSMakeRect(horizontal_border_width, vertical_border_width, image.size().width, image.size().height) + image.drawInRect_(bounds) + color_swatch.xa_elem.unlockFocus() + padded_images[index] = color_swatch.xa_elem + + threads = [None] * images.count() + for index, image in enumerate(images): + threads[index] = self._spawn_thread(pad_image, [image, index]) + + while any([t.is_alive() for t in threads]): + time.sleep(0.01) + + self.modified = True + self.xa_elem = AppKit.NSMutableArray.alloc().initWithArray_(padded_images) + return self
+ +
[docs] def overlay_image(self, image: 'XAImage', location: Union[tuple[int, int], None] = None, size: Union[tuple[int, int], None] = None) -> 'XAImageList': + """Overlays an image on top of each image in the list, at the specified location, with the specified size. + + :param image: The image to overlay on top of each image in the list + :type image: XAImage + :param location: The bottom-left point of the overlaid image in the results, or None to use the bottom-left point of each background image, defaults to None + :type location: Union[tuple[int, int], None] + :param size: The width and height of the overlaid image, or None to use the overlaid's images existing width and height, or (-1, -1) to use the dimensions of each background images, defaults to None + :type size: Union[tuple[int, int], None] + :return: The list of images with the specified image overlaid on top of them + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + if location is None: + # No location provided -- use the bottom-left point of the background image by default + location = (0, 0) + + images = self.__partial_init() + overlayed_images = [None] * images.count() + def overlay_image(img, index, image, size, location): + if size is None: + # No dimensions provided -- use size of overlay image by default + size = image.size + elif size == (-1, -1): + # Use remaining width/height of background image + size = (img.size().width - location[0], img.size().height - location[1]) + elif size[0] == -1: + # Use remaining width of background image + provided height + size = (img.size().width - location[0], size[1]) + elif size[1] == -1: + # Use remaining height of background image + provided width + size = (size[1], img.size().width - location[1]) + + img.lockFocus() + bounds = AppKit.NSMakeRect(location[0], location[1], size[0], size[1]) + image.xa_elem.drawInRect_(bounds) + img.unlockFocus() + overlayed_images[index] = img + + threads = [None] * images.count() + for index, img in enumerate(images): + threads[index] = self._spawn_thread(overlay_image, [img, index, image, size, location]) + + while any([t.is_alive() for t in threads]): + time.sleep(0.01) + + self.modified = True + self.xa_elem = AppKit.NSMutableArray.alloc().initWithArray_(overlayed_images) + return self
+ +
[docs] def overlay_text(self, text: str, location: Union[tuple[int, int], None] = None, font_size: float = 12, font_color: Union[XAColor, None] = None) -> 'XAImageList': + """Overlays text of the specified size and color at the provided location within each image of the list. + + :param text: The text to overlay onto each image of the list + :type text: str + :param location: The bottom-left point of the start of the text, or None to use (5, 5), defaults to None + :type location: Union[tuple[int, int], None] + :param font_size: The font size, in pixels, of the text, defaults to 12 + :type font_size: float + :param font_color: The color of the text, or None to use black, defaults to None + :type font_color: XAColor + :return: The list of images with the specified text overlaid on top of them + :rtype: XAImageList + + .. versionadded:: 0.1.0 + """ + if location is None: + # No location provided -- use (5, 5) by default + location = (5, 5) + + if font_color is None: + # No color provided -- use black by default + font_color = XAColor.black() + + font = AppKit.NSFont.userFontOfSize_(font_size) + images = self.__partial_init() + overlayed_images = [None] * self.xa_elem.count() + def overlay_text(image, index): + textRect = Quartz.CGRectMake(location[0], 0, image.size().width - location[0], location[1]) + attributes = { + AppKit.NSFontAttributeName: font, + AppKit.NSForegroundColorAttributeName: font_color.xa_elem + } + + image.lockFocus() + AppKit.NSString.alloc().initWithString_(text).drawInRect_withAttributes_(textRect, attributes) + image.unlockFocus() + overlayed_images[index] = image + + threads = [None] * self.xa_elem.count() + for index, image in enumerate(images): + threads[index] = self._spawn_thread(overlay_text, [image, index]) + + while any([t.is_alive() for t in threads]): + time.sleep(0.01) + + self.modified = True + self.xa_elem = AppKit.NSMutableArray.alloc().initWithArray_(overlayed_images) + return self
+ +
[docs] def extract_text(self) -> list[str]: + """Extracts and returns a list of all visible text in each image of the list. + + :return: The array of extracted text strings + :rtype: list[str] + + :Example: + + >>> import PyXA + >>> test = PyXA.XAImage("/Users/ExampleUser/Downloads/Example.jpg") + >>> print(test.extract_text()) + ["HERE'S TO THE", 'CRAZY ONES', 'the MISFITS the REBELS', 'THE TROUBLEMAKERS', ...] + + .. versionadded:: 0.1.0 + """ + images = self.__partial_init() + + extracted_strings = [None] * self.xa_elem.count() + def get_text(image, index): + # Prepare CGImage + ci_image = Quartz.CIImage.imageWithCGImage_(image.CGImage()) + context = Quartz.CIContext.alloc().initWithOptions_(None) + img = context.createCGImage_fromRect_(ci_image, ci_image.extent()) + + # Handle request completion + image_strings = [] + def recognize_text_handler(request, error): + observations = request.results() + for observation in observations: + recognized_strings = observation.topCandidates_(1)[0].string() + image_strings.append(recognized_strings) + + # Perform request and return extracted text + import Vision + request = Vision.VNRecognizeTextRequest.alloc().initWithCompletionHandler_(recognize_text_handler) + request_handler = Vision.VNImageRequestHandler.alloc().initWithCGImage_options_(img, None) + request_handler.performRequests_error_([request], None) + extracted_strings[index] = image_strings + + threads = [None] * self.xa_elem.count() + for index, image in enumerate(images): + threads[index] = self._spawn_thread(get_text, [image, index]) + + while any([t.is_alive() for t in threads]): + time.sleep(0.01) + + return extracted_strings
+ +
[docs] def show_in_preview(self): + """Opens each image in the list in Preview. + + .. versionadded:: 0.1.0 + """ + for image in self: + image.show_in_preview()
+ +
[docs] def save(self, file_paths: list[Union[XAPath, str]]): + """Saves each image to a file on the disk. + + :param file_path: The path at which to save the image file. Any existing file at that location will be overwritten, defaults to None + :type file_path: Union[XAPath, str, None] + + .. versionadded:: 0.1.0 + """ + for index, image in enumerate(self): + path = None + if len(file_paths) > index: + path = file_paths[index] + image.save(path)
+ +
[docs] def get_clipboard_representation(self) -> list['AppKit.NSImage']: + """Gets a clipboard-codable representation of each image in the list. + + When the clipboard content is set to a list of image, the raw data of each image is added to the clipboard. You can then + + :return: A list of media item file URLs + :rtype: list[NSURL] + + .. versionadded:: 0.0.8 + """ + data = [] + for image in self.__partial_init(): + if image.TIFFRepresentation(): + data.append(image) + return data
+ +
[docs]class XAImage(XAObject, XAClipboardCodable): + """A wrapper around NSImage with specialized automation methods. + + .. versionadded:: 0.0.2 + """ + +
[docs] def __init__(self, image_reference: Union[str, XAPath, 'AppKit.NSURL', 'AppKit.NSImage', None] = None, data: Union['AppKit.NSData', None] = None): + self.size: tuple[int, int] #: The dimensions of the image + self.file: Union[XAPath, None] = None #: The path to the image file, if one exists + self.data: str #: The TIFF representation of the image + self.modified: bool = False #: Whether the image data has been modified since the object was originally created + + self.xa_elem = None + + self.__vibrance = None + self.__gamma = None + self.__tint = None + self.__temperature = None + self.__white_point = None + self.__highlight = None + self.__shadow = None + + if data is not None: + # Deprecated as of 0.1.0 -- Pass data as the image_reference instead + AppKit.NSLog("Warning: Setting the data parameter when initalizing an XAImage is deprecated functionality and will be removed in a future release") + self.xa_elem = AppKit.NSImage.alloc().initWithData_(data) + else: + self.file = image_reference + match image_reference: + case None: + self.xa_elem = AppKit.NSImage.alloc().init() + + case {"element": str(ref)}: + self.file = ref + self.xa_elem = XAImage(ref).xa_elem + + case {"element": XAImage() as image}: + self.file = image.file + self.xa_elem = image.xa_elem + + case {"element": AppKit.NSImage() as image}: + self.xa_elem = image + + case str() as ref if "://" in ref: + url = XAURL(ref).xa_elem + self.xa_elem = AppKit.NSImage.alloc().initWithContentsOfURL_(url) + + case str() as ref if os.path.exists(ref) or os.path.exists(os.getcwd() + "/" + ref): + path = XAPath(ref).xa_elem + self.xa_elem = AppKit.NSImage.alloc().initWithContentsOfURL_(path) + + case XAPath() as path: + self.file = path.path + self.xa_elem = AppKit.NSImage.alloc().initWithContentsOfURL_(path.xa_elem) + + case XAURL() as url: + self.file = url.url + self.xa_elem = AppKit.NSImage.alloc().initWithContentsOfURL_(url.xa_elem) + + case str() as raw_string: + font = AppKit.NSFont.monospacedSystemFontOfSize_weight_(15, AppKit.NSFontWeightMedium) + text = AppKit.NSString.alloc().initWithString_(raw_string) + attributes = { + AppKit.NSFontAttributeName: font, + AppKit.NSForegroundColorAttributeName: XAColor.black().xa_elem + } + text_size = text.sizeWithAttributes_(attributes) + + # Make a white background to overlay the text on + swatch = XAColor.white().make_swatch(text_size.width + 20, text_size.height + 20) + text_rect = AppKit.NSMakeRect(10, 10, text_size.width, text_size.height) + + # Overlay the text + swatch.xa_elem.lockFocus() + text.drawInRect_withAttributes_(text_rect, attributes) + swatch.xa_elem.unlockFocus() + self.xa_elem = swatch.xa_elem + + case XAImage() as image: + self.file = image.file + self.xa_elem = image.xa_elem + + case XAObject(): + self.xa_elem = XAImage(image_reference.get_image_representation()).xa_elem + + case AppKit.NSData() as data: + self.xa_elem = AppKit.NSImage.alloc().initWithData_(data) + + case AppKit.NSImage() as image: + self.xa_elem = image + + case _: + raise TypeError(f"Error: Cannot initialize XAImage using {type(image_reference)} type.")
+ + def __update_image(self, modified_image: 'Quartz.CIImage') -> 'XAImage': + # Crop the result to the original image size + cropped = modified_image.imageByCroppingToRect_(Quartz.CGRectMake(0, 0, self.size[0] * 2, self.size[1] * 2)) + + # Convert back to NSImage + rep = AppKit.NSCIImageRep.imageRepWithCIImage_(cropped) + result = AppKit.NSImage.alloc().initWithSize_(rep.size()) + result.addRepresentation_(rep) + + # Update internal data + self.xa_elem = result + self.modified = True + return self + + @property + def size(self) -> tuple[int, int]: + """The dimensions of the image, in pixels. + + .. versionadded:: 0.1.0 + """ + return tuple(self.xa_elem.size()) + + @property + def data(self) -> 'AppKit.NSData': + return self.xa_elem.TIFFRepresentation() + + @property + def has_alpha_channel(self) -> bool: + """Whether the image has an alpha channel or not. + + .. versionadded:: 0.1.0 + """ + reps = self.xa_elem.representations() + if len(reps) > 0: + return reps[0].hasAlpha() + # TODO: Make sure this is never a false negative + return False + + @property + def is_opaque(self) -> bool: + """Whether the image contains transparent pixels or not. + + .. versionadded:: 0.1.0 + """ + reps = self.xa_elem.representations() + if len(reps) > 0: + return reps[0].isOpaque() + # TODO: Make sure this is never a false negative + return False + + @property + def color_space_name(self) -> Union[str, None]: + """The name of the color space that the image currently uses. + + .. versionadded:: 0.1.0 + """ + reps = self.xa_elem.representations() + if len(reps) > 0: + return reps[0].colorSpaceName() + # TODO: Make sure this is never a false negative + return None + + @property + def gamma(self) -> float: + """The gamma value for the image, once it has been manually set. Otherwise, the value is None. + + .. versionadded:: 0.1.0 + """ + if self.__gamma is not None: + return self.__gamma + return -1 + + @gamma.setter + def gamma(self, gamma: float): + self.__gamma = gamma + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CIGammaAdjust") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(gamma, "inputPower") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + self.__update_image(uncropped) + + @property + def vibrance(self) -> Union[float, None]: + """The vibrance value for the image, once it has been manually set. Otherwise, the value is None. + + .. versionadded:: 0.1.0 + """ + if self.__vibrance is not None: + return self.__vibrance + return -1 + + @vibrance.setter + def vibrance(self, vibrance: float = 1): + self.__vibrance = vibrance + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CIVibrance") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(vibrance, "inputAmount") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + return self.__update_image(uncropped) + + @property + def tint(self) -> Union[float, None]: + """The tint setting for the image, once it has been manually set. Otherwise, the value is None. + + .. versionadded:: 0.1.0 + """ + if self.__tint is not None: + return self.__tint + return -1 + + @tint.setter + def tint(self, tint: float): + # -100 to 100 + temp_and_tint = Quartz.CIVector.vectorWithX_Y_(6500, tint) + self.__tint = tint + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CITemperatureAndTint") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(temp_and_tint, "inputTargetNeutral") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + self.__update_image(uncropped) + + @property + def temperature(self) -> Union[float, None]: + """The temperature setting for the image, once it has been manually set. Otherwise, the value is None. + + .. versionadded:: 0.1.0 + """ + if self.__temperature is not None: + return self.__temperature + return -1 + + @temperature.setter + def temperature(self, temperature: float): + # 2000 to inf + temp_and_tint = Quartz.CIVector.vectorWithX_Y_(temperature, 0) + self.__temperature = temperature + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CITemperatureAndTint") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(temp_and_tint, "inputTargetNeutral") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + self.__update_image(uncropped) + + @property + def white_point(self) -> Union['XAColor', None]: + """The white point setting for the image, once it has been manually set. Otherwise, the value is None. + + .. versionadded:: 0.1.0 + """ + if self.__white_point is not None: + return self.__white_point + return -1 + + @white_point.setter + def white_point(self, white_point: XAColor): + self.__white_point = white_point + ci_white_point = Quartz.CIColor.alloc().initWithColor_(white_point.xa_elem) + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CIWhitePointAdjust") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(ci_white_point, "inputColor") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + self.__update_image(uncropped) + + @property + def highlight(self) -> float: + """The highlight setting for the image, once it has been manually set. Otherwise, the value is None. + + .. versionadded:: 0.1.0 + """ + if self.__highlight is not None: + return self.__highlight + return -1 + + @highlight.setter + def highlight(self, highlight: float): + self.__highlight = highlight + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CIHighlightShadowAdjust") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(highlight, "inputHighlightAmount") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + self.__update_image(uncropped) + + @property + def shadow(self) -> float: + """The shadow setting for the image, once it has been manually set. Otherwise, the value is None. + + .. versionadded:: 0.1.0 + """ + if self.__shadow is not None: + return self.__shadow + return -1 + + @shadow.setter + def shadow(self, shadow: float): + self.__shadow = shadow + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CIHighlightShadowAdjust") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(self.__highlight or 1, "inputHighlightAmount") + filter.setValue_forKey_(shadow, "inputShadowAmount") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + self.__update_image(uncropped) + +
[docs] def open(*images: Union[str, XAPath, list[Union[str, XAPath]]]) -> Union['XAImage', XAImageList]: + """Initializes one or more images from files. + + :param images: The image(s) to open + :type images: Union[str, XAPath, list[Union[str, XAPath]]] + :return: The newly created image object, or a list of image objects + :rtype: Union[XAImage, XAImageList] + + .. versionadded:: 0.1.0 + """ + if len(images) == 1: + images = images[0] + + if isinstance(images, list) or isinstance(images, tuple): + return XAImageList({"element": images}) + else: + return XAImage(images)
+ +
[docs] def symbol(name: str): + """Initializes an image from the SF symbol with the specified name, if such a symbol exists. + + :param name: The system symbol to create an image of; the name of an SF Symbol symbol. + :type name: str + + .. versionadded:: 0.1.1 + """ + img = AppKit.NSImage.imageWithSystemSymbolName_accessibilityDescription_(name, None) + return XAImage(img)
+ +
[docs] def horizontal_stitch(images: Union[list['XAImage'], XAImageList]) -> 'XAImage': + """Horizontally stacks two or more images. + + The first image in the list is placed at the left side of the resulting image. + + :param images: The list of images to stitch together + :type images: Union[list[XAImage], XAImageList] + :return: The resulting image after stitching + :rtype: XAImage + + .. versionadded:: 0.1.1 + """ + widths = [image.size[0] for image in images] + heights = [image.size[1] for image in images] + total_width = sum(widths) + max_height = max(heights) + + canvas = AppKit.NSImage.alloc().initWithSize_(AppKit.NSMakeSize(total_width, max_height)) + + canvas.lockFocus() + current_x = 0 + for image in images: + image.xa_elem.drawInRect_(AppKit.NSMakeRect(current_x, 0, image.size[0], image.size[1])) + current_x += image.size[0] + canvas.unlockFocus() + return XAImage(canvas)
+ +
[docs] def vertical_stitch(images: Union[list['XAImage'], XAImageList]) -> 'XAImage': + """Vertically stacks two or more images. + + The first image in the list is placed at the bottom of the resulting image. + + :param images: The list of images to stitch together + :type images: Union[list[XAImage], XAImageList] + :return: The resulting image after stitching + :rtype: XAImage + + .. versionadded:: 0.1.1 + """ + widths = [image.size[0] for image in images] + heights = [image.size[1] for image in images] + max_width = max(widths) + total_height = sum(heights) + + canvas = AppKit.NSImage.alloc().initWithSize_(AppKit.NSMakeSize(max_width, total_height)) + + canvas.lockFocus() + current_y = 0 + for image in images: + image.xa_elem.drawInRect_(AppKit.NSMakeRect(0, current_y, image.size[0], image.size[1])) + current_y += image.size[1] + canvas.unlockFocus() + return XAImage(canvas)
+ +
[docs] @staticmethod + def image_from_text(text: str, font_size: int = 15, font_name: str = "Menlo", font_color: XAColor = None, background_color: XAColor = None, inset: int = 10) -> 'XAImage': + """Initializes an image of the provided text overlaid on the specified background color. + + :param text: The text to create an image of + :type text: str + :param font_size: The font size of the text, defaults to 15 + :type font_size: int, optional + :param font_name: The color of the text, defaults to XAColor.black() + :type font_name: str, optional + :param font_color: The name of the font to use for the text, defaults to ".SF NS Mono Light Medium" + :type font_color: XAColor, optional + :param background_color: The color to overlay the text on top of, defaults to XAColor.white() + :type background_color: XAColor, optional + :param inset: The width of the space between the text and the edge of the background color in the resulting image, defaults to 10 + :type inset: int, optional + :return: XAImage + :rtype: The resulting image object + + .. versionadded:: 0.1.0 + """ + font = AppKit.NSFont.fontWithName_size_(font_name, font_size) + text = AppKit.NSString.alloc().initWithString_(text) + if font_color is None: + font_color = XAColor.black() + attributes = { + AppKit.NSFontAttributeName: font, + AppKit.NSForegroundColorAttributeName: font_color.xa_elem + } + text_size = text.sizeWithAttributes_(attributes) + + # Make a white background to overlay the text on + if background_color is None: + background_color = XAColor.white() + swatch = background_color.make_swatch(text_size.width + inset * 2, text_size.height + inset * 2) + text_rect = AppKit.NSMakeRect(inset, inset, text_size.width, text_size.height) + + # Overlay the text + swatch.xa_elem.lockFocus() + text.drawInRect_withAttributes_(text_rect, attributes) + swatch.xa_elem.unlockFocus() + return swatch
+ +
[docs] def edges(self, intensity: float = 1.0) -> 'XAImage': + """Detects the edges in the image and highlights them colorfully, blackening other areas of the image. + + :param intensity: The degree to which edges are highlighted. Higher is brighter. Defaults to 1.0 + :type intensity: float + :return: The resulting image after applying the filter + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CIEdges") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(intensity, "inputIntensity") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + return self.__update_image(uncropped)
+ +
[docs] def gaussian_blur(self, intensity: float = 10) -> 'XAImage': + """Blurs the image using a Gaussian filter. + + :param intensity: The strength of the blur effect, defaults to 10 + :type intensity: float + :return: The resulting image after applying the filter + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CIGaussianBlur") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(intensity, "inputRadius") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + return self.__update_image(uncropped)
+ +
[docs] def reduce_noise(self, noise_level: float = 0.02, sharpness: float = 0.4) -> 'XAImage': + """Reduces noise in the image by sharpening areas with a luminance delta below the specified noise level threshold. + + :param noise_level: The threshold for luminance changes in an area below which will be considered noise, defaults to 0.02 + :type noise_level: float + :param sharpness: The sharpness of the resulting image, defaults to 0.4 + :type sharpness: float + :return: The resulting image after applying the filter + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CINoiseReduction") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(noise_level, "inputNoiseLevel") + filter.setValue_forKey_(sharpness, "inputSharpness") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + return self.__update_image(uncropped)
+ +
[docs] def pixellate(self, pixel_size: float = 8.0) -> 'XAImage': + """Pixellates the image. + + :param pixel_size: The size of the pixels, defaults to 8.0 + :type pixel_size: float + :return: The resulting image after applying the filter + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CIPixellate") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(pixel_size, "inputScale") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + return self.__update_image(uncropped)
+ +
[docs] def outline(self, threshold: float = 0.1) -> 'XAImage': + """Outlines detected edges within the image in black, leaving the rest transparent. + + :param threshold: The threshold to use when separating edge and non-edge pixels. Larger values produce thinner edge lines. Defaults to 0.1 + :type threshold: float + :return: The resulting image after applying the filter + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CILineOverlay") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(threshold, "inputThreshold") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + return self.__update_image(uncropped)
+ +
[docs] def invert(self) -> 'XAImage': + """Inverts the color of the image. + + :return: The resulting image after applying the filter + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CIColorInvert") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + return self.__update_image(uncropped)
+ +
[docs] def sepia(self, intensity: float = 1.0) -> 'XAImage': + """Applies a sepia filter to the image; maps all colors of the image to shades of brown. + + :param intensity: The opacity of the sepia effect. A value of 0 will have no impact on the image. Defaults to 1.0 + :type intensity: float + :return: The resulting image after applying the filter + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CISepiaTone") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(intensity, "inputIntensity") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + return self.__update_image(uncropped)
+ +
[docs] def vignette(self, intensity: float = 1.0) -> 'XAImage': + """Applies vignette shading to the corners of the image. + + :param intensity: The intensity of the vignette effect, defaults to 1.0 + :type intensity: float + :return: The resulting image after applying the filter + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CIVignette") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(intensity, "inputIntensity") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + return self.__update_image(uncropped)
+ +
[docs] def depth_of_field(self, focal_region: Union[tuple[tuple[int, int], tuple[int, int]], None] = None, intensity: float = 10.0, focal_region_saturation: float = 1.5) -> 'XAImage': + """Applies a depth of field filter to the image, simulating a tilt & shift effect. + + :param focal_region: Two points defining a line within the image to focus the effect around (pixels around the line will be in focus), or None to use the center third of the image, defaults to None + :type focal_region: Union[tuple[tuple[int, int], tuple[int, int]], None] + :param intensity: Controls the amount of distance around the focal region to keep in focus. Higher values decrease the distance before the out-of-focus effect starts. Defaults to 10.0 + :type intensity: float + :param focal_region_saturation: Adjusts the saturation of the focial region. Higher values increase saturation. Defaults to 1.5 (1.5x default saturation) + :type focal_region_saturation: float + :return: The resulting image after applying the filter + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + if focal_region is None: + center_top = Quartz.CIVector.vectorWithX_Y_(self.size[0] / 2, self.size[1] / 3) + center_bottom = Quartz.CIVector.vectorWithX_Y_(self.size[0] / 2, self.size[1] / 3 * 2) + focal_region = (center_top, center_bottom) + else: + point1 = Quartz.CIVector.vectorWithX_Y_(focal_region[0]) + point2 = Quartz.CIVector.vectorWithX_Y_(focal_region[1]) + focal_region = (point1, point2) + + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CIDepthOfField") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(focal_region[0], "inputPoint0") + filter.setValue_forKey_(focal_region[1], "inputPoint1") + filter.setValue_forKey_(intensity, "inputRadius") + filter.setValue_forKey_(focal_region_saturation, "inputSaturation") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + return self.__update_image(uncropped)
+ +
[docs] def crystallize(self, crystal_size: float = 20.0) -> 'XAImage': + """Applies a crystallization filter to the image. Creates polygon-shaped color blocks by aggregating pixel values. + + :param crystal_size: The radius of the crystals, defaults to 20.0 + :type crystal_size: float + :return: The resulting image after applying the filter + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CICrystallize") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(crystal_size, "inputRadius") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + return self.__update_image(uncropped)
+ +
[docs] def comic(self) -> 'XAImage': + """Applies a comic filter to the image. Outlines edges and applies a color halftone effect. + + :return: The resulting image after applying the filter + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CIComicEffect") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + return self.__update_image(uncropped)
+ +
[docs] def pointillize(self, point_size: float = 20.0) -> 'XAImage': + """Applies a pointillization filter to the image. + + :param crystal_size: The radius of the points, defaults to 20.0 + :type crystal_size: float + :return: The resulting image after applying the filter + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CIPointillize") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(point_size, "inputRadius") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + return self.__update_image(uncropped)
+ +
[docs] def bloom(self, intensity: float = 0.5) -> 'XAImage': + """Applies a bloom effect to the image. Softens edges and adds a glow. + + :param intensity: The strength of the softening and glow effects, defaults to 0.5 + :type intensity: float + :return: The resulting image after applying the filter + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CIBloom") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(intensity, "inputIntensity") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + return self.__update_image(uncropped)
+ +
[docs] def monochrome(self, color: XAColor, intensity: float = 1.0) -> 'XAImage': + """Remaps the colors of the image to shades of the specified color. + + :param color: The color of map the image's colors to + :type color: XAColor + :param intensity: The strength of recoloring effect. Higher values map colors to darker shades of the provided color. Defaults to 1.0 + :type intensity: float + :return: The resulting image after applying the filter + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + ci_color = Quartz.CIColor.alloc().initWithColor_(color.xa_elem) + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CIColorMonochrome") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(ci_color, "inputColor") + filter.setValue_forKey_(intensity, "inputIntensity") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + return self.__update_image(uncropped)
+ +
[docs] def bump(self, center: Union[tuple[int, int], None] = None, radius: float = 300.0, curvature: float = 0.5) -> 'XAImage': + """Creates a concave (inward) or convex (outward) bump at the specified location within the image. + + :param center: The center point of the effect, or None to use the center of the image, defaults to None + :type center: Union[tuple[int, int], None] + :param radius: The radius of the bump in pixels, defaults to 300.0 + :type radius: float + :param curvature: Controls the direction and intensity of the bump's curvature. Positive values create convex bumps while negative values create concave bumps. Defaults to 0.5 + :type curvature: float + :return: The resulting image after applying the distortion + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + if center is None: + center = Quartz.CIVector.vectorWithX_Y_(self.size[0] / 2, self.size[1] / 2) + else: + center = Quartz.CIVector.vectorWithX_Y_(center[0], center[1]) + + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CIBumpDistortion") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(center, "inputCenter") + filter.setValue_forKey_(radius, "inputRadius") + filter.setValue_forKey_(curvature, "inputScale") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + return self.__update_image(uncropped)
+ +
[docs] def pinch(self, center: Union[tuple[int, int], None] = None, intensity: float = 0.5) -> 'XAImage': + """Creates an inward pinch distortion at the specified location within the image. + + :param center: The center point of the effect, or None to use the center of the image, defaults to None + :type center: Union[tuple[int, int], None] + :param intensity: Controls the scale of the pinch effect. Higher values stretch pixels away from the specified center to a greater degree. Defaults to 0.5 + :type intensity: float + :return: The resulting image after applying the distortion + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + if center is None: + center = Quartz.CIVector.vectorWithX_Y_(self.size[0] / 2, self.size[1] / 2) + else: + center = Quartz.CIVector.vectorWithX_Y_(center[0], center[1]) + + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CIPinchDistortion") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(center, "inputCenter") + filter.setValue_forKey_(intensity, "inputScale") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + return self.__update_image(uncropped)
+ +
[docs] def twirl(self, center: Union[tuple[int, int], None] = None, radius: float = 300.0, angle: float = 3.14) -> 'XAImage': + """Creates a twirl distortion by rotating pixels around the specified location within the image. + + :param center: The center point of the effect, or None to use the center of the image, defaults to None + :type center: Union[tuple[int, int], None] + :param radius: The pixel radius around the centerpoint that defines the area to apply the effect to, defaults to 300.0 + :type radius: float + :param angle: The angle of the twirl in radians, defaults to 3.14 + :type angle: float + :return: The resulting image after applying the distortion + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + if center is None: + center = Quartz.CIVector.vectorWithX_Y_(self.size[0] / 2, self.size[1] / 2) + else: + center = Quartz.CIVector.vectorWithX_Y_(center[0], center[1]) + + image = Quartz.CIImage.imageWithData_(self.data) + filter = Quartz.CIFilter.filterWithName_("CITwirlDistortion") + filter.setDefaults() + filter.setValue_forKey_(image, "inputImage") + filter.setValue_forKey_(center, "inputCenter") + filter.setValue_forKey_(radius, "inputRadius") + filter.setValue_forKey_(angle, "inputAngle") + uncropped = filter.valueForKey_(Quartz.kCIOutputImageKey) + return self.__update_image(uncropped)
+ +
[docs] def auto_enhance(self, correct_red_eye: bool = False, crop_to_features: bool = False, correct_rotation: bool = False) -> 'XAImage': + """Attempts to enhance the image by applying suggested filters. + + :param correct_red_eye: Whether to attempt red eye removal, defaults to False + :type correct_red_eye: bool, optional + :param crop_to_features: Whether to crop the image to focus on the main features with it, defaults to False + :type crop_to_features: bool, optional + :param correct_rotation: Whether attempt perspective correction by rotating the image, defaults to False + :type correct_rotation: bool, optional + :return: The resulting image after applying the enchantments + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + ci_image = Quartz.CIImage.imageWithData_(self.data) + options = { + Quartz.kCIImageAutoAdjustRedEye: correct_red_eye, + Quartz.kCIImageAutoAdjustCrop: crop_to_features, + Quartz.kCIImageAutoAdjustLevel: correct_rotation + } + enhancements = ci_image.autoAdjustmentFiltersWithOptions_(options) + print(enhancements) + for filter in enhancements: + filter.setValue_forKey_(ci_image, "inputImage") + ci_image = filter.outputImage() + return self.__update_image(ci_image)
+ +
[docs] def flip_horizontally(self) -> 'XAImage': + """Flips the image horizontally. + + :return: The image object, modifications included + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + flipped_image = AppKit.NSImage.alloc().initWithSize_(self.xa_elem.size()) + imageBounds = AppKit.NSMakeRect(0, 0, self.size[0], self.size[1]) + + transform = AppKit.NSAffineTransform.alloc().init() + transform.translateXBy_yBy_(self.size[0], 0) + transform.scaleXBy_yBy_(-1, 1) + + flipped_image.lockFocus() + transform.concat() + self.xa_elem.drawInRect_fromRect_operation_fraction_(imageBounds, Quartz.CGRectZero, AppKit.NSCompositingOperationCopy, 1.0) + flipped_image.unlockFocus() + self.xa_elem = flipped_image + self.modified = True + return self
+ +
[docs] def flip_vertically(self) -> 'XAImage': + """Flips the image vertically. + + :return: The image object, modifications included + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + flipped_image = AppKit.NSImage.alloc().initWithSize_(self.xa_elem.size()) + imageBounds = AppKit.NSMakeRect(0, 0, self.size[0], self.size[1]) + + transform = AppKit.NSAffineTransform.alloc().init() + transform.translateXBy_yBy_(0, self.size[1]) + transform.scaleXBy_yBy_(1, -1) + + flipped_image.lockFocus() + transform.concat() + self.xa_elem.drawInRect_fromRect_operation_fraction_(imageBounds, Quartz.CGRectZero, AppKit.NSCompositingOperationCopy, 1.0) + flipped_image.unlockFocus() + self.xa_elem = flipped_image + self.modified = True + return self
+ +
[docs] def rotate(self, degrees: float) -> 'XAImage': + """Rotates the image clockwise by the specified number of degrees. + + :param degrees: The number of degrees to rotate the image by + :type degrees: float + :return: The image object, modifications included + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + sinDegrees = abs(math.sin(degrees * math.pi / 180.0)) + cosDegrees = abs(math.cos(degrees * math.pi / 180.0)) + newSize = Quartz.CGSizeMake(self.size[1] * sinDegrees + self.size[0] * cosDegrees, self.size[0] * sinDegrees + self.size[1] * cosDegrees) + rotated_image = AppKit.NSImage.alloc().initWithSize_(newSize) + + imageBounds = Quartz.CGRectMake((newSize.width - self.size[0]) / 2, (newSize.height - self.size[1]) / 2, self.size[0], self.size[1]) + + transform = AppKit.NSAffineTransform.alloc().init() + transform.translateXBy_yBy_(newSize.width / 2, newSize.height / 2) + transform.rotateByDegrees_(degrees) + transform.translateXBy_yBy_(-newSize.width / 2, -newSize.height / 2) + + rotated_image.lockFocus() + transform.concat() + self.xa_elem.drawInRect_fromRect_operation_fraction_(imageBounds, Quartz.CGRectZero, AppKit.NSCompositingOperationCopy, 1.0) + rotated_image.unlockFocus() + self.xa_elem = rotated_image + self.modified = True + return self
+ +
[docs] def crop(self, size: tuple[int, int], corner: Union[tuple[int, int], None] = None) -> 'XAImage': + """Crops the image to the specified dimensions. + + :param size: The width and height of the resulting image + :type size: tuple[int, int] + :param corner: The bottom-left corner location from which to crop the image, or None to use (0, 0), defaults to None + :type corner: Union[tuple[int, int], None] + :return: The image object, modifications included + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + if corner is None: + # No corner provided -- use (0,0) by default + corner = (0, 0) + + cropped_image = AppKit.NSImage.alloc().initWithSize_(AppKit.NSMakeSize(size[0], size[1])) + imageBounds = AppKit.NSMakeRect(corner[0], corner[1], self.size[0], self.size[1]) + + cropped_image.lockFocus() + self.xa_elem.drawInRect_(imageBounds) + cropped_image.unlockFocus() + self.xa_elem = cropped_image + self.modified = True + return self
+ +
[docs] def scale(self, scale_factor_x: float, scale_factor_y: Union[float, None] = None) -> 'XAImage': + """Scales the image by the specified horizontal and vertical factors. + + :param scale_factor_x: The factor by which to scale the image in the X dimension + :type scale_factor_x: float + :param scale_factor_y: The factor by which to scale the image in the Y dimension, or None to match the horizontal factor, defaults to None + :type scale_factor_y: Union[float, None] + :return: The image object, modifications included + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + if scale_factor_y is None: + scale_factor_y = scale_factor_x + + scaled_image = AppKit.NSImage.alloc().initWithSize_(AppKit.NSMakeSize(self.size[0] * scale_factor_x, self.size[1] * scale_factor_y)) + imageBounds = AppKit.NSMakeRect(0, 0, self.size[0], self.size[1]) + + transform = AppKit.NSAffineTransform.alloc().init() + transform.scaleXBy_yBy_(scale_factor_x, scale_factor_y) + + scaled_image.lockFocus() + transform.concat() + self.xa_elem.drawInRect_fromRect_operation_fraction_(imageBounds, Quartz.CGRectZero, AppKit.NSCompositingOperationCopy, 1.0) + scaled_image.unlockFocus() + self.xa_elem = scaled_image + self.modified = True + return self
+ +
[docs] def resize(self, width: int, height: Union[int, None] = None) -> Self: + """Resizes the image to the specified width and height. + + :param width: The width of the resulting image, in pixels + :type width: int + :param height: The height of the resulting image, in pixels, or None to maintain width:height proportions, defaults to None + :type height: Union[int, None] + :return: The image object, modifications included + :rtype: Self + + .. versionadded:: 0.1.1 + """ + img_width = self.size[0] + img_height = self.size[1] + + resized_image = AppKit.NSImage.alloc().initWithSize_(AppKit.NSMakeSize(img_width * width / img_width, img_height * height / img_height)) + imageBounds = AppKit.NSMakeRect(0, 0, self.size[0], self.size[1]) + + transform = AppKit.NSAffineTransform.alloc().init() + transform.scaleXBy_yBy_(width / img_width, height / img_height) + + resized_image.lockFocus() + transform.concat() + self.xa_elem.drawInRect_fromRect_operation_fraction_(imageBounds, Quartz.CGRectZero, AppKit.NSCompositingOperationCopy, 1.0) + resized_image.unlockFocus() + self.xa_elem = resized_image + self.modified = True + return self
+ +
[docs] def pad(self, horizontal_border_width: int = 50, vertical_border_width: int = 50, pad_color: Union[XAColor, None] = None) -> 'XAImage': + """Pads the image with the specified color; adds a border around the image with the specified vertical and horizontal width. + + :param horizontal_border_width: The border width, in pixels, in the x-dimension, defaults to 50 + :type horizontal_border_width: int + :param vertical_border_width: The border width, in pixels, in the y-dimension, defaults to 50 + :type vertical_border_width: int + :param pad_color: The color of the border, or None for a white border, defaults to None + :type pad_color: Union[XAColor, None] + :return: The image object, modifications included + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + if pad_color is None: + # No color provided -- use white by default + pad_color = XAColor.white() + + new_width = self.size[0] + horizontal_border_width * 2 + new_height = self.size[1] + vertical_border_width * 2 + color_swatch = pad_color.make_swatch(new_width, new_height) + + color_swatch.xa_elem.lockFocus() + bounds = AppKit.NSMakeRect(horizontal_border_width, vertical_border_width, self.size[0], self.size[1]) + self.xa_elem.drawInRect_(bounds) + color_swatch.xa_elem.unlockFocus() + self.xa_elem = color_swatch.xa_elem + self.modified = True + return self
+ +
[docs] def overlay_image(self, image: 'XAImage', location: Union[tuple[int, int], None] = None, size: Union[tuple[int, int], None] = None) -> 'XAImage': + """Overlays an image on top of this image, at the specified location, with the specified size. + + :param image: The image to overlay on top of this image + :type image: XAImage + :param location: The bottom-left point of the overlaid image in the result, or None to use the bottom-left point of the background image, defaults to None + :type location: Union[tuple[int, int], None] + :param size: The width and height of the overlaid image, or None to use the overlaid's images existing width and height, or (-1, -1) to use the dimensions of the background image, defaults to None + :type size: Union[tuple[int, int], None] + :return: The image object, modifications included + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + if location is None: + # No location provided -- use the bottom-left point of the background image by default + location = (0, 0) + + if size is None: + # No dimensions provided -- use size of overlay image by default + size = image.size + elif size == (-1, -1): + # Use remaining width/height of background image + size = (self.size[0] - location[0], self.size[1] - location[1]) + elif size[0] == -1: + # Use remaining width of background image + provided height + size = (self.size[0] - location[0], size[1]) + elif size[1] == -1: + # Use remaining height of background image + provided width + size = (size[1], self.size[1] - location[1]) + + self.xa_elem.lockFocus() + bounds = AppKit.NSMakeRect(location[0], location[1], size[0], size[1]) + image.xa_elem.drawInRect_(bounds) + self.xa_elem.unlockFocus() + self.modified = True + return self.xa_elem
+ +
[docs] def overlay_text(self, text: str, location: Union[tuple[int, int], None] = None, font_size: float = 12, font_color: Union[XAColor, None] = None) -> 'XAImage': + """Overlays text of the specified size and color at the provided location within the image. + + :param text: The text to overlay onto the image + :type text: str + :param location: The bottom-left point of the start of the text, or None to use (5, 5), defaults to None + :type location: Union[tuple[int, int], None] + :param font_size: The font size, in pixels, of the text, defaults to 12 + :type font_size: float + :param font_color: The color of the text, or None to use black, defaults to None + :type font_color: XAColor + :return: The image object, modifications included + :rtype: XAImage + + .. versionadded:: 0.1.0 + """ + if location is None: + # No location provided -- use (5, 5) by default + location = (5, 5) + + if font_color is None: + # No color provided -- use black by default + font_color = XAColor.black() + + font = AppKit.NSFont.userFontOfSize_(font_size) + textRect = Quartz.CGRectMake(location[0], 0, self.size[0] - location[0], location[1]) + attributes = { + AppKit.NSFontAttributeName: font, + AppKit.NSForegroundColorAttributeName: font_color.xa_elem + } + + self.xa_elem.lockFocus() + AppKit.NSString.alloc().initWithString_(text).drawInRect_withAttributes_(textRect, attributes) + self.xa_elem.unlockFocus() + self.modified = True + return self
+ +
[docs] def extract_text(self) -> list[str]: + """Extracts and returns all visible text in the image. + + :return: The array of extracted text strings + :rtype: list[str] + + :Example: + + >>> import PyXA + >>> test = PyXA.XAImage("/Users/ExampleUser/Downloads/Example.jpg") + >>> print(test.extract_text()) + ["HERE'S TO THE", 'CRAZY ONES', 'the MISFITS the REBELS', 'THE TROUBLEMAKERS', ...] + + .. versionadded:: 0.1.0 + """ + # Prepare CGImage + ci_image = Quartz.CIImage.imageWithData_(self.data) + context = Quartz.CIContext.alloc().initWithOptions_(None) + img = context.createCGImage_fromRect_(ci_image, ci_image.extent()) + + # Handle request completion + extracted_strings = [] + def recognize_text_handler(request, error): + observations = request.results() + for observation in observations: + recognized_strings = observation.topCandidates_(1)[0].string() + extracted_strings.append(recognized_strings) + + # Perform request and return extracted text + import Vision + request = Vision.VNRecognizeTextRequest.alloc().initWithCompletionHandler_(recognize_text_handler) + request_handler = Vision.VNImageRequestHandler.alloc().initWithCGImage_options_(img, None) + request_handler.performRequests_error_([request], None) + return extracted_strings
+ +
[docs] def show_in_preview(self): + """Opens the image in preview. + + .. versionadded:: 0.0.8 + """ + global workspace + if workspace is None: + workspace = AppKit.NSWorkspace.sharedWorkspace() + + if not self.modified and self.file is not None and isinstance(self.file, XAPath): + workspace.openFile_withApplication_(self.file.path, "Preview") + else: + tmp_file = tempfile.NamedTemporaryFile() + with open(tmp_file.name, 'wb') as f: + f.write(self.xa_elem.TIFFRepresentation()) + + config = AppKit.NSWorkspaceOpenConfiguration.alloc().init() + config.setActivates_(True) + + img_url = XAPath(tmp_file.name).xa_elem + preview_url = XAPath("/System/Applications/Preview.app/").xa_elem + workspace.openURLs_withApplicationAtURL_configuration_completionHandler_([img_url], preview_url, config, None) + time.sleep(1)
+ +
[docs] def save(self, file_path: Union[XAPath, str, None] = None): + """Saves the image to a file on the disk. Saves to the original file (if there was one) by default. + + :param file_path: The path at which to save the image file. Any existing file at that location will be overwritten, defaults to None + :type file_path: Union[XAPath, str, None] + + .. versionadded:: 0.1.0 + """ + if file_path is None and self.file is not None: + file_path = self.file.path + elif isinstance(file_path, XAPath): + file_path = file_path.path + fm = AppKit.NSFileManager.defaultManager() + fm.createFileAtPath_contents_attributes_(file_path, self.xa_elem.TIFFRepresentation(), None)
+ +
[docs] def get_clipboard_representation(self) -> 'AppKit.NSImage': + """Gets a clipboard-codable representation of the iimage. + + When the clipboard content is set to an image, the image itself, including any modifications, is added to the clipboard. Pasting will then insert the image into the active document. + + :return: The raw NSImage object for this XAIMage + :rtype: AppKit.NSImage + + .. versionadded:: 0.1.0 + """ + return self.xa_elem
+ +
[docs] def __eq__(self, other): + return isinstance(other, XAImage) and self.xa_elem.TIFFRepresentation() == other.xa_elem.TIFFRepresentation()
+ + + + +
[docs]class XASoundList(XAList, XAClipboardCodable): + """A wrapper around lists of sounds that employs fast enumeration techniques. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASound, filter)
+ +
[docs] def file(self) -> list[XAPath]: + return [sound.file for sound in self]
+ +
[docs] def num_sample_frames(self) -> list[int]: + return [sound.num_sample_frames for sound in self]
+ +
[docs] def sample_rate(self) -> list[float]: + return [sound.sample_rate for sound in self]
+ +
[docs] def duration(self) -> list[float]: + return [sound.duration for sound in self]
+ +
[docs] def play(self) -> Self: + """Plays all sounds in the list simultaneously. + + :return: The list of sounds. + :rtype: Self + + .. versionadded:: 0.1.2 + """ + for sound in self: + sound.play() + return self
+ +
[docs] def pause(self) -> Self: + """Pauses playback of all sounds in the list. + + :return: The list of sounds. + :rtype: Self + + .. versionadded:: 0.1.2 + """ + for sound in self: + sound.pause() + return self
+ +
[docs] def resume(self) -> Self: + """Resumes playback of all sounds in the list. + + :return: The list of sounds. + :rtype: Self + + .. versionadded:: 0.1.2 + """ + for sound in self: + sound.resume() + return self
+ +
[docs] def stop(self) -> Self: + """Stops playback of all sounds in the list. + + :return: The list of sounds. + :rtype: Self + + .. versionadded:: 0.1.2 + """ + for sound in self: + sound.stop() + return self
+ +
[docs] def trim(self, start_time: float, end_time: float) -> 'XASoundList': + """Trims each sound in the list to the specified start and end time, in seconds. + + :param start_time: The start time in seconds + :type start_time: float + :param end_time: The end time in seconds + :type end_time: float + :return: The list of updated sounds + :rtype: XASoundList + + .. versionadded:: 0.1.2 + """ + return self._new_element([sound.trim(start_time, end_time) for sound in self], XASoundList)
+ +
[docs] def get_clipboard_representation(self) -> list[Union['AppKit.NSSound', 'AppKit.NSURL', str]]: + """Gets a clipboard-codable representation of each sound in the list. + + When the clipboard content is set to a list of sounds, each sound's raw sound data, its associated file URL, and its file path string are added to the clipboard. + + :return: The clipboard-codable form of the sound + :rtype: Any + + .. versionadded:: 0.1.0 + """ + return [self.xa_elem, self.file(), [x.path() for x in self.file()]]
+ +
[docs]class XASound(XAObject, XAClipboardCodable): + """A class for playing and interacting with audio files and data. + + .. versionadded:: 0.0.1 + """ +
[docs] def __init__(self, sound_reference: Union[str, XAURL, XAPath]): + self.file = None + + match sound_reference: + case str() as ref if "://" in ref: + self.file = XAURL(ref) + + case str() as ref if os.path.exists(ref): + self.file = XAPath(sound_reference) + + case str() as ref: + self.file = XAPath("/System/Library/Sounds/" + ref + ".aiff") + + case {"element": str() as ref}: + self.file = XASound(ref).file + + case {"element": XASound() as ref}: + self.file = ref.file + + case XAPath() as ref: + self.file = ref + + case XAURL() as ref: + self.file = ref + + case XASound() as sound: + self.file = sound.file + + self.duration: float #: The duration of the sound in seconds + + import AVFoundation + self.__audio_file = AVFoundation.AVAudioFile.alloc().initForReading_error_(self.file.xa_elem if self.file is not None else None, None)[0] + + self.__audio_engine = AVFoundation.AVAudioEngine.alloc().init() + self.__player_node = AVFoundation.AVAudioPlayerNode.alloc().init() + self.__audio_engine.attachNode_(self.__player_node) + + self.__audio_engine.connect_to_format_(self.__player_node, self.__audio_engine.mainMixerNode(), self.__audio_file.processingFormat()) + + self.__player_node.stop() + self.__audio_engine.stop() + + self.xa_elem = self.__audio_file
+ + @property + def num_sample_frames(self) -> int: + """The number of sample frames in the audio file. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.length() + + @property + def sample_rate(self) -> float: + """The sample rate for the sound format, in hertz. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.processingFormat().sampleRate() + + @property + def duration(self) -> float: + """The duration of the sound in seconds. + + .. versionadded:: 0.1.0 + """ + return self.num_sample_frames / self.sample_rate + +
[docs] def open(*sound_references: Union[str, XAPath, list[Union[str, XAPath]]]) -> Union['XASound', XASoundList]: + """Initializes one or more sounds from files. + + :param sound_references: The sound(s) to open + :type sound_references: Union[str, XAPath, list[Union[str, XAPath]]] + :return: The newly created sound object, or a list of sound objects + :rtype: Union[XASound, XASoundList] + + .. versionadded:: 0.1.0 + """ + if len(sound_references) == 1: + sound_references = sound_references[0] + + if isinstance(sound_references, list) or isinstance(sound_references, tuple): + return XASoundList({"element": sound_references}) + else: + return XASound(sound_references)
+ +
[docs] def beep(): + """Plays the system Beep sound. + + .. versionadded:: 0.1.0 + """ + AppleScript(""" + beep + delay 0.5 + """).run()
+ +
[docs] def play(self) -> Self: + """Plays the sound from the beginning. + + Audio playback runs in a separate thread. For the sound the play properly, you must keep the main thread alive over the duration of the desired playback. + + :return: A reference to this sound object. + :rtype: Self + + :Example: + + >>> import PyXA + >>> import time + >>> glass_sound = PyXA.sound("Glass") + >>> glass_sound.play() + >>> time.sleep(glass_sound.duration) + + .. seealso:: :func:`pause`, :func:`stop` + + .. versionadded:: 0.0.1 + """ + def play_sound(self): + self.__player_node.scheduleFile_atTime_completionHandler_(self.xa_elem, None, None) + self.__audio_engine.startAndReturnError_(None) + self.__player_node.play() + while self.__player_node.isPlaying(): + AppKit.NSRunLoop.currentRunLoop().runUntilDate_(datetime.now() + timedelta(seconds = 0.1)) + + self._spawn_thread(play_sound, [self]) + return self
+ +
[docs] def pause(self) -> Self: + """Pauses the sound. + + :return: A reference to this sound object. + :rtype: Self + + :Example: + + >>> import PyXA + >>> glass_sound = PyXA.sound("Glass") + >>> glass_sound.pause() + + .. seealso:: :func:`resume`, :func:`stop` + + .. versionadded:: 0.0.1 + """ + self.__player_node.pause() + return self
+ +
[docs] def resume(self) -> Self: + """Plays the sound starting from the time it was last paused at. + + Audio playback runs in a separate thread. For the sound the play properly, you must keep the main thread alive over the duration of the desired playback. + + :return: A reference to this sound object. + :rtype: Self + + :Example: + + >>> import PyXA + >>> glass_sound = PyXA.sound("Glass") + >>> glass_sound.resume() + + .. seealso:: :func:`pause`, :func:`play` + + .. versionadded:: 0.0.1 + """ + def play_sound(self): + self.__player_node.scheduleFile_atTime_completionHandler_(self.xa_elem, None, None) + self.__audio_engine.startAndReturnError_(None) + self.__player_node.play() + while self.__player_node.isPlaying(): + AppKit.NSRunLoop.currentRunLoop().runUntilDate_(datetime.now() + timedelta(seconds = 0.1)) + + self._spawn_thread(play_sound, [self]) + return self
+ +
[docs] def stop(self) -> 'XASound': + """Stops playback of the sound and rewinds it to the beginning. + + :return: A reference to this sound object. + :rtype: XASound + + :Example: + + >>> import PyXA + >>> glass_sound = PyXA.sound("Glass") + >>> glass_sound.stop() + + .. seealso:: :func:`pause`, :func:`play` + + .. versionadded:: 0.0.1 + """ + self.__audio_engine.stop() + return self
+ +
[docs] def set_volume(self, volume: float) -> Self: + """Sets the volume of the sound. + + :param volume: The desired volume of the sound in the range [0.0, 1.0]. + :type volume: int + :return: A reference to this sound object. + :rtype: Self + + :Example: + + >>> import PyXA + >>> glass_sound = PyXA.sound("Glass") + >>> glass_sound.set_volume(1.0) + + .. seealso:: :func:`volume` + + .. versionadded:: 0.0.1 + """ + self.__audio_engine.mainMixerNode().setOutputVolume_(volume) + return self
+ +
[docs] def volume(self) -> float: + """Returns the current volume of the sound. + + :return: The volume level of the sound. + :rtype: int + + :Example: + + >>> import PyXA + >>> glass_sound = PyXA.sound("Glass") + >>> print(glass_sound.volume()) + 1.0 + + .. seealso:: :func:`set_volume` + + .. versionadded:: 0.0.1 + """ + return self.__audio_engine.mainMixerNode().volume()
+ +
[docs] def loop(self, times: int) -> Self: + """Plays the sound the specified number of times. + + Audio playback runs in a separate thread. For the sound the play properly, you must keep the main thread alive over the duration of the desired playback. + + :param times: The number of times to loop the sound. + :type times: int + :return: A reference to this sound object. + :rtype: Self + + :Example: + + >>> import PyXA + >>> import time + >>> glass_sound = PyXA.sound("Glass") + >>> glass_sound.loop(10) + >>> time.sleep(glass_sound.duration * 10) + + .. versionadded:: 0.0.1 + """ + def play_sound(): + num_plays = 0 + while num_plays < times: + sound = XASound(self.file) + sound.play() + num_plays += 1 + time.sleep(self.duration) + + self._spawn_thread(play_sound) + return self
+ +
[docs] def trim(self, start_time: float, end_time: float) -> Self: + """Trims the sound to the specified start and end time, in seconds. + + This will create a momentary sound data file in the current working directory for storing the intermediary trimmed sound data. + + :param start_time: The start time in seconds + :type start_time: float + :param end_time: The end time in seconds + :type end_time: float + :return: The updated sound object + :rtype: Self + + .. versionadded:: 0.1.0 + """ + # Clear the temp data path + file_path = "sound_data_tmp.m4a" + if os.path.exists(file_path): + AppKit.NSFileManager.defaultManager().removeItemAtPath_error_(file_path, None) + + # Configure the export session + import AVFoundation + asset = AVFoundation.AVAsset.assetWithURL_(self.file.xa_elem) + export_session = AVFoundation.AVAssetExportSession.exportSessionWithAsset_presetName_(asset, AVFoundation.AVAssetExportPresetAppleM4A) + + import CoreMedia + start_time = CoreMedia.CMTimeMake(start_time * 100, 100) + end_time = CoreMedia.CMTimeMake(end_time * 100, 100) + time_range = CoreMedia.CMTimeRangeFromTimeToTime(start_time, end_time); + + export_session.setTimeRange_(time_range) + export_session.setOutputURL_(XAPath(file_path).xa_elem) + export_session.setOutputFileType_(AVFoundation.AVFileTypeAppleM4A) + + # Export to file path + waiting = False + def handler(): + nonlocal waiting + waiting = True + + export_session.exportAsynchronouslyWithCompletionHandler_(handler) + + while not waiting: + time.sleep(0.01) + + # Load the sound file back into active memory + self.__audio_file = AVFoundation.AVAudioFile.alloc().initForReading_error_(XAPath(file_path).xa_elem, None)[0] + self.xa_elem = self.__audio_file + AppKit.NSFileManager.defaultManager().removeItemAtPath_error_(file_path, None) + return self
+ +
[docs] def save(self, file_path: Union[XAPath, str]): + """Saves the sound to the specified file path. + + :param file_path: The path to save the sound to + :type file_path: Union[XAPath, str] + + .. versionadded:: 0.1.0 + """ + if isinstance(file_path, str): + file_path = XAPath(file_path) + + # Configure the export session + import AVFoundation + asset = AVFoundation.AVAsset.assetWithURL_(self.file.xa_elem) + export_session = AVFoundation.AVAssetExportSession.exportSessionWithAsset_presetName_(asset, AVFoundation.AVAssetExportPresetAppleM4A) + + import CoreMedia + start_time = CoreMedia.CMTimeMake(0, 100) + end_time = CoreMedia.CMTimeMake(self.duration * 100, 100) + time_range = CoreMedia.CMTimeRangeFromTimeToTime(start_time, end_time); + + export_session.setTimeRange_(time_range) + export_session.setOutputURL_(file_path.xa_elem) + # export_session.setOutputFileType_(AVFoundation.AVFileTypeAppleM4A) + + # Export to file path + waiting = False + def handler(): + nonlocal waiting + waiting = True + + export_session.exportAsynchronouslyWithCompletionHandler_(handler) + + while not waiting: + time.sleep(0.01)
+ +
[docs] def get_clipboard_representation(self) -> list[Union['AppKit.NSSound', 'AppKit.NSURL', str]]: + """Gets a clipboard-codable representation of the sound. + + When the clipboard content is set to a sound, the raw sound data, the associated file URL, and the path string of the file are added to the clipboard. + + :return: The clipboard-codable form of the sound + :rtype: Any + + .. versionadded:: 0.0.8 + """ + return [self.xa_elem, self.file.xa_elem, self.file.xa_elem.path()]
+ + + +
[docs]class XAVideo(XAObject): + """A class for interacting with video files and data. + + .. versionadded:: 0.1.0 + """ +
[docs] def __init__(self, video_reference: Union[str, XAURL, XAPath]): + if isinstance(video_reference, str): + # References is to some kind of path or URL + if "://" in video_reference: + video_reference = XAURL(video_reference) + else: + video_reference = XAPath(video_reference) + + import AVFoundation + self.xa_elem = AVFoundation.AVURLAsset.alloc().initWithURL_options_(video_reference.xa_elem, { AVFoundation.AVURLAssetPreferPreciseDurationAndTimingKey: True })
+ +
[docs] def reverse(self, output_file: Union[XAPath, str]): + """Reverses the video and exports the result to the specified output file path. + + :param output_file: The file to export the reversed video to + :type output_file: Union[XAPath, str] + + .. versionadded:: 0.1.0 + """ + if isinstance(output_file, str): + output_file = XAPath(output_file) + output_url = output_file.xa_elem + + import AVFoundation + reader = AVFoundation.AVAssetReader.alloc().initWithAsset_error_(self.xa_elem, None)[0] + + video_track = self.xa_elem.tracksWithMediaType_(AVFoundation.AVMediaTypeVideo)[-1] + + reader_output = AVFoundation.AVAssetReaderTrackOutput.alloc().initWithTrack_outputSettings_(video_track, { Quartz.CoreVideo.kCVPixelBufferPixelFormatTypeKey: Quartz.CoreVideo.kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange }) + + reader.addOutput_(reader_output) + reader.startReading() + + samples = [] + while sample := reader_output.copyNextSampleBuffer(): + samples.append(sample) + + writer = AVFoundation.AVAssetWriter.alloc().initWithURL_fileType_error_(output_url, AVFoundation.AVFileTypeMPEG4, None)[0] + + writer_settings = { + AVFoundation.AVVideoCodecKey: AVFoundation.AVVideoCodecTypeH264, + AVFoundation.AVVideoWidthKey: video_track.naturalSize().width, + AVFoundation.AVVideoHeightKey: video_track.naturalSize().height, + AVFoundation.AVVideoCompressionPropertiesKey: { AVFoundation.AVVideoAverageBitRateKey: video_track.estimatedDataRate() } + } + + format_hint = video_track.formatDescriptions()[-1] + writer_input = AVFoundation.AVAssetWriterInput.alloc().initWithMediaType_outputSettings_sourceFormatHint_(AVFoundation.AVMediaTypeVideo, writer_settings, format_hint) + + writer_input.setExpectsMediaDataInRealTime_(False) + + import CoreMedia + pixel_buffer_adaptor = AVFoundation.AVAssetWriterInputPixelBufferAdaptor.alloc().initWithAssetWriterInput_sourcePixelBufferAttributes_(writer_input, None) + writer.addInput_(writer_input) + writer.startWriting() + writer.startSessionAtSourceTime_(CoreMedia.CMSampleBufferGetPresentationTimeStamp(samples[0])) + + for index, sample in enumerate(samples): + presentation_time = CoreMedia.CMSampleBufferGetPresentationTimeStamp(sample) + + image_buffer_ref = CoreMedia.CMSampleBufferGetImageBuffer(samples[len(samples) - index - 1]) + if image_buffer_ref is not None: + pixel_buffer_adaptor.appendPixelBuffer_withPresentationTime_(image_buffer_ref, presentation_time) + + while not writer_input.isReadyForMoreMediaData(): + time.sleep(0.1) + + self._spawn_thread(writer.finishWriting) + return AVFoundation.AVAsset.assetWithURL_(output_url)
+ +
[docs] def show_in_quicktime(self): + """Shows the video in QuickTime Player. + + This will create a momentary video data file in the current working directory to store intermediary video data. + + .. versionadded:: 0.1.0 + """ + global workspace + if workspace is None: + workspace = AppKit.NSWorkspace.sharedWorkspace() + + self.save("video-data-tmp.mp4") + + video_url = XAPath(os.getcwd() + "/video-data-tmp.mp4").xa_elem + quicktime_url = XAPath("/System/Applications/QuickTime Player.app").xa_elem + workspace.openURLs_withApplicationAtURL_configuration_completionHandler_([video_url], quicktime_url, None, None) + time.sleep(1) + + AppKit.NSFileManager.defaultManager().removeItemAtPath_error_(video_url.path(), None)
+ +
[docs] def save(self, file_path: Union[XAPath, str]): + """Saves the video at the specified file path. + + :param file_path: The path to save the video at + :type file_path: Union[XAPath, str] + + .. versionadded:: 0.1.0 + """ + if isinstance(file_path, str): + file_path = XAPath(file_path) + + # Configure the export session + import AVFoundation + export_session = AVFoundation.AVAssetExportSession.exportSessionWithAsset_presetName_(self.xa_elem, AVFoundation.AVAssetExportPresetHighestQuality) + + import CoreMedia + start_time = CoreMedia.CMTimeMake(0, 100) + end_time = CoreMedia.CMTimeMake(self.xa_elem.duration().value * self.xa_elem.duration().timescale, 100) + time_range = CoreMedia.CMTimeRangeFromTimeToTime(start_time, end_time); + + export_session.setTimeRange_(time_range) + export_session.setOutputURL_(file_path.xa_elem) + + # Export to file path + waiting = False + def handler(): + nonlocal waiting + waiting = True + + export_session.exportAsynchronouslyWithCompletionHandler_(handler) + + while not waiting: + time.sleep(0.01)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/XABaseScriptable.html b/docs/_modules/PyXA/XABaseScriptable.html new file mode 100644 index 0000000..4f96699 --- /dev/null +++ b/docs/_modules/PyXA/XABaseScriptable.html @@ -0,0 +1,531 @@ + + + + + + PyXA.XABaseScriptable — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.XABaseScriptable

+from enum import Enum
+from typing import Union, Self
+import threading
+import AppKit
+import ScriptingBridge
+
+from PyXA import XABase
+
+import time
+
+from .XAProtocols import XACloseable
+from .XATypes import XARectangle
+
+
+
+
+
[docs]class XASBPrintable(XABase.XAObject): + def __print_dialog(self, show_prompt: bool = True): + """Displays a print dialog.""" + try: + if self.xa_scel is not None: + self.xa_scel.printWithProperties_(None) + else: + self.xa_elem.printWithProperties_(None) + except: + try: + if self.xa_scel is not None: + self.xa_scel.print_withProperties_printDialog_(self.xa_scel, None, show_prompt) + else: + self.xa_elem.print_withProperties_printDialog_(self.xa_elem, None, show_prompt) + except: + if self.xa_scel is not None: + self.xa_scel.print_printDialog_withProperties_(self.xa_scel, show_prompt, None) + else: + self.xa_elem.print_printDialog_withProperties_(self.xa_elem, show_prompt, None) + +
[docs] def print(self, properties: dict = None, print_dialog = None) -> XABase.XAObject: + """Prints a document, window, or item. + + :return: A reference to the PyXA objects that called this method. + :rtype: XABase.XAObject + + .. versionchanged:: 0.0.2 + Printing now initialized from a separate thread to avoid delaying main thread + + .. versionadded:: 0.0.1 + """ + print_thread = threading.Thread(target=self.__print_dialog, name="Print", daemon=True) + print_thread.start() + return self
+ + + + +
[docs]class XASBApplication(XABase.XAApplication): + """An application class for scriptable applications. + + .. seealso:: :class:`XABase.XAApplication` + """ +
[docs] class SaveOption(Enum): + """Options for whether to save documents when closing them. + """ + YES = XABase.OSType('yes ') #: Save the file + NO = XABase.OSType('no ') #: Do not save the file + ASK = XABase.OSType('ask ') #: Ask user whether to save the file (bring up dialog)
+ +
[docs] class PrintErrorHandling(Enum): + """Options for how to handle errors while printing. + """ + STANDARD = 'lwst' #: Standard PostScript error handling + DETAILED = 'lwdt' #: Print a detailed report of PostScript errors
+ + def __init__(self, properties): + super().__init__(properties) + self.__xa_scel = None + self.xa_wcls = XASBWindow + + @property + def xa_scel(self) -> 'ScriptingBridge.SBApplication': + if self.__xa_scel is None: + self.__xa_scel = ScriptingBridge.SBApplication.alloc().initWithURL_(self.xa_elem.bundleURL()) + return self.__xa_scel + + @xa_scel.setter + def xa_scel(self, xa_scel: 'ScriptingBridge.SBObject'): + self.__xa_scel = xa_scel + + @property + def front_window(self) -> 'XASBWindow': + """The front window of the application. + """ + return self._new_element(self.xa_scel.windows()[0], self.xa_wcls) + +
[docs] def activate(self) -> Self: + """Activates the application. + + :return: The application object + :rtype: Self + + .. versionadded:: 0.1.0.2 + """ + self.xa_scel.activate() + return self
+ +
[docs] def windows(self, filter: dict = None) -> 'XASBWindowList': + """Returns a list of windows, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned windows will have, or None + :type filter: Union[dict, None] + :return: The list of windows + :rtype: XASBWindowList + + .. versionadded:: 0.0.4 + """ + try: + return self._new_element(self.xa_scel.windows(), XASBWindowList) + except AttributeError: + return self._new_element([], XASBWindowList)
+ +
[docs] def set_property(self, property_name, value): + if "_" in property_name: + parts = property_name.split("_") + titled_parts = [part.title() for part in parts[1:]] + property_name = parts[0] + "".join(titled_parts) + self.xa_scel.setValue_forKey_(value, property_name)
+ + + + +
[docs]class XASBWindowList(XABase.XAList): + """A wrapper around a list of windows. + + .. versionadded:: 0.0.5 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + super().__init__(properties, obj_class, filter) + if obj_class is None or issubclass(self.xa_prnt.xa_wcls, obj_class): + self.xa_ocls = self.xa_prnt.xa_wcls + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def index(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("index") or [])
+ +
[docs] def bounds(self) -> list[XARectangle]: + ls = self.xa_elem.arrayByApplyingSelector_("bounds") or [] + return [XARectangle(value.rectValue().origin.x, value.rectValue().origin.y, value.rectValue().size.width, value.rectValue().size.height) for value in ls]
+ +
[docs] def closeable(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("closeable") or [])
+ +
[docs] def resizable(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("resizable") or [])
+ +
[docs] def visible(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("visible") or [])
+ +
[docs] def zoomable(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("zoomable") or [])
+ +
[docs] def zoomed(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("zoomed") or [])
+ +
[docs] def miniaturizable(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("miniaturizable") or [])
+ +
[docs] def miniaturized(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("miniaturized") or [])
+ +
[docs] def by_name(self, name: str) -> Union['XASBWindow', None]: + return self.by_property("name", name)
+ +
[docs] def by_id(self, id: int) -> Union['XASBWindow', None]: + return self.by_property("id", id)
+ +
[docs] def by_index(self, index: int) -> Union['XASBWindow', None]: + return self.by_property("index", index)
+ +
[docs] def by_bounds(self, bounds: Union[tuple[int, int, int, int], XARectangle]) -> Union['XASBWindow', None]: + x = bounds[0] + y = bounds[1] + w = bounds[2] + h = bounds[3] + value = AppKit.NSValue.valueWithRect_(AppKit.NSMakeRect(x, y, w, h)) + return self.by_property("bounds", value)
+ +
[docs] def by_closeable(self, closeable: bool) -> Union['XASBWindow', None]: + return self.by_property("closeable", closeable)
+ +
[docs] def by_resizable(self, resizable: bool) -> Union['XASBWindow', None]: + return self.by_property("resizable", resizable)
+ +
[docs] def by_visible(self, visible: bool) -> Union['XASBWindow', None]: + return self.by_property("visible", visible)
+ +
[docs] def by_zoomable(self, zoomable: bool) -> Union['XASBWindow', None]: + return self.by_property("zoomable", zoomable)
+ +
[docs] def by_zoomed(self, zoomed: bool) -> Union['XASBWindow', None]: + return self.by_property("zoomed", zoomed)
+ +
[docs] def by_miniaturizable(self, miniaturizable: bool) -> Union['XASBWindow', None]: + return self.by_property("miniaturizable", miniaturizable)
+ +
[docs] def by_miniaturized(self, miniaturized: bool) -> Union['XASBWindow', None]: + return self.by_property("miniaturized", miniaturized)
+ +
[docs] def collapse(self): + """Collapses all windows in the list. + + .. versionadded:: 0.0.5 + """ + for window in self: + while not window.miniaturized: + window.collapse() + time.sleep(0.01)
+ + def uncollapse(self): + """Uncollapses all windows in the list. + + .. versionadded:: 0.1.1 + """ + for window in self: + while window.miniaturized: + window.uncollapse() + time.sleep(0.01) + +
[docs] def uncollapse(self): + """Uncollapses all windows in the list. + + .. versionadded:: 0.0.5 + """ + for window in self: + window.uncollapse()
+ +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of each window in the list. + + When the clipboard content is set to a list of windows, the name of each window is added to the clipboard. + + :return: A list of window names + :rtype: str + + .. versionadded:: 0.0.8 + """ + return self.name()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASBWindow(XABase.XAObject, XACloseable): + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The title of the window. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property("name", name) + + @property + def id(self) -> int: + """The unique identifier for the window. + """ + return self.xa_elem.id() + + @property + def index(self) -> int: + """The index of the window, ordered front to back. + """ + return self.xa_elem.index() + + @index.setter + def index(self, index: int): + self.set_property('index', index) + + @property + def bounds(self) -> XARectangle: + """The bounding rectangle of the window. + """ + rect = self.xa_elem.bounds() + origin = rect.origin + size = rect.size + return XARectangle(origin.x, origin.y, size.width, size.height) + + @bounds.setter + def bounds(self, bounds: Union[tuple[int, int, int, int], XARectangle]): + x = bounds[0] + y = bounds[1] + w = bounds[2] + h = bounds[3] + value = AppKit.NSValue.valueWithRect_(AppKit.NSMakeRect(x, y, w, h)) + self.set_property("bounds", value) + + @property + def closeable(self) -> bool: + """Whether the window has a close button. + """ + return self.xa_elem.closeable() + + @property + def resizable(self) -> bool: + """Whether the window can be resized. + """ + return self.xa_elem.resizable() + + @property + def visible(self) -> bool: + """Whether the window is currently visible. + """ + return self.xa_elem.visible() + + @visible.setter + def visible(self, visible: bool): + self.set_property('visible', visible) + + @property + def zoomable(self) -> bool: + """Whether the window has a zoom button. + """ + return self.xa_elem.zoomable() + + @property + def zoomed(self) -> bool: + """Whether the window is currently zoomed. + """ + return self.xa_elem.zoomed() + + @zoomed.setter + def zoomed(self, zoomed: bool): + self.set_property("zoomed", zoomed) + + @property + def miniaturizable(self) -> bool: + """Whether the window can be miniaturized. + """ + try: + return self.xa_elem.miniaturizable() + except Exception as e: + print(e) + + @property + def miniaturized(self) -> bool: + """Whether the window is currently miniaturized. + """ + try: + return self.xa_elem.miniaturized() + except Exception as e: + print(e) + + @miniaturized.setter + def miniaturized(self, miniaturized: bool): + try: + self.set_property("miniaturized", miniaturized) + except Exception as e: + print(e) + +
[docs] def collapse(self) -> Self: + """Collapses (minimizes) the window. + + :return: A reference to the now-collapsed window object. + :rtype: Self + + .. versionadded:: 0.0.4 + """ + try: + self.set_property("miniaturized", True) + except: + try: + self.set_property("minimized", True) + except: + self.set_property("collapsed", True) + return self
+ +
[docs] def uncollapse(self) -> Self: + """Uncollapses (unminimizes/expands) the window. + + :return: A reference to the uncollapsed window object. + :rtype: Self + + .. versionadded:: 0.0.4 + """ + try: + self.set_property("miniaturized", False) + except: + try: + self.set_property("minimized", False) + except: + self.set_property("collapsed", False) + return self
+ +
[docs] def toggle_zoom(self) -> Self: + """Uncollapses (unminimizes/expands) the window. + + :return: A reference to the uncollapsed window object. + :rtype: Self + + .. deprecated:: 0.1.0.2 + + Set the :attr:`zoomed` attribute instead. + + .. versionadded:: 0.0.4 + """ + self.zoomed = not self.zoomed + self.set_property("zoomed", self.zoomed) + return self
+ +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of the window. + + When the clipboard content is set to a window, the name of the window is added to the clipboard. + + :return: The name of the window + :rtype: str + + .. versionadded:: 0.0.8 + """ + return self.name
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/XAErrors.html b/docs/_modules/PyXA/XAErrors.html new file mode 100644 index 0000000..f9c88d9 --- /dev/null +++ b/docs/_modules/PyXA/XAErrors.html @@ -0,0 +1,133 @@ + + + + + + PyXA.XAErrors — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.XAErrors

+
[docs]class ApplicationNotFoundError(Exception): + def __init__(self, name: str): + self.name = name + Exception.__init__(self, name) + + def __str__(self): + return f"Application {self.name} not found."
+ +
[docs]class AuthenticationError(Exception): + def __init__(self, message: str): + self.message = message + Exception.__init__(self, message) + + def __str__(self): + return f"Failed due to insufficient authorization. {self.message}"
+ +
[docs]class InvalidPredicateError(Exception): + def __init__(self, message: str): + self.message = message + Exception.__init__(self, message) + + def __str__(self): + return f"Could not construct valid predicate format. {self.message}"
+ +
[docs]class UnconstructableClassError(Exception): + def __init__(self, message: str): + self.message = message + Exception.__init__(self, message) + + def __str__(self): + return f"Could not create new element. {self.message}"
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/XAProtocols.html b/docs/_modules/PyXA/XAProtocols.html new file mode 100644 index 0000000..d5ad5ad --- /dev/null +++ b/docs/_modules/PyXA/XAProtocols.html @@ -0,0 +1,321 @@ + + + + + + PyXA.XAProtocols — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.XAProtocols

+from typing import Any, Union
+
+import AppKit
+
+
+
[docs]class XAProtocol(): + """A meta-class for protocols that other classes can adhere to. + """
+ + +
[docs]class XAShowable(XAProtocol): + """A protocol for classes that can be shown via a :func:`show` method. + + .. versionchanged:: 0.0.8 + Moved from XABase into XAProtocols + + .. versionadded:: 0.0.1 + """ + +
[docs] def show(self) -> 'XAShowable': + """Shows the object. + + Child classes of XAShowable should redefine this method as necessary. + + :return: A reference to the PyXA object that called this method. + :rtype: XAShowable + + .. versionadded:: 0.0.1 + """ + self.xa_elem.show() + return self
+ + +
[docs]class XASelectable(XAProtocol): + """A protocol for classes that can be selected via a :func:`select` method. + + .. versionchanged:: 0.0.8 + Moved from XABase into XAProtocols + + .. versionadded:: 0.0.1 + """ +
[docs] def select(self) -> 'XASelectable': + """Selects the object This may open a new window, depending on which kind of object and application it acts on. + + Child classes of XASelectable should redefine this method as necessary. + + :return: A reference to the PyXA object that called this method. + :rtype: XASelectable + + .. versionadded:: 0.0.1 + """ + self.xa_elem.select() + return self
+ + +
[docs]class XADeletable(XAProtocol): + """A protocol for classes that can be deleted via a :func:`delete` method. + + .. versionchanged:: 0.0.8 + Moved from XABase into XAProtocols + + .. versionadded:: 0.0.1 + """ +
[docs] def delete(self): + """Deletes the object. + + Child classes of XADeletable should redefine this method as necessary. + + :return: A reference to the PyXA object that called this method. + :rtype: XAShowable + + :return: A reference to the PyXA object that called this method. + :rtype: XAObject + + .. versionadded:: 0.0.1 + """ + self.xa_elem.delete()
+ + +
[docs]class XAPrintable(XAProtocol): + """A protocol for classes that can be printed. + + .. versionadded:: 0.0.8 + """ +
[docs] def print(self, print_properties: Union[dict, None] = None, show_dialog: bool = True) -> 'XAPrintable': + """Prints the object. + + Child classes of XAPrintable should override this method as necessary. + + :param show_dialog: Whether to show the print dialog, defaults to True + :type show_dialog: bool, optional + :param print_properties: Properties to set for printing, defaults to None + :type print_properties: Union[dict, None], optional + :return: A reference to the PyXA object that called this method. + :rtype: XACanPrintPath + + .. versionadded:: 0.0.8 + """ + if print_properties is None: + print_properties = {} + self.xa_elem.printWithProperties_printDialog_(print_properties, show_dialog) + return self
+ + +
[docs]class XACloseable(XAProtocol): +
[docs] def close(self, save: 'XACloseable.SaveOption' = None, location: Union[str, None] = None): + """Closes the object. + + Child classes of XACloseable should override this method as necessary. + + .. versionadded:: 0.0.8 + """ + if save is None: + save = 1852776480 + else: + save = save.value + + if location is not None: + self.xa_elem.closeSaving_savingIn_(save, AppKit.NSURL.alloc().initFileURLWithPath_(location)) + else: + self.xa_elem.closeSaving_savingIn_(save, None)
+ + +
[docs]class XAClipboardCodable(XAProtocol): + """A protocol for classes that can be copied to the clipboard. + + .. versionadded:: 0.0.8 + """ +
[docs] def get_clipboard_representation(self) -> Any: + """Gets a clipboard-codable representation of the object. + + This method should be overriden where reasonable in child classes of XAClipboardCodable. + + :return: The clipboard-codable form of the content + :rtype: Any + """ + return str(self)
+ +
[docs]class XAImageLike(XAProtocol): + """A protocol for classes that can be treated the same as :class:`~PyXA.XABase.XAImage`. + + .. versionadded:: 0.1.0 + """ +
[docs] def get_image_representation(self) -> Any: + """Gets a representation of the object that can be used to initialize an :class:`~PyXA.XABase.XAImage` object. + + This method must be overriden in child classes of XAImageLike. + + :return: The XAImage-compatible form of the object, or None if no such form exists + :rtype: Any + """ + return None
+ +
[docs]class XAPathLike(XAProtocol): + """A protocol for classes that can be treated the same as :class:`~PyXA.XABase.XAPath`. + + .. versionadded:: 0.1.0 + """ +
[docs] def get_path_representation(self) -> Any: + """Gets a representation of the object that can be used to initialize an :class:`~PyXA.XABase.XAPath` object. + + This method must be overriden in child classes of XAPathLike. + + :return: The XAPath-compatible form of the object, or None if no such form exists + :rtype: Any + """ + return None
+ + +
[docs]class XACanOpenPath(XAProtocol): + """A protocol for classes that can open an item at a given path (either in its default application or in an application whose PyXA object extends this class). + + .. versionchanged:: 0.0.8 + Moved from XABase into XAProtocols + + .. versionadded:: 0.0.1 + """ +
[docs] def open(self, target: str) -> Any: + """Opens the file/website at the given filepath/URL. + + Child classes of XACanOpenPath should redefine this method as necessary. + + :param target: The path to a file or the URL to a website to open. + :type target: str + :return: A reference to the opened document or element, or None if no document/element was created or it cannot be found + :rtype: Any + + .. versionadded:: 0.0.1 + """ + target = AppKit.NSURL.alloc().initFileURLWithPath_(target) + self.xa_wksp.openURLs_withAppBundleIdentifier_options_additionalEventParamDescriptor_launchIdentifiers_([target], self.xa_elem.bundleIdentifier(), 0, None, None)
+ + +
[docs]class XACanPrintPath(XAProtocol): + """A protocol for classes that can print a file at a given path (either in its default application or in an application whose PyXA object extends this class). + + .. versionchanged:: 0.0.8 + Moved from XABase into XAProtocols + + .. versionadded:: 0.0.1 + """ +
[docs] def print(self, target: str) -> 'XACanPrintPath': + """Prints the file/website at the given filepath/URL. + + Child classes of XACanPrintPath should redefine this method as necessary. + + :param target: The path to a file or the URL to a website to print. + :type target: str + :return: A reference to the PyXA object that called this method. + :rtype: XACanPrintPath + + .. versionadded:: 0.0.1 + """ + if target.startswith("/"): + target = AppKit.NSURL.alloc().initFileURLWithPath_(target) + else: + target = AppKit.NSURL.alloc().initWithString_(target) + self.xa_elem.print_(target) + return self
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Automator.html b/docs/_modules/PyXA/apps/Automator.html new file mode 100644 index 0000000..0cb0b5c --- /dev/null +++ b/docs/_modules/PyXA/apps/Automator.html @@ -0,0 +1,1108 @@ + + + + + + PyXA.apps.Automator — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Automator

+""".. versionadded:: 0.0.4
+
+Control Automator using JXA-like syntax.
+"""
+
+from enum import Enum
+from typing import Any, Union
+
+import AppKit
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+from ..XAProtocols import XACanOpenPath
+
+
[docs]class XAAutomatorApplication(XABaseScriptable.XASBApplication, XACanOpenPath): + """A class for managing and interacting with Automator.app. + + .. seealso:: :class:`XAAutomatorWindow`, :class:`XAAutomatorDocument` + + .. versionadded:: 0.0.4 + """ +
[docs] class WarningLevel(Enum): + """Options for warning level in regard to likelihood of data loss. + """ + IRREVERSIBLE = XABase.OSType("irrv") + NONE = XABase.OSType('none') + REVERSIBLE = XABase.OSType('rvbl')
+ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XAAutomatorWindow + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether Automator is the active application. + """ + return self.xa_scel.frontmost() + + @frontmost.setter + def frontmost(self, frontmost: bool): + self.set_property('frontmost', frontmost) + + @property + def version(self) -> str: + """The version of Automator.app. + """ + return self.xa_scel.version() + +
[docs] def open(self, path: Union[str, AppKit.NSURL]) -> 'XAAutomatorWorkflow': + """Opens the file at the given filepath. + + :param target: The path to a file or the URL to a website to open. + :type target: Union[str, AppKit.NSURL] + :return: A reference to the PyXA object that called this method. + :rtype: XAObject + + .. versionadded:: 0.0.1 + """ + if not isinstance(path, AppKit.NSURL): + path = XABase.XAPath(path) + self.xa_wksp.openURLs_withAppBundleIdentifier_options_additionalEventParamDescriptor_launchIdentifiers_([path.xa_elem], self.xa_elem.bundleIdentifier(), 0, None, None) + return self.workflows()[0]
+ +
[docs] def add(self, action: 'XAAutomatorAction', workflow: 'XAAutomatorWorkflow', index: int = -1) -> 'XAAutomatorApplication': + """Adds the specified action to a workflow at the specified index. + + :param action: The action to add + :type action: XAAutomatorAction + :param workflow: The workflow to add the action to + :type workflow: XAAutomatorWorkflow + :param index: The index at which to add the action, defaults to -1 + :type index: int, optional + :return: A reference to the application object + :rtype: XAAutomatorApplication + + .. versionadded:: 0.0.4 + """ + self.xa_scel.add_to_atIndex_(action.xa_elem, workflow.xa_elem, index) + return self
+ + +
[docs] def documents(self, filter: Union[dict, None] = None) -> 'XAAutomatorDocumentList': + """Returns a list of documents, as PyXA objects, matching the given filter. + + :param filter: Keys and values to filter documents by, defaults to None + :type filter: dict, optional + :return: A PyXA list object wrapping a list of documents + :rtype: XAAutomatorDocumentList + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_scel.documents(), XAAutomatorDocumentList, filter)
+ +
[docs] def automator_actions(self, filter: Union[dict, None] = None) -> 'XAAutomatorActionList': + """Returns a list of Automator actions, as PyXA objects, matching the given filter. + + :param filter: Keys and values to filter actions by, defaults to None + :type filter: dict, optional + :return: A PyXA list object wrapping a list of actions + :rtype: XAAutomatorActionList + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_scel.AutomatorActions(), XAAutomatorActionList, filter)
+ +
[docs] def variables(self, filter: Union[dict, None] = None) -> 'XAAutomatorVariableList': + """Returns a list of Automator variables, as PyXA objects, matching the given filter. + + :param filter: Keys and values to filter variables by, defaults to None + :type filter: dict, optional + :return: A PyXA list object wrapping a list of variables + :rtype: XAAutomatorVariableList + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_scel.variables(), XAAutomatorVariableList, filter)
+ +
[docs] def workflows(self, filter: Union[dict, None] = None) -> 'XAAutomatorWorkflowList': + """Returns a list of Automator workflows, as PyXA objects, matching the given filter. + + :param filter: Keys and values to filter workflows by, defaults to None + :type filter: dict, optional + :return: A PyXA list object wrapping a list of workflows + :rtype: XAAutomatorWorkflowList + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_scel.workflows(), XAAutomatorWorkflowList, filter)
+ +
[docs] def make(self, specifier: str, properties: dict): + """Creates a new element of the given specifier class without adding it to any list. + + Use :func:`XABase.XAList.push` to push the element onto a list. + + :param specifier: The classname of the object to create + :type specifier: str + :param properties: The properties to give the object + :type properties: dict + :return: A PyXA wrapped form of the object + :rtype: XABase.XAObject + + .. versionadded:: 0.0.4 + """ + obj = self.xa_scel.classForScriptingClass_(specifier).alloc().initWithProperties_(properties) + + if specifier == "workflow": + if "path" not in properties and "name" in properties: + fm = AppKit.NSFileManager.defaultManager() + properties.update({"path": f"{fm.homeDirectoryForCurrentUser().path()}/Downloads/{properties.get('name')}.workflow"}) + elif not properties.get("path").endswith(".workflow"): + properties.update({"path": properties.get("path") + ".workflow"}) + + obj = self.xa_scel.classForScriptingClass_(specifier).alloc().initWithProperties_(properties) + return self._new_element(obj, XAAutomatorWorkflow) + elif specifier == "variable": + return self._new_element(obj, XAAutomatorVariable) + elif specifier == "document": + return self._new_element(obj, XAAutomatorDocument) + elif specifier == "action": + return self._new_element(obj, XAAutomatorAction) + elif specifier == "requiredResource": + return self._new_element(obj, XAAutomatorRequiredResource) + elif specifier == "setting": + return self._new_element(obj, XAAutomatorSetting)
+ + + + +
[docs]class XAAutomatorWindow(XABaseScriptable.XASBWindow): + """A class for managing and interacting with Automator windows. + + .. seealso:: :class:`XAAutomatorApplication` + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def floating(self) -> bool: + """Whether the window floats. + """ + return self.xa_elem.floating() + + @property + def modal(self) -> bool: + """Whether the window is a modal window. + """ + return self.xa_elem.modal() + + @property + def titled(self) -> bool: + """Whether the window has a title bar. + """ + return self.xa_elem.titled() + + @property + def document(self) -> 'XAAutomatorDocument': + """The document currently displayed in the window. + """ + return self._new_element(self.xa_elem.document(), XAAutomatorDocument)
+ + + + +
[docs]class XAAutomatorDocumentList(XABase.XAList): + """A wrapper around a list of Automator documents which utilizes fast enumeration techniques. + + All properties of documents can be called as methods on the wrapped list, returning a list containing each document's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAAutomatorDocument, filter) + +
[docs] def id(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def title(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("title") or [])
+ +
[docs] def index(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("index") or [])
+ +
[docs] def by_id(self, id: int) -> Union['XAAutomatorDocument', None]: + return self.by_property("id", id)
+ +
[docs] def by_title(self, title: str) -> Union['XAAutomatorDocument', None]: + return self.by_property("title", title)
+ +
[docs] def by_index(self, index: int) -> Union['XAAutomatorDocument', None]: + return self.by_property("index", index)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAAutomatorDocument(XABase.XAObject): + """A class for managing and interacting with Automator windows. + + .. seealso:: :class:`XAAutomatorApplication` + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def modified(self) -> bool: + """Whether the document has been modified since its last save. + """ + return self.xa_elem.modified() + + @property + def name(self) -> str: + """The title of the document. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property("name", name) + + @property + def path(self) -> XABase.XAPath: + """The path to the document on the disk. + """ + return XABase.XAPath(self.xa_elem.path()) + + @path.setter + def path(self, path: Union[str, XABase.XAPath]): + if isinstance(path, str): + path = XABase.XAPath(path) + self.set_property("path", path.path) + + def __repr__(self): + return "<" + str(type(self)) + self.name + ">"
+ + + + +
[docs]class XAAutomatorActionList(XABase.XAList): + """A wrapper around a list of Automator required resources which utilizes fast enumeration techniques. + + All properties of required resources can be called as methods on the wrapped list, returning a list containing each resource's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAAutomatorAction, filter) + +
[docs] def bundle_id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("bundleId") or [])
+ +
[docs] def category(self) -> list[list[str]]: + return list(self.xa_elem.arrayByApplyingSelector_("category") or [])
+ +
[docs] def comment(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("comment") or [])
+ +
[docs] def enabled(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("enabled") or [])
+ +
[docs] def execution_error_message(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("executionErrorMessage") or [])
+ +
[docs] def execution_error_number(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("executionErrorNumber") or [])
+ +
[docs] def execution_result(self) -> list[Any]: + return list(self.xa_elem.arrayByApplyingSelector_("executionResult") or [])
+ +
[docs] def icon_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("iconName") or [])
+ +
[docs] def ignores_input(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("ignoresInput") or [])
+ +
[docs] def index(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("index") or [])
+ +
[docs] def input_types(self) -> list[list[str]]: + return list(self.xa_elem.arrayByApplyingSelector_("inputTypes") or [])
+ +
[docs] def keywords(self) -> list[list[str]]: + return list(self.xa_elem.arrayByApplyingSelector_("keywords") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def output_types(self) -> list[list[str]]: + return list(self.xa_elem.arrayByApplyingSelector_("outputTypes") or [])
+ +
[docs] def parent_workflow(self) -> 'XAAutomatorWorkflowList': + ls = self.xa_elem.arrayByApplyingSelector_("parentWorkflow") or [] + return self._new_element(ls, XAAutomatorWorkflowList)
+ +
[docs] def path(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("path") or [])
+ +
[docs] def show_action_when_run(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("showActionWhenRun") or [])
+ +
[docs] def target_application(self) -> list[list[str]]: + return list(self.xa_elem.arrayByApplyingSelector_("targetApplication") or [])
+ +
[docs] def version(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("version") or [])
+ +
[docs] def warning_action(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("warningAction") or [])
+ +
[docs] def warning_level(self) -> list[XAAutomatorApplication.WarningLevel]: + ls = self.xa_elem.arrayByApplyingSelector_("warningLevel") or [] + return [XAAutomatorApplication.WarningLevel(x) for x in ls]
+ +
[docs] def warning_message(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("warningMessage") or [])
+ +
[docs] def by_bundle_id(self, bundle_id: str) -> Union['XAAutomatorAction', None]: + return self.by_property("bundleId", bundle_id)
+ +
[docs] def by_category(self, category: list[str]) -> Union['XAAutomatorAction', None]: + return self.by_property("category", category)
+ +
[docs] def by_comment(self, comment: str) -> Union['XAAutomatorAction', None]: + return self.by_property("comment", comment)
+ +
[docs] def by_enabled(self, enabled: bool) -> Union['XAAutomatorAction', None]: + return self.by_property("enabled", enabled)
+ +
[docs] def by_execution_error_message(self, execution_error_message: str) -> Union['XAAutomatorAction', None]: + return self.by_property("executionErrorMessage", execution_error_message)
+ +
[docs] def by_execution_error_number(self, execution_error_number: int) -> Union['XAAutomatorAction', None]: + return self.by_property("executionErrorNumber", execution_error_number)
+ +
[docs] def by_execution_result(self, execution_result: Any) -> Union['XAAutomatorAction', None]: + return self.by_property("executionResult", execution_result)
+ +
[docs] def by_icon_name(self, icon_name: str) -> Union['XAAutomatorAction', None]: + return self.by_property("iconName", icon_name)
+ +
[docs] def by_id(self, id: str) -> Union['XAAutomatorAction', None]: + return self.by_property("id", id)
+ +
[docs] def by_ignores_input(self, ignores_input: bool) -> Union['XAAutomatorAction', None]: + return self.by_property("ignoresInput", ignores_input)
+ +
[docs] def by_input_types(self, input_types: list[str]) -> Union['XAAutomatorAction', None]: + return self.by_property("inputTypes", input_types)
+ +
[docs] def by_keywords(self, keywords: list[str]) -> Union['XAAutomatorAction', None]: + return self.by_property("keywords", keywords)
+ +
[docs] def by_name(self, name: str) -> Union['XAAutomatorAction', None]: + return self.by_property("name", name)
+ +
[docs] def by_output_types(self, output_types: list[str]) -> Union['XAAutomatorAction', None]: + return self.by_property("outputTypes", output_types)
+ +
[docs] def by_parent_workflow(self, parent_workflow: 'XAAutomatorWorkflow') -> Union['XAAutomatorAction', None]: + return self.by_property("parentWorkflow", parent_workflow.xa_elem)
+ +
[docs] def by_path(self, path: str) -> Union['XAAutomatorAction', None]: + return self.by_property("path", path)
+ +
[docs] def by_show_action_when_run(self, show_action_when_run: bool) -> Union['XAAutomatorAction', None]: + return self.by_property("show_action_when_run", show_action_when_run)
+ +
[docs] def by_target_application(self, target_application: list[str]) -> Union['XAAutomatorAction', None]: + return self.by_property("targetApplication", target_application)
+ +
[docs] def by_version(self, version: str) -> Union['XAAutomatorAction', None]: + return self.by_property("version", version)
+ +
[docs] def by_warning_action(self, warning_action: str) -> Union['XAAutomatorAction', None]: + return self.by_property("warningAction", warning_action)
+ +
[docs] def by_warning_level(self, warning_level: XAAutomatorApplication.WarningLevel) -> Union['XAAutomatorAction', None]: + return self.by_property("warningLevel", warning_level.value)
+ +
[docs] def by_warning_message(self, warning_message: str) -> Union['XAAutomatorAction', None]: + return self.by_property("warningMessage", warning_message)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAAutomatorAction(XABase.XAObject): + """A class for managing and interacting with actions in Automator.app. + + .. seealso:: :class:`XAAutomatorApplication` + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def bundle_id(self) -> str: + """The bundle identifier for the action. + """ + return self.xa_elem.bundleId() + + @property + def category(self) -> list[str]: + """The categories that contain the action + """ + return self.xa_elem.category() + + @property + def comment(self) -> str: + """The comment for the name of the action. + """ + return self.xa_elem.comment() + + @comment.setter + def comment(self, comment: str): + self.set_property("comment", comment) + + @property + def enabled(self) -> bool: + """Whether the action is enabled. + """ + return self.xa_elem.enabled() + + @enabled.setter + def enabled(self, enabled: bool): + self.set_property("enabled", enabled) + + @property + def execution_error_message(self) -> str: + """The text error message generated by execution of the action. + """ + return self.xa_elem.executionErrorMessage() + + @property + def execution_error_number(self) -> int: + """The numeric error code generated by execution of the action. + """ + return self.xa_elem.executionErrorNumber() + + @property + def execution_result(self) -> Any: + """The result of the action, passed as input to the next action. + """ + return self.xa_elem.executionResult() + + @property + def icon_name(self) -> str: + """The name for the icon associated with the action. + """ + return self.xa_elem.iconName() + + @property + def id(self) -> str: + """The unique identifier for the action. + """ + return self.xa_elem.id() + + @property + def ignores_input(self) -> bool: + """Whether the action ignores input when run. + """ + return self.xa_elem.ignoresInput() + + @ignores_input.setter + def ignores_input(self, ignores_input: bool): + self.set_property("ignoresInput", ignores_input) + + @property + def index(self) -> int: + """The index of the action from the first action in the workflow. + """ + return self.xa_elem.index() + + @index.setter + def index(self, index: int): + self.set_property("index", index) + + @property + def input_types(self) -> list[str]: + """The input types accepted by the action. + """ + return self.xa_elem.inputTypes() + + @property + def keywords(self) -> list[str]: + """The keywords that describe the action. + """ + return self.xa_elem.keywords() + + @property + def name(self) -> str: + """The localized name of the action. + """ + return self.xa_elem.name() + + @property + def output_types(self) -> list[str]: + """The output types produced by the action. + """ + return self.xa_elem.outputTypes() + + @property + def parent_workflow(self) -> 'XAAutomatorWorkflow': + """The workflow that contains the action. + """ + return self._new_element(self.xa_elem.parentWorkflow(), XAAutomatorWorkflow) + + @property + def path(self) -> XABase.XAPath: + """The path of the file that contains the action. + """ + return XABase.XAPath(self.xa_elem.path()) + + @property + def show_action_when_run(self) -> bool: + """Whether the action should show its user interface when run. + """ + return self.xa_elem.showActionWehnRun() + + @show_action_when_run.setter + def show_action_when_run(self, show_action_when_run: bool): + self.set_property("showActionWhenRun", show_action_when_run) + + @property + def target_application(self) -> list[str]: + """The application(s) with which the action communicates. + """ + return self.xa_elem.targetApplication() + + @property + def version(self) -> str: + """The version of the action. + """ + return self.xa_elem.version() + + @property + def warning_action(self) -> str: + """The action suggested by the warning, if any. + """ + return self.xa_elem.warningAction() + + @property + def warning_level(self) -> XAAutomatorApplication.WarningLevel: + """The level of the warning, increasing in likelihood of data loss. + """ + return XAAutomatorApplication.WarningLevel(self.xa_elem.warningLevel()) + + @property + def warning_message(self) -> str: + """The message that accompanies the warning, if any. + """ + return self.xa_elem.warningMessage() + +
[docs] def required_resources(self, filter: Union[dict, None] = None) -> 'XAAutomatorRequiredResourceList': + """Returns a list of required resource, as PyXA objects, matching the given filter. + + :param filter: Keys and values to filter resources by, defaults to None + :type filter: dict, optional + :return: A PyXA list object wrapping a list of required resources + :rtype: XAAutomatorVariableList + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_elem.requiredResources(), XAAutomatorRequiredResourceList, filter)
+ +
[docs] def settings(self, filter: Union[dict, None] = None) -> 'XAAutomatorSettingList': + """Returns a list of settings, as PyXA objects, matching the given filter. + + :param filter: Keys and values to filter settings by, defaults to None + :type filter: dict, optional + :return: A PyXA list object wrapping a list of settings + :rtype: XAAutomatorWorkflowList + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_elem.settings(), XAAutomatorSettingList, filter)
+ + def __repr__(self): + return "<" + str(type(self)) + self.name + ">"
+ + + + +
[docs]class XAAutomatorRequiredResourceList(XABase.XAList): + """A wrapper around a list of Automator required resources which utilizes fast enumeration techniques. + + All properties of required resources can be called as methods on the wrapped list, returning a list containing each resource's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAAutomatorRequiredResource, filter) + +
[docs] def kind(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("kind") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def resource(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("resource") or [])
+ +
[docs] def version(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("version") or [])
+ +
[docs] def by_kind(self, kind: str) -> Union['XAAutomatorRequiredResource', None]: + return self.by_property("kind", kind)
+ +
[docs] def by_name(self, name: str) -> Union['XAAutomatorRequiredResource', None]: + return self.by_property("name", name)
+ +
[docs] def by_resource(self, resource: str) -> Union['XAAutomatorRequiredResource', None]: + return self.by_property("resource", resource)
+ +
[docs] def by_version(self, version: int) -> Union['XAAutomatorRequiredResource', None]: + return self.by_property("version", version)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAAutomatorRequiredResource(XABase.XAObject): + """A class for managing and interacting with required resources in Automator.app. + + .. seealso:: :class:`XAAutomatorApplication` + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def kind(self) -> str: + """The kind of required resource. + """ + return self.xa_elem.kind() + + @property + def name(self) -> str: + """The name of the required resource. + """ + return self.xa_elem.name() + + @property + def resource(self) -> str: + """The specification of the required resource. + """ + return self.xa_elem.resource() + + @property + def version(self) -> int: + """The minimum acceptable version of the required resource. + """ + return self.xa_elem.version() + + def __repr__(self): + return "<" + str(type(self)) + self.name + ">"
+ + + + +
[docs]class XAAutomatorSettingList(XABase.XAList): + """A wrapper around a list of Automator settings which utilizes fast enumeration techniques. + + All properties of settings can be called as methods on the wrapped list, returning a list containing each setting's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAAutomatorSetting, filter) + +
[docs] def default_value(self) -> list[Any]: + return list(self.xa_elem.arrayByApplyingSelector_("defaultValue") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def value(self) -> list[Any]: + return list(self.xa_elem.arrayByApplyingSelector_("value") or [])
+ +
[docs] def by_default_value(self, default_value: Any) -> Union['XAAutomatorSetting', None]: + if isinstance(default_value, XABase.XAObject): + default_value = default_value.xa_elem + return self.by_property("defaultValue", default_value)
+ +
[docs] def by_name(self, name: str) -> Union['XAAutomatorSetting', None]: + return self.by_property("name", name)
+ +
[docs] def by_value(self, value: Any) -> Union['XAAutomatorSetting', None]: + if isinstance(value, XABase.XAObject): + value = value.xa_elem + return self.by_property("value", value)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAAutomatorSetting(XABase.XAObject): + """A class for managing and interacting with Automator settings (i.e. named values). + + .. seealso:: :class:`XAAutomatorApplication` + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def default_value(self) -> Any: + """The default value of the setting. + """ + return self.xa_elem.defaultValue() + + @property + def name(self) -> str: + """The name of the setting. + """ + return self.xa_elem.name() + + @property + def value(self) -> Any: + """The value of the setting. + """ + return self.xa_elem.value() + + @value.setter + def value(self, value: Any): + self.set_property("value", value) + + def __repr__(self): + return "<" + str(type(self)) + self.name + ">"
+ + + + +
[docs]class XAAutomatorVariableList(XABase.XAList): + """A wrapper around a list of Automator variables which utilizes fast enumeration techniques. + + All properties of variables can be called as methods on the wrapped list, returning a list containing each variable's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAAutomatorVariable, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def settable(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("settable") or [])
+ +
[docs] def value(self) -> list[Any]: + return list(self.xa_elem.arrayByApplyingSelector_("value") or [])
+ +
[docs] def by_name(self, name: str) -> Union['XAAutomatorVariable', None]: + return self.by_property("name", name)
+ +
[docs] def by_settable(self, settable: bool) -> Union['XAAutomatorVariable', None]: + return self.by_property("settable", settable)
+ +
[docs] def by_value(self, value: Any) -> Union['XAAutomatorVariable', None]: + if isinstance(value, XABase.XAObject): + value = value.xa_elem + return self.by_property("value", value)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAAutomatorVariable(XABase.XAObject): + """A class for managing and interacting with Automator variables. + + .. seealso:: :class:`XAAutomatorApplication` + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the variable. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property("name", name) + + @property + def settable(self) -> bool: + """Whether the name and value of the variable can be changed. + """ + return self.xa_elem.settable() + + @property + def value(self) -> Any: + """The value of the variable. + """ + return self.xa_elem.value() + + @value.setter + def value(self, value: Any): + self.set_property("value", value) + + def __repr__(self): + return "<" + str(type(self)) + self.name + ">"
+ + + + +
[docs]class XAAutomatorWorkflowList(XABase.XAList): + """A wrapper around a list of Automator workflows which utilizes fast enumeration techniques. + + All properties of workflows can be called as methods on the wrapped list, returning a list containing each workflow's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAAutomatorWorkflow, filter) + +
[docs] def current_action(self) -> XAAutomatorActionList: + ls = self.xa_elem.arrayByApplyingSelector_("currentAction") or [] + return self._new_element(ls, XAAutomatorActionList)
+ +
[docs] def execution_error_message(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("executionErrorMessage") or [])
+ +
[docs] def execution_error_number(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("executionErrorNumber") or [])
+ +
[docs] def execution_id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("executionId") or [])
+ +
[docs] def execution_result(self) -> list[Any]: + return list(self.xa_elem.arrayByApplyingSelector_("executionResult") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def by_current_action(self, current_action: XAAutomatorAction) -> Union['XAAutomatorWorkflow', None]: + return self.by_property("currentAction", current_action.xa_elem)
+ +
[docs] def by_execution_error_message(self, execution_error_message: str) -> Union['XAAutomatorWorkflow', None]: + return self.by_property("executionErrorMessage", execution_error_message)
+ +
[docs] def by_execution_error_number(self, execution_error_number: int) -> Union['XAAutomatorWorkflow', None]: + return self.by_property("executionErrorNumber", execution_error_number)
+ +
[docs] def by_execution_id(self, execution_id: str) -> Union['XAAutomatorWorkflow', None]: + return self.by_property("executionId", execution_id)
+ +
[docs] def by_execution_result(self, result: Any) -> Union['XAAutomatorWorkflow', None]: + return self.by_property("result", result)
+ +
[docs] def by_name(self, name: str) -> Union['XAAutomatorWorkflow', None]: + return self.by_property("name", name)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAAutomatorWorkflow(XAAutomatorDocument): + """A class for managing and interacting with Automator workflows. + + .. seealso:: :class:`XAAutomatorApplication` + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def current_action(self) -> XAAutomatorAction: + """The current or most recent action of the workflow. + """ + return self._new_element(self.xa_elem.currentAction(), XAAutomatorAction) + + @property + def execution_error_message(self) -> str: + """The text error message generated by the most recent execution. + """ + return self.xa_elem.executionErrorMessage() + + @property + def execution_error_number(self) -> int: + """The numeric error code generated by the most recent execution. + """ + return self.xa_elem.executionErrorNumber() + + @property + def execution_id(self) -> str: + """The unique identifier for the current or most recent execution. + """ + return self.xa_elem.executionId() + + @property + def execution_result(self) -> Any: + """The result of the most resent execution. + """ + return self.xa_elem.executionResult().get() + + @property + def name(self) -> str: + """The name of the workflow. + """ + return self.xa_elem.name() + +
[docs] def execute(self) -> Any: + """Executes the workflow. + + :return: The return value of the workflow after execution + :rtype: Any + + .. versionadded:: 0.0.5 + """ + return self.xa_elem.execute()
+ +
[docs] def automator_actions(self, filter: Union[dict, None] = None) -> 'XAAutomatorActionList': + """Returns a list of actions, as PyXA objects, matching the given filter. + + :param filter: Keys and values to filter actions by, defaults to None + :type filter: dict, optional + :return: A PyXA list object wrapping a list of actions + :rtype: XAAutomatorActionList + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_elem.AutomatorActions(), XAAutomatorActionList, filter)
+ +
[docs] def variables(self, filter: Union[dict, None] = None) -> 'XAAutomatorVariableList': + """Returns a list of variables, as PyXA objects, matching the given filter. + + :param filter: Keys and values to filter variables by, defaults to None + :type filter: dict, optional + :return: A PyXA list object wrapping a list of variables + :rtype: XAAutomatorVariableList + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_elem.variables(), XAAutomatorVariableList, filter)
+ +
[docs] def delete(self): + """Closes the workflow. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.delete()
+ +
[docs] def save(self) -> 'XAAutomatorWorkflow': + """Saves the workflow to the disk at the location specified by :attr:`XAAutomatorWorkflow.path`, or in the downloads folder if no path has been specified. + + :return: The workflow object. + :rtype: XAAutomatorWorkflow + + .. versionadded:: 0.0.5 + """ + self.xa_elem.saveAs_in_("workflow", self.path) + return self
+ + def __repr__(self): + return "<" + str(type(self)) + self.name + ">"
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Bike.html b/docs/_modules/PyXA/apps/Bike.html new file mode 100644 index 0000000..a59aefd --- /dev/null +++ b/docs/_modules/PyXA/apps/Bike.html @@ -0,0 +1,924 @@ + + + + + + PyXA.apps.Bike — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Bike

+""".. versionadded:: 0.1.0
+
+Control Bike using JXA-like syntax.
+"""
+
+from enum import Enum
+from typing import Union
+
+import AppKit
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+from ..XAProtocols import XACanOpenPath, XAClipboardCodable, XACloseable, XADeletable
+from ..XAErrors import UnconstructableClassError
+
+
[docs]class XABikeApplication(XABaseScriptable.XASBApplication, XACanOpenPath): + """A class for managing and interacting with Bike.app. + + .. versionadded:: 0.1.0 + """ +
[docs] class FileFormat(Enum): + BIKE = XABase.OSType("BKff") + OPML = XABase.OSType("OPml") + PLAINTEXT = XABase.OSType("PTfm")
+ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XABikeWindow + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether Bike is the frontmost application. + """ + return self.xa_scel.frontmost() + + @property + def version(self) -> str: + """The version of Bike.app. + """ + return self.xa_scel.version() + + @property + def font_size(self) -> Union[int, float]: + """Bike font size preference. + """ + return self.xa_scel.fontSize() + + @font_size.setter + def font_size(self, font_size: Union[int, float]): + self.set_property('fontSize', font_size) + + @property + def background_color(self) -> XABase.XAColor: + """Bike background color preference. + """ + return XABase.XAColor(self.xa_scel.backgroundColor()) + + @background_color.setter + def background_color(self, background_color: XABase.XAColor): + self.set_property('backgroundColor', background_color.xa_elem) + + @property + def foreground_color(self) -> XABase.XAColor: + """Bike foreground color preference. + """ + return XABase.XAColor(self.xa_scel.foregroundColor()) + + @foreground_color.setter + def foreground_color(self, foreground_color: XABase.XAColor): + self.set_property('foregroundColor', foreground_color.xa_elem) + +
[docs] def documents(self, filter: dict = None) -> Union['XABikeDocumentList', None]: + """Returns a list of documents, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned documents will have, or None + :type filter: Union[dict, None] + :return: The list of documents + :rtype: XABikeDocumentList + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Bike") + >>> print(app.documents()) + <<class 'PyXA.apps.Bike.XABikeDocumentList'>['Untitled', 'PyXA Notes.bike']> + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.documents(), XABikeDocumentList, filter)
+ +
[docs] def make(self, specifier: str, properties: Union[dict, None] = None) -> XABase.XAObject: + """Creates a new element of the given specifier class without adding it to any list. + + Use :func:`XABase.XAList.push` to push the element onto a list. + + :param specifier: The classname of the object to create + :type specifier: str + :param properties: The properties to give the object + :type properties: dict + :return: A PyXA wrapped form of the object + :rtype: XABase.XAObject + + :Example 1: Add new rows to the current document + + >>> import PyXA + >>> app = PyXA.Application("Bike") + >>> front_doc_rows = app.front_window.document.rows() + >>> + >>> row1 = app.make("row", {"name": "This is a new row!"}) + >>> row2 = app.make("row", {"name": "This is another new row!"}) + >>> row3 = app.make("row", {"name": "This is a third new row!"}) + >>> + >>> front_doc_rows.push(row1) # Add to the end of the document + >>> front_doc_rows.insert(row2, 0) # Insert at the beginning of the document + >>> front_doc_rows.insert(row3, 5) # Insert at the middle of the document + + .. versionadded:: 0.1,0 + """ + if properties is None: + properties = {} + + obj = self.xa_scel.classForScriptingClass_(specifier).alloc().initWithProperties_(properties) + + if specifier == "window": + raise UnconstructableClassError("Windows cannot be created for Bike.app.") + elif specifier == "document": + return self._new_element(obj, XABikeDocument) + elif specifier == "row": + return self._new_element(obj, XABikeRow) + elif specifier == "attribute": + return self._new_element(obj, XABikeAttribute)
+ + + + +
[docs]class XABikeWindow(XABaseScriptable.XASBWindow): + """A window of Bike.app. + + .. versionadded:: 0.1.0 + """ + + def __init__(self, properties): + super().__init__(properties) + + @property + def document(self) -> 'XABikeDocument': + """The document whose contents are currently displayed in the window. + """ + return self._new_element(self.xa_elem.document(), XABikeDocument) + + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ + + + +
[docs]class XABikeDocumentList(XABase.XAList, XACanOpenPath, XAClipboardCodable): + """A wrapper around lists of Bike documents that employs fast enumeration techniques. + + All properties of documents can be called as methods on the wrapped list, returning a list containing each document's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XABikeDocument, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def modified(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("modified") or [])
+ +
[docs] def file(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("file") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def url(self) -> list[XABase.XAURL]: + ls = self.xa_elem.arrayByApplyingSelector_("url") or [] + return [XABase.XAURL(x) for x in ls]
+ +
[docs] def root_row(self) -> 'XABikeRowList': + ls = self.xa_elem.arrayByApplyingSelector_("rootRow") or [] + return self._new_element(ls, XABikeRowList)
+ +
[docs] def entireContents(self) -> 'XABikeRowList': + ls = self.xa_elem.arrayByApplyingSelector_("entireContents") or [] + ls = [row for contents in ls for row in contents] + return self._new_element(ls, XABikeRowList)
+ +
[docs] def focused_row(self) -> 'XABikeRowList': + ls = self.xa_elem.arrayByApplyingSelector_("focusedRow") or [] + return self._new_element(ls, XABikeRowList)
+ +
[docs] def hoisted_row(self) -> 'XABikeRowList': + ls = self.xa_elem.arrayByApplyingSelector_("hoistedRow") or [] + return self._new_element(ls, XABikeRowList)
+ +
[docs] def selected_text(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("selectedText") or [])
+ +
[docs] def selection_row(self) -> 'XABikeRowList': + ls = self.xa_elem.arrayByApplyingSelector_("selectionRow") or [] + return self._new_element(ls, XABikeRowList)
+ +
[docs] def selection_rows(self) -> 'XABikeRowList': + ls = self.xa_elem.arrayByApplyingSelector_("selectionRows") or [] + ls = [row for contents in ls for row in contents] + return self._new_element(ls, XABikeRowList)
+ +
[docs] def by_name(self, name: str) -> Union['XABikeDocument', None]: + return self.by_property("name", name)
+ +
[docs] def by_modified(self, modified: bool) -> Union['XABikeDocument', None]: + return self.by_property("modified", modified)
+ +
[docs] def by_file(self, file: Union[str, XABase.XAPath]) -> Union['XABikeDocument', None]: + if isinstance(file, XABase.XAPath): + file = file.path + return self.by_property("file", file)
+ +
[docs] def by_id(self, id: str) -> Union['XABikeDocument', None]: + return self.by_property("id", id)
+ +
[docs] def by_url(self, url: Union[str, XABase.XAURL]) -> Union['XABikeDocument', None]: + if isinstance(url, XABase.XAURL): + url = url.url + return self.by_property("url", url)
+ +
[docs] def by_root_row(self, root_row: 'XABikeRow') -> Union['XABikeDocument', None]: + return self.by_property("rootRow", root_row.xa_elem)
+ +
[docs] def by_entire_contents(self, entire_contents: Union['XABikeRowList', list['XABikeRow']]) -> Union['XABikeDocument', None]: + if isinstance(entire_contents, list): + entire_contents = [x.xa_elem for x in entire_contents] + return self.by_property("entireContents", entire_contents) + else: + return self.by_property("entireContents", entire_contents.xa_elem)
+ +
[docs] def by_focused_row(self, focused_row: 'XABikeRow') -> Union['XABikeDocument', None]: + return self.by_property("focusedRow", focused_row.xa_elem)
+ +
[docs] def by_hoisted_row(self, hoisted_row: 'XABikeRow') -> Union['XABikeDocument', None]: + return self.by_property("hoistedRow", hoisted_row.xa_elem)
+ +
[docs] def by_selected_text(self, selected_text: str) -> Union['XABikeDocument', None]: + return self.by_property("selectedText", selected_text)
+ +
[docs] def by_selection_row(self, selection_row: 'XABikeRow') -> Union['XABikeDocument', None]: + return self.by_property("selectionRow", selection_row.xa_elem)
+ +
[docs] def by_selection_rows(self, selection_rows: Union['XABikeRowList', list['XABikeRow']]) -> Union['XABikeDocument', None]: + if isinstance(selection_rows, list): + selection_rows = [x.xa_elem for x in selection_rows] + return self.by_property("selectionRows", selection_rows) + else: + return self.by_property("selectionRows", selection_rows.xa_elem)
+ +
[docs] def close(self, save: 'XACloseable.SaveOption' = None): + """Closes every document in the list. Leaves the last document open if it is the only document open in the application. + + :param save: Whether to save the documents before closing, defaults to YES + :type save: XACloseable.SaveOption, optional + + .. versionadded:: 0.1.0 + """ + if save is None: + save = 1852776480 + else: + save = save.value + + for document in self.xa_elem: + document.closeSaving_savingIn_(save, None)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XABikeDocument(XABase.XAObject, XACloseable): + """A document of Bike.app. + + .. versionadded:: 0.1.0 + """ + + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the document. + """ + return self.xa_elem.name() + + @property + def modified(self) -> str: + """Whether the document has been modified since it was last saved. + """ + return self.xa_elem.modified() + + @property + def file(self) -> XABase.XAPath: + """The location of the document on disk, if it has one. + """ + return XABase.XAPath(self.xa_elem.file()) + + @property + def id(self) -> str: + """The unique and persistent identifier for the document. + """ + return self.xa_elem.id() + + @property + def url(self) -> XABase.XAURL: + """The Bike URL link for the document. + """ + return XABase.XAURL(self.xa_elem.url()) + + @property + def root_row(self) -> 'XABikeRow': + """The top 'root' row of the document, not visible in the outline editor. + """ + return self._new_element(self.xa_elem.rootRow(), XABikeRow) + + @property + def entire_contents(self) -> 'XABikeRowList': + """All rows in the document. + """ + return self._new_element(self.xa_elem.entireContents(), XABikeRowList) + + @property + def focused_row(self) -> 'XABikeRow': + """The currently focused row. + """ + return self._new_element(self.xa_elem.focusedRow(), XABikeRow) + + @focused_row.setter + def focused_row(self, focused_row: 'XABikeRow'): + self.set_property('focusedRow', focused_row.xa_elem) + + @property + def hoisted_row(self) -> 'XABikeRow': + """The currently hoisted row. + """ + return self._new_element(self.xa_elem.hoisted_row(), XABikeRow) + + @hoisted_row.setter + def hoisted_row(self, hoisted_row: 'XABikeRow'): + self.set_property('hoistedRow', hoisted_row.xa_elem) + + @property + def selected_text(self) -> str: + """The currently selected text. + """ + return self.xa_elem.selectedText() + + @property + def selection_row(self) -> 'XABikeRow': + """The row intersecting the selected text head. + """ + return self._new_element(self.xa_elem.selectionRow(), XABikeRow) + + @property + def selection_rows(self) -> 'XABikeRowList': + """All rows intersecting the selected text. + """ + return self._new_element(self.xa_elem.selectionRows(), XABikeRowList) + +
[docs] def save(self, path: Union[str, XABase.XAPath, None] = None, format: XABikeApplication.FileFormat = XABikeApplication.FileFormat.BIKE): + """Saves the document to the specified location, or at its existing location. + + :param path: The location to save the document in, defaults to None + :type path: Union[str, XABase.XAPath, None], optional + :param format: The format to save the document as, defaults to XABikeApplication.FileFormat.BIKE + :type format: XABikeApplication.FileFormat, optional + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Bike") + >>> doc = app.documents()[0] + >>> doc.save("/Users/exampleUser/Documents/Notes.opml", app.FileFormat.OPML) + + .. versionadded:: 0.1.0 + """ + if path is None: + path = self.xa_elem.file() + elif isinstance(path, str): + path = XABase.XAPath(path).xa_elem + self.xa_elem.saveIn_as_(path, format.value)
+ +
[docs] def rows(self, filter: dict = None) -> Union['XABikeRowList', None]: + """Returns a list of rows, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned rows will have, or None + :type filter: Union[dict, None] + :return: The list of rows + :rtype: XABikeRowList + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Bike") + >>> doc = app.front_window.document + >>> print(doc.rows()) + <<class 'PyXA.apps.Bike.XABikeRowList'>['Row 1', 'Row 2', 'Row 2.1']> + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.rows(), XABikeRowList, filter)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XABikeRowList(XABase.XAList): + """A wrapper around a list of rows. + + All properties of row objects can be accessed via methods on the list, returning a list of each row's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XABikeRow, filter) + +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def url(self) -> list[XABase.XAURL]: + ls = self.xa_elem.arrayByApplyingSelector_("url") or [] + return [XABase.XAURL(x) for x in ls]
+ +
[docs] def level(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("level") or [])
+ +
[docs] def contains_rows(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("containsRows") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def container(self) -> list[Union[XABikeDocument, 'XABikeRow']]: + return [x.container for x in self]
+ +
[docs] def container_row(self) -> 'XABikeRowList': + ls = self.xa_elem.arrayByApplyingSelector_("containerRow") or [] + return self._new_element(ls, XABikeRowList)
+ +
[docs] def prev_sibling_row(self) -> 'XABikeRowList': + ls = self.xa_elem.arrayByApplyingSelector_("prevSiblingRow") or [] + return self._new_element(ls, XABikeRowList)
+ +
[docs] def next_sibling_row(self) -> 'XABikeRowList': + ls = self.xa_elem.arrayByApplyingSelector_("nextSiblingRow") or [] + return self._new_element(ls, XABikeRowList)
+ +
[docs] def entire_contents(self) -> 'XABikeRowList': + ls = self.xa_elem.arrayByApplyingSelector_("entireContents") or [] + ls = [item for contents in ls for item in contents] + return self._new_element(ls, XABikeRowList)
+ +
[docs] def visible(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("visible") or [])
+ +
[docs] def selected(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("selected") or [])
+ +
[docs] def expanded(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("expanded") or [])
+ +
[docs] def collapsed(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("collapsed") or [])
+ +
[docs] def by_id(self, id: str) -> Union['XABikeRow', None]: + return self.by_property("id", id)
+ +
[docs] def by_url(self, url: Union[str, XABase.XAURL]) -> Union['XABikeRow', None]: + if isinstance(url, XABase.XAURL): + url = url.url + return self.by_property("url", url)
+ +
[docs] def by_level(self, level: int) -> Union['XABikeRow', None]: + return self.by_property("level", level)
+ +
[docs] def by_contains_rows(self, contains_rows: bool) -> Union['XABikeRow', None]: + return self.by_property("containsRows", contains_rows)
+ +
[docs] def by_name(self, name: str) -> Union['XABikeRow', None]: + return self.by_property("name", name)
+ +
[docs] def by_container(self, container: Union[XABikeDocument, 'XABikeRow']) -> Union['XABikeRow', None]: + return self.by_property("container", container.xa_elem)
+ +
[docs] def by_container_row(self, container_row: 'XABikeRow') -> Union['XABikeRow', None]: + return self.by_property("containerRow", container_row.xa_elem)
+ +
[docs] def by_prev_sibling_row(self, prev_sibling_row: 'XABikeRow') -> Union['XABikeRow', None]: + return self.by_property("prevSiblingRow", prev_sibling_row.xa_elem)
+ +
[docs] def by_next_sibling_row(self, next_sibling_row: 'XABikeRow') -> Union['XABikeRow', None]: + return self.by_property("nextSiblingRow", next_sibling_row.xa_elem)
+ +
[docs] def by_container_document(self, container_document: XABikeDocument) -> Union['XABikeRow', None]: + return self.by_property("containerDocument", container_document.xa_elem)
+ +
[docs] def by_entire_contents(self, entire_contents: Union['XABikeRowList', list['XABikeRow']]) -> Union['XABikeRow', None]: + if isinstance(entire_contents, list): + entire_contents = [x.xa_elem for x in entire_contents] + return self.by_property("entireContents", entire_contents) + else: + return self.by_property("entireContents", entire_contents.xa_elem)
+ +
[docs] def by_visible(self, visible: bool) -> Union['XABikeRow', None]: + return self.by_property("visible", visible)
+ +
[docs] def by_selected(self, selected: bool) -> Union['XABikeRow', None]: + return self.by_property("selected", selected)
+ +
[docs] def by_expanded(self, expanded: bool) -> Union['XABikeRow', None]: + return self.by_property("expanded", expanded)
+ +
[docs] def by_collapsed(self, collapsed: bool) -> Union['XABikeRow', None]: + return self.by_property("collapsed", collapsed)
+ +
[docs] def collapse(self, all: bool = False): + """Collapses all rows in the list, optionally collapsing all of the children as well. + + :param all: Whether to collapse all child rows, defaults to False + :type all: bool, optional + + .. versionadded:: 0.1.0 + """ + for row in self.xa_elem: + row.collapse_all_([row], all)
+ +
[docs] def expand(self, all: bool = False): + """Expands all rows in the list, optionally expanding all of the children as well. + + :param all: Whether to expand all child rows, defaults to False + :type all: bool, optional + + .. versionadded:: 0.1.0 + """ + for row in self.xa_elem: + row.expand_all_(row, all)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XABikeRow(XABase.XAObject, XADeletable): + """A row in an outline. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """The unique and persistent identifier for the row. + """ + return self.xa_elem.id() + + @property + def url(self) -> XABase.XAURL: + """The Bike URL for the row combining the document ID with the item ID. + """ + return XABase.XAURL(self.xa_elem.url()) + + @property + def level(self) -> int: + """The indentation level for the row in the outline. + """ + return self.xa_elem.level() + + @property + def contains_rows(self) -> bool: + """True if the row contains other rows. + """ + return self.xa_elem.containsRows() + + @property + def name(self) -> str: + """The plain text content of the row. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def container(self) -> Union['XABikeRow', XABikeDocument]: + """The container of the row. + """ + container = self.xa_elem.container() + if hasattr(container, "level"): + return self._new_element(container, XABikeRow) + else: + return self._new_element(container, XABikeDocument) + + @property + def container_row(self) -> Union['XABikeRow', None]: + """The row that directly contains this row. + """ + row = self.xa_elem.containerRow() + if row is not None: + return self._new_element(row, XABikeRow) + + @property + def prev_sibling_row(self) -> 'XABikeRow': + """The previous row with the same container row as this row. + """ + return self._new_element(self.xa_elem.prevSiblingRow(), XABikeRow) + + @property + def next_sibling_row(self) -> type: + """The next row with the same container as this row. + """ + return self._new_element(self.xa_elem.nextSiblingRow(), XABikeRow) + + @property + def container_document(self) -> XABikeDocument: + """The document that contains this row. + """ + return self._new_element(self.xa_elem.containerDocument(), XABikeDocument) + + @property + def entire_contents(self) -> XABikeRowList: + """The list of all rows contained by this row. + """ + return self._new_element(self.xa_elem.entire_contents(), XABikeRowList) + + @property + def visible(self) -> bool: + """True if this row is visible in the window (may require scrolling). + """ + return self.xa_elem.visible() + + @property + def selected(self) -> bool: + """True if this row is selected in the window. + """ + return self.xa_elem.selected() + + @property + def expanded(self) -> bool: + """True if this row is expanded in the window. + """ + return self.xa_elem.expanded() + + @property + def collapsed(self) -> bool: + """True if this row is collapsed in the window. + """ + return self.xa_elem.collapsed() + +
[docs] def collapse(self, all: bool = False): + """Collapses the row and optionally all rows it contains. + + :param recursive: Whether to also collapse all rows contained by this row, defaults to False + :type recursive: bool, optional + + .. versionadded:: 0.1.0 + """ + self.xa_elem.collapseAll_(all)
+ +
[docs] def expand(self, all: bool = False): + """Expanded the row and optionally all rows it contains. + + :param recursive: Whether to also expand all rows contained by this row, defaults to False + :type recursive: bool, optional + + .. versionadded:: 0.1.0 + """ + self.xa_elem.expandAll_(all)
+ +
[docs] def move_to(self, location: 'XABikeRow'): + """Makes the row a child of the specified row. + + :param location: The row to move this row to. + :type location: XABikeRow + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Bike") + >>> doc = app.documents()[0] + >>> row1 = doc.rows()[0] + >>> row2 = doc.rows()[5] + >>> row1.move_to(row2) + + .. versionadded:: 0.1.0 + """ + self.xa_elem.moveTo_(location.xa_elem)
+ + # def duplicate(self, location: Union[XABikeDocument, 'XABikeRow', None] = None, properties: Union[dict, None] = None): + # """Duplicates the row either in-place or at a specified location. + + # :param location: The document or row to create a duplicate of this row in, defaults to None (duplicate in-place) + # :type location: Union[XABikeDocument, XABikeRow, None], optional + # :param properties: Properties to set in the new copy right away, defaults to None (no properties changed) + # :type properties: Union[dict, None], options + # """ + # if properties is None: + # properties = {} + + # if location is None: + # self.xa_elem.duplicateTo_withProperties_(self.xa_elem.containerDocument(), properties) + # else: + # self.xa_elem.duplicateTo_withProperties_(location.xa_elem, properties) + +
[docs] def rows(self, filter: dict = None) -> Union['XABikeRowList', None]: + """Returns a list of rows, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned rows will have, or None + :type filter: Union[dict, None] + :return: The list of rows + :rtype: XABikeRowList + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Bike") + >>> doc = app.front_window.document + >>> row = doc.rows()[4] + >>> print(row.rows()) + <<class 'PyXA.apps.Bike.XABikeRowList'>['Watch intro movie', 'Glance through features list', 'https://www.hogbaysoftware.com/bike']> + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.rows(), XABikeRowList, filter)
+ +
[docs] def attributes(self, filter: dict = None) -> Union['XABikeAttributeList', None]: + """Returns a list of attributes, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned attributes will have, or None + :type filter: Union[dict, None] + :return: The list of attributes + :rtype: XABikeAttributeList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.attributes(), XABikeAttributeList, filter)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + +
[docs]class XABikeAttributeList(XABase.XAList): + """A wrapper around a list of attributes. + + All properties of attribute objects can be accessed via methods on the list, returning a list of each attribute's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XABikeAttribute, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def value(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("value") or [])
+ +
[docs] def container_row(self) -> XABikeRowList: + ls = self.xa_elem.arrayByApplyingSelector_("containerRow") or [] + return self._new_element(ls, XABikeRowList)
+ +
[docs] def by_name(self, name: str) -> Union['XABikeAttribute', None]: + return self.by_property("name", name)
+ +
[docs] def by_value(self, value: str) -> Union['XABikeAttribute', None]: + return self.by_property("value", value)
+ +
[docs] def by_container_row(self, container_row: XABikeRow) -> Union['XABikeAttribute', None]: + return self.by_property("containerRow", container_row.xa_elem)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XABikeAttribute(XABase.XAObject): + """An attribute in a row. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the attribute. + """ + return self.xa_elem.name() + + @property + def value(self) -> str: + """The value of the attribute. + """ + return self.xa_elem.value() + + @value.setter + def value(self, value: str): + self.set_property('value', value) + + @property + def container_row(self) -> XABikeRow: + """The row that contains this attribute. + """ + return self._new_element(self.xa_elem.containerRow(), XABikeRow) + + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Calculator.html b/docs/_modules/PyXA/apps/Calculator.html new file mode 100644 index 0000000..0b32d8a --- /dev/null +++ b/docs/_modules/PyXA/apps/Calculator.html @@ -0,0 +1,287 @@ + + + + + + PyXA.apps.Calculator — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Calculator

+""".. versionadded:: 0.0.2
+
+Control the macOS Calculator application using JXA-like syntax.
+"""
+
+from PyXA import XABase
+
+
[docs]class XACalculatorApplication(XABase.XAApplication): + """A class for managing and interacting with Calculator.app. + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + self.__xa_btns = None + + def __load_buttons(self): + """Loads references to primary buttons of the calculator. + + .. versionadded:: 0.0.2 + """ + buttons = self.front_window.groups()[-1].buttons() + self.__xa_btns = { + "0": buttons[4], + "1": buttons[5], + "2": buttons[0], + "3": buttons[2], + "4": buttons[10], + "5": buttons[7], + "6": buttons[11], + "7": buttons[15], + "8": buttons[14], + "9": buttons[3], + ".": buttons[9], + "+": buttons[12], + "-": buttons[6], + "*": buttons[8], + "/": buttons[17], + "%": buttons[13], + "~": buttons[18], + "=": buttons[1], + "c": buttons[16], + } + + ## Menu Bar + # Calculator Menu +
[docs] def open_about_panel(self): + """Opens the "About Calculator" panel. Mimics clicking File->About Calculator. + + .. versionadded:: 0.0.2 + """ + self.menu_bars()[0].menu_bar_items()[1].menus()[0].menu_items()[0].press()
+ + # File Menu +
[docs] def save_tape(self): + """Opens the "save tape" dialog. Mimics clicking File->Save Tape As... + + .. versionadded:: 0.0.2 + """ + self.menu_bars()[0].menu_bar_items()[2].menus()[0].menu_items()[2].press()
+ +
[docs] def open_page_setup(self): + """Opens the page setup dialog. Mimics clicking File->Page Setup... + + .. versionadded:: 0.0.2 + """ + self.menu_bars()[0].menu_bar_items()[2].menus()[0].menu_items()[4].press()
+ +
[docs] def print_tape(self): + """Opens the print tape dialog. Mimics clicking File->Print Tape... + + .. versionadded:: 0.0.2 + """ + self.menu_bars()[0].menu_bar_items()[2].menus()[0].menu_items()[5].press()
+ + # Edit Menu +
[docs] def copy_value(self): + """Copies the current value of the calculator result. Mimics clicking Edit->Copy. + + .. versionadded:: 0.0.2 + """ + self.menu_bars()[0].menu_bar_items()[3].menus()[0].menu_items()[4].press()
+ + # View Menu +
[docs] def show_basic_calculator(self): + """Switches the view to the basic calculator. Mimics clicking View->Basic. + + .. versionadded:: 0.0.2 + """ + self.menu_bars()[0].menu_bar_items()[4].menus()[0].menu_items()[0].press()
+ +
[docs] def show_scientific_calculator(self): + """Switches the view to the scientific calculator. Mimics clicking View->Scientific. + + .. versionadded:: 0.0.2 + """ + self.menu_bars()[0].menu_bar_items()[4].menus()[0].menu_items()[1].press()
+ +
[docs] def show_programmer_calculator(self): + """Switches the view to the programmer calculator. Mimics clicking View->Programmer. + + .. versionadded:: 0.0.2 + """ + self.menu_bars()[0].menu_bar_items()[4].menus()[0].menu_items()[2].press()
+ +
[docs] def toggle_thousands_separators(self): + """Toggles whether comma separators are shown at thousand intervals. Mimics clicking View->Show Thousands Separators. + + .. versionadded:: 0.0.2 + """ + self.menu_bars()[0].menu_bar_items()[4].menus()[0].menu_items()[4].press()
+ +
[docs] def toggle_RPN_mode(self): + """Toggles Reverse Polish Notation. Mimics clicking View->RPN Mode. + + .. versionadded:: 0.0.2 + """ + self.menu_bars()[0].menu_bar_items()[4].menus()[0].menu_items()[6].press()
+ + # Window Menu +
[docs] def show_paper_tape(self): + """Opens the paper tape window. Mimics clicking Window->Show Paper Tape. + + .. versionadded:: 0.0.2 + """ + self.menu_bars()[0].menu_bar_items()[7].menus()[0].menu_items()[6].press()
+ + # Help Menu +
[docs] def show_help(self): + """Opens the Calculator help window. Mimics clicking Help->Calculator Help.add() + + .. versionadded:: 0.0.2 + """ + self.menu_bars()[0].menu_bar_items()[8].menus()[0].menu_items()[1].press()
+ + # Actions +
[docs] def clear_value(self): + """Clears the current calculator output. Mimics clicking the "C" (clear) button. + + .. versionadded:: 0.0.2 + """ + if self.__xa_btns is None: + self.__load_buttons() + self.__xa_btns["c"].press()
+ +
[docs] def input(self, sequence: str): + """Inputs a sequence of numbers and operations into the calculator by mimicking button clicks. + + This method does not obtain the result of the input. For that, use :func:`current_value`. + + The sequence should be a continuous string (no spaces). The valid characters are numbers `0-9`, `+`, `-`, `*`, `/`, `%`, `~`, `=`, and `c`. Their meanings are as follows: + + - `+`, `-`, `*`, and `/` correspond to their usual operation buttons. + - `%` designates the percentage button. + - `~` corresponds to the negation button. + - `=` represents the equals button. + - `c` denotes the clear button. + + :param sequence: The sequence of numbers and operations to execute. + :type sequence: str + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Calculator") + >>> app.input("c2*3.14*5*5=") + 34.54 + + .. versionadded:: 0.0.2 + """ + if self.__xa_btns is None: + self.__load_buttons() + for symbol in sequence: + self.__xa_btns[symbol].press()
+ + # Misc Methods +
[docs] def current_value(self) -> float: + """Retrieves the current value of the calculator output. + + :return: The calculator's current displayed value + :rtype: float + + .. versionadded:: 0.0.2 + """ + return float(self.front_window.groups()[0].static_texts()[0].value.get())
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Calendar.html b/docs/_modules/PyXA/apps/Calendar.html new file mode 100644 index 0000000..ff90839 --- /dev/null +++ b/docs/_modules/PyXA/apps/Calendar.html @@ -0,0 +1,1510 @@ + + + + + + PyXA.apps.Calendar — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Calendar

+from datetime import date, datetime, timedelta
+from enum import Enum
+from typing import Any, Generator, Union
+
+import EventKit
+import AppKit
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+from ..XAProtocols import XACanOpenPath
+
+
[docs]class XACalendarApplication(XABaseScriptable.XASBApplication, XACanOpenPath): + """A class for managing and interacting with scripting elements of the macOS Calendar application. + + .. seealso:: Classes :class:`XACalendarCalendar`, :class:`XACalendarEvent` + + .. versionadded:: 0.0.1 + """ +
[docs] class ParticipationStatus(Enum): + """Event participation statuses. + """ + UNKNOWN = XABase.OSType('E6na') #: No answer yet + ACCEPTED = XABase.OSType('E6ap') #: Invitation has been accepted + DECLINED = XABase.OSType('E6dp') #: Invitation has been declined + TENTATIVE = XABase.OSType('E6tp') #: Invitation has been tentatively accepted
+ +
[docs] class EventStatus(Enum): + """Event confirmation statuses. + """ + CANCELLED = XABase.OSType('E4ca') #: A cancelled event + CONFIRMED = XABase.OSType('E4cn') #: A confirmed event + NONE = XABase.OSType('E4no') #: An event without a status + TENTATIVE = XABase.OSType('E4te') #: A tentative event
+ +
[docs] class Priority(Enum): + """Event priorities. + """ + NONE = XABase.OSType('tdp0') #: No priority assigned + LOW = XABase.OSType('tdp9') #: Low priority + MEDIUM = XABase.OSType('tdp5') #: Medium priority + HIGH = XABase.OSType('tdp1') #: High priority
+ +
[docs] class ViewType(Enum): + """Views in Calendar.app. + """ + DAY = XABase.OSType('E5da') #: The iCal day view + WEEK = XABase.OSType('E5we') #: The iCal week view + MONTH = XABase.OSType('E5mo') #: The iCal month view + YEAR = XABase.OSType('E5ye') #: The iCal year view
+ + def __init__(self, properties: dict): + super().__init__(properties) + self.xa_wcls = XACalendarWindow + + @property + def properties(self) -> dict: + """All properties of the application. + """ + return dict(self.xa_scel.properties()) + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether Calendar is the frontmost application. + """ + return self.xa_scel.frontmost() + + @frontmost.setter + def frontmost(self, frontmost: bool): + self.set_property('frontmost', frontmost) + + @property + def version(self) -> str: + """The version of the Calendar application. + """ + return self.xa_scel.version() + + @property + def default_calendar(self) -> 'XACalendarCalendar': + """The calendar that events are added to by default. + """ + calendar_obj = self.xa_estr.defaultCalendarForNewEvents() + return self.calendars().by_name(calendar_obj.title()) + +
[docs] def reload_calendars(self) -> 'XACalendarApplication': + """Reloads the contents of all calendars. + + :return: The application object + :rtype: XACalendarApplication + + .. versionadded:: 0.0.1 + """ + self.xa_scel.reloadCalendars() + return self
+ +
[docs] def switch_view_to(self, view: 'XACalendarApplication.ViewType') -> 'XACalendarApplication': + """Switches to the target calendar view. + + :param view: The view to switch to. + :type view: XACalendarApplication.ViewType + :return: The application object + :rtype: XACalendarApplication + + :Example: + + >>> import PyXA + >>> app = PyXA.application("Calendar") + >>> app.switch_view_to(app.ViewType.WEEK) + >>> app.switch_view_to(app.ViewType.DAY) + >>> app.switch_view_to(app.ViewType.MONTH) + >>> app.switch_view_to(app.ViewType.YEAR) + + .. versionadded:: 0.0.1 + """ + if view == XACalendarApplication.ViewType.YEAR: + self.xa_estr.showDateInCalendar_inView_(0, 3) + else: + self.xa_scel.switchViewTo_(view.value) + return self
+ +
[docs] def view_calendar_at(self, date: datetime, view: Union[None, 'XACalendarApplication.ViewType'] = None) -> 'XACalendarApplication': + """Displays the calendar at the provided date. + + :param date: The date to display. + :type date: datetime + :return: A reference to the Calendar application object. + :rtype: XACalendarApplication + + :Example: + + >>> import PyXA + >>> from datetime import date + >>> app = PyXA.application("Calendar") + >>> date1 = date(2022, 7, 20) + >>> app.view_calendar_at(date1) + + .. versionadded:: 0.0.1 + """ + if view is None: + self.xa_estr.showDateInCalendar_inView_(date, 1) + elif view == XACalendarApplication.ViewType.YEAR: + self.xa_estr.showDateInCalendar_inView_(date, 3) + else: + self.xa_estr.showDateInCalendar_inView_(date, 0) + self.xa_scel.switchViewTo_(view.value) + return self
+ +
[docs] def subscribe_to(self, url: str) -> 'XACalendarCalendar': + """Subscribes to the calendar at the specified URL. + + :param url: The URL of the calendar (in iCal format) to subscribe to + :type url: str + :return: The newly created calendar object + :rtype: XACalendarCalendar + + .. versionadded:: 0.0.1 + """ + self.xa_scel.GetURL_(url) + return self.calendars()[-1]
+ +
[docs] def documents(self, filter: Union[dict, None] = None) -> 'XACalendarDocumentList': + """Returns a list of documents, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned documents will have, or None + :type filter: Union[dict, None] + :return: The list of documents + :rtype: XARemindersDocumentList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_scel.documents(), XACalendarDocumentList, filter)
+ +
[docs] def calendars(self, filter: Union[dict, None] = None) -> 'XACalendarCalendarList': + """Returns a list of calendars, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned calendars will have, or None + :type filter: Union[dict, None] + :return: The list of calendars + :rtype: XACalendarCalendarList + + :Example 1: Get all calendars + + >>> import PyXA + >>> app = PyXA.application("Calendar") + >>> print(app.calendars()) + <<class 'PyXA.apps.Calendar.XACalendarCalendarList'>['Calendar', 'Calendar2', 'Calendar3', ...]> + + :Example 2: Get calendars using a filter + + >>> import PyXA + >>> app = PyXA.application("Calendar") + >>> print(app.calendars({"name": "Calendar"})[0]) + <<class 'PyXA.apps.Calendar.XACalendarCalendar'>Calendar> + + :Example 3: Get calendars using list methods + + >>> import PyXA + >>> app = PyXA.application("Calendar") + >>> print(app.calendars().by_name("Calendar")) + <<class 'PyXA.apps.Calendar.XACalendarCalendar'>Calendar> + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_scel.calendars(), XACalendarCalendarList, filter)
+ +
[docs] def new_calendar(self, name: str = "New Calendar") -> 'XACalendarCalendar': + """Creates a new calendar with the given name. + + :param name: The name of the calendar, defaults to "New Calendar" + :type name: str, optional + :return: The newly created calendar object + :rtype: XACalendarCalendar + + :Example: + + >>> import PyXA + >>> app = PyXA.application("Calendar") + >>> app.new_calendar("PyXA Development") + + .. versionadded:: 0.0.1 + """ + new_calendar = self.make("calendar", {"name": name}) + self.calendars().push(new_calendar) + return self.calendars()[self.calendars().index(new_calendar)]
+ +
[docs] def new_event(self, summary: str, start_date: datetime, end_date: datetime, calendar: Union['XACalendarCalendar', None] = None) -> 'XACalendarEvent': + """Creates a new event with the given name and start/end dates in the specified calendar. If no calendar is specified, the default calendar is used. + + :param name: The name of the event + :type name: str + :param start_date: The start date and time of the event. + :type start_date: datetime + :param end_date: The end date and time of the event. + :type end_date: datetime + :return: A reference to the newly created event. + :rtype: XACalendarEvent + + :Example: Create event on the default calendar + + >>> from datetime import datetime, timedelta + >>> import PyXA + >>> app = PyXA.application("Calendar") + >>> start_date = datetime.now() + >>> end_date = start_date + timedelta(hours = 1) + >>> app.new_event("Learn about PyXA", start_date, end_date) + + :Example: Create event on a specific calendar + + >>> from datetime import datetime, timedelta + >>> import PyXA + >>> app = PyXA.application("Calendar") + >>> start_date = datetime.now() + >>> end_date = start_date + timedelta(hours = 1) + >>> calendar = app.calendars()[-1] + >>> app.new_event("Learn about PyXA", start_date, end_date, calendar) + + .. versionadded:: 0.0.1 + """ + if calendar is None: + calendar = self.default_calendar + new_event = self.make("event", {"summary": summary, "startDate": start_date, "endDate": end_date}) + calendar.events().push(new_event) + return calendar.events().by_uid(new_event.uid)
+ +
[docs] def make(self, specifier: str, properties: dict = None): + """Creates a new element of the given specifier class without adding it to any list. + + Use :func:`XABase.XAList.push` to push the element onto a list. + + :param specifier: The classname of the object to create + :type specifier: str + :param properties: The properties to give the object + :type properties: dict + :return: A PyXA wrapped form of the object + :rtype: XABase.XAObject + + :Example 1: Make a new calendar + + >>> import PyXA + >>> app = PyXA.application("Calendar") + >>> new_calendar = app.make("calendar", {"name": "PyXA Development"}) + >>> app.calendars().push(new_calendar) + + :Example 2: Make a new event + + >>> import PyXA + >>> app = PyXA.application("Calendar") + >>> start_date = datetime.now() + >>> end_date = start_date + timedelta(hours = 1) + >>> new_event = app.make("event", {"summary": "Work on PyXA", "startDate": start_date, "endDate": end_date}) + >>> app.default_calendar.events().push(new_event) + + .. versionadded:: 0.0.6 + """ + if properties is None: + properties = {} + + obj = self.xa_scel.classForScriptingClass_(specifier).alloc().initWithProperties_(properties) + + if specifier == "document": + return self._new_element(obj, XACalendarDocument) + elif specifier == "calendar": + return self._new_element(obj, XACalendarCalendar) + elif specifier == "event": + return self._new_element(obj, XACalendarEvent) + elif specifier == "displayAlarm": + return self._new_element(obj, XACalendarDisplayAlarm) + elif specifier == "mailAlarm": + return self._new_element(obj, XACalendarMailAlarm) + elif specifier == "soundAlarm": + return self._new_element(obj, XACalendarSoundAlarm) + elif specifier == "openFileAlarm": + return self._new_element(obj, XACalendarOpenFileAlarm)
+ + + + +
[docs]class XACalendarWindow(XABaseScriptable.XASBWindow): + """A window of Calendar.app. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties: dict): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the window. + """ + return dict(self.xa_elem.properties()) + + @property + def document(self) -> 'XACalendarDocument': + """The current document displayed in the window. + """ + return self._new_element(self.xa_elem.document(), XACalendarDocument)
+ + + + +
[docs]class XACalendarDocumentList(XABase.XAList): + """A wrapper around lists of documents that employs fast enumeration techniques. + + All properties of documents can be called as methods on the wrapped list, returning a list containing each document's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XACalendarDocument, filter) + +
[docs] def properties(self) -> list[dict]: + ls = self.xa_elem.arrayByApplyingSelector_("properties") or [] + return [dict(x) for x in ls]
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def modified(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("modified") or [])
+ +
[docs] def file(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("file") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def by_properties(self, properties: dict) -> Union['XACalendarDocument', None]: + return self.by_property("properties", properties)
+ +
[docs] def by_name(self, name: str) -> Union['XACalendarDocument', None]: + return self.by_property("name", name)
+ +
[docs] def by_modified(self, modified: bool) -> Union['XACalendarDocument', None]: + return self.by_property("modified", modified)
+ +
[docs] def by_file(self, file: XABase.XAPath) -> Union['XACalendarDocument', None]: + return self.by_property("file", file.xa_elem)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XACalendarDocument(XABase.XAObject): + """A document in Calendar.app. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the document. + """ + return dict(self.xa_elem.properties()) + + @property + def name(self) -> str: + """The name of the document. + """ + return self.xa_elem.name() + + @property + def modified(self) -> bool: + """Whether the document has been modified since it was last saved. + """ + return self.xa_elem.modified() + + @property + def file(self) -> XABase.XAPath: + """The location of the document on disk, if it has one. + """ + return XABase.XAPath(self.xa_elem.file())
+ + + + +
[docs]class XACalendarCalendarList(XABase.XAList): + """A wrapper around lists of calendars that employs fast enumeration techniques. + + All properties of calendars can be called as methods on the wrapped list, returning a list containing each calendar's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XACalendarCalendar, filter) + +
[docs] def properties(self) -> list[dict]: + properties_list = [] + for calendar in self.xa_elem: + properties_list.append({ + "name": calendar.name(), + "color": XABase.XAColor(calendar.color()), + "writable": calendar.writable(), + "description": calendar.description() + }) + return properties_list
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def color(self) -> list[XABase.XAColor]: + ls = self.xa_elem.arrayByApplyingSelector_("color") or [] + return [XABase.XAColor(x) for x in ls]
+ + # ! BROKEN -- This seems to be a problem with Calendar.app + # def calendar_identifier(self) -> list[str]: + # return [calendar.get().calendarIdentifier() for calendar in self.xa_elem] + +
[docs] def writable(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("writable") or [])
+ +
[docs] def description(self) -> list[str]: + return [x.description() for x in self.xa_elem]
+ +
[docs] def events(self) -> 'XACalendarEventList': + ls = self.xa_elem.arrayByApplyingSelector_("events") or [] + return self._new_element(ls, XACalendarEventList)
+ +
[docs] def by_properties(self, properties: dict) -> Union['XACalendarCalendar', None]: + for calendar in self.xa_elem: + name = calendar.name() + color = calendar.color() + writable = calendar.writable() + description = calendar.description() + + if (name == properties["name"] and + color == properties["color"].xa_elem and + writable == properties["writable"] and + description[25:] == properties["description"][25:]): + return self._new_element(calendar, XACalendarCalendar)
+ +
[docs] def by_name(self, name: str) -> Union['XACalendarCalendar', None]: + return self.by_property("name", name)
+ +
[docs] def by_color(self, color: XABase.XAColor) -> Union['XACalendarCalendar', None]: + for calendar in self.xa_elem: + if calendar.color() == color.xa_elem: + return self._new_element(calendar, XACalendarCalendar)
+ + # ! BROKEN -- This seems to be a problem with Calendar.app + # def by_calendar_identifier(self, calendar_identifier: str) -> Union['XACalendarCalendar', None]: + # return self.by_property("calendarIdentifier", calendar_identifier) + +
[docs] def by_writable(self, writable: bool) -> Union['XACalendarCalendar', None]: + return self.by_property("writable", writable)
+ +
[docs] def by_description(self, description: str) -> Union['XACalendarCalendar', None]: + for calendar in self.xa_elem: + if calendar.description()[25:] == description[25:]: + return self._new_element(calendar, XACalendarCalendar)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XACalendarCalendar(XABase.XAObject): + """A calendar in Calendar.app. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties: dict): + super().__init__(properties) + self.__calendar_obj = None + + @property + def calendar_obj(self) -> EventKit.EKCalendar: + if self.__calendar_obj is None and hasattr(self.xa_elem, "name"): + calendars = self.xa_estr.calendars() + predicate = XABase.XAPredicate() + predicate.add_eq_condition("title", self.name) + self.__calendar_obj = predicate.evaluate(calendars)[0] + return self.__calendar_obj + + @property + def properties(self) -> dict: + """All properties of the calendar. + """ + return { + "name": self.xa_elem.name(), + "color": XABase.XAColor(self.xa_elem.color()), + "writable": self.xa_elem.writable(), + "description": self.xa_elem.description(), + } + + @property + def name(self) -> str: + """The name of the calendar. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def color(self) -> XABase.XAColor: + """The color of the calendar. + """ + return XABase.XAColor(self.xa_elem.color()) + + @color.setter + def color(self, color: XABase.XAColor): + self.set_property('color', color.xa_elem) + + # ! BROKEN -- This seems to be a problem with Calendar.app + # @property + # def calendar_identifier(self) -> str: + # """The unique identifier for the calendar. + # """ + # return self.xa_elem.id() + + @property + def writable(self) -> bool: + """Whether the calendar is writable. + """ + return self.xa_elem.writable() + + @property + def description(self) -> str: + """The description of the calendar. + """ + return self.xa_elem.description() + + @description.setter + def description(self, description: str): + self.set_property('description', description) + +
[docs] def delete(self) -> 'XACalendarEvent': + """Deletes the calendar. + + .. versionadded:: 0.0.2 + """ + self.xa_elem.delete()
+ +
[docs] def events_in_range(self, start_date: datetime, end_date: datetime) -> 'XACalendarEventList': + """Gets a list of events occurring between the specified start and end datetimes. + + :param start_date: The earliest date an event in the list should begin. + :type start_date: datetime + :param end_date: The latest date an event in the list should end. + :type end_date: datetime + :return: The list of events. + :rtype: XACalendarEventList + + :Example: + + >>> from datetime import date + >>> import PyXA + >>> app = PyXA.application("Calendar") + >>> calendar = app.default_calendar + >>> start_date = date(2022, 6, 4) + >>> end_date = date(2022, 6, 6) + >>> print(calendar.events_in_range(start_date, end_date)) + [<PyXA.apps.Calendar.XACalendarEvent object at 0x105b83d90>, <PyXA.apps.Calendar.XACalendarEvent object at 0x105b90bb0>, <PyXA.apps.Calendar.XACalendarEvent object at 0x105b90dc0>] + + .. note:: + + Querying events from a wide date range can take significant time. If you are looking for a specific subset of events within a large date range, it *might* be faster to use :func:`events` with a well-constructed filter and then iterate through the resulting array of objects, parsing out events outside of the desired date range. + + .. versionadded:: 0.0.2 + """ + predicate = XABase.XAPredicate() + predicate.add_geq_condition("startDate", start_date) + predicate.add_leq_condition("endDate", end_date) + events_in_range = predicate.evaluate(self.xa_elem.events()) + return self._new_element(events_in_range, XACalendarEventList)
+ +
[docs] def events_today(self) -> 'XACalendarEventList': + """Gets a list of all events in the next 24 hours. + + :return: The list of events. + :rtype: XACalendarEventList + + .. seealso:: :func:`week_events` + + .. versionadded:: 0.0.2 + """ + start_date = datetime.now() + end_date = start_date + timedelta(days = 1) + return self.events_in_range(start_date, end_date)
+ +
[docs] def week_events(self) -> 'XACalendarEventList': + """Gets a list of events occurring in the next 7 days. + + :return: The list of events. + :rtype: XACalendarEventList + + .. seealso:: :func:`events_today` + + .. deprecated:: 0.1.2 + + Use :func:`events_in_range` instead. + + .. versionadded:: 0.0.2 + """ + start_date = datetime.now() + end_date = start_date + timedelta(days = 7) + return self.events_in_range(start_date, end_date)
+ +
[docs] def new_event(self, name: str, start_date: datetime, end_date: datetime) -> 'XACalendarEvent': + """Creates a new event and pushes it onto this calendar's events array. + + :param name: The name of the event. + :type name: str + :param start_date: The start date and time of the event. + :type start_date: datetime + :param end_date: The end date and time of the event. + :type end_date: datetime + :return: A reference to the newly created event. + :rtype: XACalendarEvent + + .. versionadded:: 0.0.1 + """ + return self.xa_prnt.xa_prnt.new_event(name, start_date, end_date, self)
+ +
[docs] def events(self, filter: Union[dict, None] = None) -> 'XACalendarEventList': + """Returns a list of events, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned events will have, or None + :type filter: Union[dict, None] + :return: The list of events + :rtype: XACalendarEventList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.events(), XACalendarEventList, filter)
+ + def __repr__(self): + return "<" + str(type(self)) + self.name + ">"
+ + + + +
[docs]class XACalendarAlarm(XABase.XAObject): + """An event alarm in Calendar.app. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the alarm. + """ + return self.xa_elem.properties() + + @property + def trigger_interval(self) -> int: + """The interval in minutes between the event and the alarm. + """ + return self.xa_elem.triggerInterval() + + @trigger_interval.setter + def trigger_interval(self, trigger_interval: int): + self.set_property('triggerInterval', trigger_interval) + + @property + def trigger_date(self) -> datetime: + """The date of the alarm. + """ + return self.xa_elem.triggerDate() + + @trigger_date.setter + def trigger_date(self, trigger_date: datetime): + self.set_property('triggerDate', trigger_date)
+ + + + +
[docs]class XACalendarDisplayAlarm(XACalendarAlarm): + """A display alarm in Calendar.app. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict): + super().__init__(properties)
+ + + + +
[docs]class XACalendarMailAlarm(XACalendarAlarm): + """A mail alarm in Calendar.app. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict): + super().__init__(properties)
+ + + + +
[docs]class XACalendarSoundAlarm(XACalendarAlarm): + """A sound alarm in Calendar.app. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict): + super().__init__(properties) + + @property + def sound_name(self) -> str: + """The system sound name to be used for the alarm + """ + return self.xa_elem.soundName() + + @sound_name.setter + def sound_name(self, sound_name: str): + self.set_property('soundName', sound_name) + + @property + def sound_file(self) -> str: + """The path to the sound file to be used for the alarm + """ + return self.xa_elem.soundFile() + + @sound_file.setter + def sound_file(self, sound_file: str): + self.set_property('soundFile', sound_file)
+ + + + +
[docs]class XACalendarOpenFileAlarm(XACalendarAlarm): + """An open file alarm in Calendar.app. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict): + super().__init__(properties) + + @property + def file_path(self) -> str: + """The path to be opened by the alarm. + """ + return self.xa_elem.filePath() + + @file_path.setter + def file_path(self, file_path: str): + self.set_property('filePath', file_path)
+ + + + +
[docs]class XACalendarAttendeeList(XABase.XAList): + """A wrapper around lists of attendees that employs fast enumeration techniques. + + All properties of attendees can be called as methods on the wrapped list, returning a list containing each attendee's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XACalendarEvent, filter) + +
[docs] def properties(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("properties") or [])
+ +
[docs] def display_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("displayName") or [])
+ +
[docs] def email(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("email") or [])
+ +
[docs] def participation_status(self) -> list[XACalendarApplication.ParticipationStatus]: + ls = self.xa_elem.arrayByApplyingSelector_("participationStatus") or [] + return [XACalendarApplication.ParticipationStatus(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def by_properties(self, properties: dict) -> Union['XACalendarAttendee', None]: + return self.by_property("properties", properties)
+ +
[docs] def by_display_name(self, display_name: str) -> Union['XACalendarAttendee', None]: + return self.by_property("displayName", display_name)
+ +
[docs] def by_email(self, email: str) -> Union['XACalendarAttendee', None]: + return self.by_property("email", email)
+ +
[docs] def by_participation_status(self, participation_status: XACalendarApplication.ParticipationStatus) -> Union['XACalendarAttendee', None]: + return self.by_property("participationStatus", participation_status.value)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.display_name()) + ">"
+ +
[docs]class XACalendarAttendee(XABase.XAObject): + """An event attendee in Calendar.app. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties: dict): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the attendee. + """ + return self.xa_elem.properties() + + @property + def display_name(self) -> str: + """The first and last name of the attendee. + """ + return self.xa_elem.displayName() + + @property + def email(self) -> str: + """The email address of the attendee. + """ + return self.xa_elem.email() + + @property + def participation_status(self) -> XACalendarApplication.ParticipationStatus: + """The invitation status for the attendee. + """ + return XACalendarApplication.ParticipationStatus(self.xa_elem.participationStatus())
+ + + + +
[docs]class XACalendarEventList(XABase.XAList): + """A wrapper around lists of events that employs fast enumeration techniques. + + All properties of events can be called as methods on the wrapped list, returning a list containing each event's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XACalendarEvent, filter) + +
[docs] def properties(self) -> Generator[dict[str, Any], None, None]: + """Gets the properties of every event in the list. + + :return: A generator that generates a dictionary of element properties. + :rtype: Generator[dict[str, Any], None, None] + """ + properties_list = ({ + "description": event.description()[25:], + "start_date": event.startDate(), + "end_date": event.endDate(), + "allday_event": event.alldayEvent(), + "recurrence": event.recurrence(), + "sequence": event.sequence(), + "stamp_date": event.stampDate(), + "excluded_dates": list(event.excludedDates()), + "status": XACalendarApplication.EventStatus(event.status()), + "summary": event.summary(), + "location": event.location(), + "uid": event.uid(), + "url": XABase.XAURL(event.url()) + } for event in self.xa_elem) + return properties_list
+ +
[docs] def description(self) -> list[str]: + return [event.description() for event in self.xa_elem]
+ +
[docs] def start_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("startDate") or [])
+ +
[docs] def end_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("endDate") or [])
+ +
[docs] def allday_event(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("alldayEvent") or [])
+ +
[docs] def recurrence(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("recurrence") or [])
+ +
[docs] def sequence(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("sequence") or [])
+ +
[docs] def stamp_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("stampDate") or [])
+ +
[docs] def excluded_dates(self) -> list[list[datetime]]: + return [list(event.excludedDates() or []) for event in self.xa_elem]
+ +
[docs] def status(self) -> list[XACalendarApplication.EventStatus]: + ls = self.xa_elem.arrayByApplyingSelector_("status") or [] + return [XACalendarApplication.EventStatus(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def summary(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("summary") or [])
+ +
[docs] def location(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("location") or [])
+ +
[docs] def uid(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("uid") or [])
+ +
[docs] def url(self) -> list[XABase.XAURL]: + ls = self.xa_elem.arrayByApplyingSelector_("url") or [] + return [XABase.XAURL(url) for url in ls if url is not None]
+ +
[docs] def by_properties(self, properties: dict) -> Union['XACalendarEvent', None]: + if "uid" in properties: + return self.by_uid(properties["uid"]) + + for event in self.xa_elem: + event_properties = { + "start_date": event.startDate() if "start_date" in properties else None, + "end_date": event.endDate() if "end_date" in properties else None, + "allday_event": event.alldayEvent() if "allday_event" in properties else None, + "recurrence": event.recurrence() if "recurrence" in properties else None, + "sequence": event.sequence() if "sequence" in properties else None, + "stamp_date": event.stampDate() if "stamp_date" in properties else None, + "excluded_dates": list(event.excludedDates()) if "excluded_dates" in properties else None, + "status": XACalendarApplication.EventStatus(event.status()) if "status" in properties else None, + "summary": event.summary() if "summary" in properties else None, + "location": event.location() if "location" in properties else None, + "url": XABase.XAURL(event.url()) if "url" in properties else None + } + if all([event_properties[x] == properties[x] for x in properties]): + return self._new_element(event, XACalendarEvent)
+ +
[docs] def by_description(self, description: str) -> Union['XACalendarEvent', None]: + for event in self.xa_elem: + if event.description()[25:] == description[25:]: + return self._new_element(event, XACalendarEvent)
+ +
[docs] def by_start_date(self, start_date: datetime) -> Union['XACalendarEvent', None]: + return self.by_property("startDate", start_date)
+ +
[docs] def by_end_date(self, end_date: datetime) -> Union['XACalendarEvent', None]: + return self.by_property("endDate", end_date)
+ +
[docs] def by_allday_event(self, allday_event: bool) -> Union['XACalendarEvent', None]: + return self.by_property("alldayEvent", allday_event)
+ +
[docs] def by_recurrence(self, recurrence: str) -> Union['XACalendarEvent', None]: + return self.by_property("recurrence", recurrence)
+ +
[docs] def by_sequence(self, sequence: int) -> Union['XACalendarEvent', None]: + return self.by_property("sequence", sequence)
+ +
[docs] def by_stamp_date(self, stamp_date: datetime) -> Union['XACalendarEvent', None]: + return self.by_property("stampDate", stamp_date)
+ +
[docs] def by_excluded_dates(self, excluded_dates: list[datetime]) -> Union['XACalendarEvent', None]: + return self.by_property("excludedDates", excluded_dates)
+ +
[docs] def by_status(self, status: XACalendarApplication.EventStatus) -> Union['XACalendarEvent', None]: + for event in self.xa_elem: + if event.status() == status.value: + return self._new_element(event, XACalendarEvent)
+ +
[docs] def by_summary(self, summary: str) -> Union['XACalendarEvent', None]: + return self.by_property("summary", summary)
+ +
[docs] def by_location(self, location: str) -> Union['XACalendarEvent', None]: + return self.by_property("location", location)
+ +
[docs] def by_uid(self, uid: str) -> Union['XACalendarEvent', None]: + return self.by_property("uid", uid)
+ +
[docs] def by_url(self, url: Union[str, XABase.XAURL]) -> Union['XACalendarEvent', None]: + if isinstance(url, XABase.XAURL): + url = url.url + return self.by_property("url", url)
+ + def __repr__(self): + return "<" + str(type(self)) + "length: " + str(len(self)) + ">"
+ +
[docs]class XACalendarEvent(XABase.XAObject): + """An event in Calendar.app. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties: dict): + super().__init__(properties) + self.__xa_event_obj = None + + @property + def xa_event_obj(self) -> type: + if self.__xa_event_obj is None and hasattr(self.xa_elem, "uid"): + events = AppKit.NSMutableArray.arrayWithArray_([]) + for year in range(2006, datetime.now().year + 4, 4): + start_date = date(year, 1, 1) + end_date = start_date + timedelta(days = 365 * 4) + predicate = self.xa_estr.predicateForEventsWithStartDate_endDate_calendars_(start_date, end_date, None) + events.addObjectsFromArray_(self.xa_estr.eventsMatchingPredicate_(predicate)) + self.__xa_event_obj = XABase.XAPredicate.evaluate_with_dict(events, {"calendarItemIdentifier": self.uid})[0] + return self.__xa_event_obj + + @property + def properties(self) -> dict: + """All properties of the event. + """ + return { + "description": self.xa_elem.description(), + "start_date": self.xa_elem.startDate(), + "end_date": self.xa_elem.endDate(), + "allday_event": self.xa_elem.alldayEvent(), + "recurrence": self.xa_elem.recurrence(), + "sequence": self.xa_elem.sequence(), + "stamp_date": self.xa_elem.stampDate(), + "excluded_dates": list(self.xa_elem.excludedDates()), + "status": XACalendarApplication.EventStatus(self.xa_elem.status()), + "summary": self.xa_elem.summary(), + "location": self.xa_elem.location(), + "uid": self.xa_elem.uid(), + "url": XABase.XAURL(self.xa_elem.url()) + } + + @property + def description(self) -> str: + """The event's notes. + """ + return self.xa_elem.description() + + @description.setter + def description(self, description: str): + self.set_property('description', description) + + @property + def start_date(self) -> datetime: + """The start date and time of the event. + """ + return self.xa_elem.startDate() + + @start_date.setter + def start_date(self, start_date: datetime): + self.set_property('startDate', start_date) + + @property + def end_date(self) -> datetime: + """The end date and time of the event. + """ + return self.xa_elem.endDate() + + @end_date.setter + def end_date(self, end_date: datetime): + self.set_property('endDate', end_date) + + @property + def allday_event(self) -> bool: + """Whether the event is an all-day event. + """ + return self.xa_elem.alldayEvent() + + @allday_event.setter + def allday_event(self, allday_event: bool): + self.set_property('alldayEvent', allday_event) + + @property + def recurrence(self) -> str: + """A string describing the event recurrence. + """ + return self.xa_elem.recurrence() or "" + + @recurrence.setter + def recurrence(self, recurrence: str): + self.set_property('recurrence', recurrence) + + @property + def sequence(self) -> int: + """The event version. + """ + return self.xa_elem.sequence() + + @property + def stamp_date(self) -> datetime: + """The date the event was last modified. + """ + return self.xa_elem.stampDate() + + @stamp_date.setter + def stamp_date(self, stamp_date: datetime): + self.set_property('stampDate', stamp_date) + + @property + def excluded_dates(self) -> list[datetime]: + """The exception dates for the event. + """ + return list(self.xa_elem.excludedDates()) + + @excluded_dates.setter + def excluded_dates(self, excluded_dates: list[datetime]): + self.set_property('excludedDates', excluded_dates) + + @property + def status(self) -> XACalendarApplication.EventStatus: + """The status of the event. + """ + return XACalendarApplication.EventStatus(self.xa_elem.status()) + + @status.setter + def status(self, status: XACalendarApplication.EventStatus): + self.set_property('status', status.value) + + @property + def summary(self) -> str: + """The summary (title) of the event. + """ + return self.xa_elem.summary() + + @summary.setter + def summary(self, summary: str): + self.set_property('summary', summary) + + @property + def location(self) -> str: + """The location of the event. + """ + return self.xa_elem.location() + + @location.setter + def location(self, location: str): + self.set_property('location', location) + + @property + def uid(self) -> str: + """A unique identifier for the event. + """ + return self.xa_elem.uid() + + @property + def url(self) -> str: + """The URL associated with the event. + """ + return self.xa_elem.url() + + @url.setter + def url(self, url: str): + self.set_property('URL', url) + +
[docs] def show(self) -> 'XACalendarEvent': + """Shows the event in the front calendar window. + + :return: The event object. + :rtype: XACalendarEvent + + .. versionadded:: 0.0.1 + """ + self.xa_elem.show() + return self
+ +
[docs] def delete(self): + """Deletes the event. + + .. versionadded:: 0.0.1 + """ + self.xa_estr.removeEvent_span_error_(self.xa_event_obj, EventKit.EKSpanThisEvent, None)
+ +
[docs] def duplicate(self) -> 'XACalendarEvent': + """Duplicates the event, placing the copy on the same calendar. + + :return:The newly created event object. + :rtype: XACalendarEvent + + .. versionadded:: 0.0.1 + """ + new_event = self.xa_event_obj.duplicate() + self.xa_estr.saveEvent_span_commit_error_(new_event, EventKit.EKSpanThisEvent, True, None) + + parent = self.xa_prnt + while not hasattr(parent, "events"): + parent = parent.xa_prnt + + return parent.events().by_uid(new_event.eventIdentifier())
+ +
[docs] def duplicate_to(self, calendar: XACalendarCalendar) -> 'XACalendarEvent': + """Duplicates the event, placing the copy on the same calendar. + + :return: The event object that this method was called from + :rtype: XACalendarEvent + + :Example: Copy today's event to another calendar + + >>> import PyXA + >>> app = PyXA.application("Calendar") + >>> calendar = app.default_calendar + >>> calendar2 = app.calendars()[2] + >>> event = calendar.events_today()[0] + >>> event.duplicate_to(calendar2) + + .. seealso:: :func:`duplicate`, :func:`move_to` + + .. versionadded:: 0.0.1 + """ + calendars = self.xa_estr.calendars() + calendar_obj = XABase.XAPredicate.evaluate_with_dict(calendars, {"title": calendar.name})[0] + new_event = self.xa_event_obj.copyToCalendar_withOptions_(calendar_obj, 1) + self.xa_estr.saveEvent_span_commit_error_(new_event, EventKit.EKSpanThisEvent, True, None) + return calendar.events().by_uid(new_event.eventIdentifier())
+ +
[docs] def move_to(self, calendar: XACalendarCalendar) -> 'XACalendarEvent': + """Moves this event to the specified calendar. + + :param calendar: The calendar to move the event to. + :type calendar: XACalendar + :return: A reference to the moved event object. + :rtype: XACalendarEvent + + :Example: Move today's event to another calendar + + >>> import PyXA + >>> app = PyXA.application("Calendar") + >>> calendar = app.default_calendar + >>> calendar2 = app.calendars()[2] + >>> event = calendar.events_today()[0] + >>> event.move_to(calendar2) + + .. seealso:: :func:`duplicate_to` + + .. versionadded:: 0.0.2 + """ + new_event = self.duplicate_to(calendar) + self.delete() + return new_event
+ +
[docs] def add_attachment(self, path: str) -> 'XACalendarEvent': + """Adds the file at the specified path as an attachment to the event. + + :param path: The path of the file to attach to the event. + :type path: str + :return: A reference to this event object. + :rtype: XACalendarEvent + + :Example: + + >>> import PyXA + >>> app = PyXA.application("Calendar") + >>> calendar = app.default_calendar + >>> calendar2 = app.calendars()[1] + >>> event = calendar.events_today()[0] + >>> event.add_attachment("/Users/exampleuser/Image.png") + + .. versionadded:: 0.0.2 + """ + file_url = XABase.XAPath(path).xa_elem + attachment = EventKit.EKAttachment.alloc().initWithFilepath_(file_url) + self.xa_elem.addAttachment_(attachment) + self.xa_estr.saveEvent_span_error_(self.xa_event_obj, EventKit.EKSpanThisEvent, None) + return self
+ +
[docs] def attendees(self, filter: Union[dict, None] = None) -> 'XACalendarAttendeeList': + """Returns a list of attendees, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned attendees will have, or None + :type filter: Union[dict, None] + :return: The list of attendees + :rtype: XACalendarAttendeeList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.attendees(), XACalendarAttendeeList, filter)
+ +
[docs] def attachments(self, filter: dict = None) -> 'XACalendarAttachmentList': + """"Returns a list of attachments, as PyXA objects, matching the given filter. + + :return: The list of attachments. + :rtype: XACalendarAttachmentList + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_event_obj.attachments(), XACalendarAttachmentList, filter)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.start_date) + ">"
+ + + + +
[docs]class XACalendarAttachmentList(XABase.XAList): + """A wrapper around lists of event attachments that employs fast enumeration techniques. + + All properties of attachments can be called as methods on the wrapped list, returning a list containing each attachment's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XACalendarAttachment, filter) + +
[docs] def type(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("contentType") or [])
+ +
[docs] def file_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("fileName") or [])
+ +
[docs] def file(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("urlOnDisk") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def url(self) -> list[XABase.XAURL]: + ls = self.xa_elem.arrayByApplyingSelector_("URL") or [] + return [XABase.XAURL(x) for x in ls]
+ +
[docs] def uuid(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("UUID") or [])
+ +
[docs] def by_type(self, type: str) -> Union['XACalendarAttachment', None]: + return self.by_property("contentType", type)
+ +
[docs] def by_file_name(self, file_name: str) -> Union['XACalendarAttachment', None]: + return self.by_property("fileName", file_name)
+ +
[docs] def by_file(self, file: Union[XABase.XAPath, str]) -> Union['XACalendarAttachment', None]: + if isinstance(file, str): + file = XABase.XAPath(file) + return self.by_property("urlOnDisk", file.xa_elem)
+ +
[docs] def by_url(self, url: Union[XABase.XAURL, str]) -> Union['XACalendarAttachment', None]: + if isinstance(url, str): + url = XABase.XAURL(url) + return self.by_property("URL", url.xa_elem)
+ +
[docs] def by_uuid(self, uuid: str) -> Union['XACalendarAttachment', None]: + return self.by_property("UUID", uuid)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.file_name()) + ">"
+ +
[docs]class XACalendarAttachment(XABase.XAObject): + """A class for interacting with calendar event attachments. + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties: dict): + super().__init__(properties) + + @property + def type(self) -> str: + """The content type of the attachment, e.g. `image/png`. + """ + return self.xa_elem.contentType() + + @property + def file_name(self) -> str: + """The filename of the original document. + """ + return self.xa_elem.fileName() + + @property + def file(self) -> XABase.XAPath: + """The location of the attachment on the local disk. + """ + return XABase.XAPath(self.xa_elem.urlOnDisk()) + + @property + def url(self) -> XABase.XAURL: + """The iCloud URL of the attachment. + """ + return XABase.XAURL(self.xa_elem.URL()) + + @property + def uuid(self) -> str: + """A unique identifier for the attachment. + """ + return self.xa_elem.UUID() + +
[docs] def open(self) -> 'XACalendarAttachment': + """Opens the attachment in its default application. + + :return: A reference to the attachment object. + :rtype: XACalendarAttachment + + :Example: + + >>> import PyXA + >>> app = PyXA.application("Calendar") + >>> calendar = app.default_calendar + >>> event = calendar.events_today()[0] + >>> event.attachments()[0].open() + + .. versionadded:: 0.0.2 + """ + self.xa_wksp.openURL_(self.file) + return self
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Cardhop.html b/docs/_modules/PyXA/apps/Cardhop.html new file mode 100644 index 0000000..8800b56 --- /dev/null +++ b/docs/_modules/PyXA/apps/Cardhop.html @@ -0,0 +1,271 @@ + + + + + + PyXA.apps.Cardhop — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Cardhop

+""".. versionadded:: 0.1.0
+
+Control Cardhop using JXA-like syntax.
+"""
+
+from enum import Enum
+from typing import Union
+
+import AppKit
+from ScriptingBridge import SBElementArray
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+from ..XAProtocols import XACanOpenPath, XACanPrintPath, XAClipboardCodable, XADeletable, XAPrintable, XAShowable
+
+
[docs]class XACardhopAppplication(XABaseScriptable.XASBApplication, XACanOpenPath, XACanPrintPath): + """A class for interacting with Cardhop.app. + + .. versionadded:: 0.1.0 + """ +
[docs] class ZoomType(Enum): + """Options for zoom type to use when opening a new document. + """ + NO_VARY = 0 + FIT_PAGE = 1 + FIT_WIDTH = 2 + FIT_HEIGHT = 3 + FIT_VISIBLE_WIDTH = 4
+ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XACardhopWindow + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether Cardhop is the active application. + """ + return self.xa_scel.frontmost() + + @property + def version(self) -> str: + """The version of Cardhop.app. + """ + return self.xa_scel.version() + +
[docs] def parse_sentence(self, sentence: str, add_immediately: bool = True): + """Parses the given sentence and carries out the corresponding actions. + + :param sentence: The sentence to parse + :type sentence: str + :param add_immediately: Whether to immediately parse the sentence and save resulting changes, instead of having the user confirm changes via the GUI, defaults to True + :type add_immediately: bool, optional + """ + self.xa_scel.parseSentence_addImmediately_(sentence, add_immediately)
+ +
[docs] def documents(self, filter: dict = None) -> 'XACardhopDocumentList': + """Returns a list of documents, as PyXA objects, matching the filter. + + :param filter: A dictionary specifying property-value pairs that all returned documents will have + :type filter: dict + :return: The list of documents + :rtype: XACardhopDocumentList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.documents(), XACardhopDocumentList, filter)
+ + + + +
[docs]class XACardhopWindow(XABaseScriptable.XASBWindow, XAPrintable): + """A window of Cardhop.app. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def document(self) -> 'XACardhopDocument': + """The document whose contents are displayed in the window. + """ + return self._new_element(self.xa_elem.document(), XACardhopDocument)
+ + + + +
[docs]class XACardhopDocumentList(XABase.XAList, XAPrintable, XAClipboardCodable): + """A wrapper around lists of documents that employs fast enumeration techniques. + + All properties of documents can be called as methods on the wrapped list, returning a list containing each document's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XACardhopDocument, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def modified(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("modified") or [])
+ +
[docs] def file(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("file") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def by_name(self, name: str) -> Union['XACardhopDocument', None]: + return self.by_property("name", name)
+ +
[docs] def by_modified(self, modified: bool) -> Union['XACardhopDocument', None]: + return self.by_property("modified", modified)
+ +
[docs] def by_file(self, file: Union[XABase.XAPath, str]) -> Union['XACardhopDocument', None]: + if isinstance(file, str): + file = XABase.XAPath(file) + return self.by_property("file", file.xa_elem)
+ +
[docs] def get_clipboard_representation(self) -> list[Union[str, AppKit.NSURL]]: + """Gets a clipboard-codable representation of each document in the list. + + When the clipboard content is set to a list of documents, each documents's file URL and name are added to the clipboard. + + :return: A list of each document's file URL and name + :rtype: list[Union[str, AppKit.NSURL]] + + .. versionadded:: 0.0.8 + """ + items = [] + names = self.name() + paths = self.file() + for index, text in enumerate(names): + items.append(str(text), paths[index].xa_elem) + return items
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XACardhopDocument(XABase.XAObject): + """A document of Cardhop.app. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The title of the document. + """ + return self.xa_elem.name() + + @property + def modified(self) -> bool: + """Whether the document has been modified since its last save. + """ + return self.xa_elem.modified() + + @property + def file(self) -> XABase.XAPath: + """The location of the document on disk, if it has one. + """ + return XABase.XAPath(self.xa_elem.file())
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Chromium.html b/docs/_modules/PyXA/apps/Chromium.html new file mode 100644 index 0000000..b62b2b6 --- /dev/null +++ b/docs/_modules/PyXA/apps/Chromium.html @@ -0,0 +1,914 @@ + + + + + + PyXA.apps.Chromium — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Chromium

+""".. versionadded:: 0.0.3
+
+Control Chromium using JXA-like syntax.
+"""
+
+from typing import Any, Union
+
+import AppKit
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+from ..XAProtocols import XACanOpenPath, XAClipboardCodable
+
+
[docs]class XAChromiumApplication(XABaseScriptable.XASBApplication, XACanOpenPath): + """A class for managing and interacting with Chromium.app. + + .. seealso:: :class:`XAChromiumWindow`, :class:`XAChromiumBookmarkFolder`, :class:`XAChromiumBookmarkItem`, :class:`XAChromiumTab` + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XAChromiumWindow + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether Chromium is the active application. + """ + return self.xa_scel.frontmost() + + @frontmost.setter + def frontmost(self, frontmost: bool): + self.set_property("frontmost", frontmost) + + @property + def version(self) -> str: + """The version of Chromium.app. + """ + return self.xa_scel.version() + + @property + def bookmarks_bar(self) -> 'XAChromiumBookmarkFolder': + """The bookmarks bar bookmark folder. + """ + return self._new_element(self.xa_scel.bookmarksBar(), XAChromiumBookmarkFolder) + + @property + def other_bookmarks(self) -> 'XAChromiumBookmarkFolder': + """The other bookmarks bookmark folder. + """ + return self._new_element(self.xa_scel.otherBookmarks(), XAChromiumBookmarkFolder) + +
[docs] def open(self, url: Union[str, XABase.XAURL] = "https://google.com") -> 'XAChromiumApplication': + """Opens a URL in a new tab. + + :param url: _description_, defaults to "http://google.com" + :type url: str, optional + :return: A reference to the Chromium application object. + :rtype: XAChromiumApplication + + :Example 1: Open a local or external URL + + >>> import PyXA + >>> app = PyXA.Application("Chromium") + >>> app.open("https://www.google.com") + >>> app.open("google.com") + >>> app.open("/Users/exampleuser/Documents/WebPage.html") + + .. versionadded:: 0.0.3 + """ + if isinstance(url, str): + if url.startswith("/"): + # URL is a path to file + self.xa_wksp.openFile_application_(url, self.xa_scel) + return self + # Otherwise, URL is web address + elif not url.startswith("http"): + url = "http://" + url + url = XABase.XAURL(url) + self.xa_wksp.openURLs_withAppBundleIdentifier_options_additionalEventParamDescriptor_launchIdentifiers_([url.xa_elem], self.xa_elem.bundleIdentifier(), 0, None, None) + return self
+ +
[docs] def bookmark_folders(self, filter: Union[dict, None] = None) -> 'XAChromiumBookmarkFolderList': + """Returns a list of bookmark folders, as PyXA objects, matching the given filter. + + :param filter: Keys and values to filter folders by, defaults to None + :type filter: dict, optional + :return: A PyXA list object wrapping a list of bookmark folders + :rtype: XAChromiumBookmarkFolderList + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_scel.bookmarkFolders(), XAChromiumBookmarkFolderList, filter)
+ +
[docs] def new_window(self, url: Union[str, XABase.XAURL, None] = None) -> 'XAChromiumWindow': + """Opens a new window at the specified URL. + + + :param url: The URL to open in a new window, or None to open the window at the homepage, defaults to None + :type url: Union[str, XABase.XAURL, None], optional + :return: The newly created window object + :rtype: XAChromiumWindow + + .. seealso:: :func:`new_tab`, :func:`make` + + .. versionadded:: 0.0.5 + """ + new_window = self.make("window") + self.windows().push(new_window) + + if isinstance(url, str): + if url.startswith("/"): + # URL is a path to file + self.xa_wksp.openFile_application_(url, self.xa_scel) + return self + # Otherwise, URL is web address + elif not url.startswith("http"): + url = "http://" + url + url = XABase.XAURL(url) + new_window.active_tab.set_property("URL", url.xa_elem) + return new_window
+ +
[docs] def new_tab(self, url: Union[str, XABase.XAURL, None] = None) -> 'XAChromiumTab': + """Opens a new tab at the specified URL. + + :param url: The URL to open in a new tab, or None to open the tab at the homepage, defaults to None + :type url: Union[str, XABase.XAURL, None], optional + :return: The newly created tab object + :rtype: XAChromiumTab + + .. seealso:: :func:`new_window`, :func:`make` + + .. versionadded:: 0.0.5 + """ + new_tab = None + if url is None: + new_tab = self.make("tab") + else: + new_tab = self.make("tab", {"URL": url}) + self.front_window.tabs().push(new_tab) + return new_tab
+ +
[docs] def make(self, specifier: str, properties: dict = None): + """Creates a new element of the given specifier class without adding it to any list. + + Use :func:`XABase.XAList.push` to push the element onto a list. + + :param specifier: The classname of the object to create + :type specifier: str + :param properties: The properties to give the object + :type properties: dict + :return: A PyXA wrapped form of the object + :rtype: XABase.XAObject + + .. seealso:: :func:`new_window`, :func:`new_tab` + + .. versionadded:: 0.0.4 + """ + if properties is None: + properties = {} + + obj = self.xa_scel.classForScriptingClass_(specifier).alloc().initWithProperties_(properties) + + if specifier == "tab": + return self._new_element(obj, XAChromiumTab) + elif specifier == "window": + return self._new_element(obj, XAChromiumWindow)
+ + + + +
[docs]class XAChromiumWindow(XABaseScriptable.XASBWindow): + """A class for managing and interacting with Chromium windows. + + .. seealso:: :class:`XAChromiumApplication`, :class:`XAChromiumTab` + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def given_name(self) -> str: + """The given name of the window. + """ + return self.xa_elem.givenName() + + @given_name.setter + def given_name(self, given_name: str): + self.set_property("givenName", given_name) + + @property + def minimizable(self) -> bool: + """Whether the window can be minimized. + """ + return self.xa_elem.minimizable() + + @property + def minimized(self) -> bool: + """Whether the window is currently minimized. + """ + return self.xa_elem.minimized() + + @minimized.setter + def minimized(self, minimized: bool): + self.set_property("minimized", minimized) + + @property + def mode(self) -> str: + """The mode of the window, either 'normal' or 'incognito'. + """ + return self.xa_elem.mode() + + @mode.setter + def mode(self, mode: str): + self.set_property("mode", mode) + + @property + def active_tab_index(self) -> int: + """The index of the active tab. + """ + return self.xa_elem.activeTabIndex() + + @active_tab_index.setter + def active_tab_index(self, active_tab_index: int): + self.set_property("activeTabIndex", active_tab_index) + + @property + def active_tab(self) -> 'XAChromiumTab': + """The currently selected tab. + """ + return self._new_element(self.xa_elem.activeTab(), XAChromiumTab) + + @active_tab.setter + def active_tab(self, active_tab: 'XAChromiumTab'): + self.set_property("activeTab", active_tab.xa_elem) + +
[docs] def new_tab(self, url: Union[str, XABase.XAURL, None] = None) -> 'XAChromiumTab': + """Opens a new tab at the specified URL. + + :param url: The URL to open in a new tab, or None to open the tab at the homepage, defaults to None + :type url: Union[str, XABase.XAURL, None], optional + :return: The newly created tab object + :rtype: XAChromiumTab + + .. versionadded:: 0.0.5 + """ + new_tab = None + if url is None: + new_tab = self.xa_prnt.xa_prnt.make("tab") + else: + new_tab = self.xa_prnt.xa_prnt.make("tab", {"URL": url}) + self.tabs().push(new_tab) + return new_tab
+ +
[docs] def tabs(self, filter: Union[dict, None] = None) -> 'XAChromiumTabList': + """Returns a list of tabs, as PyXA objects, matching the given filter. + + :param filter: Keys and values to filter tabs by, defaults to None + :type filter: dict, optional + :return: A PyXA list object wrapping a list of tabs + :rtype: XAChromiumTabList + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_elem.tabs(), XAChromiumTabList, filter)
+ + + + +
[docs]class XAChromiumTabList(XABase.XAList, XAClipboardCodable): + """A wrapper around a list of tabs. + + .. seealso:: :class:`XAChromiumTab` + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAChromiumTab, filter) + +
[docs] def id(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def title(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("title") or [])
+ +
[docs] def url(self) -> list[XABase.XAURL]: + ls = self.xa_elem.arrayByApplyingSelector_("URL") or [] + return [XABase.XAURL(x) for x in ls]
+ +
[docs] def loading(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("loading") or [])
+ +
[docs] def by_id(self, id: int) -> Union['XAChromiumTab', None]: + return self.by_property("id", id)
+ +
[docs] def by_title(self, title: str) -> Union['XAChromiumTab', None]: + return self.by_property("title", title)
+ +
[docs] def by_url(self, url: XABase.XAURL) -> Union['XAChromiumTab', None]: + return self.by_property("url", str(url.xa_elem))
+ +
[docs] def by_loading(self, loading: bool) -> Union['XAChromiumTab', None]: + return self.by_property("loading", loading)
+ +
[docs] def get_clipboard_representation(self) -> list[Union[str, AppKit.NSURL]]: + """Gets a clipboard-codable representation of each tab in the list. + + When the clipboard content is set to a list of Chromium tabs, each tab's URL is added to the clipboard. + + :return: A list of tab URLs + :rtype: list[Union[str, AppKit.NSURL]] + + .. versionadded:: 0.0.8 + """ + items = [] + titles = self.title() + urls = self.url() + for index, title in enumerate(titles): + items.append(title) + items.append(urls[index].xa_elem) + return items
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.title()) + ">"
+ +
[docs]class XAChromiumTab(XABase.XAObject, XAClipboardCodable): + """A class for managing and interacting with Chromium tabs. + + .. seealso:: :class:`XAChromiumWindow`, :class:`XAChromiumTabList`, :class:`XAChromiumWindow` + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> int: + """The unique identifier for the tab. + """ + return self.xa_elem.id() + + @property + def title(self) -> str: + """The title of the tab. + """ + return self.xa_elem.title() + + @property + def url(self) -> XABase.XAURL: + """The URL visible to the user. + """ + return XABase.XAURL(self.xa_elem.URL()) + + @url.setter + def url(self, url: XABase.XAURL): + self.set_property("URL", url.url) + + @property + def loading(self) -> bool: + """Is the tab currently loading? + """ + return self.xa_elem.loading() + +
[docs] def undo(self) -> 'XAChromiumTab': + """Undoes the last action done on the tab. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.undo() + return self
+ +
[docs] def redo(self) -> 'XAChromiumTab': + """Redoes the last action done on the tab. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.redo() + return self
+ +
[docs] def cut_selection(self) -> 'XAChromiumTab': + """Attempts to cut the selected content and copy it to the clipboard. If the content cannot be deleted, then it is only copied to the clipboard. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.cutSelection() + return self
+ +
[docs] def copy_selection(self) -> 'XAChromiumTab': + """Copies the selected element to the clipboard. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.copySelection() + return self
+ +
[docs] def paste_selection(self) -> 'XAChromiumTab': + """Attempts to paste the clipboard into the selected element. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.pasteSelection() + return self
+ +
[docs] def select_all(self) -> 'XAChromiumTab': + """Selects all text content within the tab. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.selectAll() + return self
+ +
[docs] def go_back(self) -> 'XAChromiumTab': + """Goes to the previous URL in the tab's history. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.goBack() + return self
+ +
[docs] def go_forward(self) -> 'XAChromiumTab': + """Goes to the next URL in the tab's history, or does nothing if the current document is the most recent URL. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.goForward() + return self
+ +
[docs] def reload(self) -> 'XAChromiumTab': + """Reloads the tab. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.reload() + return self
+ +
[docs] def stop(self) -> 'XAChromiumTab': + """Forces the tab to stop loading. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.stop() + return self
+ +
[docs] def print(self) -> 'XAChromiumTab': + """Opens the print dialog for the tab. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.print() + return self
+ +
[docs] def view_source(self) -> 'XAChromiumTab': + """Opens the source HTML of the tab's document in a separate tab. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.viewSource() + return self
+ +
[docs] def save(self, file_path: Union[str, AppKit.NSURL], save_assets: bool = True) -> 'XAChromiumTab': + if isinstance(file_path, str): + file_path = AppKit.NSURL.alloc().initFileURLWithPath_(file_path) + if save_assets: + self.xa_elem.saveIn_as_(file_path, "complete html") + else: + self.xa_elem.saveIn_as_(file_path, "only html") + return self
+ +
[docs] def close(self) -> 'XAChromiumTab': + """Closes the tab. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.close() + return self
+ +
[docs] def execute(self, script: str) -> Any: + """Executes JavaScript in the tab. + + .. versionadded:: 0.0.4 + """ + return self.xa_elem.executeJavascript_(script)
+ +
[docs] def move_to(self, window: 'XAChromiumWindow') -> 'XAChromiumWindow': + """Moves the tab to the specified window. After, the tab will exist in only one location. + + :param window: The window to move the tab to. + :type window: XASafariWindow + :return: A reference to the tab object. + :rtype: XASafariGeneric + + :Example 1: Move the current tab to the second window + + >>> import PyXA + >>> app = PyXA.Application("Chromium") + >>> tab = app.front_window.active_tab + >>> window2 = app.windows()[1] + >>> tab.move_to(window2) + + .. seealso:: :func:`duplicate_to` + + .. versionadded:: 0.0.1 + """ + current = self.xa_elem.get() + properties = {"URL": self.url} + if isinstance(self.xa_prnt, XABase.XAList): + new_tab = self.xa_prnt.xa_prnt.xa_prnt.make("tab", properties) + else: + new_tab = self.xa_prnt.xa_prnt.make("tab", properties) + window.tabs().push(new_tab) + current.close() + return self
+ +
[docs] def duplicate_to(self, window: 'XAChromiumWindow') -> 'XAChromiumWindow': + """Duplicates the tab in the specified window. The tab will then exist in two locations. + + :param window: The window to duplicate the tab in. + :type window: XASafariWindow + :return: A reference to the tab object. + :rtype: XASafariTab + + :Example 1: Duplicate the current tab in the second window + + >>> import PyXA + >>> app = PyXA.Application("Chromium") + >>> tab = app.front_window.active_tab + >>> window2 = app.windows()[1] + >>> tab.duplicate_to(window2) + + .. seealso:: :func:`move_to` + + .. versionadded:: 0.0.1 + """ + properties = {"URL": self.url} + + new_tab = None + print(self.xa_prnt) + if isinstance(self.xa_prnt, XABase.XAList): + new_tab = self.xa_prnt.xa_prnt.xa_prnt.make("tab", properties) + else: + new_tab = self.xa_prnt.xa_prnt.make("tab", properties) + window.tabs().push(new_tab) + return self
+ +
[docs] def get_clipboard_representation(self) -> list[Union[str, AppKit.NSURL]]: + """Gets a clipboard-codable representation of the tab. + + When the clipboard content is set to a Chromium tab, the tab's title and URL are added to the clipboard. + + :return: The tab's title and URL + :rtype: list[Union[str, AppKit.NSURL]] + + .. versionadded:: 0.0.8 + """ + return [self.title, self.url.xa_elem]
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.title) + ">"
+ + + + +
[docs]class XAChromiumBookmarkFolderList(XABase.XAList, XAClipboardCodable): + """A wrapper around a list of bookmark folders. + + .. seealso:: :class:`XAChromiumBookmarkFolder` + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAChromiumBookmarkFolder, filter) + +
[docs] def id(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def title(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("title") or [])
+ +
[docs] def index(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("index") or [])
+ +
[docs] def by_id(self, id: int) -> Union['XAChromiumBookmarkFolder', None]: + return self.by_property("id", id)
+ +
[docs] def by_title(self, title: str) -> Union['XAChromiumBookmarkFolder', None]: + return self.by_property("title", title)
+ +
[docs] def by_index(self, index: int) -> Union['XAChromiumBookmarkFolder', None]: + return self.by_property("index", index)
+ +
[docs] def get_clipboard_representation(self) -> list[str]: + """Gets a clipboard-codable representation of each bookmark folder in the list. + + When the clipboard content is set to a list of bookmark folders, each folder's title is added to the clipboard. + + :return: The list of each bookmark folder's title + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + return self.title()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.title()) + ">"
+ +
[docs]class XAChromiumBookmarkFolder(XABase.XAObject, XAClipboardCodable): + """A class for managing and interacting with bookmark folders in Chromium.app. + + .. seealso:: :class:`XAChromiumApplication`, :class:`XAChromiumBookmarkFolderList` + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> int: + """The unique identifier for the bookmark folder. + """ + return self.xa_elem.id() + + @property + def title(self) -> str: + """The name of the bookmark folder. + """ + return self.xa_elem.title() + + @title.setter + def title(self, title: str): + self.set_property("title", title) + + @property + def index(self) -> int: + """The index of the bookmark folder with respect to its parent folder. + """ + return self.xa_elem.index() + +
[docs] def bookmark_folders(self, filter: Union[dict, None] = None) -> 'XAChromiumBookmarkFolderList': + """Returns a list of bookmark folders, as PyXA objects, matching the given filter. + + :param filter: Keys and values to filter folders by, defaults to None + :type filter: dict, optional + :return: A PyXA list object wrapping a list of bookmark folders + :rtype: XAChromiumBookmarkFolderList + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_elem.bookmarkFolders(), XAChromiumBookmarkFolderList, filter)
+ +
[docs] def bookmark_items(self, filter: Union[dict, None] = None) -> 'XAChromiumBookmarkItemList': + """Returns a list of bookmark items, as PyXA objects, matching the given filter. + + :param filter: Keys and values to filter items by, defaults to None + :type filter: dict, optional + :return: A PyXA list object wrapping a list of bookmark items + :rtype: XAChromiumBookmarkItemList + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_elem.bookmarkItems(), XAChromiumBookmarkItemList, filter)
+ +
[docs] def delete(self): + """Permanently deletes the bookmark folder. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.delete()
+ +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of the bookmark folder. + + When the clipboard content is set to a bookmark folder, the folders's title is added to the clipboard. + + :return: The bookmark folders's title + :rtype: str + + .. versionadded:: 0.0.8 + """ + return self.title
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.title) + ">"
+ + + + +
[docs]class XAChromiumBookmarkItemList(XABase.XAList, XAClipboardCodable): + """A wrapper around a list of bookmark items. + + .. seealso:: :class:`XAChromiumBookmarkItem` + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAChromiumBookmarkItem, filter) + +
[docs] def id(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def title(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("title") or [])
+ +
[docs] def url(self) -> list[XABase.XAURL]: + ls = self.xa_elem.arrayByApplyingSelector_("URL") or [] + return [XABase.XAURL(x) for x in ls]
+ +
[docs] def index(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("index") or [])
+ +
[docs] def by_id(self, id: int) -> Union['XAChromiumBookmarkItem', None]: + return self.by_property("id", id)
+ +
[docs] def by_title(self, title: str) -> Union['XAChromiumBookmarkItem', None]: + return self.by_property("title", title)
+ +
[docs] def by_url(self, url: XABase.XAURL) -> Union['XAChromiumBookmarkItem', None]: + return self.by_property("URL", str(url.xa_elem))
+ +
[docs] def by_index(self, index: int) -> Union['XAChromiumBookmarkItem', None]: + return self.by_property("index", index)
+ +
[docs] def get_clipboard_representation(self) -> list[Union[str, AppKit.NSURL]]: + """Gets a clipboard-codable representation of each bookmark item in the list. + + When the clipboard content is set to a list of bookmark items, each item's title and URL are added to the clipboard. + + :return: The list of each bookmark items's title and URL + :rtype: list[Union[str, AppKit.NSURL]] + + .. versionadded:: 0.0.8 + """ + items = [] + titles = self.title() + urls = self.url() + for index, title in enumerate(titles): + items.append(title) + items.append(urls[index].xa_elem) + return items
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.title()) + ">"
+ +
[docs]class XAChromiumBookmarkItem(XABase.XAObject, XAClipboardCodable): + """A class for managing and interacting with bookmarks in Chromium.app. + + .. seealso:: :class:`XAChromiumApplication`, :class:`XAChromiumBookmarkItemList` + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> int: + """The unique identifier for the bookmark item. + """ + return self.xa_elem.id() + + @property + def title(self) -> str: + """The title of the bookmark item. + """ + return self.xa_elem.title() + + @title.setter + def title(self, title: str): + self.set_property("title", title) + + @property + def url(self) -> XABase.XAURL: + """The URL of the bookmark. + """ + return XABase.XAURL(self.xa_elem.URL()) + + @url.setter + def url(self, url: XABase.XAURL): + self.set_property("URL", url.url) + + @property + def index(self) -> int: + """The index of the item with respect to its parent folder. + """ + return self.xa_elem.index() + +
[docs] def delete(self): + """Permanently deletes the bookmark. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.delete()
+ +
[docs] def get_clipboard_representation(self) -> list[Union[str, AppKit.NSURL]]: + """Gets a clipboard-codable representation of the bookmark item. + + When the clipboard content is set to a bookmark item, the item's title and URL are added to the clipboard. + + :return: The bookmark items's title and URL + :rtype: list[Union[str, AppKit.NSURL]] + + .. versionadded:: 0.0.8 + """ + return [self.title, self.url.xa_elem]
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.title) + ">"
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Console.html b/docs/_modules/PyXA/apps/Console.html new file mode 100644 index 0000000..8587870 --- /dev/null +++ b/docs/_modules/PyXA/apps/Console.html @@ -0,0 +1,133 @@ + + + + + + PyXA.apps.Console — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Console

+""".. versionadded:: 0.0.5
+
+Control the macOS Console application using JXA-like syntax.
+"""
+
+from enum import Enum
+from typing import Self
+from AppKit import NSFileManager, NSURL
+
+from PyXA import XABase
+from PyXA.XABase import OSType
+from PyXA import XABaseScriptable
+from ..XAProtocols import XACanOpenPath
+
+
[docs]class XAConsoleApplication(XABaseScriptable.XASBApplication): + """A class for managing and interacting with Console.app. + + .. versionadded:: 0.0.5 + """ +
[docs] def select_device(self, uuid: str) -> Self: + """Select a device. + + :param uuid: The UUID of the device to select + :type uuid: str + :return: The application ject + :rtype: Self + + .. versionadded:: 0.0.5 + """ + self.xa_scel.selectDevice_(uuid) + return self
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Contacts.html b/docs/_modules/PyXA/apps/Contacts.html new file mode 100644 index 0000000..9b51c09 --- /dev/null +++ b/docs/_modules/PyXA/apps/Contacts.html @@ -0,0 +1,1556 @@ + + + + + + PyXA.apps.Contacts — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Contacts

+""".. versionadded:: 0.0.2
+
+Control the macOS Contacts application using JXA-like syntax.
+"""
+from datetime import datetime
+from enum import Enum
+from typing import Any, Union
+
+import AppKit
+
+from PyXA import XABase, XAEvents
+from PyXA import XABaseScriptable
+from ..XAProtocols import XACanOpenPath
+
+
+
[docs]class XAContactsApplication(XABaseScriptable.XASBApplication, XACanOpenPath): + """A class for managing and interacting with Contacts.app. + + .. seealso:: :class:`XAContactsGroup`, :class:`XAContactsPerson` + + .. versionadded:: 0.0.2 + """ +
[docs] class Format(Enum): + """Format options when saving documents. + """ + ARCHIVE = XABase.OSType('abbu') #: The native Address Book file format
+ +
[docs] class ServiceType(Enum): + """Service types for social media accounts. + """ + AIM = XABase.OSType('az85') + GADU_GADU = XABase.OSType('az86') + GOOGLE_TALK = XABase.OSType('az87') + ICQ = XABase.OSType('az88') + JABBER = XABase.OSType('az89') + MSN = XABase.OSType('az90') + QQ = XABase.OSType('az91') + SKYPE = XABase.OSType('az92') + YAHOO = XABase.OSType('az93') + FACEBOOK = XABase.OSType('az94')
+ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether Contacts is the frontmost application. + """ + return self.xa_scel.frontmost() + + @frontmost.setter + def frontmost(self, frontmost: bool): + self.set_property('frontmost', frontmost) + + @property + def version(self) -> str: + """The version of Contacts.app. + """ + return self.xa_scel.version() + + @property + def my_card(self) -> 'XAContactsPerson': + """The user's contact card. + """ + return self._new_element(self.xa_scel.myCard(), XAContactsPerson) + + @my_card.setter + def my_card(self, my_card: 'XAContactsPerson'): + self.set_property('myCard', my_card) + + @property + def unsaved(self) -> bool: + """Whether there are any unsaved changed. + """ + return self.xa_scel.unsaved() + + @property + def selection(self) -> 'XAContactsPersonList': + """The currently selected entries. + """ + return self._new_element(self.xa_scel.selection(), XAContactsPersonList) + + @selection.setter + def selection(self, selection: Union['XAContactsPersonList', list['XAContactsPerson']]): + if isinstance(selection, list): + selection = [x.xa_elem for x in selection] + self.set_property("selection", selection) + else: + self.set_property('selection', selection.xa_elem) + + @property + def default_country_code(self) -> str: + """The default country code for addresses. + """ + return self.xa_scel.defaultCountryCode().get() or "" + +
[docs] def open(self, file_path: str): + """Opens a document and prompts whether to import the contact(s) contained in the document. + + :param file_path: The path to the file to import + :type file_path: str + + .. versionadded:: 0.0.7 + """ + self.xa_scel.open_(file_path)
+ +
[docs] def save(self): + """Saves all changes to the address book. + + .. versionadded:: 0.0.7 + """ + self.xa_scel.save()
+ +
[docs] def documents(self, filter: Union[dict, None] = None) -> 'XAContactsDocumentList': + """Returns a list of documents, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned documents will have, or None + :type filter: Union[dict, None] + :return: The list of documents + :rtype: XAContactsDocumentList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.documents(), XAContactsDocumentList, filter)
+ +
[docs] def groups(self, filter: Union[dict, None] = None) -> 'XAContactsGroupList': + """Returns a list of groups, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned groups will have, or None + :type filter: Union[dict, None] + :return: The list of groups + :rtype: XAContactsGroupList + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Contacts") + >>> print(app.groups()) + <<class 'PyXA.apps.Contacts.XAContactsGroupList'>['Example Group 1', 'Example Group 2', ...]> + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.groups(), XAContactsGroupList, filter)
+ +
[docs] def people(self, filter: Union[dict, None] = None) -> 'XAContactsPersonList': + """Returns a list of people, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned people will have, or None + :type filter: Union[dict, None] + :return: The list of people + :rtype: XAContactsPersonList + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Contacts") + >>> print(app.people()) + <<class 'PyXA.apps.Contacts.XAContactsPersonList'>['Example Contact 1', 'Example Contact 2', ...]> + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.people(), XAContactsPersonList, filter)
+ +
[docs] def make(self, specifier: str, properties: dict = None): + """Creates a new element of the given specifier class without adding it to any list. + + Use :func:`XABase.XAList.push` to push the element onto a list. + + :param specifier: The classname of the object to create + :type specifier: str + :param properties: The properties to give the object + :type properties: dict + :return: A PyXA wrapped form of the object + :rtype: XABase.XAObject + + :Example 1: Add a URL to a contact + + >>> import PyXA + >>> app = PyXA.Application("Contacts") + >>> contact = app.people().by_name("Example Contact") + >>> new_url = app.make("url", {"label": "Google", "value": "www.google.com"}) + >>> contact.urls().push(new_url) + >>> app.save() + + .. versionadded:: 0.0.7 + """ + if properties is None: + properties = {} + + obj = self.xa_scel.classForScriptingClass_(specifier).alloc().initWithProperties_(properties) + + if specifier == "document": + return self._new_element(obj, XAContactsDocument) + elif specifier == "person": + return self._new_element(obj, XAContactsPerson) + elif specifier == "group": + return self._new_element(obj, XAContactsGroup) + elif specifier == "url": + return self._new_element(obj, XAContactsURL)
+ + + + +
[docs]class XAContactsWindow(XABaseScriptable.XASBWindow): + """A window of Contacts.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def document(self) -> 'XAContactsDocument': + """The documents currently displayed in the window. + """ + return self._new_element(self.xa_elem.document(), XAContactsDocument)
+ + + + +
[docs]class XAContactsDocumentList(XABase.XAList): + """A wrapper around lists of documents that employs fast enumeration techniques. + + All properties of documents can be called as methods on the wrapped list, returning a list containing each document's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAContactsDocument, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def modified(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("modified") or [])
+ +
[docs] def file(self) -> list[XABase.XAURL]: + ls = self.xa_elem.arrayByApplyingSelector_("file") or [] + return [XABase.XAURL(x) for x in ls]
+ +
[docs] def by_name(self, name: str) -> Union['XAContactsDocument', None]: + return self.by_property("name", name)
+ +
[docs] def by_modified(self, modified: bool) -> Union['XAContactsDocument', None]: + return self.by_property("modified", modified)
+ +
[docs] def by_file(self, file: XABase.XAURL) -> Union['XAContactsDocument', None]: + return self.by_property("file", file.xa_elem)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAContactsDocument(XABase.XAObject): + """A document in Contacts.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the document. + """ + return self.xa_elem.name() + + @property + def modified(self) -> bool: + """Whether the document has been modified since it was last saved. + """ + return self.xa_elem.modified() + + @property + def file(self) -> XABase.XAURL: + """The location of the document of the disk, if one exists. + """ + return XABase.XAURL(self.xa_elem.file())
+ + + + +
[docs]class XAContactsAddressList(XABase.XAList): + """A wrapper around lists of addresses that employs fast enumeration techniques. + + All properties of addresses can be called as methods on the wrapped list, returning a list containing each address' value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAContactsAddress, filter) + +
[docs] def city(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("city") or [])
+ +
[docs] def formatted_address(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("formattedAddress") or [])
+ +
[docs] def street(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("street") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def zip(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("zip") or [])
+ +
[docs] def country(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("country") or [])
+ +
[docs] def label(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("label") or [])
+ +
[docs] def country_code(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("countryCode") or [])
+ +
[docs] def state(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("state") or [])
+ +
[docs] def by_city(self, city: str) -> Union['XAContactsAddress', None]: + return self.by_property("city", city)
+ +
[docs] def by_formatted_address(self, formatted_address: str) -> Union['XAContactsAddress', None]: + return self.by_property("formattedAddress", formatted_address)
+ +
[docs] def by_street(self, street: str) -> Union['XAContactsAddress', None]: + return self.by_property("street", street)
+ +
[docs] def by_id(self, id: str) -> Union['XAContactsAddress', None]: + return self.by_property("id", id)
+ +
[docs] def by_zip(self, zip: str) -> Union['XAContactsAddress', None]: + return self.by_property("zip", zip)
+ +
[docs] def by_country(self, country: str) -> Union['XAContactsAddress', None]: + return self.by_property("country", country)
+ +
[docs] def by_label(self, label: str) -> Union['XAContactsAddress', None]: + return self.by_property("label", label)
+ +
[docs] def by_country_code(self, country_code: str) -> Union['XAContactsAddress', None]: + return self.by_property("countryCode", country_code)
+ +
[docs] def by_state(self, state: str) -> Union['XAContactsAddress', None]: + return self.by_property("state", state)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.label()) + ">"
+ +
[docs]class XAContactsAddress(XABase.XAObject): + """An address associated with a contact in Contacts.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def city(self) -> str: + """The city part of the address. + """ + return self.xa_elem.city() + + @city.setter + def city(self, city: str): + self.set_property('city', city) + + @property + def formatted_address(self) -> str: + """The formatted string for the address. + """ + return self.xa_elem.formattedAddress() + + @property + def street(self) -> str: + """The street part of the address. + """ + return self.xa_elem.street() + + @street.setter + def street(self, street: str): + self.set_property('street', street) + + @property + def id(self) -> str: + """The unique identifier for the address. + """ + return self.xa_elem.id() + + @property + def zip(self) -> str: + """The zip code or postal code part of the address. + """ + return self.xa_elem.zip() + + @zip.setter + def zip(self, zip: str): + self.set_property('zip', zip) + + @property + def country(self) -> str: + """The country part of the address. + """ + return self.xa_elem.country() + + @country.setter + def country(self, country: str): + self.set_property('country', country) + + @property + def label(self) -> str: + """The label associated with the address. + """ + return self.xa_elem.label() + + @label.setter + def label(self, label: str): + self.set_property('label', label) + + @property + def country_code(self) -> str: + """The country code part of the address. + """ + return self.xa_elem.countryCode() + + @country_code.setter + def country_code(self, country_code: str): + self.set_property('countryCode', country_code) + + @property + def state(self) -> str: + """The state, province, or region part of the address. + """ + return self.xa_elem.state() + + @state.setter + def state(self, state: str): + self.set_property('state', state)
+ + + + +
[docs]class XAContactsContactInfoList(XABase.XAList): + """A wrapper around lists of contact information entries that employs fast enumeration techniques. + + All properties of contact information entries can be called as methods on the wrapped list, returning a list containing each entry's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAContactsContactInfo + super().__init__(properties, obj_class, filter) + +
[docs] def label(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("label") or [])
+ +
[docs] def value(self) -> list[Any]: + return list(self.xa_elem.arrayByApplyingSelector_("value") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def by_label(self, label: str) -> Union['XAContactsContactInfo', None]: + return self.by_property("label", label)
+ +
[docs] def by_value(self, value: Any) -> Union['XAContactsContactInfo', None]: + return self.by_property("value", value)
+ +
[docs] def by_id(self, id: str) -> Union['XAContactsContactInfo', None]: + return self.by_property("id", id)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.label()) + "::" + str(self.value()) + ">"
+ +
[docs]class XAContactsContactInfo(XABase.XAObject): + """Contact information associated with a contact in Contacts.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def label(self) -> str: + """The label associated with the information entry. + """ + return self.xa_elem.label() + + @label.setter + def label(self, label: str): + self.set_property('label', label) + + @property + def value(self) -> Union[str, datetime, None]: + """The value of the information entry. + """ + return self.xa_elem.value() + + @value.setter + def value(self, value: Union[str, datetime, None]): + self.set_property('value', value) + + @property + def id(self) -> str: + """The persistent unique identifier for the information entry. + """ + return self.xa_elem.id()
+ + + + +
[docs]class XAContactsCustomDateList(XAContactsContactInfoList): + """A wrapper around lists of contact custom dates that employs fast enumeration techniques. + + All properties of contact custom dates can be called as methods on the wrapped list, returning a list containing each custom date's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAContactsCustomDate)
+ +
[docs]class XAContactsCustomDate(XAContactsContactInfo): + """A custom date associated with a contact in Contacts.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAContactsEmailList(XAContactsContactInfoList): + """A wrapper around lists of contact email addresses that employs fast enumeration techniques. + + All properties of contact email addresses can be called as methods on the wrapped list, returning a list containing each email address's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAContactsEmail)
+ +
[docs]class XAContactsEmail(XAContactsContactInfo): + """A document in Contacts.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAContactsEntryList(XABase.XAList): + """A wrapper around lists of contact entries that employs fast enumeration techniques. + + All properties of contact entries can be called as methods on the wrapped list, returning a list containing each entry's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAContactsEntry + super().__init__(properties, obj_class, filter) + +
[docs] def modification_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("modificationDate") or [])
+ +
[docs] def creation_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("creationDate") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def selected(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("selected") or [])
+ +
[docs] def by_modification_date(self, modification_date: datetime) -> Union['XAContactsEntry', None]: + return self.by_property("modificationDate", modification_date)
+ +
[docs] def by_creation_date(self, creation_date: datetime) -> Union['XAContactsEntry', None]: + return self.by_property("creationDate", creation_date)
+ +
[docs] def by_id(self, id: str) -> Union['XAContactsEntry', None]: + return self.by_property("id", id)
+ +
[docs] def by_selected(self, selected: bool) -> Union['XAContactsEntry', None]: + return self.by_property("selected", selected)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.id()) + ">"
+ +
[docs]class XAContactsEntry(XABase.XAObject): + """An entry in Contacts.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def modification_date(self) -> datetime: + """The last modification date of the contact entry. + """ + return self.xa_elem.modificationDate() + + @property + def creation_date(self) -> datetime: + """The creation date of the contact entry. + """ + return self.xa_elem.creationDate() + + @property + def id(self) -> str: + """The unique persistent identifier for the entry. + """ + return self.xa_elem.id() + + @property + def selected(self) -> bool: + """Whether the entry is selected. + """ + return self.xa_elem.selected() + + @selected.setter + def selected(self, selected: bool): + self.set_property('selected', selected) + +
[docs] def add_to(self, parent: XABase.XAObject) -> 'XAContactsPerson': + """Adds a child object to an entry. + + :param parent: The entry to add this entry as a child to + :type parent: XABase.XAObject + + :Example 1: Add a contact to a group + + >>> import PyXA + >>> app = PyXA.Application("Contacts") + >>> group = app.groups().by_name("Example Group") + >>> app.people()[0].add_to(group) + >>> app.save() + + .. versionadded:: 0.0.7 + """ + person = self.xa_elem.addTo_(parent.xa_elem) + return self._new_element(person, XAContactsPerson)
+ +
[docs] def remove_from(self, elem) -> 'XAContactsPerson': + """Removes a child object from an entry. + + :param parent: The entry to removes this entry as a child from + :type parent: XABase.XAObject + + :Example 1: Remove a contact from a group + + >>> import PyXA + >>> app = PyXA.Application("Contacts") + >>> group = app.groups().by_name("Example Group") + >>> app.people()[0].add_to(group) + >>> app.people()[0].remove_from(group) + >>> app.save() + + .. versionadded:: 0.0.7 + """ + person = self.xa_elem.removeFrom_(elem.xa_elem) + return self._new_element(person, XAContactsPerson)
+ +
[docs] def delete(self): + """Deletes the entry. Only entries creates in the current session can be deleted. + + .. versionadded:: 0.0.7 + """ + self.xa_elem.delete()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.id) + ">"
+ + + + +
[docs]class XAContactsGroupList(XAContactsEntryList): + """A wrapper around lists of contact groups that employs fast enumeration techniques. + + All properties of contact groups can be called as methods on the wrapped list, returning a list containing each group's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAContactsGroup) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def by_name(self, name: str) -> Union['XAContactsGroup', None]: + return self.by_property("name", name)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAContactsGroup(XAContactsEntry): + """A group in Contacts.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the group. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + +
[docs] def groups(self, filter: Union[dict, None] = None) -> 'XAContactsGroupList': + """Returns a list of groups, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned groups will have, or None + :type filter: Union[dict, None] + :return: The list of groups + :rtype: XAContactsGroupList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_elem.groups(), XAContactsGroupList, filter)
+ +
[docs] def people(self, filter: Union[dict, None] = None) -> 'XAContactsPersonList': + """Returns a list of people, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned people will have, or None + :type filter: Union[dict, None] + :return: The list of people + :rtype: XAContactsPersonList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_elem.people(), XAContactsPersonList, filter)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAContactsInstantMessageList(XAContactsContactInfoList): + """A wrapper around lists of IM addresses that employs fast enumeration techniques. + + All properties of IM addresses can be called as methods on the wrapped list, returning a list containing each IM address's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAContactsInstantMessage) + +
[docs] def service_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("serviceName") or [])
+ +
[docs] def service_type(self) -> list[XAContactsApplication.ServiceType]: + ls = self.xa_elem.arrayByApplyingSelector_("serviceType") or [] + return [XAContactsApplication.ServiceType(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def user_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("userName") or [])
+ +
[docs] def by_service_name(self, service_name: str) -> Union['XAContactsInstantMessage', None]: + return self.by_property("serviceName", service_name)
+ +
[docs] def by_service_type(self, service_type: XAContactsApplication.ServiceType) -> Union['XAContactsInstantMessage', None]: + event = XAEvents.event_from_int(service_type.value) + return self.by_property("serviceType", event)
+ +
[docs] def by_user_name(self, user_name: str) -> Union['XAContactsInstantMessage', None]: + return self.by_property("userName", user_name)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.service_name()) + ">"
+ +
[docs]class XAContactsInstantMessage(XAContactsContactInfo): + """An instant message (IM) address associated with a contact in Contacts.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def service_name(self) -> str: + """The service name of the IM address. + """ + return self.xa_elem.serviceName().get() + + @property + def service_type(self) -> XAContactsApplication.ServiceType: + """The service type of the IM address. + """ + return XAContactsApplication.ServiceType(self.xa_elem.serviceType()) + + @service_type.setter + def service_type(self, service_type: XAContactsApplication.ServiceType): + self.set_property('serviceType', service_type.value) + + @property + def user_name(self) -> str: + """The user name of the the IM address. + """ + return self.xa_elem.userName().get() + + @user_name.setter + def user_name(self, user_name: str): + self.set_property('userName', user_name) + + def __repr__(self): + return "<" + str(type(self)) + str(self.service_name) + ">"
+ + + + +
[docs]class XAContactsPersonList(XAContactsEntryList): + """A wrapper around lists of people that employs fast enumeration techniques. + + All properties of people can be called as methods on the wrapped list, returning a list containing each IM person's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAContactsPerson) + +
[docs] def nickname(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("nickname") or [])
+ +
[docs] def organization(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("organization") or [])
+ +
[docs] def maiden_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("maidenName") or [])
+ +
[docs] def suffix(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("suffix") or [])
+ +
[docs] def vcard(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("vcard") or [])
+ +
[docs] def home_page(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("homePage") or [])
+ +
[docs] def birth_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("birthdate") or [])
+ +
[docs] def phonetic_last_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("phoneticLastName") or [])
+ +
[docs] def title(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("title") or [])
+ +
[docs] def phonetic_middle_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("phoneticMiddleName") or [])
+ +
[docs] def department(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("department") or [])
+ +
[docs] def image(self) -> list[XABase.XAImage]: + ls = self.xa_elem.arrayByApplyingSelector_("image") or [] + return [XABase.XAImage(x) for x in ls]
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def note(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("note") or [])
+ +
[docs] def company(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("company") or [])
+ +
[docs] def middle_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("middleName") or [])
+ +
[docs] def phonetic_first_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("phoneticFirstName") or [])
+ +
[docs] def job_title(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("jobTitle") or [])
+ +
[docs] def last_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("lastName") or [])
+ +
[docs] def first_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("firstName") or [])
+ +
[docs] def by_nickname(self, nickname: str) -> Union['XAContactsPerson', None]: + return self.by_property("nickname", nickname)
+ +
[docs] def by_organization(self, organization: str) -> Union['XAContactsPerson', None]: + return self.by_property("organization", organization)
+ +
[docs] def by_maiden_name(self, maiden_name: str) -> Union['XAContactsPerson', None]: + return self.by_property("maidenName", maiden_name)
+ +
[docs] def by_suffix(self, suffix: str) -> Union['XAContactsPerson', None]: + return self.by_property("suffix", suffix)
+ +
[docs] def by_vcard(self, vcard: str) -> Union['XAContactsPerson', None]: + return self.by_property("vcard", vcard)
+ +
[docs] def by_home_page(self, home_page: str) -> Union['XAContactsPerson', None]: + # TODO - URL? + return self.by_property("homePage", home_page)
+ +
[docs] def by_birth_date(self, birth_date: datetime) -> Union['XAContactsPerson', None]: + return self.by_property("birthDate", birth_date)
+ +
[docs] def by_phonetic_last_name(self, phonetic_last_name: str) -> Union['XAContactsPerson', None]: + return self.by_property("phoneticLastName", phonetic_last_name)
+ +
[docs] def by_title(self, title: str) -> Union['XAContactsPerson', None]: + return self.by_property("title", title)
+ +
[docs] def by_phonetic_middle_name(self, phonetic_middle_name: str) -> Union['XAContactsPerson', None]: + return self.by_property("phoneticMiddleName", phonetic_middle_name)
+ +
[docs] def by_department(self, department: str) -> Union['XAContactsPerson', None]: + return self.by_property("department", department)
+ +
[docs] def by_image(self, image: XABase.XAImage) -> Union['XAContactsPerson', None]: + return self.by_property("image", image.xa_elem)
+ +
[docs] def by_name(self, name: str) -> Union['XAContactsPerson', None]: + return self.by_property("name", name)
+ +
[docs] def by_note(self, note: str) -> Union['XAContactsPerson', None]: + return self.by_property("note", note)
+ +
[docs] def by_company(self, company: bool) -> Union['XAContactsPerson', None]: + return self.by_property("company", company)
+ +
[docs] def by_middle_name(self, middle_name: str) -> Union['XAContactsPerson', None]: + return self.by_property("middleName", middle_name)
+ +
[docs] def by_phonetic_first_name(self, phonetic_first_name: str) -> Union['XAContactsPerson', None]: + return self.by_property("phoneticFirstName", phonetic_first_name)
+ +
[docs] def by_job_title(self, job_title: str) -> Union['XAContactsPerson', None]: + return self.by_property("jobTitle", job_title)
+ +
[docs] def by_last_name(self, last_name: str) -> Union['XAContactsPerson', None]: + return self.by_property("lastName", last_name)
+ +
[docs] def by_first_name(self, first_name: str) -> Union['XAContactsPerson', None]: + return self.by_property("firstName", first_name)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAContactsPerson(XAContactsEntry): + """A person in Contacts.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def nickname(self) -> str: + """The nickname of the person. + """ + return self.xa_elem.nickname().get() + + @nickname.setter + def nickname(self, nickname: str): + self.set_property('nickname', nickname) + + @property + def organization(self) -> str: + """The organization that employs the person. + """ + return self.xa_elem.organization().get() + + @organization.setter + def organization(self, organization: str): + self.set_property('organization', organization) + + @property + def maiden_name(self) -> str: + """The maiden name of the person. + """ + return self.xa_elem.maidenName().get() + + @maiden_name.setter + def maiden_name(self, maiden_name: str): + self.set_property('maidenName', maiden_name) + + @property + def suffix(self) -> str: + """The suffix of the person's name. + """ + return self.xa_elem.suffix().get() + + @suffix.setter + def suffix(self, suffix: str): + self.set_property('suffix', suffix) + + @property + def vcard(self) -> str: + """The person's information in vCard format. + """ + return self.xa_elem.vcard().get() + + @property + def home_page(self) -> str: + """The homepage of the person. + """ + return self.xa_elem.homePage().get() + + @home_page.setter + def home_page(self, home_page: str): + self.set_property('homePage', home_page) + + @property + def birth_date(self) -> datetime: + """The birthdate of the person. + """ + return self.xa_elem.birthDate().get() + + @birth_date.setter + def birth_date(self, birth_date: datetime): + self.set_property('birthDate', birth_date) + + @property + def phonetic_last_name(self) -> str: + """The phonetic version of the person's last name. + """ + return self.xa_elem.phoneticLastName().get() + + @phonetic_last_name.setter + def phonetic_last_name(self, phonetic_last_name: str): + self.set_property('phoneticLastName', phonetic_last_name) + + @property + def title(self) -> str: + """The title of the person. + """ + return self.xa_elem.title().get() + + @title.setter + def title(self, title: str): + self.set_property('title', title) + + @property + def phonetic_middle_name(self) -> str: + """The phonetic version of the person's middle name. + """ + return self.xa_elem.phoneticMiddleNamne().get() + + @phonetic_middle_name.setter + def phonetic_middle_name(self, phonetic_middle_name: str): + self.set_property('phoneticMiddleName', phonetic_middle_name) + + @property + def department(self) -> str: + """The department that the person works for. + """ + return self.xa_elem.department().get() + + @department.setter + def department(self, department: str): + self.set_property('department', department) + + @property + def image(self) -> XABase.XAImage: + """The image for the person. + """ + return XABase.XAImage(self.xa_elem.image().get()) + + @image.setter + def image(self, image: XABase.XAImage): + self.set_property('image', image.xa_elem) + + @property + def name(self) -> str: + """The first and last name of the person. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def note(self) -> str: + """The notes for the person. + """ + return self.xa_elem.note().get() + + @note.setter + def note(self, note: str): + self.set_property('note', note) + + @property + def company(self) -> bool: + """Whether the record is for a company or not (if not, the record is for a person). + """ + return self.xa_elem.company().get() + + @company.setter + def company(self, company: bool): + self.set_property('company', company) + + @property + def middle_name(self) -> str: + """The middle name of the person. + """ + return self.xa_elem.middleName().get() + + @middle_name.setter + def middle_name(self, middle_name: str): + self.set_property('middleName', middle_name) + + @property + def phonetic_first_name(self) -> str: + """The phonetic version of the person's first name. + """ + return self.xa_elem.phoneticFirstName().get() + + @phonetic_first_name.setter + def phonetic_first_name(self, phonetic_first_name: str): + self.set_property('phoneticFirstName', phonetic_first_name) + + @property + def job_title(self) -> str: + """The job title of the person. + """ + return self.xa_elem.jobTitle().get() + + @job_title.setter + def job_title(self, job_title: str): + self.set_property('jobTitle', job_title) + + @property + def last_name(self) -> str: + """The last name of the person. + """ + return self.xa_elem.lastName().get() + + @last_name.setter + def last_name(self, last_name: str): + self.set_property('lastName', last_name) + + @property + def first_name(self) -> str: + """The first name of the person. + """ + return self.xa_elem.firstName().get() + + @first_name.setter + def first_name(self, first_name: str): + self.set_property('firstName', first_name) + +
[docs] def show(self) -> 'XAContactsPerson': + """Shows the contact card for this contact in Contacts.app. + + :return: The contact person object + :rtype: XAContactsPerson + + .. versionadded:: 0.0.7 + """ + vcard = self.vcard + id = vcard[vcard.index("X-ABUID") + 8: vcard.index(":ABPerson")] + "%3AABPerson" + XABase.XAURL("addressbook://" + id).open() + return self
+ +
[docs] def urls(self, filter: Union[dict, None] = None) -> 'XAContactsURLList': + """Returns a list of URLs, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned URLs will have, or None + :type filter: Union[dict, None] + :return: The list of URLs + :rtype: XAContactsURLList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_elem.urls(), XAContactsURLList, filter)
+ +
[docs] def addresses(self, filter: Union[dict, None] = None) -> 'XAContactsAddressList': + """Returns a list of addresses, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned addresses will have, or None + :type filter: Union[dict, None] + :return: The list of addresses + :rtype: XAContactsAddressList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_elem.addresses(), XAContactsAddressList, filter)
+ +
[docs] def phones(self, filter: Union[dict, None] = None) -> 'XAContactsPhoneList': + """Returns a list of phone numbers, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned phone numbers will have, or None + :type filter: Union[dict, None] + :return: The list of phone numbers + :rtype: XAContactsPhoneList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_elem.phones(), XAContactsPhoneList, filter)
+ +
[docs] def groups(self, filter: Union[dict, None] = None) -> 'XAContactsGroupList': + """Returns a list of groups, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned groups will have, or None + :type filter: Union[dict, None] + :return: The list of groups + :rtype: XAContactsGroupList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_elem.phones(), XAContactsGroupList, filter)
+ +
[docs] def custom_dates(self, filter: Union[dict, None] = None) -> 'XAContactsCustomDateList': + """Returns a list of groups, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned groups will have, or None + :type filter: Union[dict, None] + :return: The list of groups + :rtype: XAContactsCustomDateList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_elem.customDates(), XAContactsCustomDateList, filter)
+ +
[docs] def instant_messages(self, filter: Union[dict, None] = None) -> 'XAContactsInstantMessageList': + """Returns a list of IM addresses, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned IM addresses will have, or None + :type filter: Union[dict, None] + :return: The list of IM addresses + :rtype: XAContactsInstantMessageList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_elem.instantMessages(), XAContactsInstantMessageList, filter)
+ +
[docs] def social_profiles(self, filter: Union[dict, None] = None) -> 'XAContactsSocialProfileList': + """Returns a list of social profiles, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned social profiles will have, or None + :type filter: Union[dict, None] + :return: The list of social profiles + :rtype: XAContactsSocialProfileList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_elem.socialProfiles(), XAContactsSocialProfileList, filter)
+ +
[docs] def related_names(self, filter: Union[dict, None] = None) -> 'XAContactsRelatedNameList': + """Returns a list of related names, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned related names will have, or None + :type filter: Union[dict, None] + :return: The list of related names + :rtype: XAContactsRelatedNameList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_elem.relatedNames(), XAContactsRelatedNameList, filter)
+ +
[docs] def emails(self, filter: Union[dict, None] = None) -> 'XAContactsEmailList': + """Returns a list of email addresses, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned email addresses will have, or None + :type filter: Union[dict, None] + :return: The list of email addresses + :rtype: XAContactsEmailList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_elem.emails(), XAContactsEmailList, filter)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAContactsPhoneList(XAContactsContactInfoList): + """A wrapper around lists of contact phone numbers that employs fast enumeration techniques. + + All properties of contact phone numbers can be called as methods on the wrapped list, returning a list containing each phone numbers's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAContactsPhone)
+ +
[docs]class XAContactsPhone(XAContactsContactInfo): + """A phone number associated with a contact in Contacts.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAContactsRelatedNameList(XAContactsContactInfoList): + """A wrapper around lists of contact related names that employs fast enumeration techniques. + + All properties of contact related names can be called as methods on the wrapped list, returning a list containing each related names's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAContactsRelatedName)
+ +
[docs]class XAContactsRelatedName(XAContactsContactInfo): + """A related name of a contact in Contacts.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAContactsSocialProfileList(XABase.XAList): + """A wrapper around lists of contact social profiles that employs fast enumeration techniques. + + All properties of contact social profiles can be called as methods on the wrapped list, returning a list containing each social profile's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAContactsSocialProfile, filter) + +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def service_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("serviceName") or [])
+ +
[docs] def user_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("userName") or [])
+ +
[docs] def user_identifier(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("userIdentifier") or [])
+ +
[docs] def url(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("URL") or [])
+ +
[docs] def by_id(self, id: str) -> Union['XAContactsSocialProfile', None]: + return self.by_property("id", id)
+ +
[docs] def by_service_name(self, service_name: str) -> Union['XAContactsSocialProfile', None]: + return self.by_property("serviceName", service_name)
+ +
[docs] def by_user_name(self, user_name: str) -> Union['XAContactsSocialProfile', None]: + return self.by_property("userName", user_name)
+ +
[docs] def by_user_identifier(self, user_identifier: str) -> Union['XAContactsSocialProfile', None]: + return self.by_property("userIdentifier", user_identifier)
+ +
[docs] def by_url(self, url: str) -> Union['XAContactsSocialProfile', None]: + return self.by_property("URL", url)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.user_name()) + ">"
+ +
[docs]class XAContactsSocialProfile(XABaseScriptable.XASBWindow): + """A social profile associated with a contact in Contacts.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """A persistent unique identifier for this profile. + """ + return self.xa_elem.id() + + @property + def service_name(self) -> str: + """The service name of this social profile. + """ + return self.xa_elem.serviceName().get() + + @service_name.setter + def service_name(self, service_name: str): + self.set_property('serviceName', service_name) + + @property + def user_name(self) -> str: + """The user name used with this social profile. + """ + return self.xa_elem.userName().get() + + @user_name.setter + def user_name(self, user_name: str): + self.set_property('userName', user_name) + + @property + def user_identifier(self) -> str: + """A service-specific identifier used with this social profile. + """ + return self.xa_elem.userIdentifier().get() + + @user_identifier.setter + def user_identifier(self, user_identifier: str): + self.set_property('userIdentifier', user_identifier) + + @property + def url(self) -> str: + """The URL of the social profile. + """ + return self.xa_elem.url() + + @url.setter + def url(self, url: str): + self.set_property('url', url) + + def __repr__(self): + return "<" + str(type(self)) + str(self.user_name) + ">"
+ + + + +
[docs]class XAContactsURLList(XAContactsContactInfoList): + """A wrapper around lists of contact URLs that employs fast enumeration techniques. + + All properties of contact URLs can be called as methods on the wrapped list, returning a list containing each URL's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAContactsURL)
+ +
[docs]class XAContactsURL(XAContactsContactInfo): + """A URL associated with a contact in Contacts.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Dictionary.html b/docs/_modules/PyXA/apps/Dictionary.html new file mode 100644 index 0000000..7329dfa --- /dev/null +++ b/docs/_modules/PyXA/apps/Dictionary.html @@ -0,0 +1,340 @@ + + + + + + PyXA.apps.Dictionary — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Dictionary

+""".. versionadded:: 0.0.2
+
+Control the macOS Dictionary application using JXA-like syntax.
+"""
+
+from CoreServices import DCSCopyTextDefinition
+
+from PyXA import XABase
+
+
[docs]class XADictionaryApplication(XABase.XAApplication): + """A class for managing and interacting with Dictionary.app. + + .. seealso:: :class:`XADictionaryDefinition` + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + +
[docs] def define(self, word: str) -> str: + """Gets the definition of a word in raw text form. + + :param word: The word to define + :type word: str + :return: The definition of the word + :rtype: str + + .. versionadded:: 0.0.2 + """ + definition = DCSCopyTextDefinition(None, word, (0, len(word))) + return definition
+ + ### UI Interaction + ## Menu Bar + # Dictionary Menu +
[docs] def open_about_panel(self): + """Opens the "About Dictionary" panel. Mimics clicking File->About Dictionary. + + .. versionadded:: 0.0.2 + """ + self.menu_bar(0).menu_bar_item(1).menu(0).menu_item(0).press()
+ +
[docs] def open_preferences(self): + """Opens the preferences window for the Dictionary application. Mimics clicking File->Preferences... + + .. versionadded:: 0.0.2 + """ + self.menu_bar(0).menu_bar_item(1).menu(0).menu_item(2).press()
+ + # File Menu +
[docs] def new_window(self): + """Opens a new Dictionary window. + + .. versionadded:: 0.0.2 + """ + self.menu_bar(0).menu_bar_item(2).menu(0).menu_item(0).press()
+ +
[docs] def new_tab(self): + """Opens a new Dictionary tab. + + .. versionadded:: 0.0.2 + """ + self.menu_bar(0).menu_bar_item(2).menu(0).menu_item(1).press()
+ +
[docs] def open_dictionaries_folder(self): + """Opens the folder containing custom/downloaded dictionaries. + + .. versionadded:: 0.0.2 + """ + self.menu_bar(0).menu_bar_item(2).menu(0).menu_item(-3).press()
+ +
[docs] def print(self): + """Opens the dictionary app's print dialog. + + .. versionadded:: 0.0.2 + """ + self.menu_bar(0).menu_bar_item(2).menu(0).menu_item(-1).press()
+ + # Edit Menu +
[docs] def paste(self): + """Pastes the current contents of the clipboard into the selected item, if there is one. + + .. versionadded:: 0.0.2 + """ + self.menu_bar(0).menu_bar_item(3).menu(0).menu_item(5).press()
+ +
[docs] def start_dictation(self): + """Begins dictation to fill the selected item, if there is one. + + .. versionadded:: 0.0.2 + """ + self.menu_bar(0).menu_bar_item(3).menu(0).menu_item(-2).press()
+ + # Go Menu +
[docs] def go_back(self): + """Goes to the previous page/definition. + + .. versionadded:: 0.0.2 + """ + self.menu_bar(0).menu_bar_item(4).menu(0).menu_item(0).press()
+ +
[docs] def go_forward(self): + """Goes to the next page/definition. + + .. versionadded:: 0.0.2 + """ + self.menu_bar(0).menu_bar_item(4).menu(0).menu_item(1).press()
+ +
[docs] def view_front_back_matter(self): + """Displays the front/back matter of the selected dictionary. + + .. versionadded:: 0.0.2 + """ + self.menu_bar(0).menu_bar_item(4).menu(0).menu_item(3).press()
+ + # Window Menu +
[docs] def fullscreen(self): + """Toggles fullscreen for the current Dictionary window. + + .. versionadded:: 0.0.2 + """ + self.menu_bar(0).menu_bar_item(6).menu(0).menu_item(9).press()
+ + # Help Menu +
[docs] def show_help(self): + """Displays the help window for Dictionary.app. + + .. versionadded:: 0.0.2 + """ + self.menu_bar(0).menu_bar_item(7).menu(0).menu_item(-1).press()
+ + ## Window +
[docs] def switch_to_all(self): + """Switches to searching all installed dictionaries. + + .. versionadded:: 0.0.2 + """ + self.menu_bar(0).menu_bar_item(5).menu(0).menu_item(0).press()
+ +
[docs] def switch_to_new_oxford(self): + """Switches to searching the New Oxford American Dictionary. + + .. versionadded:: 0.0.2 + """ + self.menu_bar(0).menu_bar_item(5).menu(0).menu_item(2).press()
+ +
[docs] def switch_to_oxford_thesaurus(self): + """Switches to searching the Oxford American Writer's Thesaurus. + + .. versionadded:: 0.0.2 + """ + self.menu_bar(0).menu_bar_item(5).menu(0).menu_item(3).press()
+ +
[docs] def switch_to_apple_dictionary(self): + """Switches to searching the Apple Dictionary. + + .. versionadded:: 0.0.2 + """ + self.menu_bar(0).menu_bar_item(5).menu(0).menu_item(4).press()
+ +
[docs] def switch_to_wikipedia(self): + """Switches to searching Wikipedia. + + .. versionadded:: 0.0.2 + """ + self.menu_bar(0).menu_bar_item(5).menu(0).menu_item(5).press()
+ +
[docs] def search(self, term: str): + """Searches the currently selected dictionary. + + :param term: The term to search + :type term: str + + .. versionadded:: 0.0.2 + """ + if hasattr(self.window(0).toolbar(0).group(2).text_field(0), "value"): + # Search from empty + self.window(0).toolbar(0).group(2).text_field(0).set_property("value", term) + else: + # Search from searched word + self.window(0).toolbar(0).group(0).text_field(0).set_property("value", "") + print("hi") + self.window(0).toolbar(0).group(2).text_field(0).set_property("value", term)
+ +
[docs] def search_all(self, term: str): + """Searches the provided term in all dictionaries + + :param term: The term to search + :type term: str + + .. versionadded:: 0.0.2 + """ + self.switch_to_all() + self.search(term)
+ +
[docs] def search_new_oxford(self, term: str): + """Searches the provided term in the New Oxford American Dictionary + + :param term: The term to search + :type term: str + + .. versionadded:: 0.0.2 + """ + self.switch_to_new_oxford() + self.search(term)
+ +
[docs] def search_oxford_thesaurus(self, term: str): + """Searches the provided term in the Oxford American Writer's Thesaurus + + :param term: The term to search + :type term: str + + .. versionadded:: 0.0.2 + """ + self.switch_to_oxford_thesaurus() + self.search(term)
+ +
[docs] def search_apple_dictionary(self, term: str): + """Searches the provided term in the Apple Dictionary + + :param term: The term to search + :type term: str + + .. versionadded:: 0.0.2 + """ + self.switch_to_apple_dictionary() + self.search(term)
+ +
[docs] def search_wikipedia(self, term: str): + """Searches the provided term in Wikipedia + + :param term: The term to search + :type term: str + + .. versionadded:: 0.0.2 + """ + self.switch_to_wikipedia() + self.search(term)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Drafts.html b/docs/_modules/PyXA/apps/Drafts.html new file mode 100644 index 0000000..0071c9d --- /dev/null +++ b/docs/_modules/PyXA/apps/Drafts.html @@ -0,0 +1,324 @@ + + + + + + PyXA.apps.Drafts — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Drafts

+""".. versionadded:: 0.0.8
+
+Control Drafts using JXA-like syntax.
+"""
+
+from datetime import datetime
+from typing import Union
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+from ..XAProtocols import XACanOpenPath
+
+
[docs]class XADraftsApplication(XABaseScriptable.XASBApplication, XACanOpenPath): + """A class for managing and interacting with Drafts.app. + + .. versionadded:: 0.0.8 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def version(self) -> str: + """The version of Drafts.app. + """ + return self.xa_scel.version() + +
[docs] def new_draft(self, content: str) -> 'XADraftsDraft': + """Creates a new draft with the given name and content + + :param content: The full content of the draft (the first line is the name) + :type content: str + :return: The newly created draft object + :rtype: XADraftsDraft + + .. versionadded:: 0.0.8 + """ + new_draft = self.make("draft", {"content": content}) + self.drafts().push(new_draft) + print(self.drafts().content()) + return self.drafts().last()
+ +
[docs] def drafts(self, filter: Union[dict, None] = None) -> 'XADraftsDraftList': + """Returns a list of drafts, as PyXA-wrapped objects, matching the given filter. + + :param filter: Keys and values to filter drafts by, defaults to None + :type filter: dict, optional + :return: A PyXA list object wrapping a list of drafts + :rtype: XADraftsDraftList + + .. versionadded:: 0.0.8 + """ + return self._new_element(self.xa_scel.drafts(), XADraftsDraftList, filter)
+ +
[docs] def make(self, specifier: str, properties: dict = None): + """Creates a new element of the given specifier class without adding it to any list. + + Use :func:`XABase.XAList.push` to push the element onto a list. + + :param specifier: The classname of the object to create + :type specifier: str + :param properties: The properties to give the object + :type properties: dict + :return: A PyXA wrapped form of the object + :rtype: XABase.XAObject + + .. versionadded:: 0.0.8 + """ + if properties is None: + properties = {} + + obj = self.xa_scel.classForScriptingClass_(specifier).alloc().initWithProperties_(properties) + + if specifier == "draft": + return self._new_element(obj, XADraftsDraft)
+ + + + +
[docs]class XADraftsDraftList(XABase.XAList): + """A wrapper around a list of drafts. + + .. versionadded:: 0.0.8 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XADraftsDraft, filter) + +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def content(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("content") or [])
+ +
[docs] def flagged(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("flagged") or [])
+ +
[docs] def tags(self) -> list[list[str]]: + return list(self.xa_elem.arrayByApplyingSelector_("tags") or [])
+ +
[docs] def created_at(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("createdAt") or [])
+ +
[docs] def modified_at(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("modifiedAt") or [])
+ +
[docs] def accessed_at(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("accessedAt") or [])
+ + + +
[docs] def by_id(self, id: str) -> Union['XADraftsDraft', None]: + return self.by_property("id", id)
+ +
[docs] def by_name(self, name: str) -> Union['XADraftsDraft', None]: + return self.by_property("name", name)
+ +
[docs] def by_content(self, content: str) -> Union['XADraftsDraft', None]: + return self.by_property("content", content)
+ +
[docs] def by_flagged(self, flagged: bool) -> Union['XADraftsDraft', None]: + return self.by_property("flagged", flagged)
+ +
[docs] def by_tags(self, tags: list[str]) -> Union['XADraftsDraft', None]: + return self.by_property("tags", tags)
+ +
[docs] def by_created_at(self, created_at: datetime) -> Union['XADraftsDraft', None]: + return self.by_property("createdAt", created_at)
+ +
[docs] def by_modified_at(self, modified_at: datetime) -> Union['XADraftsDraft', None]: + return self.by_property("modifiedAt", modified_at)
+ +
[docs] def by_accessed_at(self, accessed_at: datetime) -> Union['XADraftsDraft', None]: + return self.by_property("accessedAt", accessed_at)
+ +
+ +
[docs]class XADraftsDraft(XABase.XAObject): + """A draft in Drafts.app. + + .. versionadded:: 0.0.8 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """The unique identifier of the draft. + """ + return self.xa_elem.id() + + @property + def name(self) -> str: + """The first line of the draft. + """ + return self.xa_elem.name() + + @property + def content(self) -> str: + """The content of the draft. + """ + return self.xa_elem.content() + + @content.setter + def content(self, content: str): + self.set_property("content", content) + + @property + def flagged(self) -> bool: + """The flagged status of the draft. + """ + return self.xa_elem.flagged() + + @flagged.setter + def flagged(self, flagged: bool): + self.set_property("flagged", flagged) + + @property + def tags(self) -> list[str]: + """The tags assigned to the draft. + """ + return self.xa_elem.tags() + + @tags.setter + def tags(self, tags: list[str]): + self.set_property("tags", tags) + + @property + def created_at(self) -> datetime: + """The date the draft was created. + """ + return self.xa_elem.createdAt() + + @property + def modified_at(self) -> datetime: + """The date the draft was last modified. + """ + return self.xa_elem.modifiedAt() + + @property + def accessed_at(self) -> datetime: + """The date the draft was last accessed. + """ + return self.xa_elem.accessedAt() + + @property + def permalink(self) -> str: + """The URL of the draft. + """ + return self.xa_elem.permalink() + + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Fantastical.html b/docs/_modules/PyXA/apps/Fantastical.html new file mode 100644 index 0000000..152c695 --- /dev/null +++ b/docs/_modules/PyXA/apps/Fantastical.html @@ -0,0 +1,621 @@ + + + + + + PyXA.apps.Fantastical — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Fantastical

+""".. versionadded:: 0.0.9
+
+Control Fantastical using JXA-like syntax.
+"""
+
+from datetime import datetime
+from typing import Union
+
+import AppKit
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+from ..XAProtocols import XAClipboardCodable, XACloseable, XADeletable, XAPrintable
+
+
[docs]class XAFantasticalApplication(XABaseScriptable.XASBApplication): + """A class for managing and interacting with Fantastical.app. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XAFantasticalWindow + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether Fantastical is the active application. + """ + return self.xa_scel.frontmost() + + @frontmost.setter + def frontmost(self, frontmost: frontmost): + self.set_property("frontmost", frontmost) + + @property + def version(self) -> str: + """The version of Fantastical.app. + """ + return self.xa_scel.version() + +
[docs] def parse_sentence(self, sentence: str, notes: str = "", calendar: Union[str, 'XAFantasticalCalendar', None] = None, add_immediately: bool = True, add_attendees: bool = False): + """Parses the given sentences and creates a corresponding calendar item based on the parsing result. + + :param sentence: The sentence to parse + :type sentence: str + :param notes: Notes to attach to the calendar item, defaults to "" + :type notes: str, optional + :param calendar: The calendar to add the item to, defaults to None + :type calendar: Union[str, XAFantasticalCalendar, None], optional + :param add_immediately: Whether to add the item without displaying an event editing dialog, defaults to True + :type add_immediately: bool, optional + :param add_attendees: Whether to invite attendees parsed from the sentence, defaults to False + :type add_attendees: bool, optional + + :Example 1: Add simple events to calendars + + >>> # Create an event on the default calendar + >>> import PyXA + >>> app = PyXA.Application("Fantastical") + >>> app.parse_sentence("Event 1") + >>> + >>> # Create an event on a calendar specified by a calendar object + >>> cal = app.calendars().by_title("PyXA Development") + >>> app.parse_sentence("Event 2", calendar = cal) + >>> + >>> # Create an event on a calendar specified by a string + >>> app.parse_sentence("Event 3", calendar = "Testing") + + :Example 2: Use Fantastical's query parsing to adjust calendar item settings + + >>> # Automatically set the time of a task to 8am, show event editing dialog + >>> app.parse_sentence("Wake up at 8am", add_immediately = False) + >>> + >>> # Create a todo + >>> app.parse_sentence("todo today Learn PyXA") + >>> + >>> # Create an event at a location, with an alert, repeating weekly + >>> app.parse_sentence("Meet with Example Person at 10am at 1 Infinite Loop, Cupertino, CA with alert 30 minutes before repeat weekly") + >>> + >>> # Create an event spanning a week + >>> app.parse_sentence("PyXA stuff August 22 to August 29") + + .. versionadded:: 0.0.9 + """ + if isinstance(calendar, XAFantasticalCalendar): + self.xa_scel.parseSentence_notes_calendar_calendarName_addImmediately_addAttendees_(sentence, notes, calendar.xa_elem, None, add_immediately, add_attendees) + elif isinstance(calendar, str): + self.xa_scel.parseSentence_notes_calendar_calendarName_addImmediately_addAttendees_(sentence, notes, None, calendar, add_immediately, add_attendees) + else: + self.xa_scel.parseSentence_notes_calendar_calendarName_addImmediately_addAttendees_(sentence, notes, None, None, add_immediately, add_attendees)
+ +
[docs] def show_mini_view(self, date: Union[str, datetime, None] = None): + """Shows the mini calendar view, optionally showing a specific date. + + :param date: The date to display, defaults to None + :type date: Union[str, datetime, None], optional + + .. versionadded:: 0.0.9 + """ + if date is None: + date = "" + if isinstance(date, datetime): + date = date.strftime("%Y-%m-%d") + + print(date) + XABase.XAURL(f"x-fantastical3://show/mini/{date}").open()
+ +
[docs] def show_calendar_view(self, date: Union[str, datetime, None] = None): + """Shows the (large) calendar view, optionally showing a specific date. + + :param date: The date to display, defaults to None + :type date: Union[str, datetime, None], optional + + .. versionadded:: 0.0.9 + """ + if date is None: + date = "" + if isinstance(date, datetime): + date = date.strftime("%Y-%m-%d") + + print(date) + XABase.XAURL(f"x-fantastical3://show/calendar/{date}").open()
+ +
[docs] def documents(self, filter: dict = None) -> 'XAFantasticalDocumentList': + """Returns a list of documents, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_scel.documents(), XAFantasticalDocumentList, filter)
+ +
[docs] def calendars(self, filter: dict = None) -> 'XAFantasticalCalendarList': + """Returns a list of calendars, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_scel.calendars(), XAFantasticalCalendarList, filter)
+ +
[docs] def selected_calendar_items(self, filter: dict = None) -> 'XAFantasticalSelectedCalendarItemList': + """Returns a list of selected calendar items, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_scel.selectedCalendarItems(), XAFantasticalSelectedCalendarItemList, filter)
+ + + + +
[docs]class XAFantasticalDocumentList(XABase.XAList): + """A wrapper around lists of Fantastical documents that employs fast enumeration techniques. + + All properties of documents can be called as methods on the wrapped list, returning a list containing each document's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAFantasticalDocument, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def modified(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("modified") or [])
+ +
[docs] def file(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("file") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def by_name(self, name: str) -> 'XAFantasticalDocument': + return self.by_property("name", name)
+ +
[docs] def by_modified(self, modified: bool) -> 'XAFantasticalDocument': + return self.by_property("modified", modified)
+ +
[docs] def by_file(self, file: XABase.XAPath) -> 'XAFantasticalDocument': + return self.by_property("file", file.xa_elem)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAFantasticalDocument(XABase.XAObject, XACloseable, XADeletable, XAPrintable, XAClipboardCodable): + """A document in Fantastical.app. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + """The document's name. + """ + self.set_property("name", name) + + @property + def modified(self) -> bool: + """Whether the document has been modified since it was last saved. + """ + return self.xa_elem.modified() + + @property + def file(self) -> XABase.XAPath: + """The document's path. + """ + return XABase.XAPath(self.xa_elem.file()) + + @file.setter + def file(self, file: Union[str, XABase.XAPath]): + if isinstance(file, str): + file = XABase.XAPath(file) + self.set_property("file", file.xa_elem) + +
[docs] def print(self, print_properties: Union[dict, None] = None, show_dialog: bool = True) -> 'XAPrintable': + """Prints the object. + + Child classes of XAPrintable should override this method as necessary. + + :param show_dialog: Whether to show the print dialog, defaults to True + :type show_dialog: bool, optional + :param print_properties: Properties to set for printing, defaults to None + :type print_properties: Union[dict, None], optional + :return: A reference to the PyXA object that called this method. + :rtype: XACanPrintPath + + .. versionadded:: 0.0.9 + """ + if print_properties is None: + print_properties = {} + self.xa_elem.print_printDialog_withProperties_(self.xa_elem, show_dialog, print_properties) + return self
+ +
[docs] def get_clipboard_representation(self) -> list[Union[AppKit.NSURL, str]]: + """Gets a clipboard-codable representation of the document. + + When the clipboard content is set to a Fantastical document, the document's URL and source code are added to the clipboard. + + :return: The document's path and text content + :rtype: list[Union[AppKit.NSURL, str]] + + .. versionadded:: 0.0.9 + """ + return [self.path.xa_elem, str(self.text)]
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAFantasticalWindow(XABaseScriptable.XASBWindow, XAPrintable, XACloseable): + """A window of Fantastical.app. + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def document(self) -> XAFantasticalDocument: + """The document currently displayed in the window. + """ + return self._new_element(self.xa_elem.document(), XAFantasticalDocument) + + @document.setter + def document(self, document: XAFantasticalDocument): + self.set_property("document", document.xa_elem)
+ + + + +
[docs]class XAFantasticalCalendarList(XABase.XAList): + """A wrapper around lists of Fantastical calendars that employs fast enumeration techniques. + + All properties of calendars can be called as methods on the wrapped list, returning a list containing each calendar's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAFantasticalCalendar, filter) + +
[docs] def title(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("title") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def by_title(self, title: str) -> 'XAFantasticalCalendar': + return self.by_property("title", title)
+ +
[docs] def by_id(self, id: str) -> 'XAFantasticalCalendar': + return self.by_property("id", id)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.title()) + ">"
+ +
[docs]class XAFantasticalCalendar(XABase.XAObject): + """A class in Fantastical.app. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def title(self) -> str: + """The calendar's title. + """ + return self.xa_elem.title() + + @title.setter + def title(self, title: str): + self.set_property("title", title) + + @property + def id(self) -> str: + """The unique identifier for the calendar. + """ + return self.xa_elem.id() + + def __repr__(self): + return "<" + str(type(self)) + str(self.title) + ">"
+ + + + +
[docs]class XAFantasticalCalendarItemList(XABase.XAList): + """A wrapper around lists of Fantastical calendar items that employs fast enumeration techniques. + + All properties of calendar items can be called as methods on the wrapped list, returning a list containing each calendar item's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAFantasticalCalendarItem + super().__init__(properties, obj_class, filter) + +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def title(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("title") or [])
+ +
[docs] def start_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("startDate") or [])
+ +
[docs] def end_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("endDate") or [])
+ +
[docs] def notes(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("notes") or [])
+ +
[docs] def url(self) -> list[XABase.XAURL]: + ls = self.xa_elem.arrayByApplyingSelector_("URL") or [] + return [XABase.XAURL(x) for x in ls]
+ +
[docs] def show_url(self) -> list[XABase.XAURL]: + return list(self.xa_elem.arrayByApplyingSelector_("showURL") or [])
+ +
[docs] def is_recurring(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("isRecurring") or [])
+ +
[docs] def is_all_day(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("isAllDay") or [])
+ +
[docs] def by_id(self, id: str) -> 'XAFantasticalCalendarItem': + return self.by_property("id", id)
+ +
[docs] def by_title(self, title: str) -> 'XAFantasticalCalendarItem': + return self.by_property("title", title)
+ +
[docs] def by_start_date(self, start_date: datetime) -> 'XAFantasticalCalendarItem': + return self.by_property("startDate", start_date)
+ +
[docs] def by_end_date(self, end_date: datetime) -> 'XAFantasticalCalendarItem': + return self.by_property("endDate", end_date)
+ +
[docs] def by_notes(self, notes: str) -> 'XAFantasticalCalendarItem': + return self.by_property("notes", notes)
+ +
[docs] def by_url(self, url: XABase.XAURL) -> 'XAFantasticalCalendarItem': + return self.by_property("URL", url.xa_elem)
+ +
[docs] def by_show_url(self, show_url: XABase.XAURL) -> 'XAFantasticalCalendarItem': + return self.by_property("showURL", show_url.xa_elem)
+ +
[docs] def by_is_recurring(self, is_recurring: bool) -> 'XAFantasticalCalendarItem': + return self.by_property("isRecurring", is_recurring)
+ +
[docs] def by_is_all_day(self, is_all_day: bool) -> 'XAFantasticalCalendarItem': + return self.by_property("isAllDay", is_all_day)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.title()) + ">"
+ +
[docs]class XAFantasticalCalendarItem(XABase.XAObject): + """An insertion point between two objects in Fantastical.app. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """The unique identifier for the item. + """ + return self.xa_elem.id() + + @property + def title(self) -> str: + """The event title. + """ + return self.xa_elem.title() + + @property + def start_date(self) -> datetime: + """The start date of the event. + """ + return self.xa_elem.startDate() + + @property + def end_date(self) -> datetime: + """The end date of the event. + """ + return self.xa_elem.endDate() + + @property + def notes(self) -> str: + """The notes for the event. + """ + return self.xa_elem.notes() or "" + + @property + def url(self) -> XABase.XAURL: + """The related URL for the event. + """ + return XABase.XAURL(self.xa_elem.URL()) + + @property + def show_url(self) -> XABase.XAURL: + """The show URL for the event. + """ + return XABase.XAURL(self.xa_elem.showURL()) + + @property + def is_recurring(self) -> bool: + """True if the item is a recurring item. + """ + return self.xa_elem.isRecurring() + + @property + def is_all_day(self) -> bool: + """True if the item spans an entire day. + """ + return self.xa_elem.isAllDay() + +
[docs] def save(self): + self.xa_elem.saveIn_as_(None, 0)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.title) + ">"
+ + + + +
[docs]class XAFantasticalSelectedCalendarItemList(XAFantasticalCalendarItemList): + """A wrapper around lists of Fantastical selected calendar items that employs fast enumeration techniques. + + All properties of selected calendar items can be called as methods on the wrapped list, returning a list containing each items's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAFantasticalSelectedCalendarItem)
+ +
[docs]class XAFantasticalSelectedCalendarItem(XAFantasticalCalendarItem): + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAFantasticalCalendarEvent(XAFantasticalCalendarItem): + def __init__(self, properties): + super().__init__(properties) + + @property + def location(self) -> str: + """The event location. + """ + return self.xa_elem.location() + + @location.setter + def location(self, location: str): + self.set_property("location", location)
+ + + + +
[docs]class XAFantasticalTaskItem(XAFantasticalCalendarItem): + def __init__(self, properties): + super().__init__(properties) + + @property + def priority(self) -> int: + """The event priority; higher number means lower priority. + """ + return self.xa_elem.priority() + + @priority.setter + def priority(self, priority: int): + self.set_property("priority", priority)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Finder.html b/docs/_modules/PyXA/apps/Finder.html new file mode 100644 index 0000000..4b42f91 --- /dev/null +++ b/docs/_modules/PyXA/apps/Finder.html @@ -0,0 +1,2885 @@ + + + + + + PyXA.apps.Finder — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Finder

+""".. versionadded:: 0.0.1
+
+Control Finder using JXA-like syntax.
+"""
+
+from datetime import datetime
+from enum import Enum
+from typing import Union
+from Foundation import NSFileManager
+
+import AppKit
+from ScriptingBridge import SBObject
+
+from PyXA import XABase
+from PyXA.XABase import OSType, XAImage, XAList
+from PyXA import XABaseScriptable
+from PyXA.XAProtocols import XACanOpenPath, XAClipboardCodable, XADeletable, XASelectable
+from PyXA.XATypes import XAPoint, XARectangle
+
+
[docs]class XAFinderApplication(XABaseScriptable.XASBApplication, XACanOpenPath): + """A class for managing and interacting with Finder.app. + + .. versionchanged:: 0.0.3 + + Added methods and properties to reach parity with Finder.h. + + .. versionadded:: 0.0.1 + """ +
[docs] class PrivacySetting(Enum): + """Options for privacy settings on Finder items. + """ + READ_ONLY = OSType('read') + READ_WRITE = OSType('rdwr') + WRITE_ONLY = OSType('writ') + NONE = OSType('none')
+ +
[docs] class ItemFormat(Enum): + """Options for file and disk formats of Finder items. + """ + MACOS = OSType('dfhf') + MACOS_EXTENDED = OSType('dfh+') + UFS = OSType('dfuf') + NFS = OSType('dfnf') + AUDIO = OSType('dfau') + PRO_DOS = OSType('dfpr') + MSDOS = OSType('dfms') + NTFS = OSType('dfnt') + ISO9660 = OSType('df96') + HIGH_SIERRA = OSType('dfhs') + QUICKTAKE = OSType('dfqt') + APPLE_PHOTO = OSType('dfph') + APPLE_SHARE = OSType('dfas') + UDF = OSType('dfud') + WEBDAV = OSType('dfwd') + FTP = OSType('dfft') + PACKET_WRITTEN_UDF = OSType('dfpu') + XSAN = OSType('dfac') + APFS = OSType('dfap') + EXFAT = OSType('dfxf') + SMB = OSType('dfsm') + UNKNOWN = OSType('df\?\?')
+ +
[docs] class Panel(Enum): + """Options for information panels in Finder. + """ + GENERAL_INFORMATION = OSType('gpnl') + SHARING = OSType('spnl') + MEMORY = OSType('mpnl') + PREVIEW = OSType('vpnl') + APPLICATION = OSType('apnl') + LANGUAGES = OSType('pklg') + PLUGINS = OSType('pkpg') + NAME_EXTENSION = OSType('npnl') + COMMENTS = OSType('cpnl') + CONTENT_INDEX = OSType('cinl') + BURNING = OSType('bpnl') + MORE_INFO = OSType('minl') + SIMPLE_HEADER = OSType('shnl') + GENERAL_PREFERENCES = OSType('pgnp') + LABEL_PREFERENCES = OSType('plbp') + SIDEBAR_PREFERENCES = OSType('psid') + ADVANCED_PREFERENCES = OSType('padv')
+ +
[docs] class ViewSetting(Enum): + """View options for lists of items in Finder windows. + """ + ICON_VIEW = OSType('icnv') + LIST_VIEW = OSType('lsvw') + COLUMN_VIEW = OSType('clvw') + GROUP_VIEW = OSType('flvw') + FLOW_VIEW = OSType('flvw')
+ +
[docs] class Arrangement(Enum): + """Arrangement options for lists of items in Finder windows. + """ + NOT_ARRANGED = OSType('narr') + SNAP_TO_GRID = OSType('grda') + BY_NAME = OSType('nama') + BY_MODIFICATION_DATE = OSType('mdta') + BY_CREATION_DATE = OSType('cdta') + BY_SIZE = OSType('siza') + BY_KIND = OSType('kina') + BY_LABEL = OSType('laba')
+ +
[docs] class LabelPosition(Enum): + """Options for the label position of items in Finder windows. + """ + RIGHT = OSType('lrgt') + BOTTOM = OSType('lbot')
+ +
[docs] class SortDirection(Enum): + """Options for sort direction of lists of Finder items. + """ + NORMAL = OSType('snrm') + REVERSED = OSType('srvs')
+ +
[docs] class ColumnName(Enum): + """Columns in Finder windows. + """ + NAME = OSType('esln') + MODIFICATE_DATE = OSType('elsm') + CREATION_DATE = OSType('elsc') + SIZE = OSType('elss') + KIND = OSType('elsk') + LABEL = OSType('elsl') + VERSION = OSType('elsv') + COMMENT = OSType('elsC')
+ +
[docs] class IconSize(Enum): + """Options for the size of icons in Finder windows. + """ + SMALL = OSType('smic') + LARGE = OSType('lgic')
+ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XAFinderWindow + self.xa_fmgr = NSFileManager.defaultManager() + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def visible(self) -> bool: + """Whether Finder is currently visible. + """ + return self.xa_scel.visible() + + @property + def frontmost(self) -> bool: + """Whether Finder is the active application. + """ + return self.xa_scel.frontmost() + + @frontmost.setter + def frontmost(self, frontmost: bool): + self.set_property('frontmost', frontmost) + + @property + def product_version(self) -> str: + """The system software version. + """ + return self.xa_scel.productVersion() + + @property + def version(self) -> str: + """The version of Finder + """ + return self.xa_scel.version() + + @property + def selection(self) -> 'XAFinderItemList': + """The currently selected items in Finder. + """ + return self._new_element(self.xa_scel.selection().get(), XAFinderItemList) + + @selection.setter + def selection(self, selection: Union[list['XAFinderItem'], 'XAFinderItemList']): + if isinstance(selection, list): + selection = [x.xa_elem for x in selection] + self.set_property("selection", None) + else: + self.set_property('selection', selection.xa_elem) + + @property + def insertion_location(self) -> 'XAFinderFolder': + """The container in which a new folder would be created in by default in the frontmost window. + """ + folder_obj = self.xa_scel.windows()[0].target() + return self._new_element(folder_obj, XAFinderFolder) + + @property + def startup_disk(self) -> 'XAFinderDisk': + """The startup disk for this system. + """ + disk_obk = self.xa_scel.startupDisk() + return self._new_element(disk_obk, XAFinderDisk) + + @property + def desktop(self) -> 'XAFinderDesktop': + """The user's desktop. + """ + desktop_obj = self.xa_scel.desktop() + return self._new_element(desktop_obj, XAFinderDesktop) + + @property + def trash(self) -> 'XAFinderTrash': + """The system Trash. + """ + trash_obj = self.xa_scel.trash() + return self._new_element(trash_obj, XAFinderTrash) + + @property + def home(self) -> 'XAFinderFolder': + """The home directory. + """ + return self.home_directory() + + @property + def computer_container(self) -> 'XAFinderComputer': + """The computer directory. + """ + computer_obj = self.xa_scel.computerContainer() + return self._new_element(computer_obj, XAFinderComputer) + + @property + def desktop_picture(self) -> 'XAFinderFile': + """The desktop picture of the main monitor. + """ + return self._new_element(self.xa_scel.desktopPicture(), XAFinderFile) + + @property + def finder_preferences(self) -> 'XAFinderPreferences': + """Preferences for Finder as a whole. + """ + prefs_obj = self.xa_scel.FinderPreferences() + return self._new_element(prefs_obj, XAFinderPreferences) + + def _resolve_symlinks(self, path: str) -> str: + """Resolves all symlinks in the specified path. + + :param path: The path to resolve. + :type path: str + :return: The fully resolved path as a string. + :rtype: str + + .. versionadded:: 0.0.1 + """ + NS_str = AppKit.NSString.alloc().initWithString_(path) + return NS_str.stringByResolvingSymlinksInPath() + +
[docs] def select_item(self, path: str) -> 'XAFinderApplication': + """Selects the file or folder at the specified path. + + This opens a new tab of Finder unless the current tab is the parent folder of the provided path and no item is currently selected. + + :param path: The path of the file or folder to select. + :type path: str + :return: A reference to the Finder application object. + :rtype: XAFinderApplication + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Finder") + >>> app.select_item("/Users/exampleuser/Documents/Example.txt") + + .. seealso:: :func:`select_items` + + .. versionadded:: 0.0.1 + """ + path = self._resolve_symlinks(path) + self.xa_wksp.selectFile_inFileViewerRootedAtPath_(path, None) + return self
+ +
[docs] def select_items(self, paths: list[str]) -> 'XAFinderApplication': + """Selects the files or folders at the specified paths. + + This opens a new tab of Finder for each different parent folder in the list of paths to select. This method utilizes fast specialized methods from Objective-C to improve the performance of selecting large amounts of files. As such, when dealing with multiple file paths, this method should always be used instead of calling :func:`select_item` repeatedly. + + :param path: The paths to select. + :type filepath: Union[str, AppKit.NSURL] + :return: A reference to the Finder application object. + :rtype: XAFinderApplication + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Finder") + >>> items = ["/Users/exampleuser/Documents/Example 1.txt", "/Users/exampleuser/Documents/Example 2.txt"] + >>> app.select_items(items) + + .. seealso:: :func:`select_item` + + .. versionadded:: 0.0.1 + """ + self.temp_urls = [] + def resolve(path: Union[str, AppKit.NSURL], index: int, stop: bool): + url = AppKit.NSURL.alloc().initWithString_(self._resolve_symlinks(path)) + self.temp_urls.append(url) + AppKit.NSArray.alloc().initWithArray_(paths).enumerateObjectsUsingBlock_(resolve) + self.xa_wksp.activateFileViewerSelectingURLs_(self.temp_urls) + return self
+ +
[docs] def recycle_item(self, path: Union[str, AppKit.NSURL]) -> 'XAFinderApplication': + """Moves the file or folder at the specified path to the trash. + + :param path: The path of the file or folder to recycle. + :type path: Union[str, AppKit.NSURL] + :return: A reference to the Finder application object. + :rtype: XAFinderApplication + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Finder") + >>> app.recycle_item("/Users/exampleuser/Documents/Example.txt") + + .. seealso:: :func:`recycle_items` + + .. versionadded:: 0.0.1 + """ + if isinstance(path, str): + if path.startswith("file://"): + path = AppKit.NSURL.alloc().initWithString_(path) + else: + path = AppKit.NSURL.alloc().initFileURLWithPath_(path) + self.xa_fmgr.trashItemAtURL_resultingItemURL_error_(path, None, None) + return self
+ +
[docs] def recycle_items(self, paths: list[Union[str, AppKit.NSURL]]) -> 'XAFinderApplication': + """Moves the files or folders at the specified paths to the trash. + + This method utilizes fast enumeration methods from Objective-C to improve the performance of recycling large amounts of files. As such, it is preferred over calling :func:`recycle_item` repeatedly, especially when dealing with large lists of paths. + + :param path: The paths of the file and/or folders to recycle. + :type path: list[Union[str, AppKit.NSURL]] + :return: A reference to the Finder application object. + :rtype: XAFinderApplication + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Finder") + >>> items = ["/Users/exampleuser/Documents/Example 1.txt", "/Users/exampleuser/Documents/Example 2.txt"] + >>> app.recycle_items(items) + + .. seealso:: :func:`recycle_item` + + .. deprecated:: 0.1.2 + + Use :func:`recycle_item` instead. + + .. versionadded:: 0.0.1 + """ + def recycle(path: Union[str, AppKit.NSURL], index: int, stop: bool): + self.recycle_item(path) + AppKit.NSArray.alloc().initWithArray_(paths).enumerateObjectsUsingBlock_(recycle) + return self
+ +
[docs] def empty_trash(self) -> 'XAFinderApplication': + """Empties the trash. + + :return: A reference to the Finder application object. + :rtype: XAFinderApplication + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Finder") + >>> app.empty_trash() + + .. versionadded:: 0.0.1 + """ + self.xa_scel.emptySecurity_(True) + return self
+ +
[docs] def delete_item(self, path: Union[str, AppKit.NSURL]) -> 'XAFinderApplication': + """Permanently deletes the file or folder at the specified path. + + :param path: The path of the file or folder to delete. + :type path: Union[str, AppKit.NSURL] + :return: A reference to the Finder application object. + :rtype: XAFinderApplication + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Finder") + >>> app.delete_item("/Users/exampleuser/Documents/Example.txt") + + .. seealso:: :func:`delete_items` + + .. versionadded:: 0.0.1 + """ + if isinstance(path, str): + if path.startswith("file://"): + path = AppKit.NSURL.alloc().initWithString_(path) + else: + path = AppKit.NSURL.alloc().initFileURLWithPath_(path) + self.xa_fmgr.removeItemAtURL_error_(path, None) + return self
+ +
[docs] def delete_items(self, paths: list[Union[str, AppKit.NSURL]]) -> 'XAFinderApplication': + """Permanently deletes the files or folders at the specified paths. + + This method utilizes fast enumeration methods from Objective-C to improve the performance of deleting large amounts of files. As such, it is preferred over calling :func:`delete_item` repeatedly, especially when dealing with large lists of paths. + + :param path: The paths of the files and/or folders to delete. + :type path: Union[str, AppKit.NSURL] + :return: A reference to the Finder application object. + :rtype: XAFinderApplication + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Finder") + >>> items = ["/Users/exampleuser/Documents/Example 1.txt", "/Users/exampleuser/Documents/Example 2.txt"] + >>> app.delete_items(items) + + .. seealso:: :func:`delete_items` + + .. deprecated:: 0.1.2 + + Use :func:`delete_item` instead. + + .. versionadded:: 0.0.1 + """ + def delete(path: Union[str, AppKit.NSURL], index: int, stop: bool): + self.delete_item(path) + AppKit.NSArray.alloc().initWithArray_(paths).enumerateObjectsUsingBlock_(delete) + return self
+ +
[docs] def duplicate_item(self, path: str) -> 'XAFinderApplication': + """Duplicates the specified file or folder in its containing folder. + + The duplicated item will have the name of the original with " 2" added to the end. + + :param path: The path of the file or folder to duplicate. + :type path: str + :return: A reference to the Finder application object. + :rtype: XAFinderApplication + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Finder") + >>> app.duplicate_item("/Users/exampleuser/Documents/Example.txt") + + .. seealso:: :func:`duplicate_items` + + .. versionadded:: 0.0.1 + """ + if isinstance(path, str): + if path.startswith("file://"): + path = AppKit.NSURL.alloc().initWithString_(path) + else: + path = AppKit.NSURL.alloc().initFileURLWithPath_(path) + new_path = path + + copy_num = 1 + while new_path.checkResourceIsReachableAndReturnError_(None)[0]: + if path.hasDirectoryPath(): + new_path = path.path() + f" {copy_num}" + else: + new_path = path.path().replace("." + path.pathExtension(), f" {copy_num}." + path.pathExtension()) + new_path = AppKit.NSURL.alloc().initFileURLWithPath_(new_path) + copy_num += 1 + self.xa_fmgr.copyItemAtURL_toURL_error_(path, new_path, None) + return self
+ +
[docs] def duplicate_items(self, paths: list[str]) -> 'XAFinderApplication': + """Duplicates the specified files or folders in their containing folder. + + The duplicated items will have the name of the original with " 2" added to the end. This method utilizes fast enumeration methods from Objective-C to improve the performance of duplicating large amounts of files. As such, it is preferred over calling :func:`duplicate_item` repeatedly, especially when dealing with large lists of paths. + + :param path: The paths of the files and/or folders to duplicate. + :type path: str + :return: A reference to the Finder application object. + :rtype: XAFinderApplication + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Finder") + >>> items = ["/Users/exampleuser/Documents/Example 1.txt", "/Users/exampleuser/Documents/Example 2.txt"] + >>> app.duplicate_items(items) + + .. seealso:: :func:`duplicate_item` + + .. deprecated:: 0.1.2 + + Use :func:`duplicate_item` instead. + + .. versionadded:: 0.0.1 + """ + def duplicate(path: Union[str, AppKit.NSURL], index: int, stop: bool): + self.duplicate_item(path) + AppKit.NSArray.alloc().initWithArray_(paths).enumerateObjectsUsingBlock_(duplicate) + return self + + for path in paths: + self.duplicate_item(path) + return self
+ +
[docs] def search(self, query: str) -> 'XAFinderApplication': + """Opens a Finder search window and searches for the specified term. + + :param query: The term to search. + :type query: str + :return: A reference to the Finder application object. + :rtype: XAFinderApplication + + .. versionadded:: 0.0.1 + """ + self.xa_wksp.showSearchResultsForQueryString_(query) + return self
+ +
[docs] def get_labels(self) -> list[str]: + """Gets the list of file labels. + + :return: The list of file labels. + :rtype: str + + .. versionadded:: 0.0.1 + """ + return self.xa_wksp.fileLabels()
+ + # Directories +
[docs] def directory(self, path: Union[str, AppKit.NSURL]): + """.. deprecated:: 0.1.1 + + Use the :func:`folders` method with a filter instead. + """ + if isinstance(path, str): + path = AppKit.NSURL.alloc().initFileURLWithPath_(path) + folder_obj = self.xa_scel.folders().objectAtLocation_(path) + return self._new_element(folder_obj, XAFinderFolder)
+ +
[docs] def home_directory(self) -> 'XAFinderFolder': + """Obtains a reference to the current user's home directory. + + :return: A PyXA reference to the user's home directory. + :rtype: XAFinderFolder + + .. versionadded:: 0.0.1 + """ + path = self.xa_fmgr.homeDirectoryForCurrentUser() + folder_obj = self.xa_scel.folders().objectAtLocation_(path) + return self._new_element(folder_obj, XAFinderFolder)
+ +
[docs] def temp_directory(self) -> 'XAFinderFolder': + """Obtains a reference to the temporary directory for the current user. + + :return: A PyXA reference to the user's temporary directory. + :rtype: XAFinderFolder + + .. versionadded:: 0.0.1 + """ + path = self.xa_fmgr.temporaryDirectory() + folder_obj = self.xa_scel.folders().objectAtLocation_(path) + return self._new_element(folder_obj, XAFinderFolder)
+ +
[docs] def documents_directory(self) -> 'XAFinderFolder': + """Obtains a reference to the current user's documents directory. + + :return: A PyXA reference to the user's documents directory. + :rtype: XAFinderFolder + + .. versionadded:: 0.0.1 + """ + path = AppKit.NSURL.alloc().initFileURLWithPath_(self.xa_fmgr.homeDirectoryForCurrentUser().path() + "/Documents") + folder_obj = self.xa_scel.folders().objectAtLocation_(path) + return self._new_element(folder_obj, XAFinderFolder)
+ +
[docs] def downloads_directory(self) -> 'XAFinderFolder': + """Obtains a reference to the current user's downloads directory. + + :return: A PyXA reference to the user's downloads directory. + :rtype: XAFinderFolder + + .. versionadded:: 0.0.1 + """ + path = AppKit.NSURL.alloc().initFileURLWithPath_(self.xa_fmgr.homeDirectoryForCurrentUser().path() + "/Downloads") + folder_obj = self.xa_scel.folders().objectAtLocation_(path) + return self._new_element(folder_obj, XAFinderFolder)
+ +
[docs] def pictures_directory(self) -> 'XAFinderFolder': + """Obtains a reference to the current user's pictures directory. + + :return: A PyXA reference to the user's pictures directory. + :rtype: XAFinderFolder + + .. versionadded:: 0.0.1 + """ + path = AppKit.NSURL.alloc().initFileURLWithPath_(self.xa_fmgr.homeDirectoryForCurrentUser().path() + "/Pictures") + folder_obj = self.xa_scel.folders().objectAtLocation_(path) + return self._new_element(folder_obj, XAFinderFolder)
+ +
[docs] def movies_directory(self) -> 'XAFinderFolder': + """Obtains a reference to the current user's movies directory. + + :return: A PyXA reference to the user's movies directory. + :rtype: XAFinderFolder + + .. versionadded:: 0.0.1 + """ + path = AppKit.NSURL.alloc().initFileURLWithPath_(self.xa_fmgr.homeDirectoryForCurrentUser().path() + "/Movies") + folder_obj = self.xa_scel.folders().objectAtLocation_(path) + return self._new_element(folder_obj, XAFinderFolder)
+ +
[docs] def music_directory(self) -> 'XAFinderFolder': + """Obtains a reference to the current user's music directory. + + :return: A PyXA reference to the user's music directory. + :rtype: XAFinderFolder + + .. versionadded:: 0.0.1 + """ + path = AppKit.NSURL.alloc().initFileURLWithPath_(self.xa_fmgr.homeDirectoryForCurrentUser().path() + "/Music") + folder_obj = self.xa_scel.folders().objectAtLocation_(path) + return self._new_element(folder_obj, XAFinderFolder)
+ +
[docs] def public_directory(self) -> 'XAFinderFolder': + """Obtains a reference to the public directory. + + :return: A PyXA reference to the public directory. + :rtype: XAFinderFolder + + .. versionadded:: 0.0.1 + """ + path = AppKit.NSURL.alloc().initFileURLWithPath_(self.xa_fmgr.homeDirectoryForCurrentUser().path() + "/Public") + folder_obj = self.xa_scel.folders().objectAtLocation_(path) + return self._new_element(folder_obj, XAFinderFolder)
+ +
[docs] def applications_directory(self) -> 'XAFinderFolder': + """Obtains a reference to the system applications directory. + + :return: A PyXA reference to the system applications directory. + :rtype: XAFinderFolder + + .. versionadded:: 0.0.1 + """ + path = AppKit.NSURL.alloc().initFileURLWithPath_("/Applications") + folder_obj = self.xa_scel.folders().objectAtLocation_(path) + return self._new_element(folder_obj, XAFinderFolder)
+ +
[docs] def trash_directory(self) -> 'XAFinderFolder': + """Obtains a reference to the current user's trash directory. + + :return: A PyXA reference to the user's trash directory. + :rtype: XAFinderFolder + + .. versionadded:: 0.0.1 + """ + path = AppKit.NSURL.alloc().initFileURLWithPath_(self.xa_fmgr.homeDirectoryForCurrentUser().path() + "/Trash") + folder_obj = self.xa_scel.folders().objectAtLocation_(path) + return self._new_element(folder_obj, XAFinderFolder)
+ +
[docs] def items(self, filter: dict = None) -> 'XAFinderItemList': + """Returns a list of items matching the filter. + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_scel.items(), XAFinderItemList, filter)
+ +
[docs] def containers(self, filter: dict = None) -> 'XAFinderContainerList': + """Returns a list of containers matching the filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_scel.containers(), XAFinderContainerList, filter)
+ +
[docs] def disks(self, filter: dict = None) -> 'XAFinderDiskList': + """Returns a list of disks matching the filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_scel.disks(), XAFinderDiskList, filter)
+ +
[docs] def folders(self, filter: dict = None) -> 'XAFinderFolderList': + """Returns a list of folders matching the filter. + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_scel.folders(), XAFinderFolderList, filter)
+ +
[docs] def files(self, filter: dict = None) -> 'XAFinderFileList': + """Returns a list of files matching the filter. + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_scel.files(), XAFinderFileList, filter)
+ +
[docs] def alias_files(self, filter: dict = None) -> 'XAFinderAliasFileList': + """Returns a list of alias files matching the filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_scel.aliasFiles(), XAFinderAliasFileList, filter)
+ +
[docs] def application_files(self, filter: dict = None) -> 'XAFinderApplicationFileList': + """Returns a list of application files matching the filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_scel.applicationFiles(), XAFinderApplicationFileList, filter)
+ +
[docs] def document_files(self, filter: dict = None) -> 'XAFinderDocumentFileList': + """Returns a list of document files matching the filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_scel.documentFiles(), XAFinderDocumentFileList, filter)
+ +
[docs] def internet_location_files(self, filter: dict = None) -> 'XAFinderInternetLocationFileList': + """Returns a list of internet location files matching the filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_scel.internetLocationFiles(), XAFinderInternetLocationFileList, filter)
+ +
[docs] def clippings(self, filter: dict = None) -> 'XAFinderClippingList': + """Returns a list of clippings matching the filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_scel.clippings(), XAFinderClippingList, filter)
+ +
[docs] def packages(self, filter: dict = None) -> 'XAFinderPackageList': + """Returns a list of packages matching the filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_scel.packages(), XAFinderPackageList, filter)
+ +
[docs] def finder_windows(self, filter: dict = None) -> 'XAFinderFinderWindowList': + """Returns a list of Finder windows matching the filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_scel.FinderWindows(), XAFinderFinderWindowList, filter)
+ +
[docs] def clipping_windows(self, filter: dict = None) -> 'XAFinderClippingWindowList': + """Returns a list of clipping windows matching the filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_scel.clippingWindows(), XAFinderClippingWindowList, filter)
+ + + + +
[docs]class XAFinderItemList(XABase.XAList): + """A wrapper around lists of Finder items that employs fast enumeration techniques. + + All properties of Finder items can be called as methods on the wrapped list, returning a list containing each item's value for the property. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, object_class = None): + if object_class is None: + object_class = XAFinderItem + super().__init__(properties, object_class, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def displayed_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("displayedName") or [])
+ +
[docs] def name_extension(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("nameExtension") or [])
+ +
[docs] def extension_hidden(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("extensionHidden") or [])
+ +
[docs] def index(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("index") or [])
+ +
[docs] def position(self) -> list[tuple[int, int]]: + return list(self.xa_elem.arrayByApplyingSelector_("position") or [])
+ +
[docs] def desktop_position(self) -> list[tuple[int, int]]: + return list(self.xa_elem.arrayByApplyingSelector_("desktopPosition") or [])
+ +
[docs] def bounds(self) -> list[tuple[tuple[int, int], tuple[int, int]]]: + return list(self.xa_elem.arrayByApplyingSelector_("bounds") or [])
+ +
[docs] def label_index(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("labelIndex") or [])
+ +
[docs] def locked(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("locked") or [])
+ +
[docs] def kind(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("kind") or [])
+ +
[docs] def description(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("description") or [])
+ +
[docs] def comment(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("comment") or [])
+ +
[docs] def size(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("size") or [])
+ +
[docs] def physical_size(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("physicalSize") or [])
+ +
[docs] def creation_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("creationDate") or [])
+ +
[docs] def modification_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("modificationDate") or [])
+ +
[docs] def url(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("URL") or [] + return [XABase.XAPath(x[7:]) for x in ls]
+ +
[docs] def owner(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("owner") or [])
+ +
[docs] def group(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("group") or [])
+ +
[docs] def owner_privileges(self) -> list[XAFinderApplication.PrivacySetting]: + return list(self.xa_elem.arrayByApplyingSelector_("ownerPrivileges") or [])
+ +
[docs] def group_privileges(self) -> list[XAFinderApplication.PrivacySetting]: + return list(self.xa_elem.arrayByApplyingSelector_("groupPrivileges") or [])
+ +
[docs] def everyone_privileges(self) -> list[XAFinderApplication.PrivacySetting]: + return list(self.xa_elem.arrayByApplyingSelector_("everyonePrivileges") or [])
+ +
[docs] def container(self) -> 'XAFinderContainerList': + ls = self.xa_elem.arrayByApplyingSelector_("container") or [] + return self._new_element(ls, XAFinderContainerList)
+ +
[docs] def disk(self) -> 'XAFinderDiskList': + ls = self.xa_elem.arrayByApplyingSelector_("disk") or [] + return self._new_element(ls, XAFinderDiskList)
+ +
[docs] def icon(self) -> XABase.XAImageList: + ls = self.xa_elem.arrayByApplyingSelector_("icon") or [] + return self._new_element(ls, XABase.XAImageList)
+ +
[docs] def information_window(self) -> 'XAFinderInformationWindowList': + ls = self.xa_elem.arrayByApplyingSelector_("informationWindow") or [] + return self._new_element(ls, XAFinderInformationWindowList)
+ +
[docs] def by_name(self, name: str) -> Union['XAFinderItem', None]: + return self.by_property("name", name)
+ +
[docs] def by_displayed_name(self, displayed_name: str) -> Union['XAFinderItem', None]: + return self.by_property("displayedName", displayed_name)
+ +
[docs] def by_name_extension(self, name_extension: str) -> Union['XAFinderItem', None]: + return self.by_property("nameExtension", name_extension)
+ +
[docs] def by_extension_hidden(self, extension_hidden: bool) -> Union['XAFinderItem', None]: + return self.by_property("extensionHidden", extension_hidden)
+ +
[docs] def by_index(self, index: int) -> Union['XAFinderItem', None]: + return self.by_property("index", index)
+ +
[docs] def by_position(self, position: tuple[int, int]) -> Union['XAFinderItem', None]: + return self.by_property("position", position)
+ +
[docs] def by_desktop_position(self, desktop_position: tuple[int, int]) -> Union['XAFinderItem', None]: + return self.by_property("desktopPosition", desktop_position)
+ +
[docs] def by_bounds(self, bounds: tuple[tuple[int, int], tuple[int, int]]) -> Union['XAFinderItem', None]: + return self.by_property("bounds", bounds)
+ +
[docs] def by_label_index(self, label_index: index) -> Union['XAFinderItem', None]: + return self.by_property("labelIndex", label_index)
+ +
[docs] def by_locked(self, locked: bool) -> Union['XAFinderItem', None]: + return self.by_property("locked", locked)
+ +
[docs] def by_kind(self, kind: str) -> Union['XAFinderItem', None]: + return self.by_property("kind", kind)
+ +
[docs] def by_description(self, description: str) -> Union['XAFinderItem', None]: + return self.by_property("description", description)
+ +
[docs] def by_comment(self, comment: str) -> Union['XAFinderItem', None]: + return self.by_property("comment", comment)
+ +
[docs] def by_size(self, size: int) -> Union['XAFinderItem', None]: + return self.by_property("size", size)
+ +
[docs] def by_physical_size(self, physical_size: int) -> Union['XAFinderItem', None]: + return self.by_property("physicalSize", physical_size)
+ +
[docs] def by_creation_date(self, creation_date: datetime) -> Union['XAFinderItem', None]: + return self.by_property("creationDate", creation_date)
+ +
[docs] def by_modification_date(self, modification_date: datetime) -> Union['XAFinderItem', None]: + return self.by_property("modificationDate", modification_date)
+ +
[docs] def by_url(self, url: Union[str, XABase.XAPath]) -> Union['XAFinderItem', None]: + if isinstance(url, str): + url = XABase.XAPath(url) + return self.by_property("URL", str(url.xa_elem))
+ +
[docs] def by_owner(self, owner: str) -> Union['XAFinderItem', None]: + return self.by_property("owner", owner)
+ +
[docs] def by_group(self, group: str) -> Union['XAFinderItem', None]: + return self.by_property("group", group)
+ +
[docs] def by_owner_privileges(self, owner_privileges: XAFinderApplication.PrivacySetting) -> Union['XAFinderItem', None]: + return self.by_property("ownerPrivileges", owner_privileges)
+ +
[docs] def by_group_privileges(self, group_privileges: XAFinderApplication.PrivacySetting) -> Union['XAFinderItem', None]: + return self.by_property("groupPrivileges", group_privileges)
+ +
[docs] def by_everyone_privileges(self, everyone_privileges: XAFinderApplication.PrivacySetting) -> Union['XAFinderItem', None]: + return self.by_property("everyonePrivileges", everyone_privileges)
+ +
[docs] def by_container(self, container: 'XAFinderContainer') -> Union['XAFinderItem', None]: + return self.by_property("container", container.xa_elem)
+ +
[docs] def by_disk(self, disk: 'XAFinderDisk') -> Union['XAFinderItem', None]: + return self.by_property("disk", disk.xa_elem)
+ +
[docs] def by_icon(self, icon: XAImage) -> Union['XAFinderItem', None]: + return self.by_property("icon", icon.value)
+ +
[docs] def by_information_window(self, information_window: 'XAFinderInformationWindow') -> Union['XAFinderItem', None]: + return self.by_property("informationWindow", information_window.xa_elem)
+ +
[docs] def get_clipboard_representation(self) -> list[Union[str, AppKit.NSURL]]: + """Gets a clipboard-codable representation of each item in the list. + + When the clipboard content is set to a list of Finder items, each item's name and URL are added to the clipboard. + + :return: The name and URL of each item in the list + :rtype: list[Union[str, AppKit.NSURL]] + + .. versionadded:: 0.0.8 + """ + items = [] + names = self.name() + urls = self.url() + for index, name in enumerate(names): + items.append(name) + items.append(urls[index].xa_elem) + return items
+ + def __repr__(self): + return f'<{str(type(self))}{str(self.name())}>'
+ +
[docs]class XAFinderItem(XABase.XAObject, XASelectable, XADeletable, XAClipboardCodable): + """A generic class with methods common to the various item classes of Finder. + + .. seealso:: :class:`XAFinderContainer`, :class:`XAFinderFile` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """Every property of an item. + """ + return self.xa_elem.properties() + + @property + def name(self) -> str: + """The name of the item. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def displayed_name(self) -> str: + """The user-visible name of the item. + """ + return self.xa_elem.displayedName() + + @property + def name_extension(self) -> str: + """The file extension of the item. + """ + return self.xa_elem.nameExtension() + + @name_extension.setter + def name_extension(self, name_extension: str): + self.set_property('nameExtension', name_extension) + + @property + def extension_hidden(self) -> bool: + """Whether the file extension is hidden. + """ + return self.xa_elem.extensionHidden() + + @extension_hidden.setter + def extension_hidden(self, extension_hidden: bool): + self.set_property('extensionHidden', extension_hidden) + + @property + def index(self) -> int: + """The index within the containing folder/disk. + """ + return self.xa_elem.index() + + @property + def position(self) -> XAPoint: + """The position of the item within the parent window. + """ + return XAPoint(*self.xa_elem.position()) + + @position.setter + def position(self, position: Union[tuple[int, int], XAPoint]): + position = AppKit.NSValue.valueWithPoint_(position) + self.set_property('position', position) + + @property + def desktop_position(self) -> XAPoint: + """The position of an item on the desktop. + """ + return XAPoint(*self.xa_elem.desktopPosition()) + + @desktop_position.setter + def desktop_position(self, desktop_position: Union[tuple[int, int], XAPoint]): + desktop_position = AppKit.NSValue.valueWithPoint_(desktop_position) + self.set_property('desktopPosition', desktop_position) + + @property + def bounds(self) -> XARectangle: + """The bounding rectangle of an item. + """ + rect = self.xa_elem.bounds() + origin = rect.origin + size = rect.size + return XARectangle(origin.x, origin.y, size.width, size.height) + + @bounds.setter + def bounds(self, bounds: Union[tuple[int, int, int, int], XARectangle]): + x = bounds[0] + y = bounds[1] + w = bounds[2] + h = bounds[3] + value = AppKit.NSValue.valueWithRect_(AppKit.NSMakeRect(x, y, w, h)) + self.set_property("bounds", value) + + @property + def label_index(self) -> int: + """The label assigned to the item. + """ + return self.xa_elem.labelIndex() + + @label_index.setter + def label_index(self, label_index: int): + self.set_property('labelIndex', label_index) + + @property + def locked(self) -> bool: + """Whether the file is locked. + """ + return self.xa_elem.locked() + + @locked.setter + def locked(self, locked: bool): + self.set_property('locked', locked) + + @property + def kind(self) -> str: + """The kind of the item, e.g. "Folder" or "File". + """ + return self.xa_elem.kind() + + @property + def description(self) -> str: + """The description of the item. + """ + return self.xa_elem.description() + + @property + def comment(self) -> str: + """The user-specified comment on the item. + """ + return self.xa_elem.comment() + + @comment.setter + def comment(self, comment: str): + self.set_property('comment', comment) + + @property + def size(self) -> int: + """The logical size of the item. + """ + return self.xa_elem.size() + + @property + def physical_size(self) -> int: + """The actual disk space used by the item. + """ + return self.xa_elem.physicalSize() + + @property + def creation_date(self) -> datetime: + """The date the item was created. + """ + return self.xa_elem.creationDate() + + @property + def modification_date(self) -> datetime: + """The date the item was last modified. + """ + return self.xa_elem.modificationDate() + + @modification_date.setter + def modification_date(self, modification_date: datetime): + self.set_property('modificationDate', modification_date) + + @property + def url(self) -> XABase.XAPath: + """The URL of the item. + """ + return XABase.XAPath(self.xa_elem.URL()[7:]) + + @property + def owner(self) -> str: + """The name of the user that owns the item. + """ + return self.xa_elem.owner() + + @owner.setter + def owner(self, owner: str): + self.set_property('owner', owner) + + @property + def group(self) -> str: + """The name of the group that has access to the item. + """ + return self.xa_elem.group() + + @group.setter + def group(self, group: str): + self.set_property('group', group) + + @property + def owner_privileges(self) -> XAFinderApplication.PrivacySetting: + """The privilege level of the owner, e.g. "read only". + """ + return self.xa_elem.ownerPrivileges() + + @owner_privileges.setter + def owner_privileges(self, owner_privileges: XAFinderApplication.PrivacySetting): + self.set_property('ownerPrivileges', owner_privileges.value) + + @property + def group_privileges(self) -> XAFinderApplication.PrivacySetting: + """The privilege level of the group, e.g. "write only". + """ + return self.xa_elem.groupPrivileges() + + @group_privileges.setter + def group_privileges(self, group_privileges: XAFinderApplication.PrivacySetting): + self.set_property('groupPrivileges', group_privileges.value) + + @property + def everyone_privileges(self) -> XAFinderApplication.PrivacySetting: + """The privilege level of everyone else, e.g. "none". + """ + return self.xa_elem.everyonePrivileges() + + @everyone_privileges.setter + def everyone_privileges(self, everyone_privileges: XAFinderApplication.PrivacySetting): + self.set_property('everyoneErivileges', everyone_privileges.value) + + @property + def container(self) -> 'XAFinderContainer': + """The container of the item. + """ + container_obj = self.xa_elem.container() + kind = container_obj.kind() + if kind == "Folder": + return self._new_element(container_obj, XAFinderFolder) + elif kind == "Volume": + return self._new_element(container_obj, XAFinderDisk) + elif kind == "": + # TODO: Computer container + print("item container todo") + pass + + @property + def disk(self) -> 'XAFinderDisk': + """The disk on which the item is stored. + """ + disk_obj = self.xa_elem.disk() + return self._new_element(disk_obj, XAFinderDisk) + + @property + def icon(self) -> XAImage: + """The icon bitmap of the item's icon. + """ + icon_obj = self.xa_elem.icon() + return self._new_element(icon_obj, XAImage) + + @icon.setter + def icon(self, icon: XAImage): + self.set_property('icon', icon.xa_elem) + + @property + def information_window(self) -> 'XAFinderInformationWindow': + """The information window for this item. + """ + window_obj = self.xa_elem.informationWindow() + return self._new_element(window_obj, XAFinderInformationWindow) + +
[docs] def reveal(self) -> 'XAFinderItem': + """Reveals the item in the frontmost Finder window. + + :return: A reference to the item object + :rtype: XAFinderItem + + .. versionadded:: 0.0.4 + """ + self.xa_elem.reveal() + return self
+ +
[docs] def copy(self) -> 'XAFinderItem': + """Copies the item to the clipboard. + + :return: A reference to the Finder item that called this method. + :rtype: XAFinderItem + + .. versionadded:: 0.0.1 + """ + url = AppKit.NSURL.alloc().initWithString_(self.URL).absoluteURL() + self.set_clipboard(url) + return self
+ +
[docs] def move_to(self, new_path: Union[str, AppKit.NSURL], overwrite: bool = False) -> 'XAFinderItem': + """Moves the item to the specified path. + + :param new_path: The path to move the item to. + :type new_path: Union[str, AppKit.NSURL] + :param overwrite: Whether to overwrite existing files of the same name at the target path, defaults to False + :type overwrite: bool, optional + :return: A reference to the Finder item that called this method. + :rtype: XAFinderItem + + .. versionadded:: 0.0.1 + """ + if isinstance(new_path, str): + new_path = AppKit.NSURL.alloc().initFileURLWithPath_(new_path) + old_path = AppKit.NSURL.alloc().initWithString_(self.URL) + self.xa_fmgr.moveItemAtURL_toURL_error_(old_path, new_path, None) + return self
+ +
[docs] def exists(self) -> bool: + """Checks whether the item exists on the disk or not. + + :return: True if the item exists, false otherwise. + :rtype: bool + + .. versionadded:: 0.0.1 + """ + return self.xa_elem.exists()
+ +
[docs] def open(self): + """Opens the item in its default application. + + .. versionadded:: 0.0.2 + """ + self.url.open()
+ +
[docs] def get_clipboard_representation(self) -> list[Union[str, AppKit.NSURL]]: + """Gets a clipboard-codable representation of the item. + + When the clipboard content is set to a Finder item, the item's name and URL are added to the clipboard. + + :return: The name and URL of the item + :rtype: list[Union[str, AppKit.NSURL]] + + .. versionadded:: 0.0.8 + """ + return [self.name, self.url.xa_elem]
+ + def __repr__(self): + return "<" + str(type(self)) + self.name + ">"
+ + + + +
[docs]class XAFinderContainerList(XAFinderItemList): + """A wrapper around lists of containers that employs fast enumeration techniques. + + All properties of containers can be called as methods on the wrapped list, returning a list with each container's value for the property. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, object_class = None): + if object_class is None: + object_class = XAFinderContainer + super().__init__(properties, filter, object_class) + +
[docs] def entire_contents(self) -> 'XAFinderItemList': + ls = self.xa_elem.arrayByApplyingSelector_("entireContents") or [] + return self._new_element(ls, XAFinderItemList)
+ +
[docs] def container_window(self) -> 'XAFinderFinderWindowList': + ls = self.xa_elem.arrayByApplyingSelector_("containerWindow") or [] + + parent = self.xa_prnt + while not hasattr(parent, "xa_wcls"): + parent = parent.xa_prnt + self.xa_wcls = parent.xa_wcls + + return self._new_element(ls, XAFinderFinderWindowList)
+ +
[docs] def items(self) -> XAFinderItemList: + return self._new_element(self.xa_elem.arrayByApplyingSelector_("items") or [], XAFinderItemList)
+ +
[docs] def containers(self) -> 'XAFinderContainerList': + return self._new_element(self.xa_elem.arrayByApplyingSelector_("containers") or [], XAFinderContainerList)
+ +
[docs] def folders(self) -> 'XAFinderFolderList': + return self._new_element(self.xa_elem.arrayByApplyingSelector_("folders") or [], XAFinderFolderList)
+ +
[docs] def files(self) -> 'XAFinderFileList': + return self._new_element(self.xa_elem.arrayByApplyingSelector_("files") or [], XAFinderFileList)
+ +
[docs] def alias_files(self) -> 'XAFinderAliasFileList': + return self._new_element(self.xa_elem.arrayByApplyingSelector_("aliasFiles") or [], XAFinderAliasFileList)
+ +
[docs] def application_files(self) -> 'XAFinderApplicationFileList': + return self._new_element(self.xa_elem.arrayByApplyingSelector_("applicationFiles") or [], XAFinderApplicationFileList)
+ +
[docs] def document_files(self) -> 'XAFinderDocumentFileList': + return self._new_element(self.xa_elem.arrayByApplyingSelector_("documentFiles") or [], XAFinderDocumentFileList)
+ +
[docs] def internet_location_files(self) -> 'XAFinderInternetLocationFileList': + return self._new_element(self.xa_elem.arrayByApplyingSelector_("internetLocationFiles") or [], XAFinderInternetLocationFileList)
+ +
[docs] def clippings(self) -> 'XAFinderClippingList': + return self._new_element(self.xa_elem.arrayByApplyingSelector_("clippings") or [], XAFinderClippingList)
+ +
[docs] def packages(self) -> 'XAFinderPackageList': + return self._new_element(self.xa_elem.arrayByApplyingSelector_("packages") or [], XAFinderPackageList)
+ +
[docs] def by_entire_contents(self, entire_contents: XAFinderItemList) -> Union['XAFinderContainer', None]: + return self.by_property("entireContents", entire_contents.xa_elem)
+ +
[docs] def by_container_window(self, container_window: 'XAFinderFinderWindow') -> Union['XAFinderContainer', None]: + return self.by_property("containerWindow", container_window.xa_elem)
+ +
[docs]class XAFinderContainer(XAFinderItem): + """A class for managing and interacting with containers in Finder. + + .. seealso:: :class:`XAFinderDisk`, :class:`XAFinderFolder` + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def entire_contents(self): + """The entire contents of the container, including the contents of its children. + """ + obj = self.xa_elem.entireContents().get() + return self._new_element(obj, XAFinderItemList) + + @property + def container_window(self): + """The container window for this folder. + """ + window_obj = self.xa_elem.containerWindow() + return self._new_element(window_obj, XAFinderFinderWindow) + +
[docs] def items(self, filter: dict = None) -> 'XAFinderItemList': + """Returns a list of items matching the filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_elem.items(), XAFinderItemList, filter)
+ +
[docs] def containers(self, filter: dict = None) -> 'XAFinderContainerList': + """Returns a list of containers matching the filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_elem.containers(), XAFinderContainerList, filter)
+ +
[docs] def folders(self, filter: dict = None) -> 'XAFinderFolderList': + """Returns a list of folders matching the filter. + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_elem.folders(), XAFinderFolderList, filter)
+ +
[docs] def files(self, filter: dict = None) -> 'XAFinderFileList': + """Returns a list of files matching the filter. + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_elem.files(), XAFinderFileList, filter)
+ +
[docs] def alias_files(self, filter: dict = None) -> 'XAFinderAliasFileList': + """Returns a list of alias files matching the filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_elem.aliasFiles(), XAFinderAliasFileList, filter)
+ +
[docs] def application_files(self, filter: dict = None) -> 'XAFinderApplicationFileList': + """Returns a list of application files matching the filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_elem.applicationFiles(), XAFinderApplicationFileList, filter)
+ +
[docs] def document_files(self, filter: dict = None) -> 'XAFinderDocumentFileList': + """Returns a list of document files matching the filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_elem.documentFiles(), XAFinderDocumentFileList, filter)
+ +
[docs] def internet_location_files(self, filter: dict = None) -> 'XAFinderInternetLocationFileList': + """Returns a list of internet location files matching the filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_elem.internetLocationFiles(), XAFinderInternetLocationFileList, filter)
+ +
[docs] def clippings(self, filter: dict = None) -> 'XAFinderClippingList': + """Returns a list of clippings matching the filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_elem.clippings(), XAFinderClippingList, filter)
+ +
[docs] def packages(self, filter: dict = None) -> 'XAFinderPackageList': + """Returns a list of packages matching the filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_elem.packages(), XAFinderPackageList, filter)
+ + + + +
[docs]class XAFinderDiskList(XAFinderContainerList): + """A wrapper around lists of disks that employs fast enumeration techniques. + + All properties of disks can be called as methods on the wrapped list, returning a list containing each disk's value for the property. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAFinderDisk) + +
[docs] def id(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def capacity(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("capacity") or [])
+ +
[docs] def free_space(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("freeSpace") or [])
+ +
[docs] def ejectable(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("ejectable") or [])
+ +
[docs] def local_volume(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("localVolume") or [])
+ +
[docs] def startup(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("startup") or [])
+ +
[docs] def format(self) -> list[XAFinderApplication.ItemFormat]: + return list(self.xa_elem.arrayByApplyingSelector_("format") or [])
+ +
[docs] def journaling_enabled(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("journalingEnabled") or [])
+ +
[docs] def ignore_privileges(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("ignorePrivileges") or [])
+ +
[docs] def by_id(self, id: int) -> Union['XAFinderDisk', None]: + return self.by_property("id", id)
+ +
[docs] def by_capacity(self, capacity: int) -> Union['XAFinderDisk', None]: + return self.by_property("capacity", capacity)
+ +
[docs] def by_free_space(self, free_space: int) -> Union['XAFinderDisk', None]: + return self.by_property("freeSpace", free_space)
+ +
[docs] def by_ejectable(self, ejectable: bool) -> Union['XAFinderDisk', None]: + return self.by_property("ejectable", ejectable)
+ +
[docs] def by_local_volume(self, local_volume: bool) -> Union['XAFinderDisk', None]: + return self.by_property("localVolume", local_volume)
+ +
[docs] def by_startup(self, startup: bool) -> Union['XAFinderDisk', None]: + return self.by_property("startup", startup)
+ +
[docs] def by_format(self, format: XAFinderApplication.ItemFormat) -> Union['XAFinderDisk', None]: + return self.by_property("format", format)
+ +
[docs] def by_journaling_enabled(self, journaling_enabled: bool) -> Union['XAFinderDisk', None]: + return self.by_property("journalingEnabled", journaling_enabled)
+ +
[docs] def by_ignore_privileges(self, ignore_privileges: bool) -> Union['XAFinderDisk', None]: + return self.by_property("ignorePrivileges", ignore_privileges)
+ +
[docs]class XAFinderDisk(XAFinderContainer): + """A class for managing and interacting with disks in Finder. + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> int: + """A unique identifier for the disk that is persistent for as long as the disc is connected and Finder is running. + """ + return self.xa_elem.id() + + @property + def capacity(self) -> int: + """The total number of bytes on the disk. + """ + return self.xa_elem.capacity() + + @property + def free_space(self) -> int: + """The number of free bytes left on the disk. + """ + return self.xa_elem.freeSpace() + + @property + def ejectable(self) -> bool: + """Whether the disk can be ejected. + """ + return self.xa_elem.ejectable() + + @property + def local_volume(self) -> bool: + """Whether the disk is a local volume vs. a file server. + """ + return self.xa_elem.localVolume() + + @property + def startup(self) -> bool: + """Whether the disk is the boot disk. + """ + return self.xa_elem.startup() + + @property + def format(self) -> XAFinderApplication.ItemFormat: + """The format of the disk, e.g. "APFS format". + """ + return self.xa_elem.format() + + @property + def journaling_enabled(self) -> bool: + """Whether the disk does file system journaling. + """ + return self.xa_elem.journalingEnabled() + + @property + def ignore_privileges(self) -> bool: + """Whether to ignore permissions on the disk. + """ + return self.xa_elem.ignorePrivileges() + + @ignore_privileges.setter + def ignore_privileges(self, ignore_privileges: bool): + self.set_property('ignorePrivileges', ignore_privileges)
+ + + + +
[docs]class XAFinderFolderList(XAFinderContainerList): + """A wrapper around lists of folders that employs fast enumeration techniques. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAFinderFolder)
+ +
[docs]class XAFinderFolder(XAFinderContainer): + """A class for managing and interacting with folders in Finder. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAFinderTrash(XAFinderContainer): + """A class for managing and interacting with Finder's Trash. + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def warns_before_emptying(self) -> bool: + """Whether to display a dialog before emptying the Trash. + """ + return self.xa_elem.warnsBeforeEmptying() + + @warns_before_emptying.setter + def warns_before_emptying(self, warns_before_emptying: bool): + self.set_property('warnsBeforeEmptying', warns_before_emptying)
+ + + + +
[docs]class XAFinderComputer(XAFinderItem): + """A class for managing and interacting with the Desktop. + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAFinderFileList(XAFinderItemList): + """A wrapper around lists of files that employs fast enumeration techniques. + + All properties of files can be called as methods on the wrapped list, returning a list containing each file's value for the property. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAFinderFile + super().__init__(properties, filter, obj_class) + +
[docs] def file_type(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("fileType") or [])
+ +
[docs] def creator_type(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("creatorType") or [])
+ +
[docs] def stationery(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("stationery") or [])
+ +
[docs] def product_version(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("productVersion") or [])
+ +
[docs] def version(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("version") or [])
+ +
[docs] def by_file_type(self, file_type: int) -> Union['XAFinderFile', None]: + return self.by_property("fileType", file_type)
+ +
[docs] def by_creator_type(self, creator_type: int) -> Union['XAFinderFile', None]: + return self.by_property("creatorType", creator_type)
+ +
[docs] def by_stationery(self, stationery: bool) -> Union['XAFinderFile', None]: + return self.by_property("stationery", stationery)
+ +
[docs] def by_product_version(self, product_version: str) -> Union['XAFinderFile', None]: + return self.by_property("productVersion", product_version)
+ +
[docs] def by_version(self, version: str) -> Union['XAFinderFile', None]: + return self.by_property("version", version)
+ +
[docs]class XAFinderFile(XAFinderItem, XABaseScriptable.XASBPrintable): + """A class for managing and interacting with files in Finder. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def file_type(self) -> int: + """The OSType of the file and the data within it. + """ + return self.xa_elem.fileType() + + @file_type.setter + def file_type(self, file_type: int): + self.set_property('fileType', file_type) + + @property + def creator_type(self) -> int: + """The OSType of the application that created the file. + """ + return self.xa_elem.creatorType() + + @creator_type.setter + def creator_type(self, creator_type: int): + self.set_property('creatorType', creator_type) + + @property + def stationery(self) -> bool: + """Whether the file is a stationery pad. + """ + return self.xa_elem.stationery() + + @stationery.setter + def stationery(self, stationery: bool): + self.set_property('stationery', stationery) + + @property + def product_version(self) -> str: + """The version of the application the file was created with. + """ + return self.xa_elem.productVersion() + + @property + def version(self) -> str: + """The version of the file. + """ + return self.xa_elem.version()
+ + + + +
[docs]class XAFinderAliasFileList(XAFinderFileList): + """A wrapper around lists of alias files that employs fast enumeration techniques. + + All properties of alias files can be called as methods on the wrapped list, returning a list containing each alias files's value for the property. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAFinderAliasFile) + +
[docs] def original_item(self) -> list[XAFinderItem]: + return list(self.xa_elem.arrayByApplyingSelector_("originalItem") or [])
+ +
[docs] def by_original_item(self, original_item: XAFinderItem) -> Union['XAFinderAliasFile', None]: + return self.by_property("originalItem", original_item)
+ +
[docs]class XAFinderAliasFile(XAFinderFile): + """A class for managing and interacting with alias files in Finder.app. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def original_item(self) -> XAFinderItem: + """The original item pointed to by the alias. + """ + item_obj = self.xa_elem.originalItem() + return self._new_element(item_obj, XAFinderItem) + + @original_item.setter + def original_item(self, original_item: XAFinderItem): + self.set_property('originalItem', original_item.xa_elem)
+ + + + +
[docs]class XAFinderApplicationFileList(XAFinderFileList): + """A wrapper around lists of application files that employs fast enumeration techniques. + + All properties of application files can be called as methods on the wrapped list, returning a list containing each application file's value for the property. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAFinderApplicationFile) + +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def has_scripting_terminology(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("hasScriptingTerminology") or [])
+ +
[docs] def by_id(self, id: str) -> Union['XAFinderApplicationFile', None]: + return self.by_property("id", id)
+ +
[docs] def by_has_scripting_terminology(self, has_scripting_terminology: bool) -> Union['XAFinderApplicationFile', None]: + return self.by_property("hasScriptingTerminology", has_scripting_terminology)
+ +
[docs]class XAFinderApplicationFile(XAFinderFile): + """A class for managing and interacting with application files in Finder.app. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """The bundle identifier or creator type of the application. + """ + return self.xa_elem.id() + + @property + def has_scripting_terminology(self) -> bool: + """Whether the process can be scripted. + """ + return self.xa_elem.hasScriptingTerminology()
+ + + + +
[docs]class XAFinderDocumentFileList(XAFinderFileList): + """A wrapper around lists of document files that employs fast enumeration techniques. + + All properties of document files can be called as methods on the wrapped list, returning a list containing each document file's value for the property. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAFinderDocumentFile)
+ +
[docs]class XAFinderDocumentFile(XAFinderFile): + """A class for managing and interacting with document files in Finder.app. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAFinderInternetLocationFileList(XAFinderFileList): + """A wrapper around lists of internet location files that employs fast enumeration techniques. + + All properties of internet location files can be called as methods on the wrapped list, returning a list containing each file's value for the property. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAFinderInternetLocationFile) + +
[docs] def location(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("location") or [])
+ +
[docs] def by_location(self, location: str) -> Union['XAFinderInternetLocationFile', None]: + return self.by_property("location", location)
+ +
[docs]class XAFinderInternetLocationFile(XAFinderFile): + """A class for managing and interacting with internet location files in Finder.app. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def location(self) -> str: + """The internet location. + """ + return self.xa_elem.location()
+ + + + +
[docs]class XAFinderClippingList(XAFinderFileList): + """A wrapper around lists of clippings that employs fast enumeration techniques. + + All properties of clippings can be called as methods on the wrapped list, returning a list containing each clipping's value for the property. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAFinderClipping)
+ +
[docs]class XAFinderClipping(XAFinderFile): + """A class for managing and interacting with clippings in Finder.app. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAFinderPackageList(XAFinderItemList): + """A wrapper around lists of packages that employs fast enumeration techniques. + + All properties of packages can be called as methods on the wrapped list, returning a list containing each package's value for the property. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAFinderPackage)
+ +
[docs]class XAFinderPackage(XAFinderItem): + """A class for managing and interacting with packages in Finder.app. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAFinderWindowList(XABaseScriptable.XASBWindowList): + """A wrapper around lists of Finder windows that employs fast enumeration techniques. + + All properties of Finder windows can be called as methods on the wrapped list, returning a list containing each window's value for the property. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAFinderWindowList + super().__init__(properties, filter, obj_class) + +
[docs] def position(self) -> list[XAPoint]: + ls = self.xa_elem.arrayByApplyingSelector_("position") or [] + return [XAPoint(value) for value in ls]
+ +
[docs] def titled(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("titled") or [])
+ +
[docs] def floating(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("floating") or [])
+ +
[docs] def modal(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("modal") or [])
+ +
[docs] def collapsed(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("collapsed") or [])
+ +
[docs] def properties(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("properties") or [])
+ +
[docs] def by_position(self, position: tuple[int, int]) -> Union['XAFinderWindow', None]: + return self.by_property("position", position)
+ +
[docs] def by_titled(self, titled: bool) -> Union['XAFinderWindow', None]: + return self.by_property("titled", titled)
+ +
[docs] def by_floating(self, floating: bool) -> Union['XAFinderWindow', None]: + return self.by_property("floating", floating)
+ +
[docs] def by_modal(self, modal: bool) -> Union['XAFinderWindow', None]: + return self.by_property("modal", modal)
+ +
[docs] def by_collapsed(self, collapsed: bool) -> Union['XAFinderWindow', None]: + return self.by_property("collapsed", collapsed)
+ +
[docs] def by_properties(self, properties: dict) -> Union['XAFinderWindow', None]: + return self.by_property("properties", properties)
+ +
[docs]class XAFinderWindow(XABaseScriptable.XASBWindow, XABaseScriptable.XASBPrintable): + """A class for managing and interacting with windows of Finder.app. + + :Example 1: Setting the bounds of a Finder window + + >>> import PyXA + >>> app = PyXA.Application("Finder") + >>> window = app.windows()[0] + >>> lock = False + >>> (old_w, old_h) = (0,0) + >>> while True: + >>> if window.position.y < 50 and lock is False: + >>> # Increase height of window when user drags it to the top + >>> (old_w, old_h) = window.bounds.size + >>> (x, y) = window.position + >>> window.set_property("bounds", ((x, y), (old_w, 2000))) + >>> lock = True + >>> if lock is True and window.position.y > 55: + >>> # Return to original size if user moves window down + >>> (x, y) = window.position + >>> window.set_property("bounds", ((x, y), (old_w, old_h))) + >>> lock = False + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def position(self) -> XAPoint: + """The upper left position of the window. + """ + return XAPoint(*self.xa_elem.position()) + + @position.setter + def position(self, position: Union[tuple[int, int], XAPoint]): + value = AppKit.NSValue.valueWithPoint_(position) + self.set_property('position', value) + + @property + def titled(self) -> bool: + """Whether the window has a title bar. + """ + return self.xa_elem.titled() + + @property + def floating(self) -> bool: + """Whether the window floats. + """ + return self.xa_elem.floating() + + @property + def modal(self) -> bool: + """Whether the window is modal. + """ + return self.xa_elem.modal() + + @property + def collapsed(self) -> bool: + """Whether the window is collapsed. + """ + return self.xa_elem.collapsed() + + @collapsed.setter + def collapsed(self, collapsed: bool): + self.set_property('collapsed', collapsed) + + @property + def properties(self) -> dict: + """Every property of a Finder window. + """ + return self.xa_elem.properties()
+ + + + +
[docs]class XAFinderFinderWindowList(XAFinderWindowList): + """A wrapper around lists of Finder internal windows (such as preference and information windows) that employs fast enumeration techniques. + + All properties of the windows can be called as methods on the wrapped list, returning a list containing each windows's value for the property. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAFinderFinderWindow) + + parent = self.xa_prnt + while not hasattr(parent, "xa_wcls"): + parent = parent.xa_prnt + self.xa_wcls = parent.xa_wcls + +
[docs] def current_view(self) -> list[XAFinderApplication.ViewSetting]: + return list(self.xa_elem.arrayByApplyingSelector_("currentView") or [])
+ +
[docs] def toolbar_visible(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("toolbarVisible") or [])
+ +
[docs] def statusbar_visible(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("statusbarVisible") or [])
+ +
[docs] def pathbar_visible(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("pathbarVisible") or [])
+ +
[docs] def sidebar_width(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("sidebarWidth") or [])
+ +
[docs] def target(self) -> XAFinderContainerList: + ls = self.xa_elem.arrayByApplyingSelector_("target") or [] + return self._new_element(ls, XAFinderContainerList)
+ +
[docs] def icon_view_options(self) -> list['XAFinderIconViewOptions']: + return list(self.xa_elem.arrayByApplyingSelector_("iconViewOptions") or [])
+ +
[docs] def list_view_options(self) -> list['XAFinderListViewOptions']: + return list(self.xa_elem.arrayByApplyingSelector_("listViewOptions") or [])
+ +
[docs] def column_view_options(self) -> list['XAFinderColumnViewOptions']: + return list(self.xa_elem.arrayByApplyingSelector_("columnViewOptions") or [])
+ +
[docs] def by_current_view(self, current_view: XAFinderApplication.ViewSetting) -> Union['XAFinderFinderWindow', None]: + return self.by_property("currentView", current_view)
+ +
[docs] def by_toolbar_visible(self, toolbar_visible: bool) -> Union['XAFinderFinderWindow', None]: + return self.by_property("toolbarVisible", toolbar_visible)
+ +
[docs] def by_statusbar_visible(self, statusbar_visible: bool) -> Union['XAFinderFinderWindow', None]: + return self.by_property("statusbarVisible", statusbar_visible)
+ +
[docs] def by_pathbar_visible(self, pathbar_visible: bool) -> Union['XAFinderFinderWindow', None]: + return self.by_property("pathbarVisible", pathbar_visible)
+ +
[docs] def by_sidebar_width(self, sidebar_width: int) -> Union['XAFinderFinderWindow', None]: + return self.by_property("sidebarWidth", sidebar_width)
+ +
[docs] def by_target(self, target: XAFinderContainer) -> Union['XAFinderFinderWindow', None]: + return self.by_property("target", target)
+ +
[docs] def by_icon_view_options(self, icon_view_options: 'XAFinderIconViewOptions') -> Union['XAFinderFinderWindow', None]: + return self.by_property("iconViewOptions", icon_view_options)
+ +
[docs] def by_list_view_options(self, list_view_options: 'XAFinderListViewOptions') -> Union['XAFinderFinderWindow', None]: + return self.by_property("listViewOptions", list_view_options)
+ +
[docs] def by_column_view_options(self, column_view_options: 'XAFinderColumnViewOptions') -> Union['XAFinderFinderWindow', None]: + return self.by_property("columnViewOptions", column_view_options)
+ +
[docs]class XAFinderFinderWindow(XAFinderWindow): + """A class for managing and interacting with internal windows within Finder.app. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def current_view(self) -> XAFinderApplication.ViewSetting: + """The current view for the container window. + """ + return self.xa_elem.currentView() + + @current_view.setter + def current_view(self, current_view: XAFinderApplication.ViewSetting): + self.set_property('currentView', current_view.value) + + @property + def toolbar_visible(self) -> bool: + """Whether the window's toolbar is visible. + """ + return self.xa_elem.toolbarVisible() + + @toolbar_visible.setter + def toolbar_visible(self, toolbar_visible: bool): + self.set_property('toolbarVisible', toolbar_visible) + + @property + def statusbar_visible(self) -> bool: + """Whether the window's status bar is visible. + """ + return self.xa_elem.statusbarVisible() + + @statusbar_visible.setter + def statusbar_visible(self, statusbar_visible: bool): + self.set_property('statusbarVisible', statusbar_visible) + + @property + def pathbar_visible(self) -> bool: + """Whether the window's path bar is visible. + """ + return self.xa_elem.pathbarVisible() + + @pathbar_visible.setter + def pathbar_visible(self, pathbar_visible: bool): + self.set_property('pathbarVisible', pathbar_visible) + + @property + def sidebar_width(self) -> int: + """The width of the sidebar in pixels. + """ + return self.xa_elem.sidebarWidth() + + @sidebar_width.setter + def sidebar_width(self, sidebar_width: int): + self.set_property('sidebarWidth', sidebar_width) + + @property + def target(self) -> XAFinderContainer: + """The container at which this file viewer is targeted. + """ + obj = self.xa_elem.target() + return self._new_element(obj, XAFinderContainer) + + @target.setter + def target(self, target: XAFinderContainer): + self.set_property('target', target.xa_elem) + + @property + def icon_view_options(self) -> 'XAFinderIconViewOptions': + """The icon view options for the container window. + """ + options_obj = self.xa_elem.iconViewOptions() + return self._new_element(options_obj, XAFinderIconViewOptions) + + @property + def list_view_options(self) -> 'XAFinderListViewOptions': + """The list view options for the container window. + """ + options_obj = self.xa_elem.listViewOptions() + return self._new_element(options_obj, XAFinderListViewOptions) + + @property + def column_view_options(self) -> 'XAFinderColumnViewOptions': + """The column view options for the container window. + """ + options_obj = self.xa_elem.columnViewOptions() + return self._new_element(options_obj, XAFinderColumnViewOptions)
+ + + + +
[docs]class XAFinderDesktop(XAFinderContainer): + """A class for managing and interacting with the Desktop. + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def window(self) -> 'XAFinderDesktopWindow': + """The desktop window. + """ + return self._new_element(self.xa_elem.window(), XAFinderDesktopWindow)
+ +
[docs]class XAFinderDesktopWindow(XAFinderWindow): + """A class representing the containing window around Finder's desktop element. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAFinderClippingWindowList(XAFinderWindowList): + """A wrapper around lists of clipping windows that employs fast enumeration techniques. + + All properties of clipping windows can be called as methods on the wrapped list, returning a list containing each window's value for the property. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAFinderClippingWindow)
+ +
[docs]class XAFinderClippingWindow(XAFinderWindow, XABaseScriptable.XASBPrintable): + """A class for managing and interacting with clipping windows in Finder. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAFinderPreferences(XAFinderItem, XABaseScriptable.XASBPrintable): + """A class for managing general preferences of Finder.app. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def folders_spring_open(self) -> bool: + """Whether folders spring open after a delay. + """ + return self.xa_elem.foldersSpringOpen() + + @property + def delay_before_springing(self) -> bool: + """The delay, in seconds, before springing open folders. + """ + return self.xa_elem.delayBeforeSpringing() + + @property + def desktop_shows_hard_disks(self) -> bool: + """Whether hard drives appear on the desktop. + """ + return self.xa_elem.desktopShowsHardDisks() + + @property + def desktop_shows_external_hard_disks(self) -> bool: + """Whether external hard disks appear on the desktop. + """ + return self.xa_elem.desktopShowsExternalHardDisks() + + @property + def desktop_shows_removable_media(self) -> bool: + """Whether CDs, DVDs, and iPods appear on the desktop. + """ + return self.xa_elem.desktopShowsRemovableMedia() + + @property + def desktop_shows_connected_servers(self) -> bool: + """Whether connected servers appear on the desktop. + """ + return self.xa_elem.desktopShowsConnectedServers() + + @property + def folders_open_in_new_windows(self) -> bool: + """Whether folders open into new windows. + """ + return self.xa_elem.foldersOpenInNewWindows() + + @property + def folders_open_in_new_tabs(self) -> bool: + """Whether folders open into new tabs. + """ + return self.xa_elem.foldersOpenInNewTabs() + + @property + def new_windows_open_in_column_view(self) -> bool: + """Whether new Finder windows open in column view. + """ + return self.xa_elem.newWindowsOpenInColumnView() + + @property + def all_name_extensions_showing(self) -> bool: + """Whether all name extensions are shown regardless of the "extension hidden" setting. + """ + return self.xa_elem.allNameExtensionsShowing() + + @property + def window(self) -> bool: + """The Finder preferences window. + """ + window_obj = self.xa_elem.window() + return self._new_element(window_obj, XAFinderPreferencesWindow) + + @property + def icon_view_options(self) -> 'XAFinderIconViewOptions': + """The default icon view options. + """ + options_obj = self.xa_elem.iconViewOptions() + return self._new_element(options_obj, XAFinderIconViewOptions) + + @property + def list_view_options(self) -> 'XAFinderListViewOptions': + """The default list view options. + """ + options_obj = self.xa_elem.listViewOptions() + return self._new_element(options_obj, XAFinderListViewOptions) + + @property + def column_view_options(self) -> 'XAFinderColumnViewOptions': + """The default column view options. + """ + options_obj = self.xa_elem.columnViewOptions() + return self._new_element(options_obj, XAFinderColumnViewOptions) + + @property + def new_window_target(self) -> XAFinderAliasFile: + """The target location for a newly opened Finder window. + """ + target_obj = self.xa_elem.newWindowTarget() + return self._new_element(target_obj, XAFinderAliasFile)
+ + + + +
[docs]class XAFinderPreferencesWindow(XAFinderWindow): + """A class for managing and interacting with preference windows in Finder.app. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def current_panel(self) -> XAFinderApplication.Panel: + """The current panel in the Finder preferences window. + """ + return self.xa_elem.currentPanel() + + @current_panel.setter + def current_panel(self, current_panel: XAFinderApplication.Panel): + self.set_property('currentPanel', current_panel.value)
+ + + + +
[docs]class XAFinderInformationWindowList(XAFinderWindowList): + """A wrapper around lists of info windows that employs fast enumeration techniques. + + All properties of info windows can be called as methods on the wrapped list, returning a list containing each window's value for the property. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAFinderInformationWindow) + +
[docs] def item(self) -> XAFinderItemList: + ls = self.xa_elem.arrayByApplyingSelector_("item") or [] + return self._new_element(ls, XAFinderItemList)
+ +
[docs] def current_panel(self) -> list[XAFinderApplication.Panel]: + return list(self.xa_elem.arrayByApplyingSelector_("currentPanel") or [])
+ +
[docs] def by_item(self, item: XAFinderItem) -> Union['XAFinderInformationWindow', None]: + return self.by_property("item", item)
+ +
[docs] def by_current_panel(self, current_panel: XAFinderApplication.Panel) -> Union['XAFinderInformationWindow', None]: + return self.by_property("currentPanel", current_panel)
+ +
[docs]class XAFinderInformationWindow(XAFinderWindow): + """A class for interacting with information windows in Finder.app. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def item(self) -> XAFinderItem: + """The item from which this window was opened. + """ + item_obj = self.xa_elem.item() + return self._new_element(item_obj, XAFinderItem) + + @property + def current_panel(self) -> XAFinderApplication.Panel: + """The current panel in the information window. + """ + return self.xa_elem.currentPanel() + + @current_panel.setter + def current_panel(self, current_panel: XAFinderApplication.Panel): + self.set_property('currentPanel', current_panel.value)
+ + + + +
[docs]class XAFinderIconViewOptions(XABase.XAObject): + """A class representing the icon view options of a Finder window. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def arrangement(self) -> XAFinderApplication.Arrangement: + """The arrangement setting of icons in icon view. + """ + return self.xa_elem.arrangement() + + @arrangement.setter + def arrangement(self, arrangement: XAFinderApplication.Arrangement): + self.set_property('arrangement', arrangement.value) + + @property + def icon_size(self) -> int: + """The size of icons in icon view. + """ + return self.xa_elem.iconSize() + + @icon_size.setter + def icon_size(self, icon_size: int): + self.set_property('iconSize', icon_size) + + @property + def shows_item_info(self) -> bool: + """Whether additional item information is shown in the window. + """ + return self.xa_elem.showsItemInfo() + + @shows_item_info.setter + def shows_item_info(self, shows_item_info: bool): + self.set_property('showsItemInfo', shows_item_info) + + @property + def shows_icon_preview(self) -> bool: + """Whether a preview of the icon is shown in the window. + """ + return self.xa_elem.showsIconPreview() + + @shows_icon_preview.setter + def shows_icon_preview(self, shows_icon_preview: bool): + self.set_property('showsIconPreview', shows_icon_preview) + + @property + def text_size(self) -> int: + """The size of text in icon view. + """ + return self.xa_elem.textSize() + + @text_size.setter + def text_size(self, text_size: int): + self.set_property('textSize', text_size) + + @property + def label_position(self) -> XAFinderApplication.LabelPosition: + """The position of a label around an icon in icon view. + """ + return self.xa_elem.labelPosition() + + @label_position.setter + def label_position(self, label_position: XAFinderApplication.LabelPosition): + self.set_property('labelPosition', label_position.value) + + @property + def background_picture(self) -> XAFinderFile: + """The background picture of the icon view. + """ + bg_obj = self.xa_elem.backgroundPicture() + return self._new_element(bg_obj, XAFinderFile) + + @background_picture.setter + def background_picture(self, background_picture: XAFinderFile): + self.set_property('backgroundPicture', background_picture.xa_elem) + + @property + def background_color(self) -> XABase.XAColor: + """The background color of the icon view. + """ + bg_obj = self.xa_elem.backgroundColor() + return self._new_element(bg_obj, XABase.XAColor) + + @background_color.setter + def background_color(self, background_color: XABase.XAColor): + self.set_property('backgroundColor', background_color.xa_elem)
+ + + + +
[docs]class XAFinderColumnViewOptions(XABase.XAObject): + """A class representing the column view options of a Finder window. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def text_size(self) -> int: + """The size of text in the column view. + """ + return self.xa_elem.textSize() + + @text_size.setter + def text_size(self, text_size: int): + self.set_property('textSize', text_size) + + @property + def shows_icon(self) -> bool: + """Whether icons are shown in the column view. + """ + return self.xa_elem.showsIcon() + + @shows_icon.setter + def shows_icon(self, shows_icon: bool): + self.set_property('showsIcon', shows_icon) + + @property + def shows_icon_preview(self) -> bool: + """Whether icon previews are shown in the column view. + """ + return self.xa_elem.showsIconPreview() + + @shows_icon_preview.setter + def shows_icon_preview(self, shows_icon_preview: bool): + self.set_property('showsIconPreview', shows_icon_preview) + + @property + def shows_preview_column(self) -> bool: + """Whether the preview column is shown in the column view. + """ + return self.xa_elem.showsPreviewColumn() + + @shows_preview_column.setter + def shows_preview_column(self, shows_preview_column: bool): + self.set_property('showsPreviewColumn', shows_preview_column) + + @property + def discloses_preview_pane(self) -> bool: + """Whether the preview pane is disclosed in the column view. + """ + return self.xa_elem.disclosesPreviewPane() + + @discloses_preview_pane.setter + def discloses_preview_pane(self, discloses_preview_pane: bool): + self.set_property('disclosesPreviewPane', discloses_preview_pane)
+ + + + +
[docs]class XAFinderListViewOptions(XABase.XAObject): + """A class representing the list view options in a Finder window. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def calculates_folder_sizes(self) -> bool: + """Whether folder sizes are calculated and displayed in the window. + """ + return self.xa_elem.calculatesFolderSizes() + + @calculates_folder_sizes.setter + def calculates_folder_sizes(self, calculates_folder_sizes: bool): + self.set_property('calculatesFolderSizes', calculates_folder_sizes) + + @property + def shows_icon_preview(self) -> bool: + """Whether a preview of the item is shown in the window. + """ + return self.xa_elem.showsIconPreview() + + @shows_icon_preview.setter + def shows_icon_preview(self, shows_icon_preview: bool): + self.set_property('showsIconPreview', shows_icon_preview) + + @property + def icon_size(self) -> XAFinderApplication.IconSize: + """The size of icons in the window. + """ + return self.xa_elem.iconSize() + + @icon_size.setter + def icon_size(self, icon_size: XAFinderApplication.IconSize): + self.set_property('iconSize', icon_size.value) + + @property + def text_size(self) -> int: + """The size of text in the window. + """ + return self.xa_elem.textSize() + + @text_size.setter + def text_size(self, text_size: int): + self.set_property('textSize', text_size) + + @property + def uses_relative_dates(self) -> bool: + """Whether relative dates are shown in the window. + """ + return self.xa_elem.usesRelativeDates() + + @uses_relative_dates.setter + def uses_relative_dates(self, uses_relative_dates: bool): + self.set_property('usesRelativeDates', uses_relative_dates) + + @property + def sort_column(self) -> 'XAFinderColumn': + """The column that the list view is sorted on. + """ + column_obj = self.xa_elem.sortColumn() + return self._new_element(column_obj, XAFinderColumn) + + @sort_column.setter + def sort_column(self, sort_column: 'XAFinderColumn'): + self.set_property('sortColumn', sort_column.xa_elem) + +
[docs] def columns(self, filter: dict = None) -> 'XAFinderColumnList': + """Returns a list of columns matching the filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_elem.columns(), XAFinderColumnList, filter)
+ + + + +
[docs]class XAFinderColumnList(XABase.XAList): + """A wrapper around lists of Finder columns that employs fast enumeration techniques. + + All properties of Finder columns can be called as methods on the wrapped list, returning a list containing each columns's value for the property. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAFinderColumn, filter) + +
[docs] def index(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("index") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def sort_direction(self) -> list[XAFinderApplication.SortDirection]: + return list(self.xa_elem.arrayByApplyingSelector_("sortDirection") or [])
+ +
[docs] def width(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("width") or [])
+ +
[docs] def minimum_width(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("minimum_width") or [])
+ +
[docs] def maximum_width(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("maximum_width") or [])
+ +
[docs] def visible(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("visible") or [])
+ +
[docs] def by_index(self, index: int) -> Union['XAFinderColumn', None]: + return self.by_property("index", index)
+ +
[docs] def by_name(self, name: str) -> Union['XAFinderColumn', None]: + return self.by_property("name", name)
+ +
[docs] def by_sort_direction(self, sort_direction: XAFinderApplication.SortDirection) -> Union['XAFinderColumn', None]: + return self.by_property("sortDirection", sort_direction.value)
+ +
[docs] def by_width(self, width: int) -> Union['XAFinderColumn', None]: + return self.by_property("width", width)
+ +
[docs] def by_minimum_width(self, minimum_width: int) -> Union['XAFinderColumn', None]: + return self.by_property("minimumWidth", minimum_width)
+ +
[docs] def by_maximum_width(self, maximum_width: int) -> Union['XAFinderColumn', None]: + return self.by_property("maximumWidth", maximum_width)
+ +
[docs] def by_visible(self, visible: bool) -> Union['XAFinderColumn', None]: + return self.by_property("visible", visible)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAFinderColumn(XABase.XAObject): + """A class for managing and interacting with columns in Finder windows. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def index(self) -> int: + """The index of the column in the front-to-back ordering within the containing window. + """ + return self.xa_elem.index() + + @index.setter + def index(self, index: int): + self.set_property('index', index) + + @property + def name(self) -> XAFinderApplication.ColumnName: + """The column name. + """ + return self.xa_elem.name() + + @property + def sort_direction(self) -> XAFinderApplication.SortDirection: + """The direction which the window is sorted. + """ + return self.xa_elem.sortDirection() + + @sort_direction.setter + def sort_direction(self, sort_direction: XAFinderApplication.SortDirection): + self.set_property('sortDirection', sort_direction.value) + + @property + def width(self) -> int: + """The current width of the column in pixels. + """ + return self.xa_elem.width() + + @width.setter + def width(self, width: int): + self.set_property('width', width) + + @property + def minimum_width(self) -> int: + """The minimum width allowed for the column in pixels. + """ + return self.xa_elem.minimumWidth() + + @property + def maximum_width(self) -> int: + """The maximum width allowed for the column in pixels. + """ + return self.xa_elem.maximumWidth() + + @property + def visible(self) -> bool: + """Whether the column is visible. + """ + return self.xa_elem.visible() + + @visible.setter + def visible(self, visible: bool): + self.set_property('visible', visible) + + def __repr__(self): + return "<" + str(type(self)) + self.name + ">"
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Flow.html b/docs/_modules/PyXA/apps/Flow.html new file mode 100644 index 0000000..821c22e --- /dev/null +++ b/docs/_modules/PyXA/apps/Flow.html @@ -0,0 +1,209 @@ + + + + + + PyXA.apps.Flow — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Flow

+""".. versionadded:: 0.1.0
+
+Control Flow using JXA-like syntax.
+"""
+
+from datetime import timedelta
+
+from PyXA import XABaseScriptable
+
+
[docs]class XAFlowApplication(XABaseScriptable.XASBApplication): + """A class for managing and interacting with Flow.app. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + +
[docs] def start(self) -> str: + """Starts or resumes the current session. + + :return: The name of the current session + :rtype: str + + .. versionadded:: 0.1.0 + """ + return self.xa_scel.start()
+ +
[docs] def stop(self) -> str: + """Stops the current session. + + :return: The name of the stopped session + :rtype: str + + .. versionadded:: 0.1.0 + """ + return self.xa_scel.stop()
+ +
[docs] def skip(self) -> str: + """Skips the current session. + + :return: The name of the next pending session. + :rtype: str + + .. versionadded:: 0.1.0 + """ + return self.xa_scel.skip()
+ +
[docs] def previous(self) -> str: + """Reloads the current or previous session. + + :return: The name of the next pending session + :rtype: str + + .. versionadded:: 0.1.0 + """ + return self.xa_scel.previous()
+ +
[docs] def reset(self) -> str: + """Resets the session progress. + + :return: The name of the next pending session + :rtype: str + + .. versionadded:: 0.1.0 + """ + return self.xa_scel.reset()
+ +
[docs] def show(self) -> str: + """Shows the Flow app window. + + :return: The name of the current session + :rtype: str + + .. versionadded:: 0.1.0 + """ + return self.xa_scel.show()
+ +
[docs] def hide(self) -> str: + """Hides the Flow app window. + + :return: The name of the current session + :rtype: str + + .. versionadded:: 0.1.0 + """ + return self.xa_scel.hide()
+ +
[docs] def get_phase(self) -> str: + """Gets the current phase (e.g. Flow or Break) + + :return: The name of the current session + :rtype: str + + .. versionadded:: 0.1.0 + """ + return self.xa_scel.getPhase()
+ +
[docs] def get_time(self) -> timedelta: + """Gets the remaining time of the current session. + + :return: The remaining time of the current session + :rtype: timedelta + + .. versionadded:: 0.1.0 + """ + time_strs = self.xa_scel.getTime().split(":") + return timedelta(minutes=int(time_strs[0]), seconds=int(time_strs[1]))
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/FontBook.html b/docs/_modules/PyXA/apps/FontBook.html new file mode 100644 index 0000000..1c845fd --- /dev/null +++ b/docs/_modules/PyXA/apps/FontBook.html @@ -0,0 +1,1109 @@ + + + + + + PyXA.apps.FontBook — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.FontBook

+""".. versionadded:: 0.0.6
+
+Control the macOS FontBook application using JXA-like syntax.
+"""
+
+from typing import Union
+
+import AppKit
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+from ..XAProtocols import XAClipboardCodable
+
+
[docs]class XAFontBookApplication(XABaseScriptable.XASBApplication): + """A class for managing and interacting with Font Book.app. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XAFontBookWindow + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def version(self) -> str: + """The version of the Font Book application. + """ + return self.xa_scel.version() + + @property + def validate_fonts_before_installing(self) -> bool: + """Whether to validate fonts before installing them. + """ + return self.xa_scel.validateFontsBeforeInstalling() + + @validate_fonts_before_installing.setter + def validate_fonts_before_installing(self, validate_fonts_before_installing: bool): + self.set_property('validateFontsBeforeInstalling', validate_fonts_before_installing) + + @property + def installation_target(self) -> 'XAFontBookFontLibrary': + """The library where new fonts are installed. + """ + return self._new_element(self.xa_scel.installationTarget(), XAFontBookFontLibrary) + + @installation_target.setter + def installation_target(self, installation_target: 'XAFontBookFontLibrary'): + self.set_property('installationTarget', installation_target.xa_elem) + + @property + def fonts_library(self) -> 'XAFontBookFontBookAllFontsLibraryObject': + """The All Fonts library. + """ + return self._new_element(self.xa_scel.fontsLibrary(), XAFontBookFontBookAllFontsLibraryObject) + + @property + def selection(self) -> 'XAFontBookTypefaceList': + """The currently selected typefaces. + """ + ls = self.xa_scel.selection() + return self._new_element(ls, XAFontBookTypefaceList) + + @selection.setter + def selection(self, selection: Union['XAFontBookTypefaceList', list['XAFontBookTypeface']]): + if isinstance(selection, list): + selection = [x.xa_elem for x in selection] + self.set_property('selection', selection) + else: + self.set_property('selection', selection.xa_elem) + + @property + def selected_font_families(self) -> 'XAFontBookFontFamilyList': + """The currently selected font families. + """ + ls = self.xa_scel.selectedFontFamilies() + return self._new_element(ls, XAFontBookFontFamilyList) + + @selected_font_families.setter + def selected_font_families(self, selected_font_families: Union['XAFontBookFontFamilyList', list['XAFontBookFontFamily']]): + if isinstance(selected_font_families, list): + selected_font_families = [x.xa_elem for x in selected_font_families] + self.set_property('selectedFontFamilies', selected_font_families) + else: + self.set_property('selectedFontFamilies', selected_font_families.xa_elem) + + @property + def selected_collections(self) -> 'XAFontBookFontCollectionList': + """The currently selected collections. + """ + ls = self.xa_scel.selectedCollections() + return self._new_element(ls, XAFontBookFontCollectionList) + + @selected_collections.setter + def selected_collections(self, selected_collections: Union['XAFontBookFontCollectionList', list['XAFontBookFontCollection']]): + if isinstance(selected_collections, list): + selected_collections = [x.xa_elem for x in selected_collections] + self.set_property('selectedCollections', selected_collections) + else: + self.set_property('selectedCollections', selected_collections.xa_elem) + +
[docs] def documents(self, filter: dict = None) -> 'XAFontBookDocumentList': + """Returns a list of documents matching the filter. + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_scel.documents(), XAFontBookDocumentList, filter)
+ +
[docs] def font_families(self, filter: dict = None) -> 'XAFontBookFontFamilyList': + """Returns a list of font families matching the filter. + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_scel.fontFamilies(), XAFontBookFontFamilyList, filter)
+ +
[docs] def typefaces(self, filter: dict = None) -> 'XAFontBookTypefaceList': + """Returns a list of typefaces matching the filter. + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_scel.typefaces(), XAFontBookTypefaceList, filter)
+ +
[docs] def font_collections(self, filter: dict = None) -> 'XAFontBookFontCollectionList': + """Returns a list of font collections matching the filter. + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_scel.fontCollections(), XAFontBookFontCollectionList, filter)
+ +
[docs] def font_domains(self, filter: dict = None) -> 'XAFontBookFontDomainList': + """Returns a list of font domains matching the filter. + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_scel.fontDomains(), XAFontBookFontDomainList, filter)
+ +
[docs] def font_libraries(self, filter: dict = None) -> 'XAFontBookFontLibraryList': + """Returns a list of font libraries matching the filter. + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_scel.fontLibraries(), XAFontBookFontLibraryList, filter)
+ +
[docs] def font_containers(self, filter: dict = None) -> 'XAFontBookFontContainerList': + """Returns a list of font containers matching the filter. + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_scel.fontContainers(), XAFontBookFontContainerList, filter)
+ + + + +
[docs]class XAFontBookWindow(XABaseScriptable.XASBWindow): + """A class for managing and interacting with documents in Font Book.app. + + .. seealso:: :class:`XAFontBookApplication` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def titled(self) -> bool: + """Whether the window has a title bar. + """ + return self.xa_elem.titled() + + @property + def floating(self) -> bool: + """Whether the window floats. + """ + return self.xa_elem.floating() + + @property + def modal(self) -> bool: + """Whether the window is a modal window. + """ + return self.xa_elem.modal()
+ + + + +
[docs]class XAFontBookDocumentList(XABase.XAList): + """A wrapper around lists of Font Book documents that employs fast enumeration techniques. + + All properties of documents can be called as methods on the wrapped list, returning a list containing each document's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAFontBookDocument, filter) + +
[docs] def path(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("path") or [])
+ +
[docs] def modified(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("modified") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def by_path(self, path: str) -> 'XAFontBookDocument': + return self.by_property("path", path)
+ +
[docs] def by_modified(self, modified: bool) -> 'XAFontBookDocument': + return self.by_property("modified", modified)
+ +
[docs] def by_name(self, name: str) -> 'XAFontBookDocument': + return self.by_property("name", name)
+ +
[docs]class XAFontBookDocument(XABase.XAObject): + """A class for managing and interacting with documents in Font Book.app. + + .. seealso:: :class:`XAFontBookApplication` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def path(self) -> XABase.XAPath: + """The file path of the document. + """ + return XABase.XAPath(self.xa_elem.path()) + + @path.setter + def path(self, path: XABase.XAPath): + self.set_property('path', path.path) + + @property + def modified(self) -> bool: + """Whether the document has been modified since its last save. + """ + return self.xa_elem.modified() + + @property + def name(self) -> str: + """The name of the document. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name)
+ + + + +
[docs]class XAFontBookFontFamilyList(XABase.XAList, XAClipboardCodable): + """A wrapper around lists of Font Book font families that employs fast enumeration techniques. + + All properties of font families can be called as methods on the wrapped list, returning a list containing each font family's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAFontBookFontFamily, filter) + +
[docs] def properties(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("properties") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def display_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("displayName") or [])
+ +
[docs] def displayed_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("displayedName") or [])
+ +
[docs] def enabled(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("enabled") or [])
+ +
[docs] def duplicated(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("duplicated") or [])
+ +
[docs] def files(self) -> list[list[XABase.XAPath]]: + ls = self.xa_elem.arrayByApplyingSelector_("files") or [] + return [XABase.XAURL(x) for x in [y for y in ls]]
+ +
[docs] def by_properties(self, properties: dict) -> 'XAFontBookFontFamily': + return self.by_property("properties", properties)
+ +
[docs] def by_name(self, name: str) -> 'XAFontBookFontFamily': + return self.by_property("name", name)
+ +
[docs] def by_display_name(self, display_name: str) -> 'XAFontBookFontFamily': + return self.by_property("displayName", display_name)
+ +
[docs] def by_displayed_name(self, displayed_name: str) -> 'XAFontBookFontFamily': + return self.by_property("displayedName", displayed_name)
+ +
[docs] def by_enabled(self, enabled: bool) -> 'XAFontBookFontFamily': + return self.by_property("enabled", enabled)
+ +
[docs] def by_duplicates(self, duplicated: bool) -> 'XAFontBookFontFamily': + return self.by_property("duplicated", duplicated)
+ +
[docs] def by_files(self, files: list[XABase.XAPath]) -> 'XAFontBookFontFamily': + return files == self.files()
+ +
[docs] def get_clipboard_representation(self) -> list[str]: + """Gets a clipboard-codable representation of each font family in the list. + + When the clipboard content is set to a list of font families, the name of each font family is added to the clipboard. + + :return: The list of font family names + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + return self.name()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAFontBookFontFamily(XABase.XAObject, XAClipboardCodable): + """A class for managing and interacting with font families in Font Book.app. + + .. seealso:: :class:`XAFontBookApplication` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the font family. + """ + return self.xa_elem.properties() + + @property + def name(self) -> str: + """The name of the font family. + """ + return self.xa_elem.name() + + @property + def display_name(self) -> str: + """The display name of the font family. + """ + return self.xa_elem.displayName() + + @property + def displayed_name(self) -> str: + """The display name of the font family. + """ + return self.xa_elem.displayedName() + + @property + def enabled(self) -> bool: + """Whether the font family is enabled. + """ + return self.xa_elem.enabled() + + @enabled.setter + def enabled(self, enabled: bool): + self.set_property('enabled', enabled) + + @property + def duplicated(self) -> bool: + """Whether teh font family contains duplicated faces. + """ + return self.xa_elem.duplicated() + + @property + def files(self) -> list[XABase.XAPath]: + """The font files of the font family. + """ + ls = self.xa_elem.files() + return [XABase.XAPath(x) for x in ls] + +
[docs] def delete(self): + """Permanently deletes the typeface. + + .. versionadded:: 0.0.6 + """ + self.xa_elem.delete()
+ +
[docs] def typefaces(self, filter: dict = None) -> 'XAFontBookTypefaceList': + """Returns a list of typefaces matching the filter. + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.typefaces(), XAFontBookTypefaceList, filter)
+ +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of the font family. + + When the clipboard content is set to a font family, the name of the font family is added to the clipboard. + + :return: The name of the font family + :rtype: str + + .. versionadded:: 0.0.8 + """ + return self.name
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAFontBookTypefaceList(XABase.XAList, XAClipboardCodable): + """A wrapper around lists of Font Book documents that employs fast enumeration techniques. + + All properties of documents can be called as methods on the wrapped list, returning a list containing each document's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAFontBookTypeface, filter) + +
[docs] def properties(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("properties") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def display_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("displayName") or [])
+ +
[docs] def displayed_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("displayedName") or [])
+ +
[docs] def font_family(self) -> XAFontBookFontFamilyList: + ls = self.xa_elem.arrayByApplyingSelector_("fontFamily") or [] + return self._new_element(ls, XAFontBookFontFamilyList)
+ +
[docs] def family_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("familyName") or [])
+ +
[docs] def style_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("styleName") or [])
+ +
[docs] def post_script_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("postScriptName") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def enabled(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("enabled") or [])
+ +
[docs] def duplicated(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("duplicated") or [])
+ +
[docs] def font_type(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("fontType") or [])
+ +
[docs] def copyright(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("copyright") or [])
+ +
[docs] def font_container(self) -> 'XAFontBookFontContainerList': + ls = self.xa_elem.arrayByApplyingSelector_("fontContainer") or [] + return self._new_element(ls, XAFontBookFontContainerList)
+ +
[docs] def files(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("files") or [] + return [XABase.XAPath(x) for y in ls for x in y]
+ +
[docs] def by_properties(self, properties: dict) -> 'XAFontBookTypeface': + return self.by_property("properties", properties)
+ +
[docs] def by_name(self, name: str) -> 'XAFontBookTypeface': + return self.by_property("name", name)
+ +
[docs] def by_display_name(self, display_name: str) -> 'XAFontBookTypeface': + return self.by_property("displayName", display_name)
+ +
[docs] def by_displayed_name(self, displayed_name: str) -> 'XAFontBookTypeface': + return self.by_property("displayedName", displayed_name)
+ +
[docs] def by_font_family(self, font_family: XAFontBookFontFamily) -> 'XAFontBookTypeface': + return self.by_property("fontFamily", font_family.xa_elem)
+ +
[docs] def by_family_name(self, family_name: str) -> 'XAFontBookTypeface': + return self.by_property("familyName", family_name)
+ +
[docs] def by_style_name(self, style_name: str) -> 'XAFontBookTypeface': + return self.by_property("styleName", style_name)
+ +
[docs] def by_post_script_name(self, post_script_name: str) -> 'XAFontBookTypeface': + return self.by_property("postScriptName", post_script_name)
+ +
[docs] def by_id(self, id: str) -> 'XAFontBookTypeface': + return self.by_property("id", id)
+ +
[docs] def by_enabled(self, enabled: bool) -> 'XAFontBookTypeface': + return self.by_property("enabled", enabled)
+ +
[docs] def by_duplicated(self, duplicated: bool) -> 'XAFontBookTypeface': + return self.by_property("duplicated", duplicated)
+ +
[docs] def by_font_type(self, font_type: str) -> 'XAFontBookTypeface': + return self.by_property("fontType", font_type)
+ + + +
[docs] def by_font_container(self, font_container: 'XAFontBookFontContainer') -> 'XAFontBookTypeface': + return self.by_property("fontContainer", font_container.xa_elem)
+ +
[docs] def by_files(self, files: list[XABase.XAPath]) -> 'XAFontBookTypeface': + for typeface in self: + if typeface.files == files: + return typeface
+ +
[docs] def get_clipboard_representation(self) -> list[str]: + """Gets a clipboard-codable representation of each typeface in the list. + + When the clipboard content is set to a list of typefaces, the name of each typeface is added to the clipboard. + + :return: The list of typeface names + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + return self.name()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAFontBookTypeface(XABase.XAObject, XAClipboardCodable): + """A class for managing and interacting with typefaces in Font Book.app. + + .. seealso:: :class:`XAFontBookApplication` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the typeface. + """ + return self.xa_elem.properties() + + @property + def name(self) -> str: + """The name of the typeface. + """ + return self.xa_elem.name() + + @property + def display_name(self) -> str: + """The display name of the typeface. + """ + return self.xa_elem.displayName() + + @property + def displayed_name(self) -> str: + """The display name of the typeface. + """ + return self.xa_elem.displayedName() + + @property + def font_family(self) -> XAFontBookFontFamily: + """The font family that contains the typeface. + """ + return self._new_element(self.xa_elem.fontFamily(), XAFontBookFontFamily) + + @property + def family_name(self) -> str: + """The name of the typeface's font family. + """ + return self.xa_elem.familyName() + + @property + def style_name(self) -> str: + """The name of the typeface's style. + """ + return self.xa_elem.styleName() + + @property + def post_script_name(self) -> str: + """The PostScript font name. + """ + return self.xa_elem.PostScriptName() + + @property + def id(self) -> str: + """The unique identifier for the typeface. + """ + return self.xa_elem.ID() + + @property + def enabled(self) -> bool: + """Whether the typeface is enabled. + """ + return self.xa_elem.enabled() + + @enabled.setter + def enabled(self, enabled: bool): + self.set_property('enabled', enabled) + + @property + def duplicated(self) -> bool: + """Whether the typeface is duplicated. + """ + return self.xa_elem.duplicated() + + @property + def font_type(self) -> str: + """The type of the typeface. + """ + return self.xa_elem.fontType() + + @property + def copyright(self) -> str: + """The copyright string for the typeface. + """ + return self.xa_elem.copyright() + + @property + def font_container(self) -> 'XAFontBookFontContainer': + """The container of the typeface. + """ + return self._new_element(self.xa_elem.fontContainer(), XAFontBookFontContainer) + + @property + def files(self) -> list[XABase.XAPath]: + """The font files for the typeface. + """ + ls = self.xa_elem.files() + return [XABase.XAPath(x) for x in ls] + +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of the typeface. + + When the clipboard content is set to a typeface, the name of the typeface is added to the clipboard. + + :return: The name of the typeface + :rtype: str + + .. versionadded:: 0.0.8 + """ + return self.name
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAFontBookFontContainerList(XABase.XAList, XAClipboardCodable): + """A wrapper around lists of Font Book font containers that employs fast enumeration techniques. + + All properties of font containers can be called as methods on the wrapped list, returning a list containing each container's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAFontBookFontContainer, filter) + +
[docs] def properties(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("properties") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def path(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("path") or [])
+ +
[docs] def files(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("files") or [] + return [XABase.XAPath(x) for y in ls for x in y]
+ +
[docs] def domain(self) -> 'XAFontBookFontDomainList': + ls = self.xa_elem.arrayByApplyingSelector_("domain") or [] + return self._new_element(ls, XAFontBookFontDomainList)
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def by_properties(self, properties: dict) -> 'XAFontBookFontContainer': + return self.by_property("properties", properties)
+ +
[docs] def by_name(self, name: str) -> 'XAFontBookFontContainer': + return self.by_property("name", name)
+ +
[docs] def by_path(self, path: str) -> 'XAFontBookFontContainer': + return self.by_property("path", path)
+ +
[docs] def by_files(self, files: list[XABase.XAPath]) -> 'XAFontBookFontContainer': + return files == self.files()
+ +
[docs] def by_domain(self, domain: 'XAFontBookFontDomain') -> 'XAFontBookFontContainer': + return self.by_property("domain", domain.xa_elem)
+ +
[docs] def by_id(self, id: str) -> 'XAFontBookFontContainer': + return self.by_property("id", id)
+ +
[docs] def get_clipboard_representation(self) -> list[str]: + """Gets a clipboard-codable representation of each container in the list. + + When the clipboard content is set to a list of containers, the name of each container is added to the clipboard. + + :return: The list of container names + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + return self.name()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAFontBookFontContainer(XABase.XAObject, XAClipboardCodable): + """A class for managing and interacting with font containers in Font Book.app. + + .. seealso:: :class:`XAFontBookApplication` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the container. + """ + return self.xa_elem.properties() + + @property + def name(self) -> str: + """The name of the container. + """ + return self.xa_elem.name() + + @property + def path(self) -> str: + """The path to the main container. + """ + return self.xa_elem.path() + + @property + def files(self) -> list[XABase.XAPath]: + """The files for the container. + """ + ls = self.xa_elem.files() + return [XABase.XAPath(x) for x in ls] + + @property + def domain(self) -> 'XAFontBookFontDomain': + """The font domain for the container. + """ + return self._new_element(self.xa_elem.domain(), XAFontBookFontDomain) + + @property + def id(self) -> str: + """The unique identifier of the container. + """ + return self.xa_elem.ID() + +
[docs] def font_families(self, filter: dict = None) -> 'XAFontBookFontFamilyList': + """Returns a list of font families matching the filter. + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.fontFamilies(), XAFontBookFontFamilyList, filter)
+ +
[docs] def typefaces(self, filter: dict = None) -> 'XAFontBookTypefaceList': + """Returns a list of typefaces matching the filter. + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.typefaces(), XAFontBookTypefaceList, filter)
+ +
[docs] def font_domains(self, filter: dict = None) -> 'XAFontBookFontDomainList': + """Returns a list of font domains matching the filter. + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.fontDomains(), XAFontBookFontDomainList, filter)
+ +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of the container. + + When the clipboard content is set to a container, the name of the container is added to the clipboard. + + :return: The name of the container + :rtype: str + + .. versionadded:: 0.0.8 + """ + return self.name
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAFontBookFontCollectionList(XABase.XAList, XAClipboardCodable): + """A wrapper around lists of Font Book font containers that employs fast enumeration techniques. + + All properties of font containers can be called as methods on the wrapped list, returning a list containing each container's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAFontBookFontCollection + super().__init__(properties, obj_class, filter) + +
[docs] def properties(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("properties") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def display_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("displayName") or [])
+ +
[docs] def displayed_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("displayedName") or [])
+ +
[docs] def enabled(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("enabled") or [])
+ +
[docs] def by_properties(self, properties: dict) -> 'XAFontBookFontCollection': + return self.by_property("properties", properties)
+ +
[docs] def by_name(self, name: str) -> 'XAFontBookFontCollection': + return self.by_property("name", name)
+ +
[docs] def by_display_name(self, display_name: str) -> 'XAFontBookFontCollection': + return self.by_property("displayName", display_name)
+ +
[docs] def by_displayed_name(self, displayed_name: str) -> 'XAFontBookFontCollection': + return self.by_property("displayedName", displayed_name)
+ +
[docs] def by_enabled(self, enabled: bool) -> 'XAFontBookFontCollection': + return self.by_property("enabled", enabled)
+ +
[docs] def get_clipboard_representation(self) -> list[str]: + """Gets a clipboard-codable representation of each collection in the list. + + When the clipboard content is set to a list of collections, the name of each collection is added to the clipboard. + + :return: The list of collection names + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + return self.name()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAFontBookFontCollection(XABase.XAObject, XAClipboardCodable): + """A class for managing and interacting with font collections in Font Book.app. + + .. seealso:: :class:`XAFontBookApplication` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the collection. + """ + return self.xa_elem.properties() + + @property + def name(self) -> str: + """The name of the collection. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def display_name(self) -> str: + """The display name of the collection. + """ + return self.xa_elem.displayName() + + @property + def displayed_name(self) -> str: + """The display name of the collection. + """ + return self.xa_elem.displayedName() + + @property + def enabled(self) -> bool: + """Whether the collection is enabled. + """ + return self.xa_elem.enabled() + + @enabled.setter + def enabled(self, enabled: bool): + self.set_property('enabled', enabled) + +
[docs] def font_families(self, filter: dict = None) -> 'XAFontBookFontFamilyList': + """Returns a list of font families matching the filter. + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.fontFamilies(), XAFontBookFontFamilyList, filter)
+ +
[docs] def typefaces(self, filter: dict = None) -> 'XAFontBookTypefaceList': + """Returns a list of typefaces matching the filter. + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.typefaces(), XAFontBookTypefaceList, filter)
+ +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of the collection. + + When the clipboard content is set to a collection, the name of the collection is added to the clipboard. + + :return: The name of the collection + :rtype: str + + .. versionadded:: 0.0.8 + """ + return self.name
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAFontBookFontLibraryList(XAFontBookFontCollectionList): + """A wrapper around lists of Font Book font libraries that employs fast enumeration techniques. + + All properties of font libraries can be called as methods on the wrapped list, returning a list containing each library's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAFontBookFontLibrary)
+ +
[docs]class XAFontBookFontLibrary(XAFontBookFontCollection): + """A class for managing and interacting with font libraries in Font Book.app. + + .. seealso:: :class:`XAFontBookApplication` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """The unique identifier of the domain. + """ + return self.xa_elem.ID() + +
[docs] def font_containers(self, filter: dict = None) -> 'XAFontBookFontContainerList': + """Returns a list of font containers matching the filter. + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.fontContainers(), XAFontBookFontContainerList, filter)
+ + +
[docs]class XAFontBookFontDomainList(XAFontBookFontLibraryList): + """A wrapper around lists of Font Book font domains that employs fast enumeration techniques. + + All properties of font domains can be called as methods on the wrapped list, returning a list containing each domain's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAFontBookFontDomain)
+ +
[docs]class XAFontBookFontDomain(XAFontBookFontLibrary): + """A class for managing and interacting with font domains in Font Book.app. + + .. seealso:: :class:`XAFontBookApplication` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAFontBookFontBookAllFontsLibraryObject(XAFontBookFontDomain): + """A class for managing and interacting with the all fonts library object in Font Book.app. + + .. seealso:: :class:`XAFontBookApplication` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Hammerspoon.html b/docs/_modules/PyXA/apps/Hammerspoon.html new file mode 100644 index 0000000..b8ceed0 --- /dev/null +++ b/docs/_modules/PyXA/apps/Hammerspoon.html @@ -0,0 +1,166 @@ + + + + + + PyXA.apps.Hammerspoon — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Hammerspoon

+""".. versionadded:: 0.0.8
+
+Control Hammerspoon using JXA-like syntax.
+"""
+
+from typing import Any
+
+from PyXA import XABaseScriptable
+
+
[docs]class XAHammerspoonApplication(XABaseScriptable.XASBApplication): + """A class for managing and interacting with Hammerspoon.app. + + .. versionadded:: 0.0.8 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether Hammerspoon is the active application. + """ + return self.xa_scel.frontmost() + + @frontmost.setter + def frontmost(self, frontmost: bool): + self.set_property("frontmost", frontmost) + + @property + def version(self) -> str: + """The version of Hammerspoon.app. + """ + return self.xa_scel.version() + +
[docs] def execute_lua_code(self, code: str) -> Any: + """Executes Lua code via Hammerspoon, with support for all Hammerspoon features. + + :param code: The Lua code to execute + :type code: str + :return: The Lua code execution result + :rtype: Any + + .. note:: + + In order for this to work, you must add `hs.allowAppleScript(true)` to your Hammerspoon config. + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("hammerspoon") + >>> app.execute_lua_code(\"\"\" + >>> app = hs.appfinder.appFromName("Finder") + >>> app:activate() + >>> app:selectMenuItem({"Window", "Bring All to Front"}) + >>> \"\"\") + + .. versionadded:: 0.0.8 + """ + return self.xa_scel.executeLuaCode_(code)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/ImageEvents.html b/docs/_modules/PyXA/apps/ImageEvents.html new file mode 100644 index 0000000..050ef35 --- /dev/null +++ b/docs/_modules/PyXA/apps/ImageEvents.html @@ -0,0 +1,1480 @@ + + + + + + PyXA.apps.ImageEvents — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.ImageEvents

+from datetime import datetime
+from enum import Enum
+from typing import Union, Dict
+from threading import Timer
+
+import AppKit
+import ScriptingBridge
+
+from PyXA import XABase
+from PyXA.XABase import OSType
+from PyXA import XABaseScriptable
+from ..XAEvents import event_from_int, event_from_str
+from ..XAProtocols import XACanOpenPath, XAClipboardCodable, XAImageLike
+
+
[docs]class XAImageEventsApplication(XABase.XAEventsApplication, XABaseScriptable.XASBApplication, XACanOpenPath): + """A class for interacting with Image Events.app. + + .. versionadded:: 0.1.0 + """ +
[docs] class BitDepth(Enum): + """Bit depth options. + """ + BEST = XABase.OSType("best") + BLACK_AND_WHITE = XABase.OSType("b&amp;w ") + COLOR = XABase.OSType("colr") + FOUR_COLORS = XABase.OSType("4clr") + FOUR_GRAYS = XABase.OSType("4gry") + GRAYSCALE = XABase.OSType("gray") + MILLIONS_OF_COLORS = XABase.OSType("mill") + MILLIONS_OF_COLORS_PLUS = XABase.OSType("mil+") + SIXTEEN_COLORS = XABase.OSType("16cl") + SIXTEEN_GRAYS = XABase.OSType("16gr") + THOUSANDS_OF_COLORS = XABase.OSType("thou") + TWO_HUNDRED_FIFTY_SIX_COLORS = XABase.OSType("256c") + TWO_HUNDRED_FIFTY_SIX_GRAYS = XABase.OSType("256g")
+ +
[docs] class DeviceClass(Enum): + """Profile device class options. + """ + ABSTRACT = XABase.OSType("abst") + COLORSPACE = XABase.OSType("spac") + INPUT = XABase.OSType("scnr") + LINK = XABase.OSType("link") + MONITOR = XABase.OSType("mntr") + NAMED = XABase.OSType("nmcl") + OUTPUT = XABase.OSType("prtr")
+ +
[docs] class ConnectionSpace(Enum): + """Profile connection space options. + """ + LAB = XABase.OSType("Lab ") + XYZ = XABase.OSType("XYZ ")
+ +
[docs] class CompressionLevel(Enum): + """Compression options. + """ + HIGH = XABase.OSType("high") + MEDIUM = XABase.OSType("medi") + LOW = XABase.OSType("low ")
+ +
[docs] class FileType(Enum): + """Image file type options. + """ + BMP = XABase.OSType("BMPf") + GIF = XABase.OSType("GIF ") + JPEG = XABase.OSType("JPEG") + JPEG2 = XABase.OSType("jpg2") + MACPAINT = XABase.OSType("PNTG") + PDF = XABase.OSType("PDF ") + PHOTOSHOP = XABase.OSType("8BPS") + PICT = XABase.OSType("PICT") + PNG = XABase.OSType("PNGf") + PSD = XABase.OSType("psd ") + QUICKTIME = XABase.OSType("qtif") + SGI = XABase.OSType(".SGI") + TEXT = XABase.OSType("TEXT") + TGA = XABase.OSType("tga ") + TIFF = XABase.OSType("TIFF")
+ +
[docs] class ProfileQuality(Enum): + """Profile quality options. + """ + BEST = XABase.OSType("Qua2") + NORMAL = XABase.OSType("Qua0") + DRAFT = XABase.OSType("Qua1")
+ +
[docs] class ColorSpace(Enum): + """Color space options. + """ + CMYK = XABase.OSType("CMYK") + EIGHT_CHANNEL = XABase.OSType("MCH8") + EIGHT_COLOR = XABase.OSType("8CLR") + FIVE_CHANNEL = XABase.OSType("MCH5") + FIVE_COLOR = XABase.OSType("5CLR") + GRAY = XABase.OSType("GRAY") + LAB = XABase.OSType("Lab ") + NAMED = XABase.OSType("NAME") + RGB = XABase.OSType("RGB ") + SEVEN_CHANNEL = XABase.OSType("MCH7") + SEVEN_COLOR = XABase.OSType("7CLR") + SIX_CHANNEL = XABase.OSType("MCH6") + SIX_COLOR = XABase.OSType("6CLR") + XYZ = XABase.OSType("XYZ ")
+ +
[docs] class RenderingIntent(Enum): + """Rendering intent options. + """ + ABSOLUTE_COLORIMETRIC = XABase.OSType("Rdr3") + PERCEPTUAL = XABase.OSType("Rdr0") + RELATIVE_COLORIMETRIC = XABase.OSType("R1r2") + SATURATION = XABase.OSType("Rdr2")
+ +
[docs] class ImageQuality(Enum): + """Image quality options. + """ + BEST = XABase.OSType("best") + HIGH = XABase.OSType("high") + MEDIUM = XABase.OSType("medi") + LOW = XABase.OSType("low ") + LEAST = XABase.OSType("leas")
+ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the application. + + .. versionadded:: 0.1.0 + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether Image Events is the frontmost application. + + .. versionadded:: 0.1.0 + """ + return self.xa_scel.frontmost() + + @property + def version(self) -> str: + """The version number of the application. + + .. versionadded:: 0.1.0 + """ + return self.xa_scel.version() + + @property + def application_support_folder(self) -> 'XABase.XAFolder': + """The Application Support folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.applicationSupportFolder(), XABase.XAFolder) + + @property + def applications_folder(self) -> 'XABase.XAFolder': + """The user's Applications folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.applicationsFolder(), XABase.XAFolder) + + @property + def classic_domain(self) -> 'XABase.XAClassicDomainObject': + """The collection of folders belonging to the Classic System. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.classicDomain(), XABase.XAClassicDomainObject) + + @property + def desktop_folder(self) -> 'XABase.XAFolder': + """The user's Desktop folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.desktopFolder(), XABase.XAFolder) + + @property + def desktop_pictures_folder(self) -> 'XABase.XAFolder': + """The Desktop Pictures folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.desktopPicturesFolder(), XABase.XAFolder) + + @property + def documents_folder(self) -> 'XABase.XAFolder': + """The user's Documents folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.documentsFolder(), XABase.XAFolder) + + @property + def downloads_folder(self) -> 'XABase.XAFolder': + """The user's Downloads folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.downloadsFolder(), XABase.XAFolder) + + @property + def favorites_folder(self) -> 'XABase.XAFolder': + """The user's Favorites folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.favoritesFolder(), XABase.XAFolder) + + @property + def folder_action_scripts_folder(self) -> 'XABase.XAFolder': + """The user's Folder Action Scripts folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.folderActionScriptsFolder(), XABase.XAFolder) + + @property + def fonts_folder(self) -> 'XABase.XAFolder': + """The Fonts folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.fontsFolder(), XABase.XAFolder) + + @property + def home_folder(self) -> 'XABase.XAFolder': + """The Home folder of the currently logged in user. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.homeFolder(), XABase.XAFolder) + + @property + def library_folder(self) -> 'XABase.XAFolder': + """The Library folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.libraryFolder(), XABase.XAFolder) + + @property + def local_domain(self) -> 'XABase.XALocalDomainObject': + """The collection of folders residing on the Local machine. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.localDomain(), XABase.XALocalDomainObject) + + @property + def movies_folder(self) -> 'XABase.XAFolder': + """The user's Movies folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.moviesFolder(), XABase.XAFolder) + + @property + def music_folder(self) -> 'XABase.XAFolder': + """The user's Music folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.musicFolder(), XABase.XAFolder) + + @property + def network_domain(self) -> 'XABase.XANetworkDomainObject': + """The collection of folders residing on the Network. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.networkDomain(), XABase.XANetworkDomainObject) + + @property + def pictures_folder(self) -> 'XABase.XAFolder': + """The user's Pictures folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.picturesFolder(), XABase.XAFolder) + + @property + def preferences_folder(self) -> 'XABase.XAFolder': + """The user's Preferences folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.preferencesFolder(), XABase.XAFolder) + + @property + def public_folder(self) -> 'XABase.XAFolder': + """The user's Public folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.publicFolder(), XABase.XAFolder) + + @property + def scripting_additions_folder(self) -> 'XABase.XAFolder': + """The Scripting Additions folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.scriptingAdditionsFolder(), XABase.XAFolder) + + @property + def scripts_folder(self) -> 'XABase.XAFolder': + """The user's Scripts folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.scriptsFolder(), XABase.XAFolder) + + @property + def shared_documents_folder(self) -> 'XABase.XAFolder': + """The Shared Documents folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.sharedDocumentsFolder(), XABase.XAFolder) + + @property + def sites_folder(self) -> 'XABase.XAFolder': + """The user's Sites folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.sitesFolder(), XABase.XAFolder) + + @property + def speakable_items_folder(self) -> 'XABase.XAFolder': + """The Speakable Items folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.speakableItemsFolder(), XABase.XAFolder) + + @property + def startup_disk(self) -> 'XABase.XADisk': + """The disk from which Mac OS X was loaded. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.startupDisk(), XABase.XADisk) + + @property + def system_domain(self) -> 'XABase.XASystemDomainObject': + """The collection of folders belonging to the System. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.systemDomain(), XABase.XASystemDomainObject) + + @property + def temporary_items_folder(self) -> 'XABase.XAFolder': + """The Temporary Items folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.temporaryItemsFolder(), XABase.XAFolder) + + @property + def trash(self) -> 'XABase.XAFolder': + """The user's Trash folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.trash(), XABase.XAFolder) + + @property + def user_domain(self) -> 'XABase.XAUserDomainObject': + """The collection of folders belonging to the User. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.userDomain(), XABase.XAUserDomainObject) + + @property + def utilities_folder(self) -> 'XABase.XAFolder': + """The Utilities folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.utilitiesFolder(), XABase.XAFolder) + + @property + def workflows_folder(self) -> 'XABase.XAFolder': + """The Automator Workflows folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.workflowsFolder(), XABase.XAFolder) + + @property + def default_cmyk_profile(self) -> 'XAImageEventsProfile': + """The default CMYK profile. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.defaultCMYKProfile(), XAImageEventsProfile) + + @property + def default_cmyk_profile_location(self) -> 'XABase.XAFile': + """The default CMYK profile location. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.defaultCMYKProfileLocation(), XABase.XAFile) + + @property + def default_gray_profile(self) -> 'XAImageEventsProfile': + """The default Gray profile. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.defaultGrayProfile(), XAImageEventsProfile) + + @property + def default_gray_profile_location(self) -> 'XABase.XAFile': + """The default Gray profile location. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.defaultGrayProfileLocation(), XABase.XAFile) + + @property + def default_lab_profile(self) -> 'XAImageEventsProfile': + """The default Lab profile. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.defaultLabProfile(), XAImageEventsProfile) + + @property + def default_lab_profile_location(self) -> 'XABase.XAFile': + """The default Lab profile location. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.defaultLabProfileLocation(), XABase.XAFile) + + @property + def default_rgb_profile(self) -> 'XAImageEventsProfile': + """The default RGB profile. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.defaultRGBProfile(), XAImageEventsProfile) + + @property + def default_rgb_profile_location(self) -> 'XABase.XAFile': + """The default RGB profile location. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.defaultRGBProfileLocation(), XABase.XAFile) + + @property + def default_xyz_profile(self) -> 'XAImageEventsProfile': + """The default XYZ profile. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.defaultXYZProfile(), XAImageEventsProfile) + + @property + def default_xyz_profile_location(self) -> 'XABase.XAFile': + """The default XYZ profile location. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.defaultXYZProfileLocation(), XABase.XAFile) + + @property + def preferred_cmm(self) -> 'str': + """Specifies preferred Color Management Module to use, or "automatic". + + .. versionadded:: 0.1.0 + """ + return self.xa_scel.preferredCMM() + + @property + def profile_folder(self) -> 'XABase.XAAlias': + """The ColorSync profile folder. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.profileFolder(), XABase.XAAlias) + + @property + def quit_delay(self) -> 'int': + """The time in seconds the application will idle before quitting; if set to zero, idle time will not cause the application to quit. + + .. versionadded:: 0.1.0 + """ + return self.xa_scel.quitDelay() + + @property + def system_profile(self) -> 'XAImageEventsProfile': + """The default system profile. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.systemProfile(), XAImageEventsProfile) + + @property + def system_profile_location(self) -> 'XABase.XAFile': + """The default system profile location. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.systemProfileLocation(), XABase.XAFile) + +
[docs] def aliases(self, filter: Union[dict, None] = None) -> 'XABase.XAAliasList': + """Returns a list of aliases, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.aliases(), XABase.XAAliasList, filter)
+ +
[docs] def disks(self, filter: Union[dict, None] = None) -> 'XABase.XADiskList': + """Returns a list of disks, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.disks(), XABase.XADiskList, filter)
+ +
[docs] def disk_items(self, filter: Union[dict, None] = None) -> 'XABase.XADiskItemList': + """Returns a list of disk items, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.diskItems(), XABase.XADiskItemList, filter)
+ +
[docs] def domains(self, filter: Union[dict, None] = None) -> 'XABase.XADomainList': + """Returns a list of domains, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.domains(), XABase.XADomainList, filter)
+ +
[docs] def files(self, filter: Union[dict, None] = None) -> 'XABase.XAFileList': + """Returns a list of files, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.files(), XABase.XAFileList, filter)
+ +
[docs] def file_packages(self, filter: Union[dict, None] = None) -> 'XABase.XAFilePackageList': + """Returns a list of file packages, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.filePackages(), XABase.XAFilePackageList, filter)
+ +
[docs] def folders(self, filter: Union[dict, None] = None) -> 'XABase.XAFolderList': + """Returns a list of folders, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.folders(), XABase.XAFolderList, filter)
+ +
[docs] def items(self, filter: Union[dict, None] = None) -> 'XABase.XADiskItemList': + """Returns a list of items, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.items(), XABase.XADiskItemList, filter)
+ +
[docs] def displays(self, filter: Union[dict, None] = None) -> 'XAImageEventsDisplayList': + """Returns a list of displays, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.displays(), XAImageEventsDisplayList, filter)
+ +
[docs] def images(self, filter: Union[dict, None] = None) -> 'XAImageEventsImageList': + """Returns a list of images, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.images(), XAImageEventsImageList, filter)
+ +
[docs] def profiles(self, filter: Union[dict, None] = None) -> 'XAImageEventsProfileList': + """Returns a list of profiles, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.profiles(), XAImageEventsProfileList, filter)
+ +
[docs] def open(self, *paths: Union[list[XABase.XAPath], XABase.XAPath, str]) -> 'XAImageEventsImage': + """Opens the disk item at the given filepath. + + :param path: The path to a file or the URL to a website to open. + :type path: Union[list[XABase.XAPath], XABase.XAPath, str] + :return: A reference to the opened file, or None if no file was created or it cannot be found + :rtype: Any + + .. versionadded:: 0.0.1 + """ + if len(paths) > 1: + # Open multiple paths + new_files = [] + for path in paths: + if isinstance(path, str): + path = XABase.XAPath(path) + new_files.append(self.xa_scel.open_(path.xa_elem)) + return self._new_element(new_files, XAImageEventsImageList) + + # Open a single path + if isinstance(paths[0], str): + paths = XABase.XAPath(paths[0]) + else: + paths = paths[0] + file = self.xa_scel.open_(paths.xa_elem) + return self._new_element(file, XAImageEventsImage)
+ + + + +
[docs]class XAImageEventsDisplayList(XABase.XAList): + """A wrapper around lists of displays that employs fast enumeration techniques. + + All properties of displays can be called as methods on the wrapped list, returning a list containing each display's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAImageEventsDisplay, filter) + +
[docs] def display_number(self) -> list['int']: + return list(self.xa_elem.arrayByApplyingSelector_("displayNumber") or [])
+ +
[docs] def display_profile(self) -> 'XAImageEventsProfileList': + ls = self.xa_elem.arrayByApplyingSelector_("displayProfile") or [] + return self._new_element(ls, XAImageEventsProfileList)
+ +
[docs] def name(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def by_display_number(self, display_number: int) -> 'XAImageEventsDisplay': + return self.by_property("displayNumber", display_number)
+ +
[docs] def by_display_profile(self, display_profile: 'XAImageEventsProfile') -> 'XAImageEventsDisplay': + return self.by_property("displayProfile", display_profile.xa_elem)
+ +
[docs] def by_name(self, name: str) -> 'XAImageEventsDisplay': + return self.by_property("name", name)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAImageEventsDisplay(XABase.XAObject): + """A monitor connected to the computer. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def display_number(self) -> 'int': + """The number of the display. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.displayNumber() + + @property + def display_profile(self) -> 'XAImageEventsProfile': + """The profile for the display. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.displayProfile(), XAImageEventsProfile) + + @property + def name(self) -> 'str': + """The name of the display. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.name() + + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAImageEventsImageList(XABase.XAImageList): + """A wrapper around lists of images that employs fast enumeration techniques. + + All properties of images can be called as methods on the wrapped list, returning a list containing each image's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAImageEventsImage) + +
[docs] def properties(self) -> list[Dict]: + pyxa_dicts = [] + ls = self.xa_elem.arrayByApplyingSelector_("properties") or [] + for raw_dict in ls: + pyxa_dict = { + "color_space": XAImageEventsApplication.ColorSpace(XABase.OSType(raw_dict["colorSpace"].stringValue())), + "image_file": self._new_element(raw_dict["imageFile"], XABase.XAFile), + "bit_depth": XAImageEventsApplication.BitDepth(XABase.OSType(raw_dict["bitDepth"].stringValue())), + "dimensions": tuple(raw_dict["dimensions"]), + "location": self._new_element(raw_dict["location"], XABase.XAFolder), + "embedded_profile": self._new_element(raw_dict["embeddedProfile"], XAImageEventsProfile), + "file_type": XAImageEventsApplication.FileType(XABase.OSType(raw_dict["fileType"].stringValue())), + "class": "image", + "name": raw_dict["name"], + "resolution": tuple(raw_dict["resolution"]) + } + pyxa_dicts.append(pyxa_dict) + return pyxa_dicts
+ +
[docs] def original_image_objects(self) -> XABase.XAImageList: + image_paths = [None] * self.xa_elem.count() + for index, image in enumerate(self.xa_elem): + image_paths[index] = image.imageFile().POSIXPath() + + images = self._new_element(image_paths, XABase.XAImageList) + return images
+ +
[docs] def modified_image_objects(self) -> XABase.XAImageList: + image_paths = [None] * self.xa_elem.count() + for index, image in enumerate(self.xa_elem): + image_paths[index] = image.imageFile().POSIXPath() + "-tmp." + image.imageFile().nameExtension() + file_type = XABase.OSType(image.fileType().get().stringValue()) + image.saveAs_icon_in_PackBits_withCompressionLevel_(file_type, False, image_paths[index], False, XAImageEventsApplication.CompressionLevel.LOW.value) + + images = self._new_element(image_paths, XABase.XAImageList) + + def cleanup(): + for path in image_paths: + AppKit.NSFileManager.defaultManager().removeItemAtPath_error_(path, None) + + t = Timer(1, cleanup) + t.start() + return images
+ +
[docs] def bit_depth(self) -> list['XAImageEventsApplication.BitDepth']: + return [x.bit_depth for x in self]
+ +
[docs] def color_space(self) -> list['XAImageEventsApplication.ColorSpace']: + return [x.color_space for x in self]
+ +
[docs] def dimensions(self) -> list[list[int]]: + ls = self.xa_elem.arrayByApplyingSelector_("dimensions") or [] + return [tuple(x) for x in ls]
+ +
[docs] def embedded_profile(self) -> 'XAImageEventsProfileList': + ls = self.xa_elem.arrayByApplyingSelector_("embeddedProfile") or [] + return self._new_element(ls, XAImageEventsProfileList)
+ +
[docs] def file_type(self) -> list['XAImageEventsApplication.FileType']: + ls = self.xa_elem.arrayByApplyingSelector_("fileType") or [] + return [XAImageEventsApplication.FileType(XABase.OSType(x.get().stringValue())) for x in ls]
+ +
[docs] def image_file(self) -> 'XABase.XAFileList': + ls = self.xa_elem.arrayByApplyingSelector_("imageFile") or [] + return self._new_element(ls, XABase.XAFileList)
+ +
[docs] def location(self) -> list['XABase.XADiskItem']: + ls = self.xa_elem.arrayByApplyingSelector_("location") or [] + return self._new_element(ls, XABase.XADiskItemList)
+ +
[docs] def name(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def resolution(self) -> list['float']: + ls = self.xa_elem.arrayByApplyingSelector_("resolution") or [] + return [tuple(x) for x in ls]
+ +
[docs] def by_bit_depth(self, bit_depth) -> 'XAImageEventsApplication.BitDepth': + for x in self.xa_elem: + if x.bitDepth() == bit_depth.value: + return x
+ +
[docs] def by_color_space(self, color_space: 'XAImageEventsApplication.ColorSpace') -> 'XAImageEventsImage': + for x in self.xa_elem: + if x.colorSpace() == color_space.value: + return x
+ +
[docs] def by_dimensions(self, dimensions: list[int]) -> 'XAImageEventsImage': + return self.by_property("dimensions", dimensions)
+ +
[docs] def by_embedded_profile(self, embedded_profile: 'XAImageEventsProfile') -> 'XAImageEventsImage': + return self.by_property("embeddedProfile", embedded_profile.xa_elem)
+ +
[docs] def by_file_type(self, file_type: 'XAImageEventsApplication.FileType') -> 'XAImageEventsImage': + for x in self.xa_elem: + if x.fileType().get().stringValue() == XABase.unOSType(file_type.value): + return x
+ +
[docs] def by_image_file(self, image_file: 'XABase.XAFile') -> 'XAImageEventsImage': + return self.by_property("imageFile", image_file.xa_elem)
+ +
[docs] def by_location(self, location: 'XABase.XADiskItem') -> 'XAImageEventsImage': + return self.by_property("location", location.xa_elem)
+ +
[docs] def by_name(self, name: str) -> 'XAImageEventsImage': + return self.by_property("name", name)
+ +
[docs] def by_resolution(self, resolution: list[float]) -> 'XAImageEventsImage': + return self.by_property("resolution", resolution)
+ +
[docs] def embed_profile(self, profile: 'XAImageEventsProfile') -> 'XABase.XAImageList': + """Embeds the specified ICC profile in each image of the list. + + :param profile: The ICC profile to embed in the image + :type profile: XAImageEventsProfile + :return: The list of modified images + :rtype: XABase.XAImageList + + .. versionadded:: 0.1.0 + """ + icc_data = AppKit.NSData.dataWithContentsOfURL_(profile.location.url.xa_elem) + color_space = AppKit.NSColorSpace.alloc().initWithICCProfileData_(icc_data) + + images = [None] * self.xa_elem.count() + for index, ie_image in enumerate(self.xa_elem): + image = AppKit.NSImage.alloc().initWithContentsOfURL_(XABase.XAPath(ie_image.imageFile().POSIXPath()).xa_elem) + img_rep = AppKit.NSBitmapImageRep.imageRepWithData_(image.TIFFRepresentation()) + bitmap_image_rep = img_rep.bitmapImageRepByConvertingToColorSpace_renderingIntent_(color_space, AppKit.NSColorRenderingIntentPerceptual) + + # Save rep into this object's data + images[index] = AppKit.NSImage.alloc().initWithCGImage_(bitmap_image_rep.CGImage()) + + return self._new_element(images, XABase.XAImageList)
+ +
[docs] def unembed(self) -> 'XABase.XAImageList': + """Removes any embedded ICC profiles from each image of the list. + + :return: The list of modified images + :rtype: XABase.XAImageList + + .. versionadded:: 0.1.0 + """ + images = [None] * self.xa_elem.count() + for index, ie_image in enumerate(self.xa_elem): + image = AppKit.NSImage.alloc().initWithContentsOfURL_(XABase.XAPath(ie_image.imageFile().POSIXPath()).xa_elem) + img_rep = AppKit.NSBitmapImageRep.imageRepWithData_(image.TIFFRepresentation()) + bitmap_image_rep = img_rep.bitmapImageRepByConvertingToColorSpace_renderingIntent_(AppKit.NSColorSpace.genericRGBColorSpace(), AppKit.NSColorRenderingIntentPerceptual) + + # Save rep into this object's data + images[index] = AppKit.NSImage.alloc().initWithCGImage_(bitmap_image_rep.CGImage()) + + return self._new_element(images, XABase.XAImageList)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAImageEventsImage(XABase.XAImage): + """An image contained in a file. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + self.modified = False #: Whether the image has been modified since it was last saved + + self.xa_prnt = properties["parent"] + self.xa_scel = properties["element"] + + # Elevate base element to XAImage + self.xa_elem = XABase.XAImage(self.image_file.posix_path).xa_elem + + @property + def properties(self) -> Dict: + """All properties of the image. + + .. versionadded:: 0.1.0 + """ + raw_dict = self.xa_scel.properties() + pyxa_dict = { + "color_space": XAImageEventsApplication.ColorSpace(XABase.OSType(raw_dict["colorSpace"].stringValue())), + "image_file": self._new_element(raw_dict["imageFile"], XABase.XAFile), + "bit_depth": XAImageEventsApplication.BitDepth(XABase.OSType(raw_dict["bitDepth"].stringValue())), + "dimensions": tuple(raw_dict["dimensions"]), + "location": self._new_element(raw_dict["location"], XABase.XAFolder), + "embedded_profile": self._new_element(raw_dict["embeddedProfile"], XAImageEventsProfile), + "file_type": XAImageEventsApplication.FileType(XABase.OSType(raw_dict["fileType"].stringValue())), + "class": "image", + "name": raw_dict["name"], + "resolution": tuple(raw_dict["resolution"]) + } + return pyxa_dict + + @property + def original_image_object(self) -> XABase.XAImage: + """The original image contained in the file, without any modification. + + :return: The image object stored in the file + :rtype: XABase.XAImage + + .. versionadded:: 0.1.0 + """ + path = self.image_file.posix_path.path + img = XABase.XAImage(path) + return img + + @property + def modified_image_object(self) -> XABase.XAImage: + """The image stored in active memory, including modifications. + + :return: The image object stored in active memory + :rtype: XABase.XAImage + + .. versionadded:: 0.1.0 + """ + path = self.image_file.posix_path.path + "-tmp." + self.image_file.name_extension + self.save(file_path=path) + img = XABase.XAImage(path) + + def cleanup(path): + AppKit.NSFileManager.defaultManager().removeItemAtPath_error_(path, None) + + t = Timer(1, cleanup, [path]) + t.start() + + return img + + @property + def bit_depth(self) -> 'XAImageEventsApplication.BitDepth': + """Bit depth of the image's color representation. + + .. versionadded:: 0.1.0 + """ + return XAImageEventsApplication.BitDepth(self.xa_scel.bitDepth()) + + @property + def color_space(self) -> 'XAImageEventsApplication.ColorSpace': + """Color space of the image's color representation. + + .. versionadded:: 0.1.0 + """ + return XAImageEventsApplication.ColorSpace(self.xa_scel.colorSpace()) + + @property + def dimensions(self) -> 'tuple[int, int]': + """The width and height of the image, respectively, in pixels. + + .. versionadded:: 0.1.0 + """ + if hasattr(self, "_dimensions"): + return getattr(self, "_dimensions") + return tuple(self.xa_scel.dimensions()) + + @property + def embedded_profile(self) -> 'XAImageEventsProfile': + """The profile, if any, embedded in the image. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.embeddedProfile(), XAImageEventsProfile) + + @property + def file_type(self) -> 'XAImageEventsApplication.FileType': + """File type of the image's file. + + .. versionadded:: 0.1.0 + """ + return XAImageEventsApplication.FileType(OSType(self.xa_scel.fileType().get().stringValue())) + + @property + def image_file(self) -> 'XABase.XAFile': + """The file that contains the image. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.imageFile(), XABase.XAFile) + + @property + def location(self) -> 'XABase.XADiskItem': + """The folder or disk that encloses the file that contains the image. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.location(), XABase.XADiskItem) + + @property + def name(self) -> 'str': + """The name of the image. + + .. versionadded:: 0.1.0 + """ + return self.xa_scel.name() + + @property + def resolution(self) -> 'tuple[float, float]': + """The horizontal and vertical pixel density of the image, respectively, in dots per inch. + + .. versionadded:: 0.1.0 + """ + return tuple(self.xa_scel.resolution()) + +
[docs] def embed_profile(self, profile: 'XAImageEventsProfile') -> 'XAImageEventsImage': + """Embeds the specified ICC profile in the image. + + :param profile: The ICC profile to embed in the image + :type profile: XAImageEventsProfile + :return: The image object + :rtype: XAImageEventsImage + + .. versionadded:: 0.1.0 + """ + # Get the target color space + self.xa_scel.embedWithSource_(profile.xa_elem) + icc_data = AppKit.NSData.dataWithContentsOfURL_(profile.location.url.xa_elem) + color_space = AppKit.NSColorSpace.alloc().initWithICCProfileData_(icc_data) + + # Update the image rep + img_rep = AppKit.NSBitmapImageRep.imageRepWithData_(self.xa_elem.TIFFRepresentation()) + bitmap_image_rep = img_rep.bitmapImageRepByConvertingToColorSpace_renderingIntent_(color_space, AppKit.NSColorRenderingIntentPerceptual) + + # Save rep into this object's data + self.xa_elem = AppKit.NSImage.alloc().initWithCGImage_(bitmap_image_rep.CGImage()) + return self
+ +
[docs] def unembed(self) -> 'XAImageEventsImage': + """Removes any embedded ICC profiles from the image. + + :return: The image object + :rtype: XAImageEventsImage + + .. versionadded:: 0.1.0 + """ + self.xa_scel.unembed() + img_rep = AppKit.NSBitmapImageRep.imageRepWithData_(self.xa_elem.TIFFRepresentation()) + bitmap_image_rep = img_rep.bitmapImageRepByConvertingToColorSpace_renderingIntent_(AppKit.NSColorSpace.genericRGBColorSpace(), AppKit.NSColorRenderingIntentPerceptual) + self.xa_elem = AppKit.NSImage.alloc().initWithCGImage_(bitmap_image_rep.CGImage()) + return self
+ +
[docs] def metadata_tags(self, filter: Union[dict, None] = None) -> 'XAImageEventsMetadataTagList': + """Returns a list of metadata tags, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.metadataTags(), XAImageEventsMetadataTagList, filter)
+ +
[docs] def profiles(self, filter: Union[dict, None] = None) -> 'XAImageEventsProfileList': + """Returns a list of profiles, as PyXA objects, matching the given filter. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.profiles(), XAImageEventsProfileList, filter)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAImageEventsMetadataTagList(XABase.XAList): + """A wrapper around lists of metadata tags that employs fast enumeration techniques. + + All properties of metadata tags can be called as methods on the wrapped list, returning a list containing each tag's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAImageEventsMetadataTag, filter) + +
[docs] def description(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("description") or [])
+ +
[docs] def name(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def value(self) -> list[Union[bool, int, float, str, 'XAImageEventsProfile', any]]: + ls = self.xa_elem.arrayByApplyingSelector_("value") or [] + for index, value in enumerate(ls): + if isinstance(value, ScriptingBridge.SBObject): + ls[index] = self._new_element(value, XAImageEventsProfile) + return list(ls)
+ +
[docs] def by_description(self, description: str) -> 'XAImageEventsMetadataTag': + return self.by_property("description", description)
+ +
[docs] def by_name(self, name: str) -> 'XAImageEventsMetadataTag': + return self.by_property("name", name)
+ +
[docs] def by_value(self, value: list[Union[bool, int, float, str, 'XAImageEventsProfile', any]]) -> 'XAImageEventsMetadataTag': + if isinstance(value, XAImageEventsProfile): + value = value.xa_elem + return self.by_property("value", value)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAImageEventsMetadataTag(XABase.XAObject): + """A metadata tag: EXIF, IPTC, etc. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def description(self) -> 'str': + """The description of the tag's function. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.description() + + @property + def name(self) -> 'str': + """The name of the tag. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.name() + + @property + def value(self) -> Union[bool, int, float, str, 'XAImageEventsProfile', any]: + """The current setting of the tag. + + .. versionadded:: 0.1.0 + """ + value = self.xa_elem.value() + if isinstance(value, ScriptingBridge.SBObject): + return self._new_element(value, XAImageEventsProfile) + return value + + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAImageEventsProfileList(XABase.XAList): + """A wrapper around lists of profiles that employs fast enumeration techniques. + + All properties of profiles can be called as methods on the wrapped list, returning a list containing each profile's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAImageEventsProfile, filter) + +
[docs] def color_space(self) -> list['XAImageEventsApplication.ColorSpace']: + ls = self.xa_elem.arrayByApplyingSelector_("colorSpace") or [] + return [XAImageEventsApplication.ColorSpace(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def connection_space(self) -> list['XAImageEventsApplication.ConnectionSpace']: + ls = self.xa_elem.arrayByApplyingSelector_("connectionSpace") or [] + return [XAImageEventsApplication.ConnectionSpace(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def creation_date(self) -> list['datetime']: + return list(self.xa_elem.arrayByApplyingSelector_("creationDate") or [])
+ +
[docs] def creator(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("creator") or [])
+ +
[docs] def device_class(self) -> list['XAImageEventsApplication.DeviceClass']: + ls = self.xa_elem.arrayByApplyingSelector_("deviceClass") or [] + return [XAImageEventsApplication.DeviceClass(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def device_manufacturer(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("deviceManufacturer") or [])
+ +
[docs] def device_model(self) -> list['int']: + return list(self.xa_elem.arrayByApplyingSelector_("deviceModel") or [])
+ +
[docs] def location(self) -> 'XABase.XAAliasList': + ls = self.xa_elem.arrayByApplyingSelector_("location") or [] + return self._new_element(ls, XABase.XAAliasList)
+ +
[docs] def name(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def platform(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("platform") or [])
+ +
[docs] def preferred_cmm(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("preferredCMM") or [])
+ +
[docs] def quality(self) -> list['XAImageEventsApplication.ProfileQuality']: + ls = self.xa_elem.arrayByApplyingSelector_("quality") or [] + return [XAImageEventsApplication.ProfileQuality(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def rendering_intent(self) -> list['XAImageEventsApplication.RenderingIntent']: + ls = self.xa_elem.arrayByApplyingSelector_("renderingIntent") or [] + return [XAImageEventsApplication.RenderingIntent(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def size(self) -> list['int']: + return list(self.xa_elem.arrayByApplyingSelector_("size") or [])
+ +
[docs] def version(self) -> list['str']: + return list(self.xa_elem.arrayByApplyingSelector_("version") or [])
+ +
[docs] def by_color_space(self, color_space: XAImageEventsApplication.ColorSpace) -> 'XAImageEventsProfile': + return self.by_property("colorSpace", color_space.value)
+ +
[docs] def by_connection_space(self, connection_space: XAImageEventsApplication.ConnectionSpace) -> 'XAImageEventsProfile': + return self.by_property("connectionSpace", connection_space.value)
+ +
[docs] def by_creation_date(self, creation_date: datetime) -> 'XAImageEventsProfile': + return self.by_property("creationDate", creation_date)
+ +
[docs] def by_creator(self, creator) -> 'XAImageEventsProfile': + return self.by_property("creator", creator)
+ +
[docs] def by_device_class(self, device_class: XAImageEventsApplication.DeviceClass) -> 'XAImageEventsProfile': + return self.by_property("deviceClass", device_class.value)
+ +
[docs] def by_device_manufacturer(self, device_manufacturer: str) -> 'XAImageEventsProfile': + return self.by_property("deviceManufacturer", device_manufacturer)
+ +
[docs] def by_device_model(self, device_model: str) -> 'XAImageEventsProfile': + return self.by_property("deviceModel", device_model)
+ +
[docs] def by_location(self, location: 'XABase.XAAlias') -> 'XAImageEventsProfile': + return self.by_property("location", location.xa_elem)
+ +
[docs] def by_name(self, name: str) -> 'XAImageEventsProfile': + return self.by_property("name", name)
+ +
[docs] def by_platform(self, platform: str) -> 'XAImageEventsProfile': + return self.by_property("platform", platform)
+ +
[docs] def by_preferred_cmm(self, preferred_cmm: str) -> 'XAImageEventsProfile': + return self.by_property("preferredCMM", preferred_cmm)
+ +
[docs] def by_quality(self, quality: XAImageEventsApplication.ProfileQuality) -> 'XAImageEventsProfile': + return self.by_property("quality", quality.value)
+ +
[docs] def by_rendering_intent(self, rendering_intent: XAImageEventsApplication.RenderingIntent) -> 'XAImageEventsProfile': + return self.by_property("renderingIntent", rendering_intent.value)
+ +
[docs] def by_size(self, size: int) -> 'XAImageEventsProfile': + return self.by_property("size", size)
+ +
[docs] def by_version(self, version: str) -> 'XAImageEventsProfile': + return self.by_property("version", version)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAImageEventsProfile(XABase.XAObject): + """A ColorSync ICC profile. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def color_space(self) -> 'XAImageEventsApplication.ColorSpace': + """The color space of the profile. + + .. versionadded:: 0.1.0 + """ + return XAImageEventsApplication.ColorSpace(self.xa_elem.colorSpace()) + + @property + def connection_space(self) -> 'XAImageEventsApplication.ConnectionSpace': + """The connection space of the profile. + + .. versionadded:: 0.1.0 + """ + return XAImageEventsApplication.ConnectionSpace(self.xa_elem.connectionSpace()) + + @property + def creation_date(self) -> 'datetime': + """The creation date of the profile. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.creationDate() + + @property + def creator(self) -> 'str': + """The creator type of the profile. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.creator() + + @property + def device_class(self) -> 'XAImageEventsApplication.DeviceClass': + """The device class of the profile. + + .. versionadded:: 0.1.0 + """ + return XAImageEventsApplication.DeviceClass(self.xa_elem.deviceClass()) + + @property + def device_manufacturer(self) -> 'str': + """The device manufacturer of the profile. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.deviceManufacturer() + + @property + def device_model(self) -> 'int': + """The device model of the profile. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.deviceModel() + + @property + def location(self) -> 'XABase.XAAlias': + """The file location of the profile. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.location(), XABase.XAAlias) + + @property + def name(self) -> 'str': + """The description text of the profile. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.name() + + @property + def platform(self) -> 'str': + """The intended platform of the profile. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.platform() + + @property + def preferred_cmm(self) -> 'str': + """The preferred CMM of the profile. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.preferredCMM() + + @property + def quality(self) -> 'XAImageEventsApplication.ProfileQuality': + """The quality of the profile. + + .. versionadded:: 0.1.0 + """ + return XAImageEventsApplication.ProfileQuality(self.xa_elem.quality()) + + @property + def rendering_intent(self) -> 'XAImageEventsApplication.RenderingIntent': + """The rendering intent of the profile. + + .. versionadded:: 0.1.0 + """ + return XAImageEventsApplication.RenderingIntent(self.xa_elem.renderingIntent()) + + @property + def size(self) -> 'int': + """The size of the profile in bytes. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.size() + + @property + def version(self) -> 'str': + """The version number of the profile. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.version() + + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Keynote.html b/docs/_modules/PyXA/apps/Keynote.html new file mode 100644 index 0000000..c84b017 --- /dev/null +++ b/docs/_modules/PyXA/apps/Keynote.html @@ -0,0 +1,1476 @@ + + + + + + PyXA.apps.Keynote — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Keynote

+""".. versionadded:: 0.0.2
+
+Control the macOS Keynote application using JXA-like syntax.
+"""
+from enum import Enum
+from typing import Any, Union, Self
+
+import AppKit
+
+from PyXA import XABase
+from PyXA import XAEvents
+from PyXA.XABase import OSType
+
+from . import iWorkApplicationBase
+
+
[docs]class XAKeynoteApplication(iWorkApplicationBase.XAiWorkApplication): + """A class for managing and interacting with Keynote.app. + + .. seealso:: :class:`XAKeynoteWindow`, :class:`XAKeynoteDocument` + + .. versionadded:: 0.0.2 + """ +
[docs] class ExportFormat(Enum): + """Options for what format to export a Keynote project as. + """ + KEYNOTE = OSType('Knff') # The Keynote native file format + HTML = OSType('Khtm') # HTML + QUICKTIME_MOVIE = OSType('Kmov') # QuickTime movie + PDF = OSType('Kpdf') # PDF + SLIDE_IMAGES = OSType('Kimg') # image + MICROSOFT_POWERPOINT = OSType('Kppt') # Microsoft PowerPoint + KEYNOTE_09 = OSType('Kkey') # Keynote 09 + JPEG = OSType('Kifj') # JPEG + PNG = OSType('Kifp') # PNG + TIFF = OSType('Kift') # TIFF + f360p = OSType('Kmf3') # 360p + f540p = OSType('Kmf5') # 540p + f720p = OSType('Kmf7') # 720p + f1080p = OSType('Kmf8') # 1080p + f2160p = OSType('Kmf4') # DCI 4K (4096x2160) + NativeSize = OSType('KmfN') # Exported movie will have the same dimensions as the document, up to 4096x2160
+ +
[docs] class Codec(Enum): + """Options for which video codec to use. + """ + H264 = OSType('Kmc1') # H.264 + APPLE_PRO_RES_422 = OSType('Kmc2') # Apple ProRes 422 + APPLE_PRO_RES_4444 = OSType('Kmc3') # Apple ProRes 4444 + APPLE_PRO_RES_422LT = OSType('Kmc4') # Apple ProRes 422LT + APPLE_PRO_RES_422HQ = OSType('Kmc5') # Apple ProRes 422HQ + APPLE_PRO_RES_422Proxy = OSType('Kmc6') # Apple ProRes 422Proxy + HEVC = OSType('Kmc7') # HEVC
+ +
[docs] class Framerate(Enum): + """Options for which framerate to use when exporting a Keynote project as a video. + """ + FPS_12 = OSType('Kfr1') # 12 FPS + FPS_2398 = OSType('Kfr2') # 23.98 FPS + FPS_24 = OSType('Kfr3') # 24 FPS + FPS_25 = OSType('Kfr4') # 25 FPS + FPS_2997 = OSType('Kfr5') # 29.97 FPS + FPS_30 = OSType('Kfr6') # 30 FPS + FPS_50 = OSType('Kfr7') # 50 FPS + FPS_5994 = OSType('Kfr8') # 59.94 FPS + FPS_60 = OSType('Kfr9') # 60 FPS
+ +
[docs] class PrintSetting(Enum): + """Options to use when printing slides. + """ + STANDARD_ERROR_HANDLING = OSType('lwst') # Standard PostScript error handling + DETAILED_ERROR_HANDLING = OSType('lwdt') # print a detailed report of PostScript errors + INDIVIDUAL_SLIDES = OSType('Kpwi') # individual slides + SLIDE_WITH_NOTES = OSType('Kpwn') # slides with notes + HANDOUTS = OSType('Kpwh') # handouts
+ +
[docs] class Transition(Enum): + """The available options for transitions to assign to slides. + """ + NONE = OSType('tnil') + MAGIC_MOVE = OSType('tmjv') + SHIMMER = OSType('tshm') + SPARKLE = OSType('tspk') + SWING = OSType('tswg') + OBJECT_CUBE = OSType('tocb') + OBJECT_FLIP = OSType('tofp') + OBJECT_POP = OSType('topp') + OBJECT_PUSH = OSType('toph') + OBJECT_REVOLVE = OSType('torv') + OBJECT_ZOOM = OSType('tozm') + PERSPECTIVE = OSType('tprs') + CLOTHESLINE = OSType('tclo') + CONFETTI = OSType('tcft') + DISSOLVE = OSType('tdis') + DROP = OSType('tdrp') + DROPLET = OSType('tdpl') + FADE_THROUGH_COLOR = OSType('tftc') + GRID = OSType('tgrd') + IRIS = OSType('tirs') + MOVE_IN = OSType('tmvi') + PUSH = OSType('tpsh') + REVEAL = OSType('trvl') + SWITCH = OSType('tswi') + WIPE = OSType('twpe') + BLINDS = OSType('tbld') + COLOR_PANES = OSType('tcpl') + CUBE = OSType('tcub') + DOORWAY = OSType('tdwy') + FALL = OSType('tfal') + FLIP = OSType('tfip') + FLOP = OSType('tfop') + MOSAIC = OSType('tmsc') + PAGE_FLIP = OSType('tpfl') + PIVOT = OSType('tpvt') + REFLECTION = OSType('trfl') + REVOLVING_DOOR = OSType('trev') + SCALE = OSType('tscl') + SWAP = OSType('tswp') + SWOOSH = OSType('tsws') + TWIRL = OSType('ttwl') + TWIST = OSType('ttwi') + FADE_AND_MOVE = OSType('tfad')
+ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XAKeynoteWindow + + @property + def properties(self) -> dict: + """All properties of the Keynote application. + """ + raw_dict = self.xa_scel.properties() + return { + "slide_switcher_visible": raw_dict["slideSwitcherVisible"] == 1, + "frontmost": self.frontmost, + "playing": self.playing, + "version": self.version, + "name": self.name, + } + + @property + def playing(self) -> bool: + """Whether a slideshow is currently playing. + """ + return self.xa_scel.playing() + + @property + def slide_switcher_visible(self) -> bool: + """Whether the slide switcher is visible. + """ + return self.xa_scel.slideSwitcherVisible() + +
[docs] def show_next(self) -> 'XAKeynoteApplication': + """Advance one slide or animation build. + """ + self.xa_scel.showNext() + return self
+ +
[docs] def show_previous(self) -> 'XAKeynoteApplication': + """Go back one slide or animation build. + """ + self.xa_scel.showPrevious() + return self
+ +
[docs] def documents(self, filter: Union[dict, None] = None) -> 'XAKeynoteDocumentList': + """Returns a list of documents, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned documents will have, or None + :type filter: Union[dict, None] + :return: The list of documents + :rtype: XAKeynoteDocumentList + + :Example 1: List the name of every open Keynote document + + >>> import PyXA + >>> app = PyXA.Application("Keynote") + >>> docs = app.documents() + >>> for doc in docs: + >>> print(doc.name) + Example1.key + Example2.key + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_scel.documents(), XAKeynoteDocumentList, filter)
+ +
[docs] def new_document(self, file_path: Union[str, XABase.XAPath] = "./Untitled.key", theme: 'XAKeynoteTheme' = None) -> 'XAKeynoteDocument': + """Creates a new document at the specified path and with the specified theme. + + :param file_path: The path to create the document at, defaults to "./Untitled.key" + :type file_path: str, optional + :param template: The theme to initialize the document with, defaults to None + :type template: XAKeynoteTheme, optional + :return: The newly created document object + :rtype: XAKeynoteDocument + + .. versionadded:: 0.0.8 + """ + if isinstance(file_path, str): + file_path = XABase.XAPath(file_path) + + properties = { + "file": file_path.xa_elem, + } + + if theme is not None: + properties["documentTheme"] = theme.xa_elem + + new_document = self.make("document", properties) + return self.documents().push(new_document)
+ +
[docs] def themes(self, filter: Union[dict, None] = None) -> 'XAKeynoteThemeList': + """Returns a list of themes, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned themes will have, or None + :type filter: Union[dict, None] + :return: The list of themes + :rtype: XAKeynoteThemeList + + :Example 1: List the name of each theme + + >>> import PyXA + >>> app = PyXA.Application("Keynote") + >>> themes = app.themes() + >>> print(themes.name()) + ['Basic White', 'Basic Black', 'Classic White', 'White', 'Black', 'Basic Color', 'Color Gradient Light', 'Color Gradient', 'Gradient', 'Showroom', 'Modern Portfolio', 'Slate', 'Photo Essay', 'Bold Color', 'Showcase', 'Briefing', 'Academy', 'Modern Type', 'Exhibition', 'Feature Story', 'Look Book', 'Classic', 'Editorial', 'Cream Paper', 'Industrial', 'Blueprint', 'Graph Paper', 'Chalkboard', 'Photo Portfolio', 'Leather Book', 'Artisan', 'Improv', 'Drafting', 'Kyoto', 'Brushed Canvas', 'Craft', 'Parchment', 'Renaissance', 'Moroccan', 'Hard Cover', 'Linen Book', 'Vintage', 'Typeset', 'Harmony', 'Formal'] + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_scel.themes(), XAKeynoteThemeList, filter)
+ +
[docs] def make(self, specifier: str, properties: dict = None): + """Creates a new element of the given specifier class without adding it to any list. + + Use :func:`XABase.XAList.push` to push the element onto a list. + + :param specifier: The classname of the object to create + :type specifier: str + :param properties: The properties to give the object + :type properties: dict + :return: A PyXA wrapped form of the object + :rtype: XABase.XAObject + + .. versionadded:: 0.0.5 + """ + if properties is None: + properties = {} + + obj = self.xa_scel.classForScriptingClass_(specifier).alloc().initWithProperties_(properties) + + if specifier == "document": + return self._new_element(obj, XAKeynoteDocument) + elif specifier == "shape": + return self._new_element(obj, iWorkApplicationBase.XAiWorkShape) + elif specifier == "table": + return self._new_element(obj, iWorkApplicationBase.XAiWorkTable) + elif specifier == "audioClip": + return self._new_element(obj, iWorkApplicationBase.XAiWorkAudioClip) + elif specifier == "chart": + return self._new_element(obj, iWorkApplicationBase.XAiWorkChart) + elif specifier == "image": + return self._new_element(obj, iWorkApplicationBase.XAiWorkImage) + elif specifier == "slide": + return self._new_element(obj, XAKeynoteSlide) + elif specifier == "line": + return self._new_element(obj, iWorkApplicationBase.XAiWorkLine) + elif specifier == "movie": + return self._new_element(obj, iWorkApplicationBase.XAiWorkMovie) + elif specifier == "textItem": + return self._new_element(obj, iWorkApplicationBase.XAiWorkTextItem) + elif specifier == "group": + return self._new_element(obj, iWorkApplicationBase.XAiWorkGroup) + elif specifier == "iWorkItem": + return self._new_element(obj, iWorkApplicationBase.XAiWorkiWorkItem) + elif specifier == "TransitionSettings": + return self._new_element(obj, XAKeynoteTransitionSettings)
+ + + + +
[docs]class XAKeynoteWindow(iWorkApplicationBase.XAiWorkWindow): + """A class for managing and interacting with windows in Keynote.app. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def document(self) -> 'XAKeynoteDocument': + """The document currently displayed in the window. + """ + return self._new_element(self.xa_elem.document(), XAKeynoteDocument)
+ + + + +
[docs]class XAKeynoteDocumentList(iWorkApplicationBase.XAiWorkDocumentList): + """A wrapper around lists of themes that employs fast enumeration techniques. + + All properties of themes can be called as methods on the wrapped list, returning a list containing each theme's value for the property. + + .. versionadded:: 0.0.5 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAKeynoteDocument) + +
[docs] def properties(self) -> list[dict]: + pyxa_dicts = [None] * len(self.xa_elem) + for index, document in enumerate(self.xa_elem): + pyxa_dicts[index] = { + "name": document.name(), + "modified": document.modified(), + "file": XABase.XAPath(document.file()), + "id": document.id(), + "slide_numbers_showing": document.slideNumbersShowing(), + "document_theme": self._new_element(document.documentTheme(), XAKeynoteTheme), + "auto_loop": document.autoLoop(), + "auto_play": document.autoPlay(), + "auto_restart": document.autoRestart(), + "maximum_idle_duration": document.maximumIdleDuration(), + "current_slide": self._new_element(document.currentSlide(), XAKeynoteSlide), + "height": document.height(), + "width": document.width(), + "selection": [self._new_element(x, iWorkApplicationBase.XAiWorkiWorkItem) for x in document.selection()], + "password_protected": document.passwordProtected(), + } + return pyxa_dicts
+ +
[docs] def slide_numbers_showing(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("slideNumbersShowing") or [])
+ +
[docs] def document_theme(self) -> 'XAKeynoteThemeList': + ls = self.xa_elem.arrayByApplyingSelector_("documentTheme") or [] + return self._new_element(ls, XAKeynoteThemeList)
+ +
[docs] def auto_loop(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("autoLoop") or [])
+ +
[docs] def auto_play(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("autoPlay") or [])
+ +
[docs] def auto_restart(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("autoRestart") or [])
+ +
[docs] def maximum_idle_duration(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("maximumIdleDuration") or [])
+ +
[docs] def current_slide(self) -> 'XAKeynoteSlideList': + ls = self.xa_elem.arrayByApplyingSelector_("currentSlide") or [] + return self._new_element(ls, XAKeynoteSlideList)
+ +
[docs] def height(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("height") or [])
+ +
[docs] def width(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("width") or [])
+ +
[docs] def by_properties(self, properties: dict) -> Union['XAKeynoteDocument', None]: + raw_dict = {} + + if "name" in properties: + raw_dict["name"] = properties["name"] + + if "file" in properties: + if isinstance(properties["file"], str): + raw_dict["file"] = properties["file"] + else: + raw_dict["file"] = properties["file"].xa_elem + + if "slide_numbers_showing" in properties: + raw_dict["slideNumbersShowing"] = properties["slide_numbers_showing"] + + if "document_theme" in properties: + raw_dict["documentTheme"] = properties["document_theme"].xa_elem + + if "auto_loop" in properties: + raw_dict["autoLoop"] = properties["auto_loop"] + + if "auto_play" in properties: + raw_dict["autoPlay"] = properties["auto_play"] + + if "auto_restart" in properties: + raw_dict["autoRestart"] = properties["auto_restart"] + + if "maximum_idle_duration" in properties: + raw_dict["maximumIdleDuration"] = properties["maximum_idle_duration"] + + if "height" in properties: + raw_dict["height"] = properties["height"] + + if "width" in properties: + raw_dict["width"] = properties["width"] + + for document in self.xa_elem: + if all(raw_dict[x] == document.properties()[x] for x in raw_dict): + return self._new_element(document, XAKeynoteDocument)
+ +
[docs] def by_slide_numbers_showing(self, slide_numbers_showing: bool) -> Union['XAKeynoteDocument', None]: + return self.by_property("slideNumbersShowing", slide_numbers_showing)
+ +
[docs] def by_document_theme(self, document_theme: 'XAKeynoteTheme') -> Union['XAKeynoteDocument', None]: + return self.by_property("documentTheme", document_theme.xa_elem)
+ +
[docs] def by_auto_loop(self, auto_loop: bool) -> Union['XAKeynoteDocument', None]: + return self.by_property("autoLoop", auto_loop)
+ +
[docs] def by_auto_play(self, auto_play: bool) -> Union['XAKeynoteDocument', None]: + return self.by_property("autoPlay", auto_play)
+ +
[docs] def by_auto_restart(self, auto_restart: bool) -> Union['XAKeynoteDocument', None]: + return self.by_property("autoRestart", auto_restart)
+ +
[docs] def by_maximum_idle_duration(self, maximum_idle_duration: int) -> Union['XAKeynoteDocument', None]: + return self.by_property("maxmimumIdleDuration", maximum_idle_duration)
+ +
[docs] def by_current_slide(self, current_slide: 'XAKeynoteSlide') -> Union['XAKeynoteDocument', None]: + return self.by_property("currentSlide", current_slide.xa_elem)
+ +
[docs] def by_height(self, height: int) -> Union['XAKeynoteDocument', None]: + return self.by_property("height", height)
+ +
[docs] def by_width(self, width: int) -> Union['XAKeynoteDocument', None]: + return self.by_property("width", width)
+ +
[docs] def by_selection(self, selection: 'iWorkApplicationBase.XAiWorkiWorkItemList') -> Union['XAKeynoteDocument', None]: + return self.by_property("selection", selection.xa_elem)
+ +
[docs] def by_password_protected(self, password_protected: bool) -> Union['XAKeynoteDocument', None]: + return self.by_property("passwordProtected", password_protected)
+ + def __repr__(self): + return f"<{str(type(self))}{self.name()}>"
+ +
[docs]class XAKeynoteDocument(iWorkApplicationBase.XAiWorkDocument): + """A class for managing and interacting with TextEdit documents. + + .. seealso:: :class:`XAKeynoteApplication` + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the document. + """ + pyxa_dict = { + "name": self.xa_elem.name(), + "modified": self.xa_elem.modified(), + "file": XABase.XAPath(self.xa_elem.file()), + "id": self.xa_elem.id(), + "slide_numbers_showing": self.xa_elem.slideNumbersShowing(), + "document_theme": self._new_element(self.xa_elem.documentTheme(), XAKeynoteTheme), + "auto_loop": self.xa_elem.autoLoop(), + "auto_play": self.xa_elem.autoPlay(), + "auto_restart": self.xa_elem.autoRestart(), + "maximum_idle_duration": self.xa_elem.maximumIdleDuration(), + "current_slide": self._new_element(self.xa_elem.currentSlide(), XAKeynoteSlide), + "height": self.xa_elem.height(), + "width": self.xa_elem.width(), + "selection": self._new_element(self.xa_elem.selection(), iWorkApplicationBase.XAiWorkiWorkItemList), + "password_protected": self.xa_elem.passwordProtected(), + } + return pyxa_dict + + @property + def name(self) -> str: + """The name of the document. + """ + return self.xa_elem.name() + + @property + def modified(self) -> bool: + """Whether the document has been modified since its last save. + """ + return self.xa_elem.modified() + + @property + def file(self) -> str: + """The location of the document on the disk, if one exists. + """ + return self.xa_elem.file() + + @property + def id(self) -> str: + """The unique identifier for the document. + """ + return self.xa_elem.id() + + @property + def slide_numbers_showing(self) -> bool: + """Whether slide numbers are displayed. + """ + return self.xa_elem.slideNumbersShowing() + + @slide_numbers_showing.setter + def slide_numbers_showing(self, slide_numbers_showing: bool): + self.set_property('slideNumbersShowing', slide_numbers_showing) + + @property + def document_theme(self) -> 'XAKeynoteTheme': + """The theme assigned to the document. + """ + return self._new_element(self.xa_elem.documentTheme(), XAKeynoteTheme) + + @document_theme.setter + def document_theme(self, document_theme: 'XAKeynoteTheme'): + self.set_property('documentTheme', document_theme.xa_elem) + + @property + def auto_loop(self) -> bool: + """Whether the slideshow should play repeatedly. + """ + return self.xa_elem.autoLoop() + + @auto_loop.setter + def auto_loop(self, auto_loop: bool): + self.set_property('autoLoop', auto_loop) + + @property + def auto_play(self) -> bool: + """Whether the slideshow should automatically play when opening the file. + """ + return self.xa_elem.autoPlay() + + @auto_play.setter + def auto_play(self, auto_play: bool): + self.set_property('autoPlay', auto_play) + + @property + def auto_restart(self) -> bool: + """Whether the slideshow should restart if its inactive for the maximum idle duration. + """ + return self.xa_elem.autoRestart() + + @auto_restart.setter + def auto_restart(self, auto_restart: bool): + self.set_property('autoRestart', auto_restart) + + @property + def maximum_idle_duration(self) -> int: + """The duration before which the slideshow restarts due to inactivity. + """ + return self.xa_elem.maximumIdleDuration() + + @maximum_idle_duration.setter + def maximum_idle_duration(self, maximum_idle_duration: int): + self.set_property('maximumIdleDuration', maximum_idle_duration) + + @property + def current_slide(self) -> 'XAKeynoteSlide': + """The currently selected slide, or the slide that would display is the presentation was started. + """ + return self._new_element(self.xa_elem.currentSlide(), XAKeynoteSlide) + + @current_slide.setter + def current_slide(self, current_slide: 'XAKeynoteSlide'): + self.set_property('currentSlide', current_slide.xa_elem) + + @property + def height(self) -> int: + """The height of the document in points; standard is 768; wide slide height is 1080. + """ + return self.xa_elem.height() + + @height.setter + def height(self, height: int): + self.set_property('height', height) + + @property + def width(self) -> int: + """The width of the document in points; standard is 1080; wide slide width is 1920. + """ + return self.xa_elem.width() + + @width.setter + def width(self, width: int): + self.set_property('width', width) + + @property + def selection(self) -> 'iWorkApplicationBase.XAiWorkiWorkItemList': + """A list of the currently selected items. + """ + return self._new_element(self.xa_elem.selection(), iWorkApplicationBase.XAiWorkiWorkItemList) + + @selection.setter + def selection(self, selection: Union['iWorkApplicationBase.XAiWorkiWorkItemList', list['iWorkApplicationBase.XAiWorkiWorkItem']]): + if isinstance(selection, list): + selection = [x.xa_elem for x in selection] + self.set_property('selection', selection) + else: + self.set_property('selection', selection.xa_elem) + + @property + def password_protected(self) -> bool: + """Whether the document is password protected. + """ + return self.xa_elem.passwordProtected() + +
[docs] def start_from(self, slide: 'XAKeynoteSlide') -> 'XAKeynoteSlide': + """Starts the slideshow from the specified slide. + + .. versionadded:: 0.0.3 + """ + self.xa_elem.startFrom_(slide.xa_elem) + return self
+ +
[docs] def stop(self): + """Stops the currently playing slideshow. + + .. versionadded:: 0.0.3 + """ + self.xa_elem.stop()
+ +
[docs] def show_slide_switcher(self): + """Shows the slide switch within the active slideshow interface. + + .. versionadded:: 0.0.3 + """ + self.xa_elem.showSlideSwitcher()
+ +
[docs] def hide_slide_switcher(self): + """Hides the slide switcher. + + .. versionadded:: 0.0.3 + """ + self.xa_elem.hideSlideSwitcher()
+ +
[docs] def move_slide_switcher_forward(self): + """Advances the slide switcher one slide forward. + + .. versionadded:: 0.0.3 + """ + self.xa_elem.moveSlideSwitcherForward()
+ +
[docs] def move_slide_switcher_backward(self): + """Goes back one slide in the slide switcher. + + .. versionadded:: 0.0.3 + """ + self.xa_elem.moveSlideSwitcherBackward()
+ +
[docs] def cancel_slide_switcher(self): + """Dismisses the slide switcher. + + .. versionadded:: 0.0.3 + """ + self.xa_elem.cancelSlideSwitcher()
+ +
[docs] def accept_slide_switcher(self): + """Advances the slideshow to the selected slide of the slide switcher. + + .. versionadded:: 0.0.3 + """ + self.xa_elem.acceptSlideSwitcher()
+ +
[docs] def save(self): + """Saves the Keynote file. + + .. versionadded:: 0.0.3 + """ + export_format = XAKeynoteApplication.ExportFormat.KEYNOTE.value + self.xa_elem.saveIn_as_(self.file, export_format)
+ +
[docs] def export(self, file_path: Union[str, XABase.XAPath] = None, format: XAKeynoteApplication.ExportFormat = XAKeynoteApplication.ExportFormat.PDF): + """Exports the slideshow in the specified format. + + :param file_path: The path to save the exported file at, defaults to None + :type file_path: Union[str, XABase.XAPath], optional + :param format: The format to export the file in, defaults to XAKeynoteApplication.ExportFormat.PDF + :type format: XAKeynoteApplication.ExportFormat, optional + + .. versionadded:: 0.0.3 + """ + if file_path is None: + file_path = self.file.path()[:-4] + ".pdf" + if isinstance(file_path, str): + file_path = XABase.XAPath(file_path) + self.xa_elem.exportTo_as_withProperties_(file_path.xa_elem, format.value, None)
+ +
[docs] def make_image_slides(self, files: list[Union[str, XABase.XAPath]], set_titles: bool = False, slide_layout: 'XAKeynoteSlideLayout' = None) -> 'XAKeynoteDocument': + """Creates slides out of image files. + + Creates a new slide for each image file path in the files list, if the image can be found. + + :param files: A list of paths to image files + :type files: list[Union[str, XABase.XAPath]] + :param set_titles: Whether to set the slide titles to the image file name, defaults to False + :type set_titles: bool, optional + :param slide_layout: The base slide layout to use for the new slides, defaults to None + :type slide_layout: XAKeynoteSlideLayout, optional + :return: A reference back to this PyXA object. + :rtype: XAKeynoteDocument + + .. versionadded:: 0.0.3 + """ + urls = [] + for file in files: + if isinstance(file, str): + file = XABase.XAPath(file) + urls.append(file.xa_elem) + self.xa_elem.makeImageSlidesFiles_setTitles_slideLayout_(urls, set_titles, slide_layout) + return self
+ +
[docs] def slides(self, filter: Union[dict, None] = None) -> 'XAKeynoteSlideList': + """Returns a list of slides, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned slides will have, or None + :type filter: Union[dict, None] + :return: The list of slides + :rtype: XAKeynoteSlideList + + :Example 1: List all slides + + >>> import PyXA + >>> app = PyXA.Application("Keynotes") + >>> print(app.slides()) + + :Example 2: List slides after applying a filter + + >>> import PyXA + >>> app = PyXA.Application("Keynotes") + >>> print(app.slides().greater_than("slideNumber", 5)) + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_elem.slides(), XAKeynoteSlideList, filter)
+ +
[docs] def new_slide(self, properties: dict) -> 'XAKeynoteSlide': + """Creates a new slide at the end of the presentation. + + :param properties: The properties to give the new slide + :type properties: dict + :return: A reference to the newly created slide + :rtype: XAKeynoteSlide + + .. versionadded:: 0.0.2 + """ + return self.xa_prnt.xa_prnt.new_slide(self, properties)
+ +
[docs] def slide_layouts(self, filter: Union[dict, None] = None) -> 'XAKeynoteSlideLayoutList': + """Returns a list of slide layouts, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned slide layouts will have, or None + :type filter: Union[dict, None] + :return: The list of slide layouts + :rtype: XAKeynoteSlideLayoutList + + :Example: List all slide layouts + + >>> import PyXA + >>> app = PyXA.Application("Keynotes") + >>> print(app.slide_layouts()) + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_elem.slideLayouts(), XAKeynoteSlideLayoutList, filter)
+ + def __repr__(self): + return f"<{str(type(self))}{self.name}>"
+ + + + +
[docs]class XAKeynoteThemeList(XABase.XAList): + """A wrapper around lists of themes that employs fast enumeration techniques. + + All properties of themes can be called as methods on the wrapped list, returning a list containing each theme's value for the property. + + .. versionadded:: 0.0.5 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAKeynoteTheme, filter) + +
[docs] def properties(self) -> list[str]: + # TODO + pyxa_dicts = [None] * len(self.xa_elem) + for index, theme in enumerate(self.xa_elem): + pyxa_dicts[index] = { + "id": theme.id(), + "name": theme.name() + } + return pyxa_dicts
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def by_properties(self, properties: dict) -> Union['XAKeynoteTheme', None]: + for theme in self.xa_elem: + if all(properties[x] == theme.properties()[x] for x in properties): + return self._new_element(theme, XAKeynoteTheme)
+ +
[docs] def by_id(self, id: str) -> Union['XAKeynoteTheme', None]: + return self.by_property("id", id)
+ +
[docs] def by_name(self, name: str) -> Union['XAKeynoteTheme', None]: + return self.by_property("name", name)
+ + def __repr__(self): + return f"<{str(type(self))}{self.name()}>"
+ +
[docs]class XAKeynoteTheme(XABase.XAObject): + """A class for managing and interacting with Keynote themes. + + .. seealso:: :class:`XAKeynoteApplication` + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the theme. + """ + return { + "id": self.xa_elem.id(), + "name": self.xa_elem.name() + } + + @property + def id(self) -> str: + """The unique identifier for the theme. + """ + return self.xa_elem.id() + + @property + def name(self) -> str: + """The name of the theme. + """ + return self.xa_elem.name() + + def __repr__(self): + return f"<{str(type(self))}{self.name}, id={str(self.id)}>"
+ + + + +
[docs]class XAKeynoteContainerList(iWorkApplicationBase.XAiWorkContainerList): + """A wrapper around lists of containers that employs fast enumeration techniques. + + .. versionadded:: 0.0.5 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAKeynoteContainer + self._xa_ccls = XAKeynoteSlideList + super().__init__(properties, filter, obj_class)
+ +
[docs]class XAKeynoteContainer(iWorkApplicationBase.XAiWorkContainer): + """A class for managing and interacting with containers in Keynote. + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + self._xa_ccls = XAKeynoteSlideList + super().__init__(properties)
+ + + + +
[docs]class XAKeynoteSlideList(XAKeynoteContainerList): + """A wrapper around lists of themes that employs fast enumeration techniques. + + All properties of themes can be called as methods on the wrapped list, returning a list containing each theme's value for the property. + + .. versionadded:: 0.0.5 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAKeynoteSlide + super().__init__(properties, filter, obj_class) + +
[docs] def properties(self) -> list[dict]: + raw_dicts = self.xa_elem.arrayByApplyingSelector_("properties") or [] + pyxa_dicts = [None] * len(self.xa_elem) + for index, raw_dict in enumerate(raw_dicts): + pyxa_dicts[index] = { + "default_title_item": self._new_element(raw_dict["defaultTitleItem"], iWorkApplicationBase.XAiWorkShape), + "slide_number": raw_dict["slideNumber"], + "default_body_item": self._new_element(raw_dict["defaultBodyItem"], iWorkApplicationBase.XAiWorkShape), + "skipped": raw_dict["skipped"] == 1, + "body_showing": raw_dict["bodyShowing"] == 1, + "presenter_notes": self._new_element(raw_dict["presenterNotes"], XABase.XAText), + "title_showing": raw_dict["titleShowing"] == 1, + "transition_properties": XAKeynoteTransitionSettings({ + "automatic_transition": raw_dict["transitionProperties"]["automaticTransition"] == 1, + "transition_delay": raw_dict["transitionProperties"]["transitionDelay"], + "transtion_duration": raw_dict["transitionProperties"]["transitionDuration"], + "transition_effect": XAKeynoteApplication.Transition(XABase.OSType(raw_dict["transitionProperties"]["transitionEffect"].stringValue())) + }, self._new_element(self.xa_elem[index], XAKeynoteSlide)), + "base_layout": self._new_element(raw_dict["baseLayout"], XAKeynoteSlideLayout) + } + return pyxa_dicts
+ +
[docs] def body_showing(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("bodyShowing") or [])
+ +
[docs] def skipped(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("skipped") or [])
+ +
[docs] def slide_number(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("slideNumber") or [])
+ +
[docs] def title_showing(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("titleShowing") or [])
+ +
[docs] def transition_properties(self) -> list[dict]: + raw_dicts = self.xa_elem.arrayByApplyingSelector_("transitionProperties") or [] + pyxa_dicts = [None] * len(self.xa_elem) + for index, raw_dict in enumerate(raw_dicts): + pyxa_dicts[index] = XAKeynoteTransitionSettings({ + "automatic_transition": raw_dict["automaticTransition"] == 1, + "transition_delay": raw_dict["transitionDelay"], + "transtion_duration": raw_dict["transitionDuration"], + "transition_effect": XAKeynoteApplication.Transition(XABase.OSType(raw_dict["transitionEffect"].stringValue())) + }, self._new_element(self.xa_elem[index], XAKeynoteSlide)) + return pyxa_dicts
+ +
[docs] def base_layout(self) -> 'XAKeynoteSlideLayoutList': + ls = self.xa_elem.arrayByApplyingSelector_("baseLayout") or [] + return self._new_element(ls, XAKeynoteSlideLayoutList)
+ +
[docs] def default_body_item(self) -> 'iWorkApplicationBase.XAiWorkShapeList': + ls = self.xa_elem.arrayByApplyingSelector_("defaultBodyItem") or [] + return self._new_element(ls, iWorkApplicationBase.XAiWorkShapeList)
+ +
[docs] def default_title_item(self) -> 'iWorkApplicationBase.XAiWorkShapeList': + ls = self.xa_elem.arrayByApplyingSelector_("defaultTitleItem") or [] + return self._new_element(ls, iWorkApplicationBase.XAiWorkShapeList)
+ +
[docs] def presenter_notes(self) -> XABase.XATextList: + ls = self.xa_elem.arrayByApplyingSelector_("presenterNotes") or [] + return self._new_element(ls, XABase.XATextList)
+ +
[docs] def by_properties(self, properties: dict) -> 'XAKeynoteSlide': + raw_dict = {} + + if "default_title_item" in properties: + raw_dict["defaultTitleItem"] = properties["default_title_item"].xa_elem + + if "slide_number" in properties: + raw_dict["slideNumber"] = properties["slide_number"] + + if "default_body_item" in properties: + raw_dict["defaultBodyItem"] = properties["default_body_item"].xa_elem + + if "skipped" in properties: + raw_dict["skipped"] = properties["skipped"] + + if "body_showing" in properties: + raw_dict["bodyShowing"] = properties["body_showing"] + + if "presenter_notes" in properties: + if isinstance(properties["presenter_notes"], str): + raw_dict["presenterNotes"] = properties["presenter_notes"] + else: + raw_dict["presenterNotes"] = properties["presenter_notes"].xa_elem + + if "title_showing" in properties: + raw_dict["titleShowing"] = properties["title_showing"] + + if "transition_properties" in properties: + raw_dict["transitionProperties"] = {} + if isinstance(properties["transition_properties"], XAKeynoteTransitionSettings): + properties["transition_properties"] = properties["transition_properties"]._pyxa_dict + + if "automatic_transition" in properties["transition_properties"]: + raw_dict["transitionProperties"]["automaticTransition"] = properties["transition_properties"]["automatic_transition"] + + if "transition_delay" in properties["transition_properties"]: + raw_dict["transitionProperties"]["transitionDelay"] = properties["transition_properties"]["transition_delay"] + + if "transtion_duration" in properties["transition_properties"]: + raw_dict["transitionProperties"]["transitionDuration"] = properties["transition_properties"]["transtion_duration"] + + if "transition_effect" in properties["transition_properties"]: + raw_dict["transitionProperties"]["transitionEffect"] = XAEvents.event_from_type_code(properties["transition_properties"]["transition_effect"].value) + + if "base_layout" in properties: + raw_dict["baseLayout"] = properties["base_layout"].xa_elem + + for slide in self.xa_elem: + if all(raw_dict[x] == slide.properties()[x] for x in raw_dict): + return self._new_element(slide, XAKeynoteSlide)
+ +
[docs] def by_body_showing(self, body_showing: bool) -> 'XAKeynoteSlide': + return self.by_property("bodyShowing", body_showing)
+ +
[docs] def by_skipped(self, skipped: bool) -> 'XAKeynoteSlide': + return self.by_property("skipped", skipped)
+ +
[docs] def by_slide_number(self, slide_number: int) -> 'XAKeynoteSlide': + return self.by_property("slideNumber", slide_number)
+ +
[docs] def by_title_showing(self, title_showing: bool) -> 'XAKeynoteSlide': + return self.by_property("titleShowing", title_showing)
+ +
[docs] def by_transition_properties(self, transition_properties: Union['XAKeynoteTransitionSettings', dict]) -> 'XAKeynoteSlide': + properties = {} + if isinstance(transition_properties, XAKeynoteTransitionSettings): + transition_properties = transition_properties._pyxa_dict + + if "automatic_transition" in transition_properties: + properties["automaticTransition"] = transition_properties["automatic_transition"] + + if "transition_delay" in transition_properties: + properties["transitionDelay"] = transition_properties["transition_delay"] + + if "transtion_duration" in transition_properties: + properties["transitionDuration"] = transition_properties["transtion_duration"] + + if "transition_effect" in transition_properties: + properties["transitionEffect"] = XAEvents.event_from_type_code(transition_properties["transition_effect"].value) + + return self.by_property("transitionProperties", properties)
+ +
[docs] def by_base_layout(self, base_layout: 'XAKeynoteSlideLayout') -> 'XAKeynoteSlide': + return self.by_property("baseLayout", base_layout.xa_elem)
+ +
[docs] def by_default_body_item(self, default_body_item: 'iWorkApplicationBase.XAiWorkShape') -> 'XAKeynoteSlide': + return self.by_property("defaultBodyItem", default_body_item.xa_elem)
+ +
[docs] def by_default_text_item(self, default_text_item: 'iWorkApplicationBase.XAiWorkShape') -> 'XAKeynoteSlide': + return self.by_property("defaultTextItem", default_text_item.xa_elem)
+ +
[docs] def by_presenter_notes(self, presenter_notes: Union[str, XABase.XAText]) -> 'XAKeynoteSlide': + if isinstance(presenter_notes, str): + self.by_property('presenterNotes', presenter_notes) + else: + self.by_property('presenterNotes', presenter_notes.xa_elem)
+ + def __repr__(self): + return "<" + str(type(self)) + "length: " + str(len(self.xa_elem)) + ">"
+ +
[docs]class XAKeynoteSlide(XAKeynoteContainer): + """A class for managing and interacting with Keynote slides. + + .. seealso:: :class:`XAKeynoteApplication`, :class:`iWorkApplicationBase.XAiWorkiWorkItem` + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the slide. + """ + raw_dict = self.xa_elem.properties() + pyxa_dict = { + "default_title_item": self._new_element(raw_dict["defaultTitleItem"], iWorkApplicationBase.XAiWorkShape), + "slide_number": raw_dict["slideNumber"], + "default_body_item": self._new_element(raw_dict["defaultBodyItem"], iWorkApplicationBase.XAiWorkShape), + "skipped": raw_dict["skipped"] == 1, + "body_showing": raw_dict["bodyShowing"] == 1, + "presenter_notes": self._new_element(raw_dict["presenterNotes"], XABase.XAText), + "title_showing": raw_dict["titleShowing"] == 1, + "transition_properties": XAKeynoteTransitionSettings({ + "automatic_transition": raw_dict["transitionProperties"]["automaticTransition"] == 1, + "transition_delay": raw_dict["transitionProperties"]["transitionDelay"], + "transition_duration": raw_dict["transitionProperties"]["transitionDuration"], + "transition_effect": XAKeynoteApplication.Transition(XABase.OSType(raw_dict["transitionProperties"]["transitionEffect"].stringValue())) + }, self), + "base_layout": self._new_element(raw_dict["baseLayout"], XAKeynoteSlideLayout) + } + return pyxa_dict + + @property + def body_showing(self) -> bool: + """Whether the default body text is displayed. + """ + return self.xa_elem.bodyShowing() + + @body_showing.setter + def body_showing(self, body_showing: bool): + self.set_property('bodyShowing', body_showing) + + @property + def skipped(self) -> bool: + """Whether the slide is skipped. + """ + return self.xa_elem.skipped() + + @skipped.setter + def skipped(self, skipped: bool): + self.set_property('skipped', skipped) + + @property + def slide_number(self) -> int: + """The index of the slide in the document. + """ + return self.xa_elem.slideNumber() + + @property + def title_showing(self) -> bool: + """Whether the default slide title is displayed. + """ + return self.xa_elem.titleShowing() + + @title_showing.setter + def title_showing(self, title_showing: bool): + self.set_property('titleShowing', title_showing) + + @property + def transition_properties(self) -> dict: + """The transition settings applied to the slide. + """ + raw_dict = self.xa_elem.transitionProperties() + pyxa_dict = { + "automatic_transition": raw_dict["automaticTransition"] == 1, + "transition_delay": raw_dict["transitionDelay"], + "transition_duration": raw_dict["transitionDuration"], + "transition_effect": XAKeynoteApplication.Transition(XABase.OSType(raw_dict["transitionEffect"].stringValue())) + } + return XAKeynoteTransitionSettings(pyxa_dict, self) + + @transition_properties.setter + def transition_properties(self, transition_properties: Union['XAKeynoteTransitionSettings', dict]): + properties = {} + if isinstance(transition_properties, XAKeynoteTransitionSettings): + transition_properties = transition_properties._pyxa_dict + + if "automatic_transition" in transition_properties: + properties["automaticTransition"] = transition_properties["automatic_transition"] + + if "transition_delay" in transition_properties: + properties["transitionDelay"] = transition_properties["transition_delay"] + + if "transtion_duration" in transition_properties: + properties["transitionDuration"] = transition_properties["transtion_duration"] + + if "transition_effect" in transition_properties: + properties["transitionEffect"] = XAEvents.event_from_type_code(transition_properties["transition_effect"].value) + + self.set_property('transitionProperties', properties) + + @property + def base_layout(self) -> 'XAKeynoteSlideLayout': + """The slide layout this slide is based on. + """ + return self._new_element(self.xa_elem.baseLayout(), XAKeynoteSlideLayout) + + @base_layout.setter + def base_layout(self, base_layout: 'XAKeynoteSlideLayout'): + self.set_property('baseLayout', base_layout.xa_elem) + + @property + def default_body_item(self) -> 'iWorkApplicationBase.XAiWorkShape': + """The default body container of the slide. + """ + return self._new_element(self.xa_elem.defaultBodyItem(), iWorkApplicationBase.XAiWorkShape) + + @property + def default_title_item(self) -> 'iWorkApplicationBase.XAiWorkShape': + """The default title container of the slide. + """ + return self._new_element(self.xa_elem.defaultTitleItem(), iWorkApplicationBase.XAiWorkShape) + + @property + def presenter_notes(self) -> XABase.XAText: + """The presenter notes for the slide. + """ + return self._new_element(self.xa_elem.presenterNotes(), XABase.XAText) + + @presenter_notes.setter + def presenter_notes(self, presenter_notes: Union[XABase.XAText, str]): + if isinstance(presenter_notes, str): + self.set_property('presenterNotes', presenter_notes) + else: + self.set_property('presenterNotes', presenter_notes.xa_elem) + +
[docs] def duplicate(self) -> 'XAKeynoteSlide': + """Duplicates the slide, mimicking the action of copying and pasting the slide manually. + + :return: A reference to newly created (duplicate) slide object. + :rtype: XAKeynoteSlide + + .. versionadded:: 0.0.2 + """ + new_slide = None + if isinstance(self.xa_prnt, XAKeynoteSlideList): + # Parent is an XAList object -- we can natively use positionAfter() + self.xa_elem.duplicateTo_withProperties_(self.xa_elem.positionAfter(), None) + new_slide = self._new_element(self.xa_prnt.xa_prnt.xa_elem.slides()[-1], XAKeynoteSlide) + else: + # Parent is an XADocument object -- we have to get an NSArray instance + slide = self.xa_prnt.xa_elem.slides()[self.slide_number - 1] + slide.duplicateTo_withProperties_(slide.positionAfter(), None) + new_slide = self._new_element(self.xa_prnt.xa_elem.slides()[-1], XAKeynoteSlide) + return new_slide
+ +
[docs] def delete(self): + """Deletes the slide. + + .. versionadded:: 0.0.2 + """ + self.xa_elem.delete()
+ +
[docs] def add_image(self, file_path: Union[str, XABase.XAPath, XABase.XAURL]) -> 'iWorkApplicationBase.XAiWorkImage': + """Adds the image at the specified path to the slide. + + :param file_path: The path to the image file. + :type file_path: Union[str, XABase.XAPath, XABase.XAURL] + :return: The newly created image object. + :rtype: iWorkApplicationBase.XAiWorkImage + + .. versionadded:: 0.0.2 + """ + url = file_path + if isinstance(url, str): + if "://" in url: + url = XABase.XAURL(url) + else: + url = XABase.XAPath(url) + + image = None + + parent = self.xa_prnt.xa_prnt + max_backtracks = 6 # this -> slidelist -> document -> document list -> window -> window list -> application + num_backtracks = 0 + while not hasattr(parent, "make") and num_backtracks < max_backtracks: + parent = parent.xa_prnt + num_backtracks += 1 + + image = parent.make("image", { "file": url.xa_elem }) + return self.images().push(image)
+ +
[docs] def add_chart(self, row_names: list[str], column_names: list[str], data: list[list[Any]], type: int = XAKeynoteApplication.ChartType.LINE_2D.value, group_by: int = XAKeynoteApplication.ChartGrouping.ROW.value) -> 'iWorkApplicationBase.XAiWorkChart': + """_summary_ + + _extended_summary_ + + :param row_names: A list of row names. + :type row_names: list[str] + :param column_names: A list of column names. + :type column_names: list[str] + :param data: A 2d array + :type data: list[list[Any]] + :param type: The chart type, defaults to _KeynoteLegacyChartType.KeynoteLegacyChartTypeLine_2d.value + :type type: int, optional + :param group_by: The grouping schema, defaults to _KeynoteLegacyChartGrouping.KeynoteLegacyChartGroupingChartRow.value + :type group_by: int, optional + :return: A reference to the newly created chart object. + :rtype: iWorkApplicationBase.XAiWorkChart + + .. versionadded:: 0.0.2 + """ + parent = self.xa_prnt + max_backtracks = 2 # this -> slidelist -> document + num_backtracks = 0 + while not isinstance(parent, XAKeynoteDocument) and num_backtracks < max_backtracks: + parent = parent.xa_prnt + num_backtracks += 1 + + self.xa_prnt.set_property("currentSlide", self.xa_elem) + self.xa_elem.addChartRowNames_columnNames_data_type_groupBy_(row_names, column_names, data, type, group_by) + chart = self.xa_elem.charts()[-1].get() + return self._new_element(chart, iWorkApplicationBase.XAiWorkChart)
+ + def __repr__(self): + return "<" + str(type(self)) + "slide number: " + str(self.slide_number) + ">"
+ + + + +
[docs]class XAKeynoteSlideLayoutList(XAKeynoteSlideList): + """A wrapper around lists of themes that employs fast enumeration techniques. + + All properties of themes can be called as methods on the wrapped list, returning a list containing each theme's value for the property. + + .. versionadded:: 0.0.5 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAKeynoteSlideLayout, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def by_name(self, name: str) -> 'XAKeynoteSlideLayout': + return self.by_property("name", name)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAKeynoteSlideLayout(XAKeynoteSlide): + """A class for managing and interacting with Keynote slide layouts. + + .. seealso:: :class:`XAKeynoteSlide` + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the slide layout. + """ + return self.xa_elem.name() + + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAKeynoteTransitionSettings(XABase.XAObject): + """Properties common to all transtions. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, parent: XABase.XAObject = None): + self.__automatic_transition: bool = properties["automatic_transition"] + self.__transition_delay: float = properties["transition_delay"] + self.__transition_duration: float = properties["transition_duration"] + self.__transition_effect: XAKeynoteApplication.Transition = properties["transition_effect"] + self.__parent = parent + + @property + def _pyxa_dict(self): + return { + "automatic_transition": self.__automatic_transition, + "transition_telay": self.__transition_delay, + "transition_duration": self.__transition_duration, + "transition_effect": self.__transition_effect + } + + @property + def automatic_transition(self) -> bool: + return self.__automatic_transition + + @automatic_transition.setter + def automatic_transition(self, automatic_transition: bool): + self.__automatic_transition = automatic_transition + if self.__parent is not None: + self.__parent.transition_properties = self._pyxa_dict + + @property + def transition_delay(self) -> float: + return self.__transition_delay + + @transition_delay.setter + def automatic_transition(self, transition_delay: float): + self.__transition_delay = transition_delay + if self.__parent is not None: + self.__parent.transition_properties = self._pyxa_dict + + @property + def transition_duration(self) -> float: + return self.__transition_duration + + @transition_duration.setter + def automatic_transition(self, transition_duration: float): + self.__transition_duration = transition_duration + if self.__parent is not None: + self.__parent.transition_properties = self._pyxa_dict + + @property + def transition_effect(self) -> XAKeynoteApplication.Transition: + return self.__transition_effect + + @transition_effect.setter + def transition_effect(self, transition_effect: XAKeynoteApplication.Transition): + self.__transition_effect = transition_effect + if self.__parent is not None: + self.__parent.transition_properties = self._pyxa_dict + + def __repr__(self): + return "<" + str(type(self)) + str(self._pyxa_dict) + ">"
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Mail.html b/docs/_modules/PyXA/apps/Mail.html new file mode 100644 index 0000000..22718d1 --- /dev/null +++ b/docs/_modules/PyXA/apps/Mail.html @@ -0,0 +1,3209 @@ + + + + + + PyXA.apps.Mail — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Mail

+""".. versionadded:: 0.0.4
+
+Control the macOS Mail application using JXA-like syntax.
+"""
+
+from datetime import datetime
+from enum import Enum
+from typing import Union
+
+import AppKit
+
+from PyXA import XABase
+from PyXA.XABase import OSType, unOSType
+from PyXA import XABaseScriptable
+from PyXA.XAEvents import event_from_str
+
+
[docs]class XAMailApplication(XABaseScriptable.XASBApplication): + """A class for managing and interacting with Mail.app. + + .. versionadded:: 0.0.4 + """ +
[docs] class Format(Enum): + """Options for file and message formats. + """ + NATIVE = OSType('item') + PLAIN_MESSAGE = OSType('dmpt') + RICH_MESSAGE = OSType('dmrt')
+ +
[docs] class QuotingColor(Enum): + """Options for colors to use when quoting text. + """ + BLUE = OSType('ccbl') + GREEN = OSType('ccgr') + ORANGE = OSType('ccor') + OTHER = OSType('ccot') + PURPLE = OSType('ccpu') + RED = OSType('ccre') + YELLOW = OSType('ccye')
+ +
[docs] class ViewerColumn(Enum): + """Columns in message viewer windows. + """ + ATTACHMENTS = OSType('ecat') #: Column containing the number of attachments a message contains + MESSAGE_COLOR = OSType('eccl') #: Used to indicate sorting should be done by color + DATE_RECEIVED = OSType('ecdr') #: Column containing the date a message was received + DATE_SENT = OSType('ecds') #: Column containing the date a message was sent + FLAGS = OSType('ecfl') #: Column containing the flags of a message + FROM = OSType('ecfr') #: Column containing the sender's name + MAILBOX = OSType('ecmb') #: Column containing the name of the mailbox or account a message is in + MESSAGE_STATUS = OSType('ecms') #: Column indicating a messages status (read, unread, replied to, forwarded, etc) + NUMBER = OSType('ecnm') #: Column containing the number of a message in a mailbox + SIZE = OSType('ecsz') #: Column containing the size of a message + SUBJECT = OSType('ecsu') #: Column containing the subject of a message + RECIPIENTS = OSType('ecto') #: Column containing the recipients of a message + DATE_LAST_SAVED = OSType('ecls') #: Column containing the date a draft message was saved
+ +
[docs] class AuthenticationMethod(Enum): + """Options for Mail account authentication methods. + """ + PASSWORD = OSType('axct') #: Clear text password + APOP = OSType('aapo') #: APOP + KERBEROS5 = OSType('axk5') #: Kerberos V5 (GSSAPI) + NTLM = OSType('axnt') #: NTLM + MD5 = OSType('axmd') #: CRAM-MD5 + EXTERNAL = OSType('aext') #: External authentication (TLS client certificate) + APPLE_TOKEN = OSType('atok') #: Apple token + NONE = OSType('ccno') #: None
+ +
[docs] class HighlightColor(Enum): + """Options for colors to use when highlighting text. + """ + BLUE = OSType('ccbl') + GRAY = OSType('ccgy') + GREEN = OSType('ccgr') + NONE = OSType('ccno') + ORANGE = OSType('ccor') + OTHER = OSType('ccot') + PURPLE = OSType('ccpu') + RED = OSType('ccre') + YELLOW = OSType('ccye')
+ +
[docs] class CachingPolicy(Enum): + DO_NOT_KEEP_COPIES_OF_ANY_MESSAGES = OSType('x9no') #: Do not use this option (deprecated). If you do, Mail will use the 'all messages but omit attachments' policy + ONLY_MESSAGES_I_HAVE_READ = OSType('x9wr') #: Do not use this option (deprecated). If you do, Mail will use the 'all messages but omit attachments' policy + ALL_MESSAGES_BUT_OMIT_ATTACHMENTS = OSType('x9bo') #: All messages but omit attachments + ALL_MESSAGES_AND_THEIR_ATTACHMENTS = OSType('x9al') #: All messages and their attachments
+ +
[docs] class RuleQualifier(Enum): + """Options for how Mail rules are qualified. + """ + BEGINS_WITH_VALUE = OSType('rqbw') + DOES_CONTAIN_VALUE = OSType('rqco') + DOES_NOT_CONTAIN_VALUE = OSType('rqdn') + ENDS_WITH_VALUE = OSType('rqew') + EQUAL_TO_VALUE = OSType('rqie') + LESS_THAN_VALUE = OSType('rqlt') + GREATER_THAN_VALUE = OSType('rqgt') + NONE = OSType('rqno') #: Indicates no qualifier is applicable
+ +
[docs] class RuleType(Enum): + """Types of rules in Mail.app. + """ + ACCOUNT = OSType('tacc') #: Account + ANY_RECIPIENT = OSType('tanr') #: Any recipient + CC_HEADER = OSType('tccc') #: Cc header + MATCHES_EVERY_MESSAGE = OSType('tevm') #: Every message + FROM_HEADER = OSType('tfro') #: From header + HEADER_KEY = OSType('thdk') #: An arbitrary header key + MESSAGE_CONTENT = OSType('tmec') #: Message content + MESSAGE_IS_JUNK_MAIL = OSType('tmij') #: Message is junk mail + SENDER_IS_IN_MY_CONTACTS = OSType('tsii') #: Sender is in my contacts + SENDER_IS_IN_MY_PREVIOUS_RECIPIENTS = OSType('tsah') #: Sender is in my previous recipients + SENDER_IS_MEMBER_OF_GROUP = OSType('tsim') #: Sender is member of group + SENDER_IS_NOT_IN_MY_CONTACTS = OSType('tsin') #: Sender is not in my contacts + SENDER_IS_NOT_IN_MY_PREVIOUS_RECIPIENTS = OSType('tnah') #: sender is not in my previous recipients + SENDER_IS_NOT_MEMBER_OF_GROUP = OSType('tsig') #: Sender is not member of group + SENDER_IS_VIP = OSType('tsig') #: Sender is VIP + SUBJECT_HEADER = OSType('tsub') #: Subject header + TO_HEADER = OSType('ttoo') #: To header + TO_OR_CC_HEADER = OSType('ttoc') #: To or Cc header + ATTACHMENT_TYPE = OSType('tatt') #: Attachment Type
+ +
[docs] class AccountType(Enum): + """Options for Mail account types. + """ + POP = OSType('etpo') + SMTP = OSType('etsm') + IMAP = OSType('etim') + ICLOUD = OSType('etit') + UNKNOWN = OSType('etun')
+ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether Mail is the active application. + """ + return self.xa_scel.frontmost() + + @property + def version(self) -> str: + """The version number of Mail.app. + """ + return self.xa_scel.version() + + @property + def always_bcc_myself(self) -> bool: + """ Whether the user's email address will be included in the Bcc: field of composed messages. + """ + return self.xa_scel.alwaysBccMyself() + + @always_bcc_myself.setter + def always_bcc_myself(self, always_bcc_myself: bool): + self.set_property('alwaysBccMyself', always_bcc_myself) + + @property + def always_cc_myself(self) -> bool: + """Whether the user's email address will be included in the Cc: field of composed messages. + """ + return self.xa_scel.alwaysCcMySelf() + + @always_cc_myself.setter + def always_cc_myself(self, always_cc_myself: bool): + self.set_property('alwaysCcMyself', always_cc_myself) + + @property + def selection(self) -> 'XAMailMessageList': + """The list of messages currently selected by the user. + """ + return self._new_element(self.xa_scel.selection(), XAMailMessageList) + + @property + def application_version(self) -> str: + """The build number of Mail.app. + """ + return self.xa_scel.applicationVersion() + + @property + def fetch_interval(self) -> int: + """The number of minutes between automatic fetches for new mail (-1 = use automatically determined interval). + """ + return self.xa_scel.fetchInterval() + + @fetch_interval.setter + def fetch_interval(self, fetch_interval: int): + self.set_property('fetchInterval', fetch_interval) + + @property + def background_activity_count(self) -> int: + """The number of background activities currently running in Mail. + """ + return self.xa_scel.backgroundActivityCount() + + @property + def choose_signature_when_composing(self) -> bool: + """Whether the user can choose a signature directly in a new compose window. + """ + return self.xa_scel.chooseSignatureWhenComposing() + + @choose_signature_when_composing.setter + def choose_signature_when_composing(self, choose_signature_when_composing: bool): + self.set_property('chooseSignatureWhenComposing', choose_signature_when_composing) + + @property + def color_quoted_text(self) -> bool: + """Whether quoted text should be colored. + """ + return self.xa_scel.colorQuotedText() + + @color_quoted_text.setter + def color_quoted_text(self, color_quoted_text: bool): + self.set_property('colorQuotedText', color_quoted_text) + + @property + def default_message_format(self) -> 'XAMailApplication.Format': + """The default format for messages being composed. + """ + return XAMailApplication.Format(OSType(self.xa_scel.defaultMessageFormat().stringValue())) + + @default_message_format.setter + def default_message_format(self, default_message_format: 'XAMailApplication.Format'): + self.set_property('defaultMessageFormat', default_message_format.value) + + @property + def download_html_attachments(self) -> bool: + """Whether images and attachments in HTML messages should be downloaded and displayed. + """ + return self.xa_scel.downloadHtmlAttachments() + + @download_html_attachments.setter + def download_html_attachments(self, download_html_attachments: bool): + self.set_property('downloadHtmlAttachments', download_html_attachments) + + @property + def drafts_mailbox(self) -> 'XAMailbox': + """The top-level drafts mailbox. + """ + return self._new_element(self.xa_scel.draftsMailbox(), XAMailbox) + + @property + def expand_group_addresses(self) -> bool: + """Whether group addresses should be expanded when entered into the address fields of a new message. + """ + return self.xa_scel.expandGroupAddresses() + + @expand_group_addresses.setter + def expand_group_addresses(self, expand_group_addresses: bool): + self.set_property('expandGroupAddresses', expand_group_addresses) + + @property + def fixed_width_font(self) -> str: + """The name of the font used for plain text messages. + """ + return self.xa_scel.fixedWidthFont() + + @fixed_width_font.setter + def fixed_width_font(self, fixed_width_font: str): + self.set_property('fixedWidthFont', fixed_width_font) + + @property + def fixed_width_font_size(self) -> int: + """The font size for plain text messages. + """ + return self.xa_scel.fixedWidthFontSize() + + @fixed_width_font_size.setter + def fixed_width_font_size(self, fixed_width_font_size: int): + self.set_property('fixedWidthFontSize', fixed_width_font_size) + + @property + def inbox(self) -> 'XAMailbox': + """The top-level inbox. + """ + return self._new_element(self.xa_scel.inbox(), XAMailbox) + + @property + def include_all_original_message_text(self) -> bool: + """Whether all text of the original message will be quoted or only text the user selects. + """ + return self.xa_scel.includeAllOriginalMessageText() + + @include_all_original_message_text.setter + def include_all_original_message_text(self, include_all_original_message_text: bool): + self.set_property('includeAllOriginalMessageText', include_all_original_message_text) + + @property + def quote_original_message(self) -> bool: + """Whether the text of the original message should be included in replies. + """ + return self.xa_scel.quoteOriginalMessage() + + @quote_original_message.setter + def quote_original_message(self, quote_original_message: bool): + self.set_property('quoteOriginalMessage', quote_original_message) + + @property + def check_spelling_while_typing(self) -> bool: + """Whether spelling is checked automatically while composing messages. + """ + return self.xa_scel.checkSpellingWhileTyping() + + @check_spelling_while_typing.setter + def check_spelling_while_typing(self, check_spelling_while_typing: bool): + self.set_property('checkSpellingWhileTyping', check_spelling_while_typing) + + @property + def junk_mailbox(self) -> 'XAMailbox': + """The top-level junk mailbox. + """ + return self._new_element(self.xa_scel.junkMailbox(), XAMailbox) + + @property + def level_one_quoting_color(self) -> 'XAMailApplication.QuotingColor': + """Color for quoted text with one level of indentation. + """ + return XAMailApplication.QuotingColor(OSType(self.xa_scel.levelOneQuotingColor().stringValue())) + + @level_one_quoting_color.setter + def level_one_quoting_color(self, level_one_quoting_color: 'XAMailApplication.QuotingColor'): + self.set_property('levelOneQuotingColor', level_one_quoting_color) + + @property + def level_two_quoting_color(self) -> 'XAMailApplication.QuotingColor': + """Color for quoted text with two levels of indentation. + """ + return XAMailApplication.QuotingColor(OSType(self.xa_scel.levelTwoQuotingColor().stringValue())) + + @level_two_quoting_color.setter + def level_two_quoting_color(self, level_two_quoting_color: 'XAMailApplication.QuotingColor'): + self.set_property('levelTwoQuotingColor', level_two_quoting_color) + + @property + def level_three_quoting_color(self) -> 'XAMailApplication.QuotingColor': + """Color for quoted text with three levels of indentation. + """ + return XAMailApplication.QuotingColor(OSType(self.xa_scel.levelThreeQuotingColor().stringValue())) + + @level_three_quoting_color.setter + def level_three_quoting_color(self, level_three_quoting_color: 'XAMailApplication.QuotingColor'): + self.set_property('levelThreeQuotingColor', level_three_quoting_color) + + @property + def message_font(self) -> str: + """The name of the font for messages. + """ + return self.xa_scel.messageFont() + + @message_font.setter + def message_font(self, message_font: str): + self.set_property('messageFont', message_font) + + @property + def message_font_size(self) -> float: + """The font size for messages. + """ + return self.xa_scel.messageFontSize() + + @message_font_size.setter + def message_font_size(self, message_font_size: int): + self.set_property('messageFontSize', message_font_size) + + @property + def message_list_font(self) -> str: + """The name of the font for the message list. + """ + return self.xa_scel.messageListFont() + + @message_list_font.setter + def message_list_font(self, message_list_font: str): + self.set_property('messageListFont', message_list_font) + + @property + def message_list_font_size(self) -> float: + """The font size for the message list. + """ + return self.xa_scel.messageListFontSize() + + @message_list_font_size.setter + def message_list_font_size(self, message_list_font_size: int): + self.set_property('messageListFontSize', message_list_font_size) + + @property + def new_mail_sound(self) -> str: + """The name of the sound that plays when new mail is received, or "None". + """ + return self.xa_scel.newMailSound() + + @new_mail_sound.setter + def new_mail_sound(self, new_mail_sound: str): + self.set_property('newMailSound', new_mail_sound) + + @property + def outbox(self) -> 'XAMailbox': + """The top-level outbox. + """ + return self._new_element(self.xa_scel.outbox(), XAMailbox) + + @property + def should_play_other_mail_sounds(self) -> bool: + """Whether sounds will be played for actions and events other than receiving email. + """ + return self.xa_scel.shouldPlayOtherMailSounds() + + @should_play_other_mail_sounds.setter + def should_play_other_mail_sounds(self, should_play_other_mail_sounds: bool): + self.set_property('shouldPlayOtherMailSounds', should_play_other_mail_sounds) + + @property + def same_reply_format(self) -> bool: + """Whether replies will be in the same text format as the message to which the user is replying. + """ + return self.xa_scel.sameReplyFormat() + + @same_reply_format.setter + def same_reply_format(self, same_reply_format: bool): + self.set_property('sameReplyFormat', same_reply_format) + + @property + def selected_signature(self) -> str: + """The name of the currently selected signature (or "randomly", "sequentially", or "none"). + """ + return self.xa_scel.selectedSignature() + + @selected_signature.setter + def selected_signature(self, selected_signature: str): + self.set_property('selectedSignature', selected_signature) + + @property + def sent_mailbox(self) -> 'XAMailbox': + """The top-level sent mailbox. + """ + return self._new_element(self.xa_scel.sentMailbox(), XAMailbox) + + @property + def fetches_automatically(self) -> bool: + """Whether mail will automatically be fetched at a specific interval. + """ + return self.xa_scel.fetchesAutomatically() + + @fetches_automatically.setter + def fetches_automatically(self, fetches_automatically: bool): + self.set_property('fetchesAutomatically', fetches_automatically) + + @property + def highlight_selected_conversation(self) -> bool: + """Whether messages in conversations should be highlighted in the Mail viewer window when not grouped. + """ + return self.xa_scel.highlightSelectedConversation() + + @highlight_selected_conversation.setter + def highlight_selected_conversation(self, highlight_selected_conversation: bool): + self.set_property('highlightSelectedConversation', highlight_selected_conversation) + + @property + def trash_mailbox(self) -> 'XAMailbox': + """The top-level trash mailbox. + """ + return self._new_element(self.xa_scel.trashMailbox(), XAMailbox) + + @property + def use_fixed_width_font(self) -> bool: + """Whether a fixed-width font should be used for plain text messages. + """ + return self.xa_scel.useFixedWidthFont() + + @use_fixed_width_font.setter + def use_fixed_width_font(self, use_fixed_width_font: bool): + self.set_property('useFixedWidthFont', use_fixed_width_font) + + @property + def primary_email(self) -> str: + """The user's primary email address. + """ + return self.xa_scel.primaryEmail() + +
[docs] def check_for_new_mail(self, account: 'XAMailAccount') -> 'XAMailApplication': + self.xa_scel.checkForNewMailFor_(account.xa_elem) + return self
+ +
[docs] def import_mailbox(self, file_path: Union[str, AppKit.NSURL]) -> 'XAMailApplication': + self.xa_scel.importMailMailboxAt_(file_path) + return self
+ +
[docs] def synchronize(self, account: 'XAMailAccount') -> 'XAMailApplication': + self.xa_scel.synchronizeWith_(account.xa_elem) + return self
+ +
[docs] def accounts(self, filter: dict = None) -> 'XAMailAccountList': + """Returns a list of mail accounts matching the filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_scel.accounts(), XAMailPOPAccountList, filter)
+ +
[docs] def pop_accounts(self, filter: dict = None) -> 'XAMailAccountList': + """Returns a list of mail accounts matching the filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_scel.popAccounts(), XAMailPOPAccountList, filter)
+ + def imap_accounts(self, filter: dict = None) -> 'XAMailIMAPAccountList': + """Returns a list of mail accounts matching the filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_scel.imapAccounts(), XAMailIMAPAccountList, filter) + +
[docs] def imap_accounts(self, filter: dict = None) -> 'XAMailAccountList': + """Returns a list of mail accounts matching the filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_scel.icloudAccounts(), XAMailICloudAccountList, filter)
+ +
[docs] def smtp_servers(self, filter: dict = None) -> 'XAMailAccountList': + """Returns a list of mail accounts matching the filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_scel.smtpServers(), XAMailSMTPServerList, filter)
+ +
[docs] def outgoing_messages(self, filter: dict = None) -> 'XAMailAccountList': + """Returns a list of mail accounts matching the filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_scel.outgoingMessages(), XAMailOutgoingMessageList, filter)
+ +
[docs] def mailboxes(self, filter: dict = None) -> 'XAMailboxList': + """Returns a list of mail accounts matching the filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_scel.mailboxes(), XAMailboxList, filter)
+ +
[docs] def message_viewers(self, filter: dict = None) -> 'XAMailMessageViewerList': + """Returns a list of mail accounts matching the filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_scel.messageViewers(), XAMailMessageViewerList, filter)
+ +
[docs] def rules(self, filter: dict = None) -> 'XAMailRuleList': + """Returns a list of mail accounts matching the filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_scel.rules(), XAMailRuleList, filter)
+ +
[docs] def signatures(self, filter: dict = None) -> 'XAMailSignatureList': + """Returns a list of mail accounts matching the filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_scel.signatures(), XAMailSignatureList, filter)
+ + + + +
[docs]class XAMailWindow(XABaseScriptable.XASBWindow): + """A class for managing and interacting with Mail documents. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def document(self) -> 'XAMailDocument': + """The current document. + """ + doc_obj = self.xa_elem.document() + return self._new_element(doc_obj, XAMailDocument) + + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAMailMessageViewerList(XABase.XAList): + """A wrapper around lists of mail signatures that employs fast enumeration techniques. + + All properties of signatures can be called as methods on the wrapped list, returning a list containing each signature's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAMailMessageViewer, filter) + +
[docs] def drafts_mailbox(self) -> 'XAMailboxList': + ls = self.xa_elem.arrayByApplyingSelector_("draftsMailbox") or [] + return self._new_element(ls, XAMailboxList)
+ +
[docs] def inbox(self) -> 'XAMailboxList': + ls = self.xa_elem.arrayByApplyingSelector_("inbox") or [] + return self._new_element(ls, XAMailboxList)
+ +
[docs] def junk_mailbox(self) -> 'XAMailboxList': + ls = self.xa_elem.arrayByApplyingSelector_("junkMailbox") or [] + return self._new_element(ls, XAMailboxList)
+ +
[docs] def outbox(self) -> 'XAMailboxList': + ls = self.xa_elem.arrayByApplyingSelector_("outbox") or [] + return self._new_element(ls, XAMailboxList)
+ +
[docs] def sent_mailbox(self) -> 'XAMailboxList': + ls = self.xa_elem.arrayByApplyingSelector_("sentMailbox") or [] + return self._new_element(ls, XAMailboxList)
+ +
[docs] def trash_mailbox(self) -> 'XAMailboxList': + ls = self.xa_elem.arrayByApplyingSelector_("trashMailbox") or [] + return self._new_element(ls, XAMailboxList)
+ +
[docs] def sort_column(self) -> list[XAMailApplication.ViewerColumn]: + ls = self.xa_elem.arrayByApplyingSelector_("sortColumns") or [] + return [XAMailApplication.ViewerColumn(OSType(x.stringValue())) for x in ls]
+ +
[docs] def sorted_ascending(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("sortedAscending") or [])
+ +
[docs] def mailbox_list_visible(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("mailboxListVisible") or [])
+ +
[docs] def preview_pane_is_visible(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("previewPaneIsVisible") or [])
+ +
[docs] def visible_columns(self) -> list[list[str]]: + return list(self.xa_elem.arrayByApplyingSelector_("visibleColumns") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def visible_messages(self) -> list['XAMailMessageList']: + message_lists = self.xa_elem.arrayByApplyingSelector_("visibleMessages") or [] + return [self._new_element(ls, XAMailMessageList) for ls in message_lists]
+ +
[docs] def selected_messages(self) -> list['XAMailMessageList']: + message_lists = self.xa_elem.arrayByApplyingSelector_("selectedMessages") or [] + return [self._new_element(ls, XAMailMessageList) for ls in message_lists]
+ +
[docs] def selected_mailboxes(self) -> list['XAMailboxList']: + mailbox_lists = self.xa_elem.arrayByApplyingSelector_("selectedMailboxes") or [] + return [self._new_element(ls, XAMailboxList) for ls in mailbox_lists]
+ +
[docs] def window(self) -> XABaseScriptable.XASBWindowList: + windows = self.xa_elem.arrayByApplyingSelector_("window") or [] + return self._new_element(windows, XABaseScriptable.XASBWindowList)
+ +
[docs] def by_drafts_mailbox(self, drafts_mailbox: 'XAMailbox') -> Union['XAMailMessageViewer', None]: + return self.by_property("draftsMailbox", drafts_mailbox)
+ +
[docs] def by_inbox(self, inbox: 'XAMailbox') -> Union['XAMailMessageViewer', None]: + return self.by_property("inbox", inbox)
+ +
[docs] def by_junk_mailbox(self, junk_mailbox: 'XAMailbox') -> Union['XAMailMessageViewer', None]: + return self.by_property("junkMailbox", junk_mailbox)
+ +
[docs] def by_outbox(self, outbox: 'XAMailbox') -> Union['XAMailMessageViewer', None]: + return self.by_property("outbox", outbox)
+ +
[docs] def by_sent_mailbox(self, sent_mailbox: 'XAMailbox') -> Union['XAMailMessageViewer', None]: + return self.by_property("sentMailbox", sent_mailbox)
+ +
[docs] def by_trash_mailbox(self, trash_mailbox: 'XAMailbox') -> Union['XAMailMessageViewer', None]: + return self.by_property("trashMailbox", trash_mailbox.xa_elem)
+ +
[docs] def by_sort_column(self, sort_column: XAMailApplication.ViewerColumn) -> Union['XAMailMessageViewer', None]: + return self.by_property("sortColumn", event_from_str(unOSType(sort_column.value)))
+ +
[docs] def by_sorted_ascending(self, sorted_ascending: bool) -> Union['XAMailMessageViewer', None]: + return self.by_property("sortedAscending", sorted_ascending)
+ +
[docs] def by_mailbox_list_visible(self, mailbox_list_visible: bool) -> Union['XAMailMessageViewer', None]: + return self.by_property("mailboxListVisible", mailbox_list_visible)
+ +
[docs] def by_preview_pane_is_visible(self, preview_pane_is_visible: bool) -> Union['XAMailMessageViewer', None]: + return self.by_property("previewPaneIsVisible", preview_pane_is_visible)
+ +
[docs] def by_visible_columns(self, visible_columns: list[str]) -> Union['XAMailMessageViewer', None]: + return self.by_property("visibleColumns", visible_columns)
+ +
[docs] def by_id(self, id: int) -> Union['XAMailMessageViewer', None]: + return self.by_property("id", id)
+ +
[docs] def by_visible_messages(self, visible_messages: 'XAMailMessageList') -> Union['XAMailMessageViewer', None]: + return self.by_property("visibleMessages", visible_messages.xa_elem)
+ +
[docs] def by_selected_messages(self, selected_messages: 'XAMailMessageList') -> Union['XAMailMessageViewer', None]: + return self.by_property("selectedMessages", selected_messages.xa_elem)
+ +
[docs] def by_selected_mailboxes(self, selected_mailboxes: 'XAMailboxList') -> Union['XAMailMessageViewer', None]: + return self.by_property("selectedMailboxes", selected_mailboxes.xa_elem)
+ +
[docs] def by_window(self, window: XAMailWindow) -> Union['XAMailMessageViewer', None]: + return self.by_property("window", window.xa_scel)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.id()) + ">"
+ +
[docs]class XAMailMessageViewer(XABase.XAObject): + """A class for managing and interacting with the message viewer window in Mail.app. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def drafts_mailbox(self) -> 'XAMailbox': + """The top-level Drafts mailbox. + """ + return self._new_element(self.xa_elem.draftsMailbox(), XAMailbox) + + @property + def inbox(self) -> 'XAMailbox': + """The top-level Inbox mailbox. + """ + return self._new_element(self.xa_elem.inbox(), XAMailbox) + + @property + def junk_mailbox(self) -> 'XAMailbox': + """The top-level Junk mailbox. + """ + return self._new_element(self.xa_elem.junkMailbox(), XAMailbox) + + @property + def outbox(self) -> 'XAMailbox': + """The top-level Out mailbox. + """ + return self._new_element(self.xa_elem.outbox(), XAMailbox) + + @property + def sent_mailbox(self) -> 'XAMailbox': + """The top-level Sent mailbox. + """ + return self._new_element(self.xa_elem.sentMailbox(), XAMailbox) + + @property + def trash_mailbox(self) -> 'XAMailbox': + """The top-level Trash mailbox. + """ + return self._new_element(self.xa_elem.trashMailbox(), XAMailbox) + + @property + def sort_column(self) -> XAMailApplication.ViewerColumn: + """The column that is currently sorted in the viewer. + """ + return XAMailApplication.ViewerColumn(OSType(self.xa_elem.sortColumn().stringValue())) + + @sort_column.setter + def sort_column(self, sort_column: XAMailApplication.ViewerColumn): + self.set_property('sortColumn', sort_column.value) + + @property + def sort_ascending(self) -> bool: + """Whether the viewer is sorted ascending or not. + """ + return self.xa_elem.sortAscending() + + @sort_ascending.setter + def sort_ascending(self, sort_ascending: bool): + self.set_property('sortAscending', sort_ascending) + + @property + def mailbox_list_visible(self) -> bool: + """Controls whether the list of mailboxes is visible or not. + """ + return self.xa_elem.mailboxListVisible() + + @mailbox_list_visible.setter + def mailbox_list_visible(self, mailbox_list_visible: bool): + self.set_property('mailboxListVisible', mailbox_list_visible) + + @property + def preview_pane_is_visible(self) -> bool: + """Controls whether the preview pane of the message viewer window is visible or not. + """ + return self.xa_elem.previewPaneIsVisible() + + @preview_pane_is_visible.setter + def preview_pane_is_visible(self, preview_pane_is_visible: bool): + self.set_property('previewPaneIsVisible', preview_pane_is_visible) + + @property + def visible_columns(self) -> list[str]: + """List of columns that are visible. The subject column and the message status column will always be visible. + """ + return self.xa_elem.visibleColumns() + + @visible_columns.setter + def visible_columns(self, visible_columns: list[XAMailApplication.ViewerColumn]): + visible_columns = [x.value for x in visible_columns] + self.set_property('visibleColumns', visible_columns) + + @property + def id(self) -> int: + """The unique identifier of the message viewer. + """ + return self.xa_elem.id() + + @property + def visible_messages(self) -> 'XAMailMessageList': + """List of messages currently being displayed in the viewer. + """ + return self._new_element(self.xa_elem.visibleMessages(), XAMailMessageList) + + @visible_messages.setter + def visible_messages(self, visible_messages: Union['XAMailMessageList', list['XAMailMessage']]): + if isinstance(visible_messages, list): + visible_messages = [x.xa_elem for x in visible_messages] + self.set_property('visibleMessages', visible_messages) + else: + self.set_property('visibleMessages', visible_messages.xa_elem) + + @property + def selected_messages(self) -> 'XAMailMessageList': + """List of messages currently selected. + """ + return self._new_element(self.xa_elem.selectedMessages(), XAMailMessageList) + + @selected_messages.setter + def selected_messages(self, selected_messages: Union['XAMailMessageList', list['XAMailMessage']]): + if isinstance(selected_messages, list): + selected_messages = [x.xa_elem for x in selected_messages] + self.set_property('visibleMessages', selected_messages) + else: + self.set_property('visibleMessages', selected_messages.xa_elem) + + @property + def selected_mailboxes(self) -> 'XAMailboxList': + """List of mailboxes currently selected in the list of mailboxes. + """ + return self._new_element(self.xa_elem.selectedMailboxes(), XAMailboxList) + + @selected_mailboxes.setter + def selected_mailboxes(self, selected_mailboxes: Union['XAMailboxList', list['XAMailbox']]): + if isinstance(selected_mailboxes, list): + selected_mailboxes = [x.xa_elem for x in selected_mailboxes] + self.set_property('visibleMessages', selected_mailboxes) + else: + self.set_property('visibleMessages', selected_mailboxes.xa_elem) + + @property + def window(self) -> XAMailWindow: + """The window for the message viewer. + """ + return self._new_element(self.xa_elem.window(), XAMailWindow) + + @window.setter + def window(self, window: XAMailWindow): + self.set_property('window', window) + +
[docs] def messages(self, filter: dict = None) -> 'XAMailMessageList': + """Returns a list of messages matching the filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_elem.messages(), XAMailMessageList, filter)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.id) + ">"
+ + + + +
[docs]class XAMailSignatureList(XABase.XAList): + """A wrapper around lists of mail signatures that employs fast enumeration techniques. + + All properties of signatures can be called as methods on the wrapped list, returning a list containing each signature's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAMailDocument, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def content(self) -> list[XABase.XAText]: + ls = self.xa_elem.arrayByApplyingSelector_("content") or [] + return self._new_element(ls, XABase.XATextList)
+ +
[docs] def by_name(self, name: str) -> Union['XAMailSignature', None]: + return self.by_property("name", name)
+ +
[docs] def by_content(self, content: XABase.XAText) -> Union['XAMailSignature', None]: + return self.by_property("content", content.xa_elem)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAMailSignature(XABase.XAObject): + """A class for managing and interacting with email signatures in Mail.app. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def content(self) -> XABase.XAText: + """The content of the email signature. + """ + return self._new_element(self.xa_elem.content(), XABase.XAText) + + @content.setter + def content(self, content: str): + self.set_property('content', content) + + @property + def name(self) -> str: + """The name of the signature. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + +
[docs] def delete(self): + """Permanently deletes the signature. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.delete()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAMailAccountList(XABase.XAList): + """A wrapper around lists of mail accounts that employs fast enumeration techniques. + + All properties of accounts can be called as methods on the wrapped list, returning a list containing each account's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, object_class = None): + if object_class is None: + object_class = XAMailAccount + super().__init__(properties, object_class, filter) + +
[docs] def delivery_account(self) -> 'XAMailSMTPServerList': + ls = self.xa_elem.arrayByApplyingSelector_("deliveryAccount") or [] + return self._new_element(ls, XAMailSMTPServerList)
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def authentication(self) -> list[XAMailApplication.AuthenticationMethod]: + ls = self.xa_elem.arrayByApplyingSelector_("authentication") or [] + return [XAMailApplication.AuthenticationMethod(OSType(x.stringValue())) for x in ls]
+ +
[docs] def account_type(self) -> list[XAMailApplication.AccountType]: + ls = self.xa_elem.arrayByApplyingSelector_("accountType") or [] + return [XAMailApplication.AccountType(OSType(x.stringValue())) for x in ls]
+ +
[docs] def email_addresses(self) -> list[list[str]]: + return list(self.xa_elem.arrayByApplyingSelector_("emailAddresses") or [])
+ +
[docs] def full_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("fullName") or [])
+ +
[docs] def empty_junk_messages_frequency(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("emptyJunkMessagesFrequency") or [])
+ +
[docs] def empty_trash_frequency(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("emptyTrashFrequency") or [])
+ +
[docs] def empty_junk_messages_on_quit(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("emptyJunkMessagesOnQuit") or [])
+ +
[docs] def empty_trash_on_quit(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("emptyTrashOnQuit") or [])
+ +
[docs] def enabled(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("enabled") or [])
+ +
[docs] def user_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("userName") or [])
+ +
[docs] def account_directory(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("accountDirectory") or [])
+ +
[docs] def port(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("port") or [])
+ +
[docs] def server_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("serverName") or [])
+ +
[docs] def move_deleted_messages_to_trash(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("moveDeletedMessagesToTrash") or [])
+ +
[docs] def uses_ssl(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("usesSsl") or [])
+ +
[docs] def by_delivery_account(self, delivery_account: 'XAMailSMTPServer') -> Union['XAMailAccount', None]: + return self.by_property("deliveryAccount", delivery_account.xa_elem)
+ +
[docs] def by_name(self, name: str) -> Union['XAMailAccount', None]: + return self.by_property("name", name)
+ +
[docs] def by_id(self, id: str) -> Union['XAMailAccount', None]: + return self.by_property("id", id)
+ +
[docs] def by_authentication(self, authentication: XAMailApplication.AuthenticationMethod) -> Union['XAMailAccount', None]: + return self.by_property("authentication", event_from_str(unOSType(authentication.value)))
+ +
[docs] def by_account_type(self, account_type: XAMailApplication.AccountType) -> Union['XAMailAccount', None]: + return self.by_property("accountType", event_from_str(unOSType(account_type.value)))
+ +
[docs] def by_email_addresses(self, email_addresses: list[str]) -> Union['XAMailAccount', None]: + return self.by_property("emailAddresses", email_addresses)
+ +
[docs] def by_full_name(self, full_name: str) -> Union['XAMailAccount', None]: + return self.by_property("fullName", full_name)
+ +
[docs] def by_empty_junk_messages_frequency(self, empty_junk_messages_frequency: int) -> Union['XAMailAccount', None]: + return self.by_property("emptyJunkMessagesFrequency", empty_junk_messages_frequency)
+ +
[docs] def by_empty_trash_frequency(self, empty_trash_frequency: int) -> Union['XAMailAccount', None]: + return self.by_property("emptyTrashFrequency", empty_trash_frequency)
+ +
[docs] def by_empty_junk_messages_on_quit(self, empty_junk_messages_on_quit: bool) -> Union['XAMailAccount', None]: + return self.by_property("emptyJunkMessagesOnQuit", empty_junk_messages_on_quit)
+ +
[docs] def by_empty_trash_on_quit(self, empty_trash_on_quit: bool) -> Union['XAMailAccount', None]: + return self.by_property("emptyTrashOnQuit", empty_trash_on_quit)
+ +
[docs] def by_enabled(self, enabled: bool) -> Union['XAMailAccount', None]: + return self.by_property("enabled", enabled)
+ +
[docs] def by_user_name(self, user_name: str) -> Union['XAMailAccount', None]: + return self.by_property("userName", user_name)
+ +
[docs] def by_account_directory(self, account_directory: str) -> Union['XAMailAccount', None]: + return self.by_property("accountDirectory", account_directory)
+ +
[docs] def by_port(self, port: int) -> Union['XAMailAccount', None]: + return self.by_property("port", port)
+ +
[docs] def by_server_name(self, server_name: str) -> Union['XAMailAccount', None]: + return self.by_property("serverName", server_name)
+ +
[docs] def by_move_deleted_messages_to_trash(self, move_deleted_messages_to_trash: bool) -> Union['XAMailAccount', None]: + return self.by_property("moveDeletedMessagesToTrash", move_deleted_messages_to_trash)
+ +
[docs] def by_uses_ssl(self, uses_ssl: bool) -> Union['XAMailAccount', None]: + return self.by_property("usesSsl", uses_ssl)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAMailAccount(XABase.XAObject): + """A class for managing and interacting with accounts in Mail.app. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def delivery_account(self) -> 'XAMailSMTPServer': + """The delivery account use when sending messages from the account. + """ + return self._new_element(self.xa_elem.deliveryAccount(), XAMailSMTPServer) + + @delivery_account.setter + def delivery_account(self, delivery_account: 'XAMailSMTPServer'): + self.set_property('deliveryAccount', delivery_account.xa_elem) + + @property + def name(self) -> str: + """The name of the account. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def id(self) -> str: + """The unique identifier for the account. + """ + return self.xa_elem.id() + + @property + def password(self) -> None: + """The password for the account. + """ + return + + @password.setter + def password(self, password: str): + self.set_property('password', password) + + @property + def authentication(self) -> XAMailApplication.AuthenticationMethod: + """he preferred authentication scheme for the account, either: "password", "apop", "kerberos 5", "ntlm", "md5", "external", "Apple token", or "none". + """ + return XAMailApplication.AuthenticationMethod(OSType(self.xa_elem.authentication().stringValue())) + + @authentication.setter + def authentication(self, authentication: XAMailApplication.AuthenticationMethod): + self.set_property('authentication', authentication.value) + + @property + def account_type(self) -> XAMailApplication.AccountType: + """The type of the account, either: "pop", "smtp", "imap", or "iCloud". + """ + return XAMailApplication.AccountType(OSType(self.xa_elem.accountType().stringValue())) + + @property + def email_addresses(self) -> list[str]: + """The list of email addresses associated with the account. + """ + return self.xa_elem.emailAddresses() + + @email_addresses.setter + def email_addresses(self, email_addresses: list[str]): + self.set_property('emailAddresses', email_addresses) + + @property + def full_name(self) -> str: + """The user's full name associated with the account. + """ + return self.xa_elem.fullName() + + @full_name.setter + def full_name(self, full_name: str): + self.set_property('fullName', full_name) + + @property + def empty_junk_messages_frequency(self) -> int: + """Number of days before junk messages are deleted (0 = delete on quit, -1 = never delete). + """ + return self.xa_elem.emptyJunkMessagesFrequency() + + @empty_junk_messages_frequency.setter + def empty_junk_messages_frequency(self, empty_junk_messages_frequency: int): + self.set_property('emptyJunkMessagesFrequency', empty_junk_messages_frequency) + + @property + def empty_trash_frequency(self) -> int: + """Number of days before messages in the trash are deleted (0 = delete on quit, -1 = never delete). + """ + return self.xa_elem.emptyTrashFrequency() + + @empty_trash_frequency.setter + def empty_trash_frequency(self, empty_trash_frequency: type): + self.set_property('empty_trash_frequency', empty_trash_frequency) + + @property + def empty_junk_messages_on_quit(self) -> bool: + """Whether messages marked as junk are deleted upon quitting Mail.app. + """ + return self.xa_elem.emptyJunkMessagesOnQuit() + + @empty_junk_messages_on_quit.setter + def empty_junk_messages_on_quit(self, empty_junk_messages_on_quit: bool): + self.set_property('emptyJunkMessagesOnQuit', empty_junk_messages_on_quit) + + @property + def empty_trash_on_quit(self) -> bool: + """Whether messages in the trash are permanently deleted upon quitting Mail.app. + """ + return self.xa_elem.emptyTrashOnQuit() + + @empty_trash_on_quit.setter + def empty_trash_on_quit(self, empty_trash_on_quit: bool): + self.set_property('emptyTrashOnQuit', empty_trash_on_quit) + + @property + def enabled(self) -> bool: + """Whether the account is enabled. + """ + return self.xa_elem.enabled() + + @enabled.setter + def enabled(self, enabled: bool): + self.set_property('enabled', enabled) + + @property + def user_name(self) -> str: + """The user name used to connect to the account. + """ + return self.xa_elem.userName() + + @user_name.setter + def user_name(self, user_name: str): + self.set_property('userName', user_name) + + @property + def account_directory(self) -> str: + """The directory where the account stores items on the disk. + """ + return self.xa_elem.accountDirectory() + + @property + def port(self) -> int: + """The port used to connect to the account. + """ + return self.xa_elem.port() + + @port.setter + def port(self, port: int): + self.set_property('port', port) + + @property + def server_name(self) -> str: + """The host name used to connect to the account. + """ + return self.xa_elem.serverName() + + @server_name.setter + def server_name(self, server_name: str): + self.set_property('serverName', server_name) + + @property + def move_deleted_messages_to_trash(self) -> bool: + """Whether messages are moved to the trash mailbox upon deletion. + """ + return self.xa_elem.moveDeletedMessagesToTrash() + + @move_deleted_messages_to_trash.setter + def move_deleted_messages_to_trash(self, move_deleted_messages_to_trash: bool): + self.set_property('moveDeletedMessagesToTrash', move_deleted_messages_to_trash) + + @property + def uses_ssl(self) -> bool: + """Whether SSL is enabled for this receiving account. + """ + return self.xa_elem.usesSsl() + + @uses_ssl.setter + def uses_ssl(self, uses_ssl: bool): + self.set_property('usesSsl', uses_ssl) + +
[docs] def mailboxes(self, filter: dict = None) -> 'XAMailboxList': + """Returns a list of mail accounts matching the filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_elem.mailboxes(), XAMailboxList, filter)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAMailIMAPAccountList(XAMailAccountList): + """A wrapper around lists of mail documents that employs fast enumeration techniques. + + All properties of documents can be called as methods on the wrapped list, returning a list containing each document's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMailPOPAccount) + +
[docs] def compact_mailboxes_when_closing(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("compactMailboxesWhenClosing") or [])
+ +
[docs] def message_caching(self) -> list[XAMailApplication.CachingPolicy]: + ls = self.xa_elem.arrayByApplyingSelector_("messageCaching") or [] + return [XAMailApplication.CachingPolicy(OSType(x.stringValue())) for x in ls]
+ +
[docs] def store_drafts_on_server(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("storeDraftsOnServer") or [])
+ +
[docs] def store_junk_mail_on_server(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("storeJunkMailOnServer") or [])
+ +
[docs] def store_sent_messages_on_server(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("storeSentMessagesOnServer") or [])
+ +
[docs] def store_deleted_messages_on_server(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("storeDeletedMessagesOnServer") or [])
+ +
[docs] def by_compact_mailboxes_when_closing(self, compact_mailboxes_when_closing: bool) -> 'XAMailPOPAccount': + return self.by_property("compactMailboxesWhenClosing", compact_mailboxes_when_closing)
+ +
[docs] def by_message_caching(self, message_caching: XAMailApplication.CachingPolicy) -> 'XAMailPOPAccount': + return self.by_property("messageCaching", event_from_str(unOSType(message_caching.value)))
+ +
[docs] def by_store_drafts_on_server(self, store_drafts_on_server: bool) -> 'XAMailPOPAccount': + return self.by_property("storeDraftsOnServer", store_drafts_on_server)
+ +
[docs] def by_store_junk_mail_on_server(self, store_junk_mail_on_server: bool) -> 'XAMailPOPAccount': + return self.by_property("storeJunkMailOnServer", store_junk_mail_on_server)
+ +
[docs] def by_store_sent_messages_on_server(self, store_sent_messages_on_server: bool) -> 'XAMailPOPAccount': + return self.by_property("storeSentMessagesOnServer", store_sent_messages_on_server)
+ +
[docs] def by_store_deleted_messages_on_server(self, store_deleted_messages_on_server: bool) -> 'XAMailPOPAccount': + return self.by_property("storeDeletedMessagesOnServer", store_deleted_messages_on_server)
+ +
[docs]class XAMailIMAPAccount(XAMailAccount): + """A class for managing and interacting with IMAP accounts in Mail.app. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def compact_mailboxes_when_closing(self) -> bool: + """Whether an IMAP mailbox is automatically compacted when the user quits Mail.app or switches to another mailbox. + """ + return self.xa_elem.compactMailboxesWhenClosing() + + @compact_mailboxes_when_closing.setter + def compact_mailboxes_when_closing(self, compact_mailboxes_when_closing: bool): + self.set_property('compactMailboxesWhenClosing', compact_mailboxes_when_closing) + + @property + def message_caching(self) -> XAMailApplication.CachingPolicy: + """The message caching setting for the account. + """ + return XAMailApplication.CachingPolicy(OSType(self.xa_elem.messageCaching().stringValue())) + + @message_caching.setter + def message_caching(self, message_caching: XAMailApplication.CachingPolicy): + self.set_property('message_caching', message_caching.value) + + @property + def store_drafts_on_server(self) -> bool: + """Whether draft messages will be stored on the IMAP server. + """ + return self.xa_elem.storeDraftsOnServer() + + @store_drafts_on_server.setter + def store_drafts_on_server(self, store_drafts_on_server: bool): + self.set_property('storeDraftsOnServer', store_drafts_on_server) + + @property + def store_junk_mail_on_server(self) -> bool: + """Whether junk mail will be stored on the IMAP server. + """ + return self.xa_elem.storeJunkMailOnServer() + + @store_junk_mail_on_server.setter + def store_junk_mail_on_server(self, store_junk_mail_on_server: bool): + self.set_property('storeJunkMailOnServer', store_junk_mail_on_server) + + @property + def store_sent_messages_on_server(self) -> bool: + """Whether sent messages will be stored on the IMAP server. + """ + return self.xa_elem.storeSentMessagesOnServer() + + @store_sent_messages_on_server.setter + def store_sent_messages_on_server(self, store_sent_messages_on_server: bool): + self.set_property('storeSentMessagesOnServer', store_sent_messages_on_server) + + @property + def store_deleted_messages_on_server(self) -> bool: + """Whether deleted messages will be stored on the IMAP server. + """ + return self.xa_elem.storeDeletedMessagesOnServer() + + @store_deleted_messages_on_server.setter + def store_deleted_messages_on_server(self, store_deleted_messages_on_server: bool): + self.set_property('storeDeletedMessagesOnServer', store_deleted_messages_on_server)
+ + + + +
[docs]class XAMailICloudAccountList(XAMailAccountList): + """A wrapper around lists of iCloud accounts that employs fast enumeration techniques. + + All properties of iCloud accounts can be called as methods on the wrapped list, returning a list containing each accounts's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMailICloudAccount)
+ +
[docs]class XAMailICloudAccount(XAMailAccount): + """A class for managing and interacting with iCloud accounts in Mail.app. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAMailPOPAccountList(XAMailAccountList): + """A wrapper around lists of mail documents that employs fast enumeration techniques. + + All properties of documents can be called as methods on the wrapped list, returning a list containing each document's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMailPOPAccount) + +
[docs] def big_message_warning_size(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("bigMessageWarningSize") or [])
+ +
[docs] def delayed_message_deletion_interval(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("delayedMessageDeletionInterval") or [])
+ +
[docs] def delete_mail_on_server(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("deleteMailOnServer") or [])
+ +
[docs] def delete_messages_when_moved_from_inbox(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("deleteMessagesWhenMovedFromInbox") or [])
+ +
[docs] def by_big_message_warning_size(self, big_message_warning_size: int) -> 'XAMailPOPAccount': + return self.by_property("bigMessageWarningSize", big_message_warning_size)
+ +
[docs] def by_delayed_message_deletion_interval(self, delayed_message_deletion_interval: int) -> 'XAMailPOPAccount': + return self.by_property("delayedMessageDeletionInterval", delayed_message_deletion_interval)
+ +
[docs] def by_delete_mail_on_server(self, delete_mail_on_server: bool) -> 'XAMailPOPAccount': + return self.by_property("deleteMailOnServer", delete_mail_on_server)
+ +
[docs] def by_delete_messages_when_moved_from_inbox(self, delete_messages_when_moved_from_inbox: bool) -> 'XAMailPOPAccount': + return self.by_property("deleteMessagesWhenMovedFromInbox", delete_messages_when_moved_from_inbox)
+ +
[docs]class XAMailPOPAccount(XAMailAccount): + """A class for managing and interacting with POP accounts in Mail.app. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def big_message_warning_size(self) -> int: + """The max amount of bytes a message can be before Mail will prompt the user before downloading the message (-1 = do not prompt). + """ + return self.xa_elem.bigMessageWarningSize() + + @big_message_warning_size.setter + def big_message_warning_size(self, big_message_warning_size: int): + self.set_property('bigMessageWarningSize', big_message_warning_size) + + @property + def delayed_message_deletion_interval(self) -> int: + """The number of days before messages that have been downloaded will be deleted from the server (0 = delete immediately after downloading). + """ + return self.xa_elem.delayedMessageDeletionInterval() + + @delayed_message_deletion_interval.setter + def delayed_message_deletion_interval(self, delayed_message_deletion_interval: int): + self.set_property('delayedMessageDeletionInterval', delayed_message_deletion_interval) + + @property + def delete_mail_on_server(self) -> bool: + """Whether the POP account deletes messages on the server after downloading. + """ + return self.xa_elem.deleteMailOnServer() + + @delete_mail_on_server.setter + def delete_mail_on_server(self, delete_mail_on_server: bool): + self.set_property('deleteMailOnServer', delete_mail_on_server) + + @property + def delete_messages_when_moved_from_inbox(self) -> bool: + """Whether messages will be deleted from the server when moved from the POP inbox. + """ + return self.xa_elem.deleteMessagesWhenMovedFromInbox() + + @delete_messages_when_moved_from_inbox.setter + def delete_messages_when_moved_from_inbox(self, delete_messages_when_moved_from_inbox: bool): + self.set_property('deleteMessagesWhenMovedFromInbox', delete_messages_when_moved_from_inbox)
+ + + + +
[docs]class XAMailSMTPServerList(XABase.XAList): + """A wrapper around lists of SMTP servers that employs fast enumeration techniques. + + All properties of SMTP servers can be called as methods on the wrapped list, returning a list containing each SMTP server's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAMailSMTPServer, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def authentication(self) -> list[XAMailApplication.AuthenticationMethod]: + ls = self.xa_elem.arrayByApplyingSelector_("authentication") or [] + return [XAMailApplication.AuthenticationMethod(OSType(x.stringValue())) for x in ls]
+ +
[docs] def account_type(self) -> list[XAMailApplication.AccountType]: + ls = self.xa_elem.arrayByApplyingSelector_("accountType") or [] + return [XAMailApplication.AccountType(OSType(x.stringValue())) for x in ls]
+ +
[docs] def enabled(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("enabled") or [])
+ +
[docs] def user_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("userName") or [])
+ +
[docs] def port(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("port") or [])
+ +
[docs] def server_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("serverName") or [])
+ +
[docs] def uses_ssl(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("usesSsl") or [])
+ +
[docs] def by_name(self, name: str) -> 'XAMailAccount': + return self.by_property("name", name)
+ +
[docs] def by_authentication(self, authentication: XAMailApplication.AuthenticationMethod) -> 'XAMailAccount': + return self.by_property("authentication", event_from_str(unOSType(authentication.value)))
+ +
[docs] def by_account_type(self, account_type: XAMailApplication.AccountType) -> 'XAMailAccount': + return self.by_property("accountType", event_from_str(unOSType(account_type.value)))
+ +
[docs] def by_enabled(self, enabled: bool) -> 'XAMailAccount': + return self.by_property("enabled", enabled)
+ +
[docs] def by_user_name(self, user_name: str) -> 'XAMailAccount': + return self.by_property("userName", user_name)
+ +
[docs] def by_port(self, port: int) -> 'XAMailAccount': + return self.by_property("port", port)
+ +
[docs] def by_server_name(self, server_name: str) -> 'XAMailAccount': + return self.by_property("serverName", server_name)
+ +
[docs] def by_uses_ssl(self, uses_ssl: bool) -> 'XAMailAccount': + return self.by_property("usesSsl", uses_ssl)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAMailSMTPServer(XABase.XAObject): + """A class for managing and interacting with SMTP servers in Mail.app. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the account. + """ + return self.xa_elem.name() + + @property + def password(self) -> None: + """The password for the account. + """ + return + + @password.setter + def password(self, password: str): + self.set_property('password', password) + + @property + def account_type(self) -> XAMailApplication.AccountType: + """The type of the account, either: "pop", "smtp", "imap", or "iCloud". + """ + return XAMailApplication.AccountType(OSType(self.xa_elem.accountType().stringValue())) + + @property + def authentication(self) -> XAMailApplication.AuthenticationMethod: + """The preferred authentication scheme for the account, either: "password", "apop", "kerberos 5", "ntlm", "md5", "external", "Apple token", or "none". + """ + return XAMailApplication.AuthenticationMethod(OSType(self.xa_elem.authentication().stringValue())) + + @authentication.setter + def authentication(self, authentication: XAMailApplication.AuthenticationMethod): + self.set_property('authentication', authentication.value) + + @property + def enabled(self) -> bool: + """Whether the account is enabled. + """ + return self.xa_elem.enabled() + + @enabled.setter + def enabled(self, enabled: bool): + self.set_property('enabled', enabled) + + @property + def user_name(self) -> str: + """The user name used to connect to the account. + """ + return self.xa_elem.userName() + + @user_name.setter + def user_name(self, user_name: str): + self.set_property('userName', user_name) + + @property + def port(self) -> int: + """The port used to connect to the account. + """ + return self.xa_elem.port() + + @port.setter + def port(self, port: int): + self.set_property('port', port) + + @property + def server_name(self) -> str: + """The host name used to connect to the account. + """ + return self.xa_elem.serverName() + + @server_name.setter + def server_name(self, server_name: str): + self.set_property('serverName', server_name) + + @property + def uses_ssl(self) -> bool: + """Whether SSL is enabled for this receiving account. + """ + return self.xa_elem.usesSsl() + + @uses_ssl.setter + def uses_ssl(self, uses_ssl: bool): + self.set_property('usesSsl', uses_ssl) + + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAMailDocumentList(XABase.XAList): + """A wrapper around lists of mail documents that employs fast enumeration techniques. + + All properties of documents can be called as methods on the wrapped list, returning a list containing each document's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAMailDocument, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def modified(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("modified") or [])
+ +
[docs] def file(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("file") or [])
+ +
[docs] def by_name(self, name: str) -> 'XAMailDocument': + return self.by_property("name", name)
+ +
[docs] def by_modified(self, modified: bool) -> 'XAMailDocument': + return self.by_property("modified", modified)
+ +
[docs] def by_file(self, file: str) -> 'XAMailDocument': + return self.by_property("file", file)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAMailDocument(XABase.XAObject): + """A class for managing and interacting with Mail documents. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the document. + """ + return self.xa_elem.name() + + @property + def modified(self) -> bool: + """Whether the document has been modified since the last save. + """ + return self.xa_elem.modified() + + @property + def file(self) -> str: + """The location of the document on the disk, if one exists. + """ + return self.xa_elem.file() + +
[docs] def delete(self): + """Permanently deletes the document. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.delete()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAMailboxList(XABase.XAList): + """A wrapper around lists of mailboxes that employs fast enumeration techniques. + + All properties of mailboxes can be called as methods on the wrapped list, returning a list containing each mailbox's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAMailbox + super().__init__(properties, obj_class, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def unread_count(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("unread_count") or [])
+ +
[docs] def account(self) -> XAMailAccountList: + ls = self.xa_elem.arrayByApplyingSelector_("account") or [] + return self._new_element(ls, XAMailAccountList)
+ +
[docs] def container(self) -> 'XAMailContainerList': + ls = self.xa_elem.arrayByApplyingSelector_("container") or [] + return self._new_element(ls, XAMailContainerList)
+ +
[docs] def by_name(self, name: str) -> 'XAMailbox': + return self.by_property("name", name)
+ +
[docs] def by_unread_count(self, unread_count: int) -> 'XAMailbox': + return self.by_property("unreadCount", unread_count)
+ +
[docs] def by_account(self, account: XAMailAccount) -> 'XAMailbox': + return self.by_property("account", account.xa_elem)
+ +
[docs] def by_container(self, container: 'XAMailContainer') -> 'XAMailbox': + return self.by_property("container", container.xa_elem)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAMailbox(XABase.XAObject): + """A class for managing and interacting with mailboxes in Mail.app. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the mailbox. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def unread_count(self) -> int: + """The number of unread messages in the mailbox. + """ + return self.xa_elem.unreadCount() + + @property + def account(self) -> XAMailAccount: + """The parent account of the mailbox. + """ + return self._new_element(self.xa_elem.account(), XAMailAccount) + + @property + def container(self) -> 'XAMailbox': + """The parent mailbox of the mailbox. + """ + return self._new_element(self.xa_elem.container(), XAMailbox) + +
[docs] def delete(self): + """Permanently deletes the mailboxs. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.delete()
+ +
[docs] def mailboxes(self, filter: dict = None) -> 'XAMailboxList': + """Returns a list of mailboxes matching the filter. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.mailboxes(), XAMailboxList, filter)
+ +
[docs] def messages(self, filter: dict = None) -> 'XAMailMessageList': + """Returns a list of messages matching the filter. + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.messages(), XAMailMessageList, filter)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAMailContainerList(XAMailboxList): + """A wrapper around lists of mail headers that employs fast enumeration techniques. + + All properties of headers can be called as methods on the wrapped list, returning a list containing each header's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMailContainer)
+ +
[docs]class XAMailContainer(XAMailbox): + """A class for managing and interacting with containers in Mail.app. Containers are mailboxes that contain other mailboxes. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAMailMessageList(XABase.XAList): + """A wrapper around lists of messages that employs fast enumeration techniques. + + All properties of messages can be called as methods on the wrapped list, returning a list containing each message's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAMailMessage, filter) + +
[docs] def id(self) -> list[int]: + # Objc method caused segfault, not sure why + return [x.id() for x in self.xa_elem]
+ +
[docs] def all_headers(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("allHeaders") or [])
+ +
[docs] def background_color(self) -> list[XAMailApplication.HighlightColor]: + ls = [x.backgroundColor() for x in self.xa_elem] + return [XAMailApplication.HighlightColor(OSType(x.stringValue())) for x in ls]
+ +
[docs] def mailbox(self) -> XAMailboxList: + ls = self.xa_elem.arrayByApplyingSelector_("mailbox") or [] + return self._new_element(ls, XAMailboxList)
+ +
[docs] def content(self) -> list[str]: + ls = self.xa_elem.arrayByApplyingSelector_("content") or [] + return list(ls.arrayByApplyingSelector_("get"))
+ +
[docs] def date_received(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("dateReceived") or [])
+ +
[docs] def date_sent(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("dateSent") or [])
+ +
[docs] def deleted_status(self) -> list[bool]: + return [x.deletedStatus() for x in self.xa_elem]
+ +
[docs] def flagged_status(self) -> list[bool]: + return [x.flaggedStatus() for x in self.xa_elem]
+ +
[docs] def flag_index(self) -> list[int]: + return [x.flagIndex() for x in self.xa_elem]
+ +
[docs] def junk_mail_status(self) -> list[bool]: + return [x.junkMailStatus() for x in self.xa_elem]
+ +
[docs] def read_status(self) -> list[bool]: + return [x.readStatus() for x in self.xa_elem]
+ +
[docs] def message_id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("messageId") or [])
+ +
[docs] def source(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("source") or [])
+ +
[docs] def reply_to(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("replyTo") or [])
+ +
[docs] def message_size(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("messageSize") or [])
+ +
[docs] def sender(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("sender") or [])
+ +
[docs] def subject(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("subject") or [])
+ +
[docs] def was_forwarded(self) -> list[bool]: + return [x.wasForwarded() for x in self.xa_elem]
+ +
[docs] def was_redirected(self) -> list[bool]: + return [x.wasRedirected() for x in self.xa_elem]
+ +
[docs] def was_replied_to(self) -> list[bool]: + return [x.wasRepliedTo() for x in self.xa_elem]
+ +
[docs] def by_id(self, id: int) -> 'XAMailMessage': + return self.by_property("id", id)
+ +
[docs] def by_all_headers(self, all_headers: str) -> 'XAMailMessage': + return self.by_property("allHeaders", all_headers)
+ +
[docs] def by_background_color(self, background_color: XAMailApplication.HighlightColor) -> 'XAMailMessage': + return self.by_property("backgroundColor", event_from_str(unOSType(background_color.value)))
+ +
[docs] def by_mailbox(self, mailbox: XAMailbox) -> 'XAMailMessage': + return self.by_property("mailbox", mailbox.xa_elem)
+ +
[docs] def by_content(self, content: XABase.XAText) -> 'XAMailMessage': + return self.by_property("content", content.xa_elem)
+ +
[docs] def by_date_received(self, date_received: datetime) -> 'XAMailMessage': + return self.by_property("dateReceived", date_received)
+ +
[docs] def by_date_sent(self, date_sent: datetime) -> 'XAMailMessage': + return self.by_property("dateSent", date_sent)
+ +
[docs] def by_deleted_status(self, deleted_status: bool) -> 'XAMailMessage': + return self.by_property("deletedStatus", deleted_status)
+ +
[docs] def by_flagged_status(self, flagged_status: bool) -> 'XAMailMessage': + return self.by_property("flaggedStatus", flagged_status)
+ +
[docs] def by_flag_index(self, flag_index: int) -> 'XAMailMessage': + return self.by_property("flagIndex", flag_index)
+ +
[docs] def by_junk_mail_status(self, junk_mail_status: bool) -> 'XAMailMessage': + return self.by_property("junkMailStatus", junk_mail_status)
+ +
[docs] def by_read_status(self, read_status: bool) -> 'XAMailMessage': + return self.by_property("readStatus", read_status)
+ +
[docs] def by_message_id(self, message_id: str) -> 'XAMailMessage': + return self.by_property("messageId", message_id)
+ +
[docs] def by_source(self, source: str) -> 'XAMailMessage': + return self.by_property("source", source)
+ +
[docs] def by_reply_to(self, reply_to: str) -> 'XAMailMessage': + return self.by_property("replyTo", reply_to)
+ +
[docs] def by_message_size(self, message_size: int) -> 'XAMailMessage': + return self.by_property("messageSize", message_size)
+ +
[docs] def by_sender(self, sender: str) -> 'XAMailMessage': + return self.by_property("sender", sender)
+ +
[docs] def by_subject(self, subject: str) -> 'XAMailMessage': + return self.by_property("subject", subject)
+ +
[docs] def by_was_forwarded(self, was_forwarded: bool) -> 'XAMailMessage': + return self.by_property("wasForwarded", was_forwarded)
+ +
[docs] def by_was_redirected(self, was_redirected: bool) -> 'XAMailMessage': + return self.by_property("wasRedirected", was_redirected)
+ +
[docs] def by_was_replied_to(self, was_replied_to: bool) -> 'XAMailMessage': + return self.by_property("wasRepliedTo", was_replied_to)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.subject()) + ">"
+ +
[docs]class XAMailMessage(XABase.XAObject): + """A class for managing and interacting with messages in Mail.app. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> int: + """The unique identifier for the message. + """ + return self.xa_elem.id() + + @property + def all_headers(self) -> str: + """The headers of the message. + """ + return self.xa_elem.allHeaders() + + @property + def background_color(self) -> XAMailApplication.HighlightColor: + """The background color of the message. + """ + return XAMailApplication.HighlightColor(OSType(self.xa_elem.backroundColor().stringValue())) + + @background_color.setter + def background_color(self, background_color: XAMailApplication.HighlightColor): + self.set_property('backgroundColor', background_color.value) + + @property + def mailbox(self) -> XAMailbox: + """The mailbox in which the message is located. + """ + return self._new_element(self.xa_elem.mailbox(), XAMailbox) + + @mailbox.setter + def mailbox(self, mailbox: XAMailbox): + self.set_property('mailbox', mailbox.xa_elem) + + @property + def content(self) -> XABase.XAText: + """The contents of the message. + """ + return self._new_element(self.xa_elem.content(), XABase.XAText) + + @content.setter + def content(self, content: Union[XABase.XAText, str]): + if isinstance(content, str): + self.set_property('content', content) + else: + self.set_property('content', content.xa_elem) + + @property + def date_received(self) -> datetime: + """The date and time that the message was received. + """ + return self.xa_elem.dateReceived() + + @property + def date_sent(self) -> datetime: + """The date and time that the message was sent. + """ + return self.xa_elem.dateSent() + + @property + def deleted_status(self) -> bool: + """Whether the message is deleted. + """ + return self.xa_elem.deletedStatus() + + @deleted_status.setter + def deleted_status(self, deleted_status: bool): + self.set_property('deletedStatus', deleted_status) + + @property + def flagged_status(self) -> bool: + """Whether the message is flagged. + """ + return self.xa_elem.flaggedStatus() + + @flagged_status.setter + def flagged_status(self, flagged_status: bool): + self.set_property('flaggedStatus', flagged_status) + + @property + def flag_index(self) -> int: + """The flag on the message, or -1 if the message is not flagged. + """ + return self.xa_elem.flagIndex() + + @flag_index.setter + def flag_index(self, flag_index: int): + self.set_property('flagIndex', flag_index) + + @property + def junk_mail_status(self) -> bool: + """Whether the message is marked as junk. + """ + return self.xa_elem.junkMailStatus() + + @junk_mail_status.setter + def junk_mail_status(self, junk_mail_status: bool): + self.set_property('junkMailStatus', junk_mail_status) + + @property + def read_status(self) -> bool: + """Whether the message has been read. + """ + return self.xa_elem.readStatus() + + @read_status.setter + def read_status(self, read_status: bool): + self.set_property('readStatus', read_status) + + @property + def message_id(self) -> int: + """The unique message ID string. + """ + return self.xa_elem.messageId() + + @property + def source(self) -> str: + """The raw source of the message. + """ + return self.xa_elem.source() + + @property + def reply_to(self) -> str: + """The address that replies should be sent to. + """ + return self.xa_elem.replyTo() + + @property + def message_size(self) -> int: + """The size of the message in bytes. + """ + return self.xa_elem.messageSize() + + @property + def sender(self) -> str: + """The address of the sender of the message. + """ + return self.xa_elem.sender() + + @property + def subject(self) -> str: + """The subject string of the message. + """ + return self.xa_elem.subject() + + @property + def was_forward(self) -> bool: + """Whether the message was forwarded. + """ + return self.xa_elem.wasForwarded() + + @property + def was_redirected(self) -> bool: + """Whether the message was redirected. + """ + return self.xa_elem.wasRedirected() + + @property + def was_replied_to(self) -> bool: + """Whether the message was replied to. + """ + return self.xa_elem.wasRepliedTo() + +
[docs] def open(self) -> 'XAMailMessage': + """Opens the message in a separate window. + + :return: A reference to the message object. + :rtype: XAMailMessage + + .. versionadded:: 0.0.4 + """ + self.xa_elem.open_(self.xa_elem) + return self
+ +
[docs] def forward(self, open_window: bool = True) -> 'XAMailOutgoingMessage': + msg = self.xa_elem.forwardOpeningWindow_(open_window) + return self._new_element(msg, XAMailOutgoingMessage)
+ +
[docs] def redirect(self, open_window: bool = True) -> 'XAMailOutgoingMessage': + msg = self.xa_elem.redirectOpeningWindow_(open_window) + return self._new_element(msg, XAMailOutgoingMessage)
+ +
[docs] def reply(self, open_window: bool = True, reply_all: bool = False) -> 'XAMailOutgoingMessage': + msg = self.xa_elem.replyOpeningWindow_replyToAll_(open_window, reply_all) + return self._new_element(msg, XAMailOutgoingMessage)
+ +
[docs] def delete(self): + """Permanently deletes the message. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.delete()
+ +
[docs] def bcc_recipients(self, filter: dict = None) -> 'XAMailBccRecipientList': + """Returns a list of Bcc recipients matching the filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_elem.bccRecipients(), XAMailBccRecipientList, filter)
+ +
[docs] def cc_recpients(self, filter: dict = None) -> 'XAMailCcRecipientList': + """Returns a list of Cc recipients matching the filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_elem.ccRecipients(), XAMailCcRecipientList, filter)
+ +
[docs] def recipients(self, filter: dict = None) -> 'XAMailRecipientList': + """Returns a list of mail recipients matching the filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_elem.recipients(), XAMailRecipientList, filter)
+ +
[docs] def to_recipients(self, filter: dict = None) -> 'XAMailToRecipientList': + """Returns a list of primary recipients matching the filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_elem.toRecipients(), XAMailToRecipientList, filter)
+ +
[docs] def headers(self, filter: dict = None) -> 'XAMailHeaderList': + """Returns a list of message headers matching the filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_elem.headers(), XAMailHeaderList, filter)
+ +
[docs] def mail_attachments(self, filter: dict = None) -> 'XAMailAttachmentList': + """Returns a list of message attachments matching the filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_elem.mailAttachments(), XAMailAttachmentList, filter)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.subject) + ">"
+ + + + +
[docs]class XAMailOutgoingMessageList(XABase.XAList): + """A wrapper around lists of outgoing messages that employs fast enumeration techniques. + + All properties of outgoing messages can be called as methods on the wrapped list, returning a list containing each messages's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAMailHeader, filter) + +
[docs] def sender(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("sender") or [])
+ +
[docs] def subject(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("subject") or [])
+ +
[docs] def content(self) -> XABase.XATextList: + ls = self.xa_elem.arrayByApplyingSelector_("content") or [] + return self._new_element(ls, XABase.XATextList)
+ +
[docs] def visible(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("visible") or [])
+ +
[docs] def message_signature(self) -> XAMailSignatureList: + ls = self.xa_elem.arrayByApplyingSelector_("messageSignature") or [] + return self._new_element(ls, XAMailSignatureList)
+ +
[docs] def id(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def by_sender(self, sender: str) -> 'XAMailOutgoingMessage': + return self.by_property("sender", sender)
+ +
[docs] def by_subject(self, subject: str) -> 'XAMailOutgoingMessage': + return self.by_property("subject", subject)
+ +
[docs] def by_content(self, content: XABase.XAText) -> 'XAMailOutgoingMessage': + return self.by_property("content", content.xa_elem)
+ +
[docs] def by_visible(self, visible: bool) -> 'XAMailOutgoingMessage': + return self.by_property("visible", visible)
+ +
[docs] def by_message_signature(self, message_signature: XAMailSignature) -> 'XAMailOutgoingMessage': + return self.by_property("messageSignature", message_signature.xa_elem)
+ +
[docs] def by_id(self, id: int) -> 'XAMailOutgoingMessage': + return self.by_property("id", id)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.subject()) + ">"
+ +
[docs]class XAMailOutgoingMessage(XABase.XAObject): + """A class for managing and interacting with outgoing messages in Mail.app. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def sender(self) -> str: + """The address of the message sender. + """ + return self.xa_elem.sender() + + @sender.setter + def sender(self, sender: str): + self.set_property('sender', sender) + + @property + def subject(self) -> str: + """The subject string of the message. + """ + return self.xa_elem.subject() + + @subject.setter + def subject(self, subject: str): + self.set_property('subject', subject) + + @property + def content(self) -> XABase.XAText: + """The contents of the message. + """ + return self._new_element(self.xa_elem.content(), XABase.XAText) + + @content.setter + def content(self, content: Union[XABase.XAText, str]): + if isinstance(content, str): + self.set_property('content', content) + else: + self.set_property('content', content.xa_elem) + + @property + def visible(self) -> bool: + """Whether the message window is shown on screen. + """ + return self.xa_elem.visible() + + @visible.setter + def visible(self, visible: bool): + self.set_property('visible', visible) + + @property + def message_signature(self) -> XAMailSignature: + """The signature of the message. + """ + return self._new_element(self.xa_elem.messageSignature(). XAMailSignature) + + @message_signature.setter + def message_signature(self, message_signature: XAMailSignature): + self.set_property('messageSignature', message_signature.xa_elem) + + @property + def id(self) -> int: + """The unique identifier for the message. + """ + return self.xa_elem.id() + +
[docs] def send(self) -> bool: + return self.xa_elem.send()
+ +
[docs] def save(self): + # TODO + self.xa_elem.saveIn_as_(None, XAMailApplication.Format.NATIVE)
+ +
[docs] def close(self, save: XAMailApplication.SaveOption = XAMailApplication.SaveOption.YES): + self.xa_elem.closeSaving_savingIn_(save.value, None)
+ +
[docs] def delete(self): + """Permanently deletes the outgoing message. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.delete()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.subject) + ">"
+ + + + +
[docs]class XAMailRecipientList(XABase.XAList): + """A wrapper around lists of mail recipients that employs fast enumeration techniques. + + All properties of recipients can be called as methods on the wrapped list, returning a list containing each recipients's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, object_class = None): + if object_class is None: + object_class = XAMailRecipient + super().__init__(properties, object_class, filter) + +
[docs] def address(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("address") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def by_address(self, address: str) -> 'XAMailRecipient': + return self.by_property("address", address)
+ +
[docs] def by_name(self, name: str) -> 'XAMailRecipient': + return self.by_property("name", name)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAMailRecipient(XABase.XAObject): + """A class for managing and interacting with recipients in Mail.app. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def address(self) -> str: + """The recipient's email address. + """ + return self.xa_elem.address() + + @address.setter + def address(self, address: str): + self.set_property('address', address) + + @property + def name(self) -> str: + """The name used for display. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAMailBccRecipientList(XAMailRecipientList): + """A wrapper around lists of mail Bcc recipients that employs fast enumeration techniques. + + All properties of Bcc recipients can be called as methods on the wrapped list, returning a list containing each recipients's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMailBccRecipient)
+ +
[docs]class XAMailBccRecipient(XAMailRecipient): + """A class for managing and interacting with BCC recipients in Mail.app. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAMailCcRecipientList(XAMailRecipientList): + """A wrapper around lists of mail Cc recipients that employs fast enumeration techniques. + + All properties of Cc recipients can be called as methods on the wrapped list, returning a list containing each recipients's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMailCcRecipient)
+ +
[docs]class XAMailCcRecipient(XAMailRecipient): + """A class for managing and interacting with CC recipients in Mail.app. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAMailToRecipientList(XAMailRecipientList): + """A wrapper around lists of mail primary (to) recipients that employs fast enumeration techniques. + + All properties of primary recipients can be called as methods on the wrapped list, returning a list containing each recipients's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMailToRecipient)
+ +
[docs]class XAMailToRecipient(XAMailRecipient): + """A class for managing and interacting with the primary (to) recipients in Mail.app. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAMailHeaderList(XABase.XAList): + """A wrapper around lists of mail headers that employs fast enumeration techniques. + + All properties of headers can be called as methods on the wrapped list, returning a list containing each header's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAMailHeader, filter) + +
[docs] def content(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("content") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def by_content(self, content: str) -> 'XAMailHeader': + return self.by_property("content", content)
+ +
[docs] def by_name(self, name: str) -> 'XAMailHeader': + return self.by_property("name", name)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAMailHeader(XABase.XAObject): + """A class for managing and interacting with message headers in Mail.app. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def content(self) -> str: + """The contents of the header. + """ + return self.xa_elem.content() + + @content.setter + def content(self, content: str): + self.set_property('content', content) + + @property + def name(self) -> str: + """The name of the header value. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAMailAttachmentList(XABase.XAList): + """A wrapper around lists of attachments that employs fast enumeration techniques. + + All properties of attachments can be called as methods on the wrapped list, returning a list containing each attachment's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAMailAttachment, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def mime_type(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("mimeType") or [])
+ +
[docs] def file_size(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("fileSize") or [])
+ +
[docs] def downloaded(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("downloaded") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def by_name(self, name: str) -> 'XAMailAttachment': + return self.by_property("name", name)
+ +
[docs] def by_mime_type(self, mime_type: str) -> 'XAMailAttachment': + return self.by_property("mimeType", mime_type)
+ +
[docs] def by_file_size(self, file_size: int) -> 'XAMailAttachment': + return self.by_property("fileSize", file_size)
+ +
[docs] def by_downloaded(self, downloaded: bool) -> 'XAMailAttachment': + return self.by_property("downloaded", downloaded)
+ +
[docs] def by_id(self, id: str) -> 'XAMailAttachment': + return self.by_property("id", id)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAMailAttachment(XABase.XAObject): + """A class for managing and interacting with message attachments in Mail.app. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the attachment. + """ + return self.xa_elem.name() + + @property + def mime_type(self) -> str: + """The MIME type of the attachment, e.g. text/plain. + """ + return self.xa_elem.mimeType() + + @property + def file_size(self) -> int: + """The approximate size of the attachment in bytes. + """ + return self.xa_elem.fileSize() + + @property + def downloaded(self) -> bool: + """Whether the attachment has been downloaded. + """ + return self.xa_elem.downloaded() + + @property + def id(self) -> str: + """The unique identifier for the attachment. + """ + return self.xa_elem.id() + +
[docs] def delete(self): + """Permanently deletes the attachment. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.delete()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAMailRuleList(XABase.XAList): + """A wrapper around lists of rules that employs fast enumeration techniques. + + All properties of rules can be called as methods on the wrapped list, returning a list containing each rule's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAMailMessage, filter) + +
[docs] def color_message(self) -> list[XAMailApplication.HighlightColor]: + ls = self.xa_elem.arrayByApplyingSelector_("colorMessage") or [] + return [XAMailApplication.HighlightColor(OSType(x.stringValue())) for x in ls]
+ +
[docs] def delete_message(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("deleteMessage") or [])
+ +
[docs] def forward_text(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("forwardText") or [])
+ +
[docs] def forward_message(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("forwardMessage") or [])
+ +
[docs] def mark_flagged(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("markFlagged") or [])
+ +
[docs] def mark_flag_index(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("markFlagIndex") or [])
+ +
[docs] def mark_read(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("markRead") or [])
+ +
[docs] def play_sound(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("playSound") or [])
+ +
[docs] def redirect_message(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("redirectMessage") or [])
+ +
[docs] def reply_text(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("replyText") or [])
+ +
[docs] def run_script(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("runScript") or [])
+ +
[docs] def all_conditions_must_be_met(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("allConditionsMustBeMet") or [])
+ +
[docs] def copy_message(self) -> XAMailboxList: + ls = self.xa_elem.arrayByApplyingSelector_("copyMessage") or [] + return self._new_element(ls, XAMailboxList)
+ +
[docs] def move_message(self) -> XAMailboxList: + ls = self.xa_elem.arrayByApplyingSelector_("moveMessage") or [] + return self._new_element(ls, XAMailboxList)
+ +
[docs] def highlight_text_using_color(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("highlightTextUsingColor") or [])
+ +
[docs] def enabled(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("enabled") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def should_copy_message(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("shouldCopyMessage") or [])
+ +
[docs] def should_move_message(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("shouldMoveMessage") or [])
+ +
[docs] def stop_evaluating_rules(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("stopEvaluatingRules") or [])
+ +
[docs] def by_color_message(self, color_message: XAMailApplication.HighlightColor) -> 'XAMailRule': + return self.by_property("name", event_from_str(unOSType(color_message.value)))
+ +
[docs] def by_delete_message(self, deleteMessage: bool) -> 'XAMailRule': + return self.by_property("deleteMessage", deleteMessage)
+ +
[docs] def by_forward_text(self, forward_text: str) -> 'XAMailRule': + return self.by_property("forwardText", forward_text)
+ +
[docs] def by_forward_message(self, forward_message: str) -> 'XAMailRule': + return self.by_property("forwardMessage", forward_message)
+ +
[docs] def by_mark_flagged(self, mark_flagged: bool) -> 'XAMailRule': + return self.by_property("markFlagged", mark_flagged)
+ +
[docs] def by_mark_flag_index(self, mark_flag_index: int) -> 'XAMailRule': + return self.by_property("markFlagIndex", mark_flag_index)
+ +
[docs] def by_mark_read(self, mark_read: bool) -> 'XAMailRule': + return self.by_property("markRead", mark_read)
+ +
[docs] def by_play_sound(self, play_sound: str) -> 'XAMailRule': + return self.by_property("playSound", play_sound)
+ +
[docs] def by_redirect_message(self, redirect_message: str) -> 'XAMailRule': + return self.by_property("redirectMessage", redirect_message)
+ +
[docs] def by_reply_text(self, reply_text: str) -> 'XAMailRule': + return self.by_property("replyText", reply_text)
+ +
[docs] def by_run_script(self, run_script: str) -> 'XAMailRule': + return self.by_property("runScript", run_script)
+ +
[docs] def by_all_conditions_must_be_met(self, all_conditions_must_be_met: bool) -> 'XAMailRule': + return self.by_property("allConditionsMustBeMet", all_conditions_must_be_met)
+ +
[docs] def by_copy_message(self, copy_message: XAMailbox) -> 'XAMailRule': + return self.by_property("copMessage", copy_message.xa_elem)
+ +
[docs] def by_move_message(self, move_message: XAMailbox) -> 'XAMailRule': + return self.by_property("moveMessage", move_message.xa_elem)
+ +
[docs] def by_highlight_text_using_color(self, highlight_text_using_color: bool) -> 'XAMailRule': + return self.by_property("highlightTextUsingColor", highlight_text_using_color)
+ +
[docs] def by_enabled(self, enabled: bool) -> 'XAMailRule': + return self.by_property("enabled", enabled)
+ +
[docs] def by_name(self, name: str) -> 'XAMailRule': + return self.by_property("name", name)
+ +
[docs] def by_should_copy_message(self, should_copy_message: bool) -> 'XAMailRule': + return self.by_property("shouldCopyMessage", should_copy_message)
+ +
[docs] def by_should_move_message(self, should_move_message: bool) -> 'XAMailRule': + return self.by_property("shouldMoveMessage", should_move_message)
+ +
[docs] def by_stop_evaluating_rules(self, stop_evaluating_rules: bool) -> 'XAMailRule': + return self.by_property("stopEvaluatingRules", stop_evaluating_rules)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAMailRule(XABase.XAObject): + """A class for managing and interacting with rules in Mail.app. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def color_message(self) -> XAMailApplication.HighlightColor: + """If the rule matches, apply this color. + """ + return XAMailApplication.HighlightColor(OSType(self.xa_elem.colorMessage().stringValue())) + + @color_message.setter + def color_message(self, color_message: XAMailApplication.HighlightColor): + self.set_property('colorMessage', color_message.value) + + @property + def delete_message(self) -> bool: + """If the rule matches, delete the message. + """ + return self.xa_elem.deleteMessage() + + @delete_message.setter + def delete_message(self, delete_message: bool): + self.set_property('deleteMessage', delete_message) + + @property + def forward_text(self) -> str: + """If the rule matches, prepend the provided text to the forwarded message. + """ + return self.xa_elem.forwardText() + + @forward_text.setter + def forward_text(self, forward_text: str): + self.set_property('forwardText', forward_text) + + @property + def forward_message(self) -> str: + """If the rule matches, forward the message to the specified addresses, separated by commas. + """ + return self.xa_elem.forwardMessage() + + @forward_message.setter + def forward_message(self, forward_message: str): + self.set_property('forwardMessage', forward_message) + + @property + def mark_flagged(self) -> bool: + """If the rule matches, mark the message as flagged. + """ + return self.xa_elem.markFlagged() + + @mark_flagged.setter + def mark_flagged(self, mark_flagged: bool): + self.set_property('markFlagged', mark_flagged) + + @property + def mark_flag_index(self) -> int: + """If the rule matches, mark the message with the specified flag (-1 = disabled). + """ + return self.xa_elem.markFlagIndex() + + @mark_flag_index.setter + def mark_flag_index(self, mark_flag_index: int): + self.set_property('markFlagIndex', mark_flag_index) + + @property + def mark_read(self) -> bool: + """If the rule matches, mark the message as read. + """ + return self.xa_elem.markRead() + + @mark_read.setter + def mark_read(self, mark_read: bool): + self.set_property('markRead', mark_read) + + @property + def play_sound(self) -> str: + """If the rule matches, play the sound specified by name or path. + """ + return self.xa_elem.playSound() + + @play_sound.setter + def play_sound(self, play_sound: str): + self.set_property('playSound', play_sound) + + @property + def redirect_message(self) -> str: + """If the rule matches, redirect the message to the supplied addresses, separated by commas. + """ + return self.xa_elem.redirectMessage() + + @redirect_message.setter + def redirect_message(self, redirect_message: str): + self.set_property('redirectMessage', redirect_message) + + @property + def reply_text(self) -> str: + """If the rule matches, reply to the message and prepend the provided text. + """ + return self.xa_elem.replyText() + + @reply_text.setter + def reply_text(self, reply_text: str): + self.set_property('replyText', reply_text) + + # TODO + @property + def run_script(self) -> str: + """If the rule matches, run the supplied AppleScript file. + """ + return self.xa_elem.runScript() + + @run_script.setter + def run_script(self, run_script: str): + self.set_property('runScript', run_script) + + @property + def all_conditions_must_be_met(self) -> bool: + """Whether all conditions must be met for the rule to execute. + """ + return self.xa_elem.allConditionsMustBeMet() + + @all_conditions_must_be_met.setter + def all_conditions_must_be_met(self, all_conditions_must_be_met: bool): + self.set_property('allConditionsMustBeMet', all_conditions_must_be_met) + + @property + def copy_message(self) -> XAMailbox: + """If the rule matches, copy the message to the specified mailbox. + """ + return self._new_element(self.xa_elem.copyMessage(), XAMailbox) + + @copy_message.setter + def copy_message(self, copy_message: XAMailbox): + self.set_property('copyMessage', copy_message.xa_elem) + + @property + def move_message(self) -> XAMailbox: + """If the rule matches, move the message to the specified mailbox. + """ + return self._new_element(self.xa_elem.moveMessage(), XAMailbox) + + @move_message.setter + def move_message(self, move_message: XAMailbox): + self.set_property('moveMessage', move_message.xa_elem) + + @property + def highlight_text_using_color(self) -> bool: + """Whether the color will be used to highlight the text of background of a message. + """ + return self.xa_elem.highlightTextUsingColor() + + @highlight_text_using_color.setter + def highlight_text_using_color(self, highlight_text_using_color: bool): + self.set_property('highlightTextUsingColor', highlight_text_using_color) + + @property + def enabled(self) -> bool: + """Whether the rule is enabled. + """ + return self.xa_elem.enabled() + + @enabled.setter + def enabled(self, enabled: bool): + self.set_property('enabled', enabled) + + @property + def name(self) -> str: + """The name of the rule. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def should_copy_message(self) -> bool: + """Whether the rule has a copy action. + """ + return self.xa_elem.shouldCopyMessage() + + @should_copy_message.setter + def should_copy_message(self, should_copy_message: bool): + self.set_property('shouldCopyMessage', should_copy_message) + + @property + def should_move_message(self) -> bool: + """Whether the rule has a move action. + """ + return self.xa_elem.shouldMoveMessage() + + @should_move_message.setter + def should_move_message(self, should_move_message: bool): + self.set_property('shouldMoveMessage', should_move_message) + + @property + def stop_evaluating_rules(self) -> bool: + """If the rule matches, stop rule evaluation for the message""" + return self.xa_elem.stopEvaluatingRules() + + @stop_evaluating_rules.setter + def stop_evaluating_rule(self, stop_evaluating_rules: bool): + self.set_property('stopEvaluatingRules', stop_evaluating_rules) + +
[docs] def delete(self): + """Permanently deletes the rule. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.delete()
+ +
[docs] def rule_conditions(self, filter: dict = None) -> 'XAMailRuleConditionList': + """Returns a list of rule conditions matching the filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_elem.ruleConditions(), XAMailRuleConditionList, filter)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + + +
[docs]class XAMailRuleConditionList(XABase.XAList): + """A wrapper around lists of rule conditions that employs fast enumeration techniques. + + All properties of rule conditions can be called as methods on the wrapped list, returning a list containing each rule conditions's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAMailMessage, filter) + +
[docs] def expression(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("expression") or [])
+ +
[docs] def header(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("header") or [])
+ +
[docs] def qualifier(self) -> list[XAMailApplication.RuleQualifier]: + ls = self.xa_elem.arrayByApplyingSelector_("qualifier") or [] + return [XAMailApplication.RuleQualifier(OSType(x.stringValue())) for x in ls]
+ +
[docs] def rule_type(self) -> list[XAMailApplication.RuleType]: + ls = self.xa_elem.arrayByApplyingSelector_("ruleType") or [] + return [XAMailApplication.RuleType(OSType(x.stringValue())) for x in ls]
+ +
[docs] def by_expression(self, expression: str) -> Union['XAMailRuleCondition', None]: + return self.by_property("expression", expression)
+ +
[docs] def by_header(self, header: str) -> Union['XAMailRuleCondition', None]: + return self.by_property("header", header)
+ +
[docs] def by_qualifier(self, qualifier: XAMailApplication.RuleQualifier) -> Union['XAMailRuleCondition', None]: + return self.by_property("qualifier", event_from_str(unOSType(qualifier.value)))
+ +
[docs] def by_rule_type(self, rule_type: XAMailApplication.RuleType) -> Union['XAMailRuleCondition', None]: + return self.by_property("ruleType", event_from_str(unOSType(rule_type.value)))
+ +
[docs]class XAMailRuleCondition(XABase.XAObject): + """A class for managing and interacting with rule conditions in Mail.app. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def expression(self) -> str: + """The rule expression field. + """ + return self.xa_elem.expression() + + @expression.setter + def expression(self, expression: str): + self.set_property('expression', expression) + + @property + def header(self) -> str: + """The rule header key. + """ + return self.xa_elem.header() + + @header.setter + def header(self, header: str): + self.set_property('header', header) + + @property + def qualifier(self) -> XAMailApplication.RuleQualifier: + """The qualifier for the rule. + """ + return XAMailApplication.RuleQualifier(OSType(self.xa_elem.qualifier().stringValue())) + + @qualifier.setter + def qualifier(self, qualifier: XAMailApplication.RuleQualifier): + self.set_property('qualifier', qualifier.value) + + @property + def rule_type(self) -> XAMailApplication.RuleType: + """The type of the rule. + """ + return XAMailApplication.RuleType(OSType(self.xa_elem.ruleType().stringValue())) + + @rule_type.setter + def rule_type(self, rule_type: XAMailApplication.RuleType): + self.set_property('ruleType', rule_type.value) + +
[docs] def delete(self): + """Permanently deletes the rule condition. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.delete()
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Maps.html b/docs/_modules/PyXA/apps/Maps.html new file mode 100644 index 0000000..58ef413 --- /dev/null +++ b/docs/_modules/PyXA/apps/Maps.html @@ -0,0 +1,418 @@ + + + + + + PyXA.apps.Maps — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Maps

+""".. versionadded:: 0.0.6
+
+Control the macOS Maps application using JXA-like syntax.
+"""
+
+from typing import Literal, Union
+from AppKit import NSPredicate
+
+from PyXA import XABase
+
+
[docs]class XAMapsApplication(XABase.XAApplication): + """A class for managing and interacting with Maps.app. + + .. seealso:: :class:`XAMapsSidebarLocation`, :class:`XAMapsDirection` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def sidebar_showing(self) -> bool: + """Whether the sidebar is currently showing. + """ + sidebar = self.front_window.xa_elem.groups()[0].groups()[0].groups()[0].groups()[0].groups()[0].groups()[1].groups()[0].groups()[1] + return sidebar.get() is not None + + # TODO: This + # def set_view(self, view: Literal[""]) + +
[docs] def toggle_sidebar(self): + """Toggles the sidebar. + + .. versionadded:: 0.0.6 + """ + self.front_window.toolbars()[0].buttons()[0].actions().by_name("AXPress").perform()
+ +
[docs] def search(self, query: str, latitude: Union[float, None] = None, longitude: Union[float, None] = None, exact: bool = True): + """Searches Maps for the given query, centered at the (optional) specified location. + + :param query: The term to search for + :type query: str + :param latitude: The latitude of the location to center the search at, defaults to None + :type latitude: Union[float, None], optional + :param longitude: The longitude of the location to center the search at, defaults to None + :type longitude: Union[float, None], optional + :param exact: Whether search results must be centered on the specified location versus allowing further away results, defaults to True + :type exact: bool, optional + + .. versionadded:: 0.0.6 + """ + url = "maps://?q=" + query + if latitude is not None and longitude is not None: + if exact is True: + url += f"&sll={latitude},{longitude}" + else: + url += f"&near={latitude},{longitude}" + XABase.XAURL(url).open()
+ +
[docs] def zoom_in(self) -> 'XAMapsApplication': + """Zoom in on the currently centered location of the map. + + .. versionadded:: 0.0.6 + """ + if self.sidebar_showing: + action = self.front_window.groups()[0].groups()[0].groups()[0].groups()[0].groups()[0].groups()[5].buttons()[2].actions().by_name("AXPress") + action.perform() + else: + action = self.front_window.groups()[0].groups()[0].groups()[0].groups()[0].groups()[0].groups()[4].buttons()[2].actions().by_name("AXPress") + action.perform()
+ +
[docs] def zoom_out(self) -> 'XAMapsApplication': + """Zoom out on the currently centered location of the map. + + .. versionadded:: 0.0.6 + """ + if self.sidebar_showing: + action = self.front_window.groups()[0].groups()[0].groups()[0].groups()[0].groups()[0].groups()[5].buttons()[1].actions().by_name("AXPress") + action.perform() + else: + action = self.front_window.groups()[0].groups()[0].groups()[0].groups()[0].groups()[0].groups()[4].buttons()[1].actions().by_name("AXPress") + action.perform()
+ +
[docs] def orient_north(self) -> 'XAMapsApplication': + """Orients the map with North facing upward. + + .. versionadded:: 0.0.6 + """ + if self.sidebar_showing: + self.front_window.xa_elem.groups()[0].groups()[0].groups()[0].groups()[0].groups()[0].groups()[5].buttons()[0].actions()[0].perform() + else: + self.front_window.xa_elem.groups()[0].groups()[0].groups()[0].groups()[0].groups()[0].groups()[4].buttons()[0].actions()[0].perform()
+ +
[docs] def show_address(self, address: str): + """Centers the map at the specified address. + + :param address: The address to display + :type address: str + + .. versionadded:: 0.0.6 + """ + XABase.XAURL("maps://?address=" + address).open()
+ +
[docs] def show_coordinate(self, latitude: float, longitude: float): + """Centers the map at the specified coordinate. + + :param latitude: The latitude of the coordinate to display + :type latitude: float + :param longitude: The longitude of the coordinate to display + :type longitude: float + + .. versionadded:: 0.0.6 + """ + url = f"maps://?ll={latitude},{longitude}" + XABase.XAURL(url).open()
+ +
[docs] def drop_pin(self, latitude: float, longitude: float, name: Union[str, None] = None): + """Drops at pin at the specified coordinate. + + :param latitude: The latitude of the coordinate at which to drop a pin + :type latitude: float + :param longitude: The longitude of the coordinate at which to drop a pin + :type longitude: float + :param name: The name of the pin, defaults to None + :type name: Union[str, None], optional + + .. versionadded:: 0.0.6 + """ + if name is None: + name = "New Pin" + url = f"maps://?q={name}&ll={latitude},{longitude}" + XABase.XAURL(url).open()
+ +
[docs] def directions_to(self, destination_address: str, source_address: Union[str, None] = None, transport_type: Union[Literal["d", "driving", "w", "walking", "p", "pt", "r", "public transit", "transit"], None] = None): # Eventually return XAMapsDirections object? + """Queries for directions to the destination address, optionally starting from a source address. + + If no source address is provided, the current location is used. + + :param destination_address: The address to retrieve directions to + :type destination_address: str + :param source_address: The address to start the directions from, defaults to None + :type source_address: Union[str, None], optional + :param transport_type: The type of directions to retrieve, defaults to None + :type transport_type: Union[Literal["d", "driving", "w", "walking", "p", "pt", "r", "public transit", "transit"], None], optional + + .. versionadded:: 0.0.6 + """ + url = "maps://?daddr=" + destination_address.replace(" ", "%20") + if source_address is not None: + url += "&saddr=" + source_address + if transport_type is not None: + if transport_type == "driving" or transport_type == "d": + url += "&dirflg=d" + elif transport_type == "walking" or transport_type == "w": + url += "&dirflg=w" + elif transport_type in ["public transit", "transit", "p", "pt", "r"]: + url += "&dirflg=r" + XABase.XAURL(url).open()
+ +
[docs] def new_tab(self): + """Opens a new tab. + + .. versionadded:: 0.0.6 + """ + predicate = NSPredicate.predicateWithFormat_("name == %@", "AXPress") + press_action = self.front_window.xa_elem.tabGroups()[0].buttons()[0].actions().filteredArrayUsingPredicate_(predicate)[0] + press_action.perform()
+ +
[docs] def tabs(self) -> 'XAMapsTabList': + """Gets a list of tabs. + + :return: The list of tabs + :rtype: XAMapsTabList + + .. versionadded:: 0.0.6 + """ + tabs = self.front_window.xa_elem.tabGroups()[0].radioButtons() + return self._new_element(tabs, XAMapsTabList)
+ +
[docs] def sidebar_locations(self) -> 'XAMapsSidebarLocationList': + """Gets a list of sidebar locations. + + :return: The list of locations + :rtype: XAMapsSidebarLocationList + + .. versionadded:: 0.0.6 + """ + if not self.sidebar_showing: + self.toggle_sidebar() + + locations = self.front_window.xa_elem.groups()[0].groups()[0].groups()[0].groups()[0].groups()[0].groups()[1].groups()[0].groups()[0].groups()[1].groups()[0].groups()[0].groups()[0].groups()[0].groups()[1].groups()[0].groups()[0].UIElements() + + predicate = NSPredicate.predicateWithFormat_("role == %@", "AXGenericElement") + locations = locations.filteredArrayUsingPredicate_(predicate) + + return self._new_element(locations, XAMapsSidebarLocationList)
+ + + + +
[docs]class XAMapsTabList(XABase.XAList): + """A wrapper around a list of locations. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAMapsTab, filter)
+ + # def name(self) -> list[str]: + # ls = self.xa_elem.arrayByApplyingSelector_("objectDescription") + # return [x.split(",")[0] for x in ls] + + # def __repr__(self): + # return "<" + str(type(self)) + str(self.name()) + ">" + +
[docs]class XAMapsTab(XABase.XAObject): + """A class for interacting with sidebar locations in Maps.app. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the tab. + """ + return self.xa_elem.properties() + + @property + def title(self) -> str: + """The name of the tab. + """ + return self.xa_elem.title() + + @property + def selected(self) -> bool: + """Whether the tab is the currently selected tab. + """ + return self.xa_elem.value == 1 + +
[docs] def close(self): + self.xa_elem.buttons()[0].actions()[0].perform()
+ + + +
[docs]class XAMapsSidebarLocationList(XABase.XAList): + """A wrapper around a list of sidebar locations. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAMapsSidebarLocation, filter) + +
[docs] def name(self) -> list[str]: + ls = self.xa_elem.arrayByApplyingSelector_("objectDescription") or [] + return [x.split(",")[0] for x in ls]
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAMapsSidebarLocation(XABase.XAObject): + """A class for interacting with sidebar locations in Maps.app. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def selected(self) -> bool: + """Whether the location element is currently selected. + """ + return self.xa_elem.selected() + + @property + def description(self) -> str: + """The description of the location element. + """ + return self.xa_elem.objectDescription() + + @property + def name(self) -> str: + """The name of the location. + """ + return self.description.split(",")[0] + +
[docs] def show_directions_to(self): + predicate = NSPredicate.predicateWithFormat_("name == %@", "AXPress") + press_action = locations = self.xa_elem.actions().filteredArrayUsingPredicate_(predicate)[0] + press_action.perform()
+ + + + +
[docs]class XAMapsDirectionsList(XABase.XAList): + """A wrapper around a list of directions. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAMapsDirections, filter)
+ +
[docs]class XAMapsDirections(XABase.XAObject): + """A class for interacting with directions in Maps.app. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + self.source_address: str #: The starting address of the directions + self.destination_address: str #: The ending address of the directions + self.duration: float #: The duration of the currently selected route from the source address to the destination address + self.has_tolls: bool #: Whether the currently selected route has tolls + self.has_weather_warnings: bool #: Whether there are weather warnings along the currently selected route
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/MediaApplicationBase.html b/docs/_modules/PyXA/apps/MediaApplicationBase.html new file mode 100644 index 0000000..aa2c0d0 --- /dev/null +++ b/docs/_modules/PyXA/apps/MediaApplicationBase.html @@ -0,0 +1,2394 @@ + + + + + + PyXA.apps.MediaApplicationBase — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for PyXA.apps.MediaApplicationBase

+""".. versionadded:: 0.1.0
+
+A base set of classes for media applications such as Music.app and TV.app.
+"""
+
+from datetime import datetime
+from enum import Enum
+import time
+from typing import Literal, Union
+
+import AppKit
+from PyXA import XABase
+from PyXA import XABaseScriptable
+from PyXA.XAProtocols import XACanOpenPath
+
+
+
[docs]class XAMediaApplication(XABaseScriptable.XASBApplication, XACanOpenPath): + """A class for managing and interacting with media apps. + + .. seealso:: :class:`XAMediaWindow`, class:`XAMediaSource`, :class:`XAMediaPlaylist`, :class:`XAMediaTrack` + + .. versionadded:: 0.0.1 + """ +
[docs] class PlayerState(Enum): + """States of the music player. + """ + STOPPED = XABase.OSType('kPSS') #: The player is stopped + PLAYING = XABase.OSType('kPSP') #: The player is playing + PAUSED = XABase.OSType('kPSp') #: The player is paused + FAST_FORWARDING = XABase.OSType('kPSF') #: The player is fast forwarding + REWINDING = XABase.OSType('kPSR') #: The player is rewinding
+ +
[docs] class SourceKind(Enum): + """Types of sources for media items. + """ + LIBRARY = XABase.OSType('kLib') #: A library source + AUDIO_CD = XABase.OSType('kACD') #: A CD source + MP3_CD = XABase.OSType('kMCD') #: An MP3 file source + RADIO_TUNER = XABase.OSType('kTun') #: A radio source + SHARED_LIBRARY = XABase.OSType('kShd') #: A shared library source + ITUNES_STORE = XABase.OSType('kITS') #: The iTunes Store source + UNKNOWN = XABase.OSType('kUnk') #: An unknown source
+ +
[docs] class SearchFilter(Enum): + """Filter restrictions on search results. + """ + ALBUMS = XABase.OSType('kSrL') #: Search albums + ALL = XABase.OSType('kAll') #: Search all + ARTISTS = XABase.OSType('kSrR') #: Search artists + COMPOSERS = XABase.OSType('kSrC') #: Search composers + DISPLAYED = XABase.OSType('kSrV') #: Search the currently displayed playlist + NAMES = XABase.OSType('kSrS') #: Search track names only
+ +
[docs] class PlaylistKind(Enum): + """Types of special playlists. + """ + NONE = XABase.OSType('kNon') #: An unknown playlist kind + FOLDER = XABase.OSType('kSpF') #: A folder + GENIUS = XABase.OSType('kSpG') #: A smart playlist + LIBRARY = XABase.OSType('kSpL') #: The system library playlist + MUSIC = XABase.OSType('kSpZ') #: A playlist containing music items + PURCHASED_MUSIC = XABase.OSType('kSpM') #: The purchased music playlist + USER = XABase.OSType('cUsP') #: A user-created playlist + USER_LIBRARY = XABase.OSType('cLiP') #: The user's library
+ +
[docs] class MediaKind(Enum): + """Types of media items. + """ + SONG = XABase.OSType('kMdS') #: A song media item + MUSIC_VIDEO = XABase.OSType('kVdV') #: A music video media item + UNKNOWN = XABase.OSType('kUnk') #: An unknown media item kind
+ +
[docs] class RatingKind(Enum): + """Types of ratings for media items. + """ + USER = XABase.OSType('kRtU') #: A user-inputted rating + COMPUTED = XABase.OSType('kRtC') #: A computer generated rating
+ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XAMediaWindow + + @property + def current_playlist(self) -> 'XAMediaPlaylist': + """The playlist containing the currently targeted track. + """ + return self._new_element(self.xa_scel.currentPlaylist(), XAMediaPlaylist) + + @property + def current_stream_title(self) -> str: + """The name of the currently streaming track. + """ + return self.xa_scel.currentStreamTitle() + + @property + def current_stream_url(self) -> str: + """The URL of the currently streaming track. + """ + return self.xa_scel.currentStreamURL() + + @property + def current_track(self) -> 'XAMediaTrack': + """The currently targeted track. + """ + return self._new_element(self.xa_scel.currentTrack(), XAMediaTrack) + + @property + def fixed_indexing(self) -> bool: + """Whether the track indices are independent of the order of the current playlist or not. + """ + return self.xa_scel.fixedIndexing() + + @fixed_indexing.setter + def fixed_indexing(self, fixed_indexing: bool): + self.set_property('fixedIndexing', fixed_indexing) + + @property + def frontmost(self) -> bool: + """Whether the application is active or not. + """ + return self.xa_scel.frontmost() + + @frontmost.setter + def frontmost(self, frontmost: bool): + self.set_property('frontmost', frontmost) + + @property + def full_screen(self) -> bool: + """Whether the app is fullscreen or not. + """ + return self.xa_scel.fullScreen() + + @full_screen.setter + def full_screen(self, full_screen: bool): + self.set_property('fullScreen', full_screen) + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def mute(self) -> bool: + """Whether sound output is muted or not. + """ + return self.xa_scel.mute() + + @mute.setter + def mute(self, mute: bool): + self.set_property('mute', mute) + + @property + def player_position(self) -> float: + """The time elapsed in the current track. + """ + return self.xa_scel.playerPosition() + + @player_position.setter + def player_position(self, player_position: float): + self.set_property('playerPosition', player_position) + + @property + def player_state(self) -> 'XAMediaApplication.PlayerState': + """Whether the player is playing, paused, stopped, fast forwarding, or rewinding. + """ + return XAMediaApplication.PlayerState(self.xa_scel.playerState()) + + @property + def selection(self) -> 'XAMediaItemList': + """The selected media items. + """ + return self._new_element(self.xa_scel.selection().get(), XAMediaTrackList) + + @property + def sound_volume(self) -> int: + """The sound output volume. + """ + return self.xa_scel.soundVolume() + + @sound_volume.setter + def sound_volume(self, sound_volume: int): + self.set_property('soundVolume', sound_volume) + + @property + def version(self) -> str: + """The version of the application. + """ + return self.xa_scel.version() + +
[docs] def play(self, item: 'XAMediaItem' = None) -> 'XAMediaApplication': + """Plays the specified TV item (e.g. track, playlist, etc.). If no item is provided, this plays the current track from its current player position. + + :param item: The track, playlist, or video to play, defaults to None + :type item: _XAMediaItem, optional + :return: A reference to the TV application object. + :rtype: XAMediaApplication + + .. seealso:: :func:`playpause`, :func:`pause`, :func:`stop` + + .. versionadded:: 0.0.1 + """ + self.xa_scel.playOnce_(item) + return self
+ +
[docs] def playpause(self) -> 'XAMediaApplication': + """Toggles the playing/paused state of the current track. + + :return: A reference to the TV application object. + :rtype: XAMediaApplication + + .. seealso:: :func:`play`, :func:`pause`, :func:`stop` + + .. versionadded:: 0.0.1 + """ + self.xa_scel.playpause() + return self
+ +
[docs] def pause(self) -> 'XAMediaApplication': + """Pauses the current track. + + :return: A reference to the TV application object. + :rtype: XAMediaApplication + + .. seealso:: :func:`play`, :func:`playpause`, :func:`stop` + + .. versionadded:: 0.0.1 + """ + self.xa_scel.pause() + return self
+ +
[docs] def stop(self) -> 'XAMediaApplication': + """Stops playback of the current track. Subsequent playback will start from the beginning of the track. + + :return: A reference to the TV application object. + :rtype: XAMediaApplication + + .. seealso:: :func:`play`, :func:`playpause`, :func:`pause` + + .. versionadded:: 0.0.1 + """ + self.xa_scel.stop() + return self
+ +
[docs] def next_track(self) -> 'XAMediaApplication': + """Advances to the next track in the current playlist. + + :return: A reference to the TV application object. + :rtype: XAMediaApplication + + .. seealso:: :func:`back_track`, :func:`previous_track` + + .. versionadded:: 0.0.1 + """ + self.xa_scel.nextTrack() + return self
+ +
[docs] def back_track(self) -> 'XAMediaApplication': + """Restarts the current track or returns to the previous track if playback is currently at the start. + + :return: A reference to the TV application object. + :rtype: XAMediaApplication + + .. seealso:: :func:`next_track`, :func:`previous_track` + + .. versionadded:: 0.0.1 + """ + self.xa_scel.backTrack() + return self
+ +
[docs] def previous_track(self) -> 'XAMediaApplication': + """Returns to the previous track in the current playlist. + + :return: A reference to the TV application object. + :rtype: XAMediaApplication + + .. seealso:: :func:`next_track`, :func:`back_track` + + .. versionadded:: 0.0.1 + """ + self.xa_scel.previousTrack() + return self
+ +
[docs] def fast_forward(self) -> 'XAMediaApplication': + """Repeated skip forward in the track until resume() is called. + + :return: A reference to the TV application object. + :rtype: XAMediaApplication + + .. seealso:: :func:`rewind`, :func:`resume` + + .. versionadded:: 0.0.1 + """ + self.xa_scel.fastForward() + return self
+ +
[docs] def rewind(self) -> 'XAMediaApplication': + """Repeatedly skip backward in the track until resume() is called. + + :return: A reference to the TV application object. + :rtype: XAMediaApplication + + .. seealso:: :func:`fast_forward`, :func:`resume` + + .. versionadded:: 0.0.1 + """ + self.xa_scel.rewind() + return self
+ +
[docs] def resume(self) -> 'XAMediaApplication': + """Returns to normal playback after calls to fast_forward() or rewind(). + + :return: A reference to the TV application object. + :rtype: XAMediaApplication + + .. seealso:: :func:`fast_forward`, :func:`rewind` + + .. versionadded:: 0.0.1 + """ + self.xa_scel.resume() + return self
+ +
[docs] def open_location(self, video_url: str) -> 'XAMediaApplication': + """Opens and plays an video stream URL or iTunes Store URL. + + :param audio_url: The URL of an audio stream (e.g. a web address to an MP3 file) or an item in the iTunes Store. + :type audio_url: str + :return: _description_ + :rtype: XAMediaApplication + + .. versionadded:: 0.0.1 + """ + self.xa_scel.openLocation_(video_url) + return self
+ +
[docs] def set_volume(self, new_volume: float) -> 'XAMediaApplication': + """Sets the volume of playback. + + :param new_volume: The desired volume of playback. + :type new_volume: float + :return: A reference to the TV application object. + :rtype: XAMediaApplication + + .. versionadded:: 0.0.1 + """ + self.set_property("soundVolume", new_volume) + return self
+ +
[docs] def current_track(self) -> 'XAMediaTrack': + """Returns the currently playing (or paused but not stopped) track. + + .. versionadded:: 0.0.1 + """ + properties = { + "parent": self, + "element": self.xa_scel.currentTrack(), + "appref": self.xa_aref, + "system_events": self.xa_sevt, + } + return XAMediaTrack(properties)
+ + # def convert(self, items): + # self.xa_scel.convert_([item.xa_elem for item in items]) + +
[docs] def browser_windows(self, filter: Union[dict, None] = None) -> 'XAMediaBrowserWindowList': + """Returns a list of browser windows, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned browser windows will have, or None + :type filter: Union[dict, None] + :return: The list of windows + :rtype: XAMediaBrowserWindowList + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_scel.browserWindows(), XAMediaBrowserWindowList, filter)
+ +
[docs] def playlists(self, filter: Union[dict, None] = None) -> 'XAMediaPlaylistList': + """Returns a list of playlists, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned playlists will have, or None + :type filter: Union[dict, None] + :return: The list of playlists + :rtype: XAMediaPlaylistList + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_scel.playlists(), XAMediaPlaylistList, filter)
+ +
[docs] def playlist_windows(self, filter: Union[dict, None] = None) -> 'XAMediaPlaylistWindowList': + """Returns a list of playlist windows, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned playlist windows will have, or None + :type filter: Union[dict, None] + :return: The list of windows + :rtype: XAMediaPlaylistWindowList + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_scel.playlistWindows(), XAMediaPlaylistWindowList, filter)
+ +
[docs] def sources(self, filter: Union[dict, None] = None) -> 'XAMediaSourceList': + """Returns a list of sources, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned sources will have, or None + :type filter: Union[dict, None] + :return: The list of sources + :rtype: XAMediaSourceList + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_scel.sources(), XAMediaSourceList, filter)
+ +
[docs] def tracks(self, filter: Union[dict, None] = None) -> 'XAMediaTrackList': + """Returns a list of tracks, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned tracks will have, or None + :type filter: Union[dict, None] + :return: The list of tracks + :rtype: XAMediaTrackList + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_scel.tracks(), XAMediaTrackList, filter)
+ +
[docs] def video_windows(self, filter: Union[dict, None] = None) -> 'XAMediaVideoWindowList': + """Returns a list of video windows, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned video windows will have, or None + :type filter: Union[dict, None] + :return: The list of windows + :rtype: XAMediaVideoWindowList + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_scel.videoWindows(), XAMediaVideoWindowList, filter)
+ + + + +
[docs]class XAMediaItemList(XABase.XAList): + """A wrapper around lists of music items that employs fast enumeration techniques. + + All properties of music items can be called as methods on the wrapped list, returning a list containing each item's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAMediaItem + super().__init__(properties, obj_class, filter) + +
[docs] def container(self) -> list[XABase.XAObject]: + ls = self.xa_elem.arrayByApplyingSelector_("container") or [] + return self._new_element(ls, XABase.XAList)
+ +
[docs] def id(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def index(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("index") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def persistent_id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("persistentID") or [])
+ +
[docs] def properties(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("properties") or [])
+ +
[docs] def by_container(self, container: XABase.XAObject) -> Union['XAMediaItem', None]: + return self.by_property("container", container.xa_elem)
+ +
[docs] def by_id(self, id: int) -> Union['XAMediaItem', None]: + return self.by_property("id", id)
+ +
[docs] def by_index(self, index: int) -> Union['XAMediaItem', None]: + return self.by_property("index", index)
+ +
[docs] def by_name(self, name: str) -> Union['XAMediaItem', None]: + return self.by_property("name", name)
+ +
[docs] def by_persistent_id(self, persistent_id: str) -> Union['XAMediaItem', None]: + return self.by_property("persistentID", persistent_id)
+ +
[docs] def by_properties(self, properties: dict) -> Union['XAMediaItem', None]: + return self.by_property("properties", properties)
+ +
[docs] def get_clipboard_representation(self) -> list[str]: + """Gets a clipboard-codable representation of each music item in the list. + + When a list of music items is copied to the clipboard, the name of each item is added to the clipboard. + + :return: A list of track names + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + return self.name()
+ + def __repr__(self): + return "<" + str(type(self)) + "length: " + str(len(self.xa_elem)) + ">"
+ +
[docs]class XAMediaItem(XABase.XAObject): + """A generic class with methods common to the various playable media classes in media apps. + + .. seealso:: :class:`XAMediaSource`, :class:`XAMediaPlaylist`, :class:`XAMediaTrack` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def container(self) -> XABase.XAObject: + """The container of the item. + """ + return self._new_element(self.xa_elem.container(), XABase.XAObject) + + @property + def id(self) -> int: + """The ID of the item. + """ + return self.xa_elem.id() + + @property + def index(self) -> int: + """The index of the item in the internal application order. + """ + return self.xa_elem.index() + + @property + def name(self) -> str: + """The name of the item. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def persistent_id(self) -> str: + """The constant unique identifier for the item. + """ + return self.xa_elem.persistentID() + + @property + def properties(self) -> dict: + """Every property of the item. + """ + return self.xa_elem.properties() + +
[docs] def download(self) -> 'XAMediaItem': + """Downloads the item into the local library. + + :return: A reference to the TV item object. + :rtype: XAMediaItem + + .. versionadded:: 0.0.1 + """ + self.xa_elem.download() + return self
+ +
[docs] def reveal(self) -> 'XAMediaItem': + """Reveals the item in the media apps window. + + :return: A reference to the TV item object. + :rtype: XAMediaItem + + .. seealso:: :func:`select` + + .. versionadded:: 0.0.1 + """ + self.xa_elem.reveal() + return self
+ +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of the music item. + + When a music item is copied to the clipboard, the name of the music item is added to the clipboard. + + :return: The name of the music item + :rtype: str + + .. versionadded:: 0.0.8 + """ + return self.name
+ + + + +
[docs]class XAMediaArtworkList(XAMediaItemList): + """A wrapper around lists of music artworks that employs fast enumeration techniques. + + All properties of music artworks can be called as methods on the wrapped list, returning a list containing each artworks's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMediaArtwork) + +
[docs] def data(self) -> list[XABase.XAImage]: + ls = self.xa_elem.arrayByApplyingSelector_("data") or [] + return [XABase.XAImage(x) for x in ls]
+ +
[docs] def object_description(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("objectDescription") or [])
+ +
[docs] def downloaded(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("downloaded") or [])
+ +
[docs] def format(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("format") or [])
+ +
[docs] def kind(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("kind") or [])
+ +
[docs] def raw_data(self) -> list[bytes]: + return list(self.xa_elem.arrayByApplyingSelector_("rawData") or [])
+ +
[docs] def by_data(self, data: XABase.XAImage) -> Union['XAMediaArtwork', None]: + return self.by_property("data", data.xa_elem)
+ +
[docs] def by_object_description(self, object_description: str) -> Union['XAMediaArtwork', None]: + return self.by_property("objectDescription", object_description)
+ +
[docs] def by_downloaded(self, downloaded: bool) -> Union['XAMediaArtwork', None]: + return self.by_property("downloaded", downloaded)
+ +
[docs] def by_format(self, format: int) -> Union['XAMediaArtwork', None]: + return self.by_property("format", format)
+ +
[docs] def by_kind(self, kind: int) -> Union['XAMediaArtwork', None]: + return self.by_property("kind", kind)
+ +
[docs] def by_raw_data(self, raw_data: bytes) -> Union['XAMediaArtwork', None]: + return self.by_property("rawData", raw_data)
+ +
[docs]class XAMediaArtwork(XAMediaItem): + """An artwork in media apps. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def data(self) -> XABase.XAImage: + """The data for the artwork in the form of a picture. + """ + return XABase.XAImage(self.xa_elem.data()) + + @data.setter + def data(self, data: XABase.XAImage): + self.set_property('data', data.xa_elem) + + @property + def object_description(self) -> str: + """The string description of the artwork. + """ + return self.xa_elem.objectDescription() + + @object_description.setter + def object_description(self, object_description: str): + self.set_property('objectDescription', object_description) + + @property + def downloaded(self) -> bool: + """Whether the artwork was downloaded by media apps. + """ + return self.xa_elem.downloaded() + + @property + def format(self) -> int: + """The data format for the artwork. + """ + return self.xa_elem.format() + + @property + def kind(self) -> int: + """The kind/purpose of the artwork. + """ + return self.xa_elem.kind() + + @kind.setter + def kind(self, kind: int): + self.set_property('kind', kind) + + @property + def raw_data(self) -> bytes: + """The data for the artwork in original format. + """ + return self.xa_elem.rawData() + + @raw_data.setter + def raw_data(self, raw_data: str): + self.set_property('rawData', raw_data)
+ + + + +
[docs]class XAMediaPlaylistList(XAMediaItemList): + """A wrapper around lists of playlists that employs fast enumeration techniques. + + All properties of playlists can be called as methods on the wrapped list, returning a list containing each playlist's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAMediaPlaylist + super().__init__(properties, filter, obj_class) + +
[docs] def object_description(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("objectDescription") or [])
+ +
[docs] def duration(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("duration") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def parent(self) -> 'XAMediaPlaylistList': + ls = self.xa_elem.arrayByApplyingSelector_("parent") or [] + return self._new_element(ls, XAMediaPlaylistList)
+ +
[docs] def size(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("size") or [])
+ +
[docs] def special_kind(self) -> list[XAMediaApplication.PlaylistKind]: + ls = self.xa_elem.arrayByApplyingSelector_("specialKind") or [] + return [XAMediaApplication.PlaylistKind(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def time(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("time") or [])
+ +
[docs] def visible(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("visible") or [])
+ +
[docs] def by_object_description(self, object_description: str) -> Union['XAMediaPlaylist', None]: + return self.by_property("objectDescription", object_description)
+ +
[docs] def by_duration(self, duration: int) -> Union['XAMediaPlaylist', None]: + return self.by_property("duration", duration)
+ +
[docs] def by_name(self, name: str) -> Union['XAMediaPlaylist', None]: + return self.by_property("name", name)
+ +
[docs] def by_parent(self, parent: 'XAMediaPlaylist') -> Union['XAMediaPlaylist', None]: + return self.by_property("parent", parent.xa_elem)
+ +
[docs] def by_size(self, size: int) -> Union['XAMediaPlaylist', None]: + return self.by_property("size", size)
+ +
[docs] def by_special_kind(self, special_kind: XAMediaApplication.PlaylistKind) -> Union['XAMediaPlaylist', None]: + return self.by_property("specialKind", special_kind.value)
+ +
[docs] def by_time(self, time: str) -> Union['XAMediaPlaylist', None]: + return self.by_property("time", time)
+ +
[docs] def by_visible(self, visible: bool) -> Union['XAMediaPlaylist', None]: + return self.by_property("visible", visible)
+ +
[docs]class XAMediaPlaylist(XAMediaItem): + """A playlist in media apps. + + .. seealso:: :class:`XAMediaLibraryPlaylist`, :class:`XAMediaUserPlaylist` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + if not hasattr(self, "xa_specialized"): + if self.special_kind == XAMediaApplication.PlaylistKind.LIBRARY or self.special_kind == XAMediaApplication.PlaylistKind.USER_LIBRARY: + self.__class__ = XAMediaLibraryPlaylist + + elif self.special_kind == XAMediaApplication.PlaylistKind.FOLDER: + self.__class__ = XAMediaFolderPlaylist + + elif self.special_kind == XAMediaApplication.PlaylistKind.USER or self.special_kind == XAMediaApplication.PlaylistKind.NONE: + self.__class__ = XAMediaUserPlaylist + + self.xa_specialized = True + self.__init__(properties) + + @property + def object_description(self) -> str: + """The string description of the playlist. + """ + return self.xa_elem.objectDescription() + + @object_description.setter + def object_description(self, object_description: str): + self.set_property('objectDescription', object_description) + + @property + def duration(self) -> int: + """The total length of all tracks in seconds. + """ + return self.xa_elem.duration() + + @property + def name(self) -> str: + """The name of the playlist. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def parent(self) -> 'XAMediaPlaylist': + """The folder containing the playlist, if any. + """ + return self._new_element(self.xa_elem.parent(), XAMediaPlaylist) + + @property + def size(self) -> int: + """The total size of all tracks in the playlist in bytes. + """ + return self.xa_elem.size() + + @property + def special_kind(self) -> XAMediaApplication.PlaylistKind: + """The special playlist kind. + """ + return XAMediaApplication.PlaylistKind(self.xa_elem.specialKind()) + + @property + def time(self) -> str: + """The length of all tracks in the playlist in MM:SS format. + """ + return self.xa_elem.time() + + @property + def visible(self) -> bool: + """Whether the playlist is visible in the source list. + """ + return self.xa_elem.visible() + +
[docs] def move_to(self, parent_playlist): + self.xa_elem.moveTo_(parent_playlist.xa_elem)
+ +
[docs] def search(self, query: str, type: Literal["all", "artists", "albums", "displayed", "tracks"] = "displayed"): + search_ids = { + "all": XAMediaApplication.SearchFilter.ALL, + "artists": XAMediaApplication.SearchFilter.ARTISTS, + "albums": XAMediaApplication.SearchFilter.ALBUMS, + "displayed": XAMediaApplication.SearchFilter.DISPLAYED, + "tracks": XAMediaApplication.SearchFilter.NAMES, + } + + items = [] + results = self.xa_elem.searchFor_only_(query, search_ids[type]) + for result in results: + properties = { + "parent": self, + "element": result, + "appref": self.xa_aref, + "system_events": self.xa_sevt, + } + items.append(XAMediaTrack(properties)) + return items
+ +
[docs] def tracks(self, filter: Union[dict, None] = None) -> 'XAMediaTrackList': + """Returns a list of tracks, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned tracks will have, or None + :type filter: Union[dict, None] + :return: The list of tracks + :rtype: XAMediaTrackList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.tracks(), XAMediaTrackList, filter)
+ +
[docs] def artworks(self, filter: Union[dict, None] = None) -> 'XAMediaArtworkList': + """Returns a list of artworks, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned artworks will have, or None + :type filter: Union[dict, None] + :return: The list of artworks + :rtype: XAMediaArtworkList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.artworks(), XAMediaArtworkList, filter)
+ + + +
[docs]class XAMediaLibraryPlaylistList(XAMediaPlaylistList): + """A wrapper around lists of library playlists that employs fast enumeration techniques. + + All properties of library playlists can be called as methods on the wrapped list, returning a list containing each playlist's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMediaLibraryPlaylist)
+ +
[docs]class XAMediaLibraryPlaylist(XAMediaPlaylist): + """The library playlist in media apps. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + +
[docs] def file_tracks(self, filter: Union[dict, None] = None) -> 'XAMediaFileTrackList': + """Returns a list of file tracks, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned file tracks will have, or None + :type filter: Union[dict, None] + :return: The list of file tracks + :rtype: XAMediaFileTrackList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.fileTracks(), XAMediaFileTrackList, filter)
+ +
[docs] def url_tracks(self, filter: Union[dict, None] = None) -> 'XAMediaURLTrackList': + """Returns a list of URL tracks, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned URL tracks will have, or None + :type filter: Union[dict, None] + :return: The list of URL tracks + :rtype: XAMediaURLTrackList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.URLTracks(), XAMediaURLTrackList, filter)
+ +
[docs] def shared_tracks(self, filter: Union[dict, None] = None) -> 'XAMediaSharedTrackList': + """Returns a list of shared tracks, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned shared tracks will have, or None + :type filter: Union[dict, None] + :return: The list of shared tracks + :rtype: XAMediaSharedTrackList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.sharedTracks(), XAMediaSharedTrackList, filter)
+ + + + +
[docs]class XAMediaSourceList(XAMediaItemList): + """A wrapper around lists of sources that employs fast enumeration techniques. + + All properties of sources can be called as methods on the wrapped list, returning a list containing each source's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAMediaSource + super().__init__(properties, filter, obj_class) + +
[docs] def capacity(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("capacity") or [])
+ +
[docs] def free_space(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("freeSpace") or [])
+ +
[docs] def kind(self) -> list[XAMediaApplication.SourceKind]: + ls = self.xa_elem.arrayByApplyingSelector_("kind") or [] + return [XAMediaApplication.SourceKind(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def by_capacity(self, capacity: int) -> Union['XAMediaSource', None]: + return self.by_property("capacity", capacity)
+ +
[docs] def by_free_space(self, free_space: int) -> Union['XAMediaSource', None]: + return self.by_property("freeSpace", free_space)
+ +
[docs] def by_kind(self, kind: XAMediaApplication.SourceKind) -> Union['XAMediaSource', None]: + # TODO + return self.by_property("kind", kind.value)
+ +
[docs]class XAMediaSource(XAMediaItem): + """A media source in media apps. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def capacity(self) -> int: + """The total size of the source, if it has a fixed size. + """ + return self.xa_elem.capacity() + + @property + def free_space(self) -> int: + """The free space on the source, if it has a fixed size. + """ + return self.xa_elem.freeSpace() + + @property + def kind(self) -> XAMediaApplication.SourceKind: + """The source kind. + """ + return XAMediaApplication.SourceKind(self.xa_elem.kind()) + +
[docs] def library_playlists(self, filter: Union[dict, None] = None) -> 'XAMediaLibraryPlaylistList': + """Returns a list of library playlists, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned library playlists will have, or None + :type filter: Union[dict, None] + :return: The list of library playlists + :rtype: XAMediaLibraryPlaylistList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.libraryPlaylists(), XAMediaLibraryPlaylistList, filter)
+ +
[docs] def playlists(self, filter: Union[dict, None] = None) -> 'XAMediaPlaylistList': + """Returns a list of playlists, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned playlists will have, or None + :type filter: Union[dict, None] + :return: The list of playlists + :rtype: XAMediaPlaylistList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.playlists(), XAMediaPlaylistList, filter)
+ +
[docs] def user_playlists(self, filter: Union[dict, None] = None) -> 'XAMediaUserPlaylistList': + """Returns a list of user playlists, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned user playlists will have, or None + :type filter: Union[dict, None] + :return: The list of user playlists + :rtype: XAMediaUserPlaylistList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.userPlaylists(), XAMediaUserPlaylistList, filter)
+ + + + +
[docs]class XAMediaTrackList(XAMediaItemList): + """A wrapper around lists of music tracks that employs fast enumeration techniques. + + All properties of music tracks can be called as methods on the wrapped list, returning a list containing each track's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAMediaTrack + super().__init__(properties, filter, obj_class) + +
[docs] def album(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("album") or [])
+ +
[docs] def album_rating(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("albumRating") or [])
+ +
[docs] def album_rating_kind(self) -> list[XAMediaApplication.RatingKind]: + ls = self.xa_elem.arrayByApplyingSelector_("albumRatingKind") or [] + return [XAMediaApplication.RatingKind(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def bit_rate(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("bitRate") or [])
+ +
[docs] def bookmark(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("bookmark") or [])
+ +
[docs] def bookmarkable(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("bookmarkable") or [])
+ +
[docs] def category(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("category") or [])
+ +
[docs] def comment(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("comment") or [])
+ +
[docs] def database_id(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("databaseID") or [])
+ +
[docs] def date_added(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("dateAdded") or [])
+ +
[docs] def object_description(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("objectDescription") or [])
+ +
[docs] def disc_count(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("discCount") or [])
+ +
[docs] def disc_number(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("discNumber") or [])
+ +
[docs] def downloader_apple_id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("downloaderAppleID") or [])
+ +
[docs] def downloader_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("downloaderName") or [])
+ +
[docs] def duration(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("duration") or [])
+ +
[docs] def enabled(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("enabled") or [])
+ +
[docs] def episode_id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("episodeID") or [])
+ +
[docs] def episode_number(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("episodeNumber") or [])
+ +
[docs] def finish(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("finish") or [])
+ +
[docs] def genre(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("genre") or [])
+ +
[docs] def grouping(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("grouping") or [])
+ +
[docs] def kind(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("kind") or [])
+ +
[docs] def long_description(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("longDescription") or [])
+ +
[docs] def media_kind(self) -> list[XAMediaApplication.MediaKind]: + ls = self.xa_elem.arrayByApplyingSelector_("mediaKind") or [] + return [XAMediaApplication.MediaKind(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def modification_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("modificationDate") or [])
+ +
[docs] def played_count(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("playedCount") or [])
+ +
[docs] def played_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("playedDate") or [])
+ +
[docs] def purchaser_apple_id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("purchaserAppleID") or [])
+ +
[docs] def purchaser_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("purchaserName") or [])
+ +
[docs] def rating(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("rating") or [])
+ +
[docs] def rating_kind(self) -> list[XAMediaApplication.RatingKind]: + ls = self.xa_elem.arrayByApplyingSelector_("ratingKind") or [] + return [XAMediaApplication.RatingKind(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def release_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("releaseDate") or [])
+ +
[docs] def sample_rate(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("sampleRate") or [])
+ +
[docs] def season_number(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("seasonNumber") or [])
+ +
[docs] def skipped_count(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("skippedCount") or [])
+ +
[docs] def skipped_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("skippedDate") or [])
+ +
[docs] def show(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("show") or [])
+ +
[docs] def sort_album(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("sortAlbum") or [])
+ +
[docs] def sort_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("sortName") or [])
+ +
[docs] def sort_show(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("sortShow") or [])
+ +
[docs] def size(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("size") or [])
+ +
[docs] def start(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("start") or [])
+ +
[docs] def time(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("time") or [])
+ +
[docs] def track_count(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("trackCount") or [])
+ +
[docs] def track_number(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("trackNumber") or [])
+ +
[docs] def unplayed(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("unplayed") or [])
+ +
[docs] def volume_adjustment(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("volumeAdjustment") or [])
+ +
[docs] def year(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("year") or [])
+ +
[docs] def by_album(self, album: str) -> Union['XAMediaTrack', None]: + return self.by_property("album", album)
+ +
[docs] def by_album_rating(self, album_rating: int) -> Union['XAMediaTrack', None]: + return self.by_property("albumRating", album_rating)
+ +
[docs] def by_album_rating_kind(self, album_rating_kind: XAMediaApplication.RatingKind) -> Union['XAMediaTrack', None]: + # TODO + return self.by_property("albumRatingKind", album_rating_kind.value)
+ +
[docs] def by_bit_rate(self, bit_rate: int) -> Union['XAMediaTrack', None]: + return self.by_property("bitRate", bit_rate)
+ +
[docs] def by_bookmark(self, bookmark: float) -> Union['XAMediaTrack', None]: + return self.by_property("bookmark", bookmark)
+ +
[docs] def by_bookmarkable(self, bookmarkable: bool) -> Union['XAMediaTrack', None]: + return self.by_property("bookmarkable", bookmarkable)
+ +
[docs] def by_category(self, category: str) -> Union['XAMediaTrack', None]: + return self.by_property("category", category)
+ +
[docs] def by_comment(self, comment: str) -> Union['XAMediaTrack', None]: + return self.by_property("comment", comment)
+ +
[docs] def by_database_id(self, database_id: int) -> Union['XAMediaTrack', None]: + return self.by_property("databaseID", database_id)
+ +
[docs] def by_date_added(self, date_added: datetime) -> Union['XAMediaTrack', None]: + return self.by_property("dateAdded", date_added)
+ +
[docs] def by_object_description(self, object_description: str) -> Union['XAMediaTrack', None]: + return self.by_property("objectDescription", object_description)
+ +
[docs] def by_disc_count(self, disc_count: int) -> Union['XAMediaTrack', None]: + return self.by_property("discCount", disc_count)
+ +
[docs] def by_disc_number(self, disc_number: int) -> Union['XAMediaTrack', None]: + return self.by_property("discNumber", disc_number)
+ +
[docs] def by_downloader_apple_id(self, downloader_apple_id: str) -> Union['XAMediaTrack', None]: + return self.by_property("downloaderAppleID", downloader_apple_id)
+ +
[docs] def by_downloader_name(self, downloader_name: str) -> Union['XAMediaTrack', None]: + return self.by_property("downloaderName", downloader_name)
+ +
[docs] def by_duration(self, duration: float) -> Union['XAMediaTrack', None]: + return self.by_property("duration", duration)
+ +
[docs] def by_enabled(self, enabled: bool) -> Union['XAMediaTrack', None]: + return self.by_property("enabled", enabled)
+ +
[docs] def by_episode_id(self, episode_id: str) -> Union['XAMediaTrack', None]: + return self.by_property("episodeID", episode_id)
+ +
[docs] def by_episode_number(self, episode_number: int) -> Union['XAMediaTrack', None]: + return self.by_property("episodeNumber", episode_number)
+ +
[docs] def by_finish(self, finish: float) -> Union['XAMediaTrack', None]: + return self.by_property("finish", finish)
+ +
[docs] def by_genre(self, genre: str) -> Union['XAMediaTrack', None]: + return self.by_property("genre", genre)
+ +
[docs] def by_grouping(self, grouping: str) -> Union['XAMediaTrack', None]: + return self.by_property("grouping", grouping)
+ +
[docs] def by_kind(self, kind: str) -> Union['XAMediaTrack', None]: + return self.by_property("kind", kind)
+ +
[docs] def by_long_description(self, long_description: str) -> Union['XAMediaTrack', None]: + return self.by_property("longDescription", long_description)
+ +
[docs] def by_media_kind(self, media_kind: XAMediaApplication.MediaKind) -> Union['XAMediaTrack', None]: + # TODO + return self.by_property("mediaKind", media_kind.value)
+ +
[docs] def by_modification_date(self, modification_date: datetime) -> Union['XAMediaTrack', None]: + return self.by_property("modificationDate", modification_date)
+ +
[docs] def by_played_count(self, played_count: int) -> Union['XAMediaTrack', None]: + return self.by_property("playedCount", played_count)
+ +
[docs] def by_played_date(self, played_date: datetime) -> Union['XAMediaTrack', None]: + return self.by_property("playedDate", played_date)
+ +
[docs] def by_purchaser_apple_id(self, purchaser_apple_id: str) -> Union['XAMediaTrack', None]: + return self.by_property("purchaserAppleID", purchaser_apple_id)
+ +
[docs] def by_purchaser_name(self, purchaser_name: str) -> Union['XAMediaTrack', None]: + return self.by_property("purchaserName", purchaser_name)
+ +
[docs] def by_rating(self, rating: int) -> Union['XAMediaTrack', None]: + return self.by_property("rating", rating)
+ +
[docs] def by_rating_kind(self, rating_kind: XAMediaApplication.RatingKind) -> Union['XAMediaTrack', None]: + # TODO + return self.by_property("ratingKind", rating_kind.value)
+ +
[docs] def by_release_date(self, release_date: datetime) -> Union['XAMediaTrack', None]: + return self.by_property("releaseDate", release_date)
+ +
[docs] def by_sample_rate(self, sample_rate: int) -> Union['XAMediaTrack', None]: + return self.by_property("sampleRate", sample_rate)
+ +
[docs] def by_season_number(self, season_number: int) -> Union['XAMediaTrack', None]: + return self.by_property("seasonNumber", season_number)
+ +
[docs] def by_skipped_count(self, skipped_count: int) -> Union['XAMediaTrack', None]: + return self.by_property("skippedCount", skipped_count)
+ +
[docs] def by_skipped_date(self, skipped_date: datetime) -> Union['XAMediaTrack', None]: + return self.by_property("skippedDate", skipped_date)
+ +
[docs] def by_show(self, show: str) -> Union['XAMediaTrack', None]: + return self.by_property("show", show)
+ +
[docs] def by_sort_album(self, sort_album: str) -> Union['XAMediaTrack', None]: + return self.by_property("sortAlbum", sort_album)
+ +
[docs] def by_sort_name(self, sort_name: str) -> Union['XAMediaTrack', None]: + return self.by_property("sortName", sort_name)
+ +
[docs] def by_sort_show(self, sort_show: str) -> Union['XAMediaTrack', None]: + return self.by_property("sortShow", sort_show)
+ +
[docs] def by_size(self, size: int) -> Union['XAMediaTrack', None]: + return self.by_property("size", size)
+ +
[docs] def by_start(self, start: float) -> Union['XAMediaTrack', None]: + return self.by_property("start", start)
+ +
[docs] def by_time(self, time: str) -> Union['XAMediaTrack', None]: + return self.by_property("time", time)
+ +
[docs] def by_track_count(self, track_count: int) -> Union['XAMediaTrack', None]: + return self.by_property("trackCount", track_count)
+ +
[docs] def by_track_number(self, track_number: int) -> Union['XAMediaTrack', None]: + return self.by_property("trackNumber", track_number)
+ +
[docs] def by_unplayed(self, unplayed: bool) -> Union['XAMediaTrack', None]: + return self.by_property("unplayed", unplayed)
+ +
[docs] def by_volume_adjustment(self, volume_adjustment: int) -> Union['XAMediaTrack', None]: + return self.by_property("volumeAdjustment", volume_adjustment)
+ +
[docs] def by_year(self, year: int) -> Union['XAMediaTrack', None]: + return self.by_property("year", year)
+ +
[docs]class XAMediaTrack(XAMediaItem): + """A class for managing and interacting with tracks in media apps. + + .. seealso:: :class:`XAMediaSharedTrack`, :class:`XAMediaFileTrack`, :class:`XAMediaRemoteURLTrack` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + # print("Track type", self.objectClass.data()) + # if self.objectClass.data() == _SHARED_TRACK: + # self.__class__ = XAMediaSharedTrack + # self.__init__() + # elif self.objectClass.data() == _FILE_TRACK: + # self.__class__ = XAMediaFileTrack + # self.__init__() + # elif self.objectClass.data() == _URL_TRACK: + # self.__class__ = XAMediaURLTrack + # self.__init__() + + @property + def album(self) -> str: + """The name of the track's album. + """ + return self.xa_elem.album() + + @album.setter + def album(self, album: str): + self.set_property('album', album) + + @property + def album_rating(self) -> int: + """The rating of the track's album. + """ + return self.xa_elem.albumRating() + + @album_rating.setter + def album_rating(self, album_rating: int): + self.set_property('albumRating', album_rating) + + @property + def album_rating_kind(self) -> XAMediaApplication.RatingKind: + """The album's rating kind. + """ + return XAMediaApplication.RatingKind(self.xa_elem.albumRatingKind()) + + @property + def bit_rate(self) -> int: + """The track's bitrate in kbps. + """ + return self.xa_elem.bitRate() + + @property + def bookmark(self) -> float: + """The bookmark time of the track in seconds. + """ + return self.xa_elem.bookmark() + + @bookmark.setter + def bookmark(self, bookmark: float): + self.set_property('bookmark', bookmark) + + @property + def bookmarkable(self) -> bool: + """Whether the playback position is kept in memory after stopping the track. + """ + return self.xa_elem.bookmarkable() + + @bookmarkable.setter + def bookmarkable(self, bookmarkable: bool): + self.set_property('bookmarkable', bookmarkable) + + @property + def category(self) -> str: + """The category of the track. + """ + return self.xa_elem.category() + + @category.setter + def category(self, category: str): + self.set_property('category', category) + + @property + def comment(self) -> str: + """User-provided notes on the track. + """ + return self.xa_elem.comment() + + @comment.setter + def comment(self, comment: str): + self.set_property('comment', comment) + + @property + def database_id(self) -> int: + """A unique ID for the track. + """ + return self.xa_elem.databaseID() + + @property + def date_added(self) -> datetime: + """The date the track was added to the current playlist. + """ + return self.xa_elem.dateAdded() + + @property + def object_description(self) -> str: + """A string description of the track. + """ + return self.xa_elem.objectDescription() + + @object_description.setter + def object_description(self, object_description: str): + self.set_property('objectDescription', object_description) + + @property + def disc_count(self) -> int: + """The number of discs in the source album. + """ + return self.xa_elem.discCount() + + @disc_count.setter + def disc_count(self, disc_count: int): + self.set_property('discCount', disc_count) + + @property + def disc_number(self) -> int: + """The index of the disc containing the track. + """ + return self.xa_elem.discNumber() + + @disc_number.setter + def disc_number(self, disc_number: int): + self.set_property('discNumber', disc_number) + + @property + def downloader_apple_id(self) -> str: + """The Apple ID of the person who downloaded the track. + """ + return self.xa_elem.downloaderAppleID() + + @property + def downloader_name(self) -> str: + """The full name of the person who downloaded the track. + """ + return self.xa_elem.downloaderName() + + @property + def duration(self) -> float: + """Length of the track in seconds. + """ + return self.xa_elem.duration() + + @property + def enabled(self) -> bool: + """Whether the track is able to be played. + """ + return self.xa_elem.enabled() + + @enabled.setter + def enabled(self, enabled: bool): + self.set_property('enabled', enabled) + + @property + def episode_id(self) -> str: + """A unique ID for the episode of the track. + """ + return self.xa_elem.episodeID() + + @episode_id.setter + def episode_id(self, episode_id: str): + self.set_property('episodeId', episode_id) + + @property + def episode_number(self) -> int: + """The episode number of the track. + """ + return self.xa_elem.episodeNumber() + + @episode_number.setter + def episode_number(self, episode_number: int): + self.set_property('episodeNumber', episode_number) + + @property + def finish(self) -> float: + """The time in seconds from the start at which the track stops playing. + """ + return self.xa_elem.finish() + + @finish.setter + def finish(self, finish: float): + self.set_property('finish', finish) + + @property + def genre(self) -> str: + """The music/audio genre category of the track. + """ + return self.xa_elem.genre() + + @genre.setter + def genre(self, genre: str): + self.set_property('genre', genre) + + @property + def grouping(self) -> str: + """The current section/chapter/movement of the track. + """ + return self.xa_elem.grouping() + + @grouping.setter + def grouping(self, grouping: str): + self.set_property('grouping', grouping) + + @property + def kind(self) -> str: + """A text description of the track. + """ + return self.xa_elem.kind() + + @property + def long_description(self) -> str: + """A long description for the track. + """ + return self.xa_elem.longDescription() + + @long_description.setter + def long_description(self, long_description: str): + self.set_property('longDescription', long_description) + + @property + def media_kind(self) -> XAMediaApplication.MediaKind: + """A description of the track's media type. + """ + return XAMediaApplication.MediaKind(self.xa_elem.mediaKind()) + + @media_kind.setter + def media_kind(self, media_kind: XAMediaApplication.MediaKind): + self.set_property('mediaKind', media_kind.value) + + @property + def modification_date(self) -> datetime: + """The last modification date of the track's content. + """ + return self.xa_elem.modificationDate() + + @property + def played_count(self) -> int: + """The number of the times the track has been played. + """ + return self.xa_elem.playedCount() + + @played_count.setter + def played_count(self, played_count: int): + self.set_property('playedCount', played_count) + + @property + def played_date(self) -> datetime: + """The date the track was last played. + """ + return self.xa_elem.playedDate() + + @played_date.setter + def played_date(self, played_date: datetime): + self.set_property('playedDate', played_date) + + @property + def purchaser_apple_id(self) -> str: + """The Apple ID of the person who bought the track. + """ + return self.xa_elem.purchaserAppleID() + + @property + def purchaser_name(self) -> str: + """The full name of the person who bought the track. + """ + return self.xa_elem.purchaserName() + + @property + def rating(self) -> int: + """The rating of the track from 0 to 100. + """ + return self.xa_elem.rating() + + @rating.setter + def rating(self, rating: int): + self.set_property('rating', rating) + + @property + def rating_kind(self) -> XAMediaApplication.RatingKind: + """Whether the rating is user-provided or computed. + """ + return XAMediaApplication.RatingKind(self.xa_elem.ratingKind()) + + @property + def release_date(self) -> datetime: + """The date the track was released. + """ + return self.xa_elem.releaseDate() + + @property + def sample_rate(self) -> int: + """The sample rate of the track in Hz. + """ + return self.xa_elem.sampleRate() + + @property + def season_number(self) -> int: + """The number of the season the track belongs to. + """ + return self.xa_elem.seasonNumber() + + @season_number.setter + def season_number(self, season_number: int): + self.set_property('seasonNumber', season_number) + + @property + def skipped_count(self) -> int: + """The number of times the track has been skipped. + """ + return self.xa_elem.skippedCount() + + @skipped_count.setter + def skipped_count(self, skipped_count: int): + self.set_property('skippedCount', skipped_count) + + @property + def skipped_date(self) -> datetime: + """The date the track was last skipped. + """ + return self.xa_elem.skippedDate() + + @skipped_date.setter + def skipped_date(self, skipped_date: datetime): + self.set_property('skippedDate', skipped_date) + + @property + def show(self) -> str: + """The name of the show the track belongs to. + """ + return self.xa_elem.show() + + @show.setter + def show(self, show: str): + self.set_property('show', show) + + @property + def sort_album(self) -> str: + """The string used for this track when sorting by album. + """ + return self.xa_elem.sortAlbum() + + @sort_album.setter + def sort_album(self, sort_album: str): + self.set_property('sortAlbum', sort_album) + + @property + def sort_name(self) -> str: + """The string used for this track when sorting by name. + """ + return self.xa_elem.sortName() + + @sort_name.setter + def sort_name(self, sort_name: str): + self.set_property('sortName', sort_name) + + @property + def sort_show(self) -> str: + """The string used for this track when sorting by show. + """ + return self.xa_elem.sortShow() + + @sort_show.setter + def sort_show(self, sort_show: str): + self.set_property('sortShow', sort_show) + + @property + def size(self) -> int: + """The size of the track in bytes. + """ + return self.xa_elem.size() + + @property + def start(self) -> float: + """The start time of the track in seconds. + """ + return self.xa_elem.start() + + @start.setter + def start(self, start: float): + self.set_property('start', start) + + @property + def time(self) -> str: + """HH:MM:SS representation for the duration of the track. + """ + return self.xa_elem.time() + + @property + def track_count(self) -> int: + """The number of tracks in the track's album. + """ + return self.xa_elem.trackCount() + + @track_count.setter + def track_count(self, track_count: int): + self.set_property('trackCount', track_count) + + @property + def track_number(self) -> int: + """The index of the track within its album. + """ + return self.xa_elem.trackNumber() + + @track_number.setter + def track_number(self, track_number: int): + self.set_property('trackNumber', track_number) + + @property + def unplayed(self) -> bool: + """Whether the track has been played before. + """ + return self.xa_elem.unplayed() + + @unplayed.setter + def unplayed(self, unplayed: bool): + self.set_property('unplayed', unplayed) + + @property + def volume_adjustment(self) -> int: + """Volume adjustment setting for this track from -100 to +100. + """ + return self.xa_elem.volumeAdjustment() + + @volume_adjustment.setter + def volume_adjustment(self, volume_adjustment: int): + self.set_property('volumeAdjustment', volume_adjustment) + + @property + def year(self) -> int: + """The year the track was released. + """ + return self.xa_elem.year() + + @year.setter + def year(self, year: int): + self.set_property('year', year) + +
[docs] def select(self) -> 'XAMediaItem': + """Selects the item. + + :return: A reference to the media item object. + :rtype: XAMediaTrack + + .. seealso:: :func:`reveal` + + .. versionadded:: 0.0.1 + """ + self.xa_elem.select() + return self
+ +
[docs] def play(self) -> 'XAMediaItem': + """Plays the item. + + :return: A reference to the media item object. + :rtype: _XAMediaItem + + .. versionadded:: 0.0.1 + """ + self.xa_elem.playOnce_(True) + return self
+ +
[docs] def artworks(self, filter: Union[dict, None] = None) -> 'XAMediaArtworkList': + """Returns a list of artworks, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned artworks will have, or None + :type filter: Union[dict, None] + :return: The list of artworks + :rtype: XAMediaArtworkList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.artworks(), XAMediaArtworkList, filter)
+ + + + +
[docs]class XAMediaFileTrackList(XAMediaTrackList): + """A wrapper around lists of music file tracks that employs fast enumeration techniques. + + All properties of music file tracks can be called as methods on the wrapped list, returning a list containing each track's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMediaFileTrack) + +
[docs] def location(self) -> list[XABase.XAURL]: + ls = self.xa_elem.arrayByApplyingSelector_("location") or [] + return [XABase.XAURL(x) for x in ls]
+ +
[docs] def by_location(self, location: XABase.XAURL) -> Union['XAMediaFileTrack', None]: + return self.by_property("location", location.xa_elem)
+ +
[docs]class XAMediaFileTrack(XAMediaTrack): + """A file track in media apps. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def location(self) -> XABase.XAPath: + """The location of the file represented by the track. + """ + return XABase.XAPath(self.xa_elem.location()) + + @location.setter + def location(self, location: Union[XABase.XAPath, str]): + if isinstance(location, str): + location = XABase.XAPath(location) + self.set_property('location', location.xa_elem)
+ + + + +
[docs]class XAMediaSharedTrackList(XAMediaTrackList): + """A wrapper around lists of music shared tracks that employs fast enumeration techniques. + + All properties of music shared tracks can be called as methods on the wrapped list, returning a list containing each track's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMediaSharedTrack)
+ +
[docs]class XAMediaSharedTrack(XAMediaTrack): + """A shared track in media apps. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAMediaURLTrackList(XAMediaTrackList): + """A wrapper around lists of music URL tracks that employs fast enumeration techniques. + + All properties of music URL tracks can be called as methods on the wrapped list, returning a list containing each track's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMediaURLTrack) + +
[docs] def address(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("address") or [])
+ +
[docs] def by_address(self, address: str) -> Union['XAMediaURLTrack', None]: + return self.by_property("address", address)
+ +
[docs]class XAMediaURLTrack(XAMediaTrack): + """A URL track in media apps. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def address(self) -> XABase.XAURL: + """The URL for the track. + """ + return XABase.XAURL(self.xa_elem.address()) + + @address.setter + def address(self, address: Union[XABase.XAURL, str]): + if isinstance(address, str): + address = XABase.XAURL(address) + self.set_property('address', address.xa_elem)
+ + + + +
[docs]class XAMediaUserPlaylistList(XAMediaPlaylistList): + """A wrapper around lists of music user playlists that employs fast enumeration techniques. + + All properties of music user playlists can be called as methods on the wrapped list, returning a list containing each playlist's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMediaUserPlaylist) + +
[docs] def shared(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("shared") or [])
+ +
[docs] def smart(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("smart") or [])
+ +
[docs] def by_shared(self, shared: bool) -> Union['XAMediaUserPlaylist', None]: + return self.by_property("shared", shared)
+ +
[docs] def by_smart(self, smart: bool) -> Union['XAMediaUserPlaylist', None]: + return self.by_property("smart", smart)
+ +
[docs]class XAMediaUserPlaylist(XAMediaPlaylist): + """A user-created playlist in media apps. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def shared(self) -> bool: + """Whether the playlist is shared. + """ + return self.xa_elem.shared() + + @shared.setter + def shared(self, shared: bool): + self.set_property('shared', shared) + + @property + def smart(self) -> bool: + """Whether the playlist is a smart playlist. + """ + return self.xa_elem.smart() + +
[docs] def file_tracks(self, filter: Union[dict, None] = None) -> 'XAMediaFileTrackList': + """Returns a list of file tracks, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned file tracks will have, or None + :type filter: Union[dict, None] + :return: The list of file tracks + :rtype: XAMediaFileTrackList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.fileTracks(), XAMediaFileTrackList, filter)
+ +
[docs] def url_tracks(self, filter: Union[dict, None] = None) -> 'XAMediaURLTrackList': + """Returns a list of URL tracks, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned URL tracks will have, or None + :type filter: Union[dict, None] + :return: The list of URL tracks + :rtype: XAMediaURLTrackList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.URLTracks(), XAMediaURLTrackList, filter)
+ +
[docs] def shared_tracks(self, filter: Union[dict, None] = None) -> 'XAMediaSharedTrackList': + """Returns a list of shared tracks, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned shared tracks will have, or None + :type filter: Union[dict, None] + :return: The list of shared tracks + :rtype: XAMediaSharedTrackList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.sharedTracks(), XAMediaSharedTrackList, filter)
+ + + + +
[docs]class XAMediaFolderPlaylistList(XAMediaUserPlaylistList): + """A wrapper around lists of music folder playlists that employs fast enumeration techniques. + + All properties of music folder playlists can be called as methods on the wrapped list, returning a list containing each playlist's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMediaFolderPlaylist)
+ +
[docs]class XAMediaFolderPlaylist(XAMediaUserPlaylist): + """A folder playlist in media apps. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAMediaWindowList(XAMediaItemList): + """A wrapper around lists of windows that employs fast enumeration techniques. + + All properties of windows can be called as methods on the wrapped list, returning a list containing each windows's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAMediaWindow + super().__init__(properties, filter, obj_class) + +
[docs] def bounds(self) -> list[tuple[tuple[int, int], tuple[int, int]]]: + return list(self.xa_elem.arrayByApplyingSelector_("bounds") or [])
+ +
[docs] def closeable(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("closeable") or [])
+ +
[docs] def collapseable(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("collapseable") or [])
+ +
[docs] def collapsed(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("collapsed") or [])
+ +
[docs] def full_screen(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("fullScreen") or [])
+ +
[docs] def position(self) -> list[tuple[int, int]]: + return list(self.xa_elem.arrayByApplyingSelector_("position") or [])
+ +
[docs] def resizable(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("resizable") or [])
+ +
[docs] def visible(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("visible") or [])
+ +
[docs] def zoomable(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("zoomable") or [])
+ +
[docs] def zoomed(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("zoomed") or [])
+ +
[docs] def by_bounds(self, bounds: tuple[tuple[int, int], tuple[int, int]]) -> Union['XAMediaWindow', None]: + # TODO + return self.by_property("bounds", bounds)
+ +
[docs] def by_closeable(self, closeable: bool) -> Union['XAMediaWindow', None]: + return self.by_property("closeable", closeable)
+ +
[docs] def by_collapseable(self, collapseable: bool) -> Union['XAMediaWindow', None]: + return self.by_property("collapseable", collapseable)
+ +
[docs] def by_collapsed(self, collapsed: bool) -> Union['XAMediaWindow', None]: + return self.by_property("collapsed", collapsed)
+ +
[docs] def by_full_screen(self, full_screen: bool) -> Union['XAMediaWindow', None]: + return self.by_property("fullScreen", full_screen)
+ +
[docs] def by_position(self, position: tuple[int, int]) -> Union['XAMediaWindow', None]: + # TODO + return self.by_property("position", position)
+ +
[docs] def by_resizable(self, resizable: bool) -> Union['XAMediaWindow', None]: + return self.by_property("resizable", resizable)
+ +
[docs] def by_visible(self, visible: bool) -> Union['XAMediaWindow', None]: + return self.by_property("visible", visible)
+ +
[docs] def by_zoomable(self, zoomable: bool) -> Union['XAMediaWindow', None]: + return self.by_property("zoomable", zoomable)
+ +
[docs] def by_zoomed(self, zoomed: bool) -> Union['XAMediaWindow', None]: + return self.by_property("zoomed", zoomed)
+ +
[docs]class XAMediaWindow(XABaseScriptable.XASBWindow, XAMediaItem): + """A windows of media apps. + + .. seealso:: :class:`XAMediaBrowserWindow`, :class:`XAMediaPlaylistWindow`, :class:`XAMediaVideoWindow` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def collapseable(self) -> bool: + """Whether the window can be minimized. + + .. deprecated:: 0.1.1 + + Use :attr:`XAMediaWindow.miniaturizable` instead. + """ + return self.xa_elem.miniaturizable() + + @property + def collapsed(self) -> bool: + """Whether the window is currently minimized. + + .. deprecated:: 0.1.1 + + Use :attr:`XAMediaWindow.miniaturized` instead. + """ + return self.xa_elem.miniaturized() + + @collapsed.setter + def collapsed(self, collapsed: bool): + self.set_property('collapsed', collapsed) + + @property + def full_screen(self) -> bool: + """Whether the window is currently full screen. + """ + return self.xa_elem.fullScreen() + + @full_screen.setter + def full_screen(self, full_screen: bool): + self.set_property('fullScreen', full_screen) + + @property + def position(self) -> tuple[int, int]: + """The upper left position of the window. + """ + return self.xa_elem.position() + + @position.setter + def position(self, position: tuple[int, int]): + self.set_property('position', position)
+ + + + +
[docs]class XAMediaBrowserWindowList(XAMediaWindowList): + """A wrapper around lists of music browser windows that employs fast enumeration techniques. + + All properties of music browser windows can be called as methods on the wrapped list, returning a list containing each windows's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMediaBrowserWindow) + +
[docs] def selection(self) -> XAMediaTrackList: + ls = self.xa_elem.arrayByApplyingSelector_("selection") or [] + return self._new_element(ls, XAMediaTrackList)
+ +
[docs] def view(self) -> XAMediaPlaylistList: + ls = self.xa_elem.arrayByApplyingSelector_("view") or [] + return self._new_element(ls, XAMediaPlaylistList)
+ +
[docs] def by_selection(self, selection: XAMediaTrackList) -> Union['XAMediaPlaylistWindow', None]: + return self.by_property("selection", selection.xa_elem)
+ +
[docs] def by_view(self, view: XAMediaPlaylist) -> Union['XAMediaPlaylistWindow', None]: + return self.by_property("view", view.xa_elem)
+ +
[docs]class XAMediaBrowserWindow(XAMediaWindow): + """A browser window of media apps. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def selection(self) -> XAMediaTrackList: + """The selected tracks. + """ + return self._new_element(self.xa_elem.selection(), XAMediaTrackList) + + @property + def view(self) -> XAMediaPlaylist: + """The playlist currently displayed in the window. + """ + return self._new_element(self.xa_elem.view(), XAMediaPlaylist)
+ + + +
[docs]class XAMediaPlaylistWindowList(XAMediaWindowList): + """A wrapper around lists of music playlist windows that employs fast enumeration techniques. + + All properties of music playlist windows can be called as methods on the wrapped list, returning a list containing each windows's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMediaPlaylistWindow) + +
[docs] def selection(self) -> XAMediaTrackList: + ls = self.xa_elem.arrayByApplyingSelector_("selection") or [] + return self._new_element(ls, XAMediaTrackList)
+ +
[docs] def view(self) -> XAMediaPlaylistList: + ls = self.xa_elem.arrayByApplyingSelector_("view") or [] + return self._new_element(ls, XAMediaPlaylistList)
+ +
[docs] def by_selection(self, selection: XAMediaTrackList) -> Union['XAMediaPlaylistWindow', None]: + return self.by_property("selection", selection.xa_elem)
+ +
[docs] def by_view(self, view: XAMediaPlaylist) -> Union['XAMediaPlaylistWindow', None]: + return self.by_property("view", view.xa_elem)
+ +
[docs]class XAMediaPlaylistWindow(XAMediaWindow): + """A playlist window in media apps. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def selection(self) -> XAMediaTrackList: + """The selected tracks. + """ + return self._new_element(self.xa_elem.selection(), XAMediaTrackList) + + @property + def view(self) -> XAMediaPlaylist: + """The playlist currently displayed in the window. + """ + return self._new_element(self.xa_elem.view(), XAMediaPlaylist)
+ + + + +
[docs]class XAMediaVideoWindowList(XAMediaWindowList): + """A wrapper around lists of music video windows that employs fast enumeration techniques. + + All properties of music video windows can be called as methods on the wrapped list, returning a list containing each windows's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMediaVideoWindow)
+ +
[docs]class XAMediaVideoWindow(XAMediaWindow): + """A video window in media apps. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Messages.html b/docs/_modules/PyXA/apps/Messages.html new file mode 100644 index 0000000..4e17b99 --- /dev/null +++ b/docs/_modules/PyXA/apps/Messages.html @@ -0,0 +1,1150 @@ + + + + + + PyXA.apps.Messages — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Messages

+""".. versionadded:: 0.0.1
+
+Control the macOS Messages application using JXA-like syntax.
+"""
+
+from datetime import datetime
+from enum import Enum
+from typing import Any, Union
+
+import AppKit
+
+from PyXA import XABase
+from PyXA import XAEvents
+from PyXA import XABaseScriptable
+from ..XAProtocols import XAClipboardCodable
+
+
+
[docs]class XAMessagesApplication(XABaseScriptable.XASBApplication): + """A class for managing and interacting with Messages.app + + .. seealso:: :class:`XAMessagesChat`, :class:`XAMessagesFileTransfer`, :class:`XAMessagesParticipant`, :class:`XAMessagesAccount` + + .. versionadded:: 0.0.1 + """ +
[docs] class ServiceType(Enum): + """Options for services types supported by Messages.app. + """ + SMS = XABase.OSType('ssms') + IMESSAGE = XABase.OSType('sims')
+ +
[docs] class MessageDirection(Enum): + """Options for the direction of a message. + """ + INCOMING = XABase.OSType('FTic') + OUTGOING = XABase.OSType('FTog')
+ +
[docs] class TransferStatus(Enum): + """Options for the transfer stage/status of a message.""" + PREPARING = XABase.OSType('FTsp') + WAITING = XABase.OSType('FTsw') + TRANSFERRING = XABase.OSType('FTsg') + FINALIZING = XABase.OSType('FTsz') + FINISHED = XABase.OSType('FTsf') + FAILED = XABase.OSType('FTse')
+ +
[docs] class ConnectionStatus(Enum): + """Options for the connection status of Messages.app to message transfer servers. + """ + DISCONNECTING = XABase.OSType('dcng') + CONNECTED = XABase.OSType('conn') + CONNECTING = XABase.OSType('cong') + DISCONNECTED = XABase.OSType('dcon')
+ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XAMessagesWindow + + @property + def name(self) -> str: + """The name of the application. + + .. versionadded:: 0.0.1 + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether Messages is the active application. + + .. versionadded:: 0.0.1 + """ + return self.xa_scel.frontmost() + + @property + def version(self) -> str: + """The version of Messages.app. + + .. versionadded:: 0.0.1 + """ + return self.xa_scel.version() + +
[docs] def send(self, message: str, chat: 'XAMessagesChat'): + """Sends a message to the specified chat. + + :param message: The message to send + :type message: str + :param chat: The chat to send the message to + :type chat: XAMessagesChat + + :Example 1: + + >>> import PyXA + >>> messages = PyXA.Application("Messages") + >>> friend = messages.participants().by_full_name("Example Person") + >>> chat = messages.chats().by_participants([friend]) + >>> messages.send("Testing 1 2 3", chat) + + .. versionadded:: 0.0.4 + """ + self.xa_scel.send_to_(message, chat)
+ +
[docs] def print(self, object: XABase.XAObject, show_dialog: bool = True): + self.xa_scel.print_withProperties_printDialog_(object.xa_elem, None, show_dialog)
+ +
[docs] def documents(self, filter: Union[dict, None] = None) -> 'XAMessagesDocumentList': + """Returns a list of documents, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_scel.documents(), XAMessagesDocumentList, filter)
+ +
[docs] def chats(self, filter: Union[dict, None] = None) -> 'XAMessagesChatList': + """Returns a list of chats, as PyXA objects, matching the given filter. + + :Example 1: List all chats + + >>> import PyXA + >>> app = PyXA.Application("Messages") + >>> print(app.chats()) + <<class 'PyXA.apps.Messages.XAMessagesChatList'>['iMessage;-;+11234567891', 'SMS;-;+12234567891', ...] + + :Example 2: List the names of all named chats + + >>> import PyXA + >>> app = PyXA.Application("Messages") + >>> print(app.chats().name()) + ['PyXA Group', 'Dev Chat'] + + :Example 3: List the information, including participants, of every chat + + >>> import PyXA + >>> app = PyXA.Application("Messages") + >>> chats = app.chats() + >>> for chat in chats: + >>> print("\\n") + >>> print("Name:", chat.name) + >>> print("ID:", chat.id) + >>> print("Account:", chat.account) + >>> print("Participants:", chat.participants()) + Name: None + ID: iMessage;-;+11234567891 + Account: <PyXA.apps.Messages.XAMessagesAccount object at 0x10871e100> + Participants: <<class 'PyXA.apps.Messages.XAMessagesParticipantList'>['+1 (123) 456-7891']> + ... + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_scel.chats(), XAMessagesChatList, filter)
+ +
[docs] def participants(self, filter: Union[dict, None] = None) -> 'XAMessagesParticipantList': + """Returns a list of participants, as PyXA objects, matching the given filter. + + :Example 1: List all participants + + >>> import PyXA + >>> messages = PyXA.Application("Messages") + >>> print(messages.participants()) + <<class 'PyXA.apps.Messages.XAMessagesParticipantList'>['+1 (888) 888-8888', 'Example Person', 'Another Person', ...]> + + :Example 2: Get a participant by full name + + >>> import PyXA + >>> messages = PyXA.Application("Messages") + >>> print(messages.participants().by_full_name("Example Person")) + <<class 'PyXA.apps.Messages.XAMessagesParticipant'>Example Person> + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_scel.participants(), XAMessagesParticipantList, filter)
+ +
[docs] def accounts(self, filter: Union[dict, None] = None) -> 'XAMessagesAccountList': + """Returns a list of accounts, as PyXA objects, matching the given filter. + + :Example 1: Print a list of all accounts + + >>> import PyXA + >>> messages = PyXA.Application("Messages") + >>> print(messages.accounts()) + <<class 'PyXA.apps.Messages.XAMessagesAccountList'>[<ServiceType.IMESSAGE: 1936289139>, <ServiceType.SMS: 1936289139>, <ServiceType.IMESSAGE: 1936289139>]> + + :Example 2: Get an account by its ID + + >>> import PyXA + >>> messages = PyXA.Application("Messages") + >>> print(messages.accounts().by_id("BEC519EA-DD88-5574-BDB9-C48486D3111B")) + <PyXA.apps.Messages.XAMessagesAccount object at 0x126de2340> + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_scel.accounts(), XAMessagesAccountList, filter)
+ +
[docs] def file_transfers(self, filter: Union[dict, None] = None) -> 'XAMessagesFileTransferList': + """Returns a list of file transfers, as PyXA objects, matching the given filter. + + :Example 1: List all file transfers + + >>> import PyXA + >>> messages = PyXA.Application("Messages") + >>> print(messages.file_transfers()) + <<class 'PyXA.apps.Messages.XAMessagesFileTransferList'>['at_0_8BEC6B47-3B43-4D14-87C1-221C2BDED01C', 'at_0_9C0DC423-F6AB-4A98-8532-1C4D250160CD', ...]> + + :Example 2: Get a file transfer by filename + + >>> import PyXA + >>> messages = PyXA.Application("Messages") + >>> print(messages.file_transfers().by_name("Example1.png") + <<class 'PyXA.apps.Messages.XAMessagesFileTransfer'>Example1.png> + + :Example 3: List the file paths of file transfers + + >>> import PyXA + >>> messages = PyXA.Application("Messages") + >>> print(messages.file_transfers().file_path()) + [file:///Users/exampleuser/Library/Messages/Attachments/de/14/at_0_8BEC6B47-3B43-4D14-87C1-221C2BDED01C/Example1.png, file:///Users/exampleuser/Library/Messages/Attachments/c4/04/at_0_9C0DC423-F6AB-4A98-8532-1C4D250160CD/Example2.jpg, ...] + + :Example 4: Get the first PNG file transfer + + >>> import PyXA + >>> messages = PyXA.Application("Messages") + >>> print(messages.file_transfers().containing("name", "png")) + <<class 'PyXA.apps.Messages.XAMessagesFileTransfer'>Example1.png> + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_scel.fileTransfers(), XAMessagesFileTransferList, filter)
+ + + + +
[docs]class XAMessagesWindow(XABaseScriptable.XASBWindow): + """A class for managing and interacting with Messages windows. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The title of the window. + + .. versionadded:: 0.0.4 + """ + return self.xa_elem.name() + + @property + def id(self) -> int: + """The unique identifier for the window. + + .. versionadded:: 0.0.4 + """ + return self.xa_elem.id() + + @property + def index(self) -> int: + """The index of the window in the front-to-back ordering. + + .. versionadded:: 0.0.4 + """ + return self.xa_elem.index() + + @index.setter + def index(self, index: int): + self.set_property('index', index) + + @property + def bounds(self) -> tuple[int, int, int, int]: + """The bounding rectangle of the window. + + .. versionadded:: 0.0.4 + """ + rect = self.xa_elem.bounds() + origin = rect.origin + size = rect.size + return (origin.x, origin.y, size.width, size.height) + + @bounds.setter + def bounds(self, bounds: tuple[int, int, int, int]): + x = bounds[0] + y = bounds[1] + w = bounds[2] + h = bounds[3] + value = AppKit.NSValue.valueWithRect_(AppKit.NSMakeRect(x, y, w, h)) + self.set_property("bounds", value) + + @property + def closeable(self) -> bool: + """Whether the window has a close button. + + .. versionadded:: 0.0.4 + """ + return self.xa_elem.closeable() + + @property + def miniaturizable(self) -> bool: + """Whether the window can be minimized. + + .. versionadded:: 0.0.4 + """ + return self.xa_elem.miniaturizable() + + @property + def miniaturized(self) -> bool: + """Whether the window is currently minimized. + + .. versionadded:: 0.0.4 + """ + return self.xa_elem.miniaturized() + + @miniaturized.setter + def miniaturized(self, miniaturized: bool): + self.set_property('miniaturized', miniaturized) + + @property + def resizable(self) -> bool: + """Whether the window can be resized. + + .. versionadded:: 0.0.4 + """ + return self.xa_elem.resizable() + + @property + def visible(self) -> bool: + """Whether the window is currently visible. + + .. versionadded:: 0.0.4 + """ + return self.xa_elem.visible() + + @visible.setter + def visible(self, visible: bool): + self.set_property('visible', visible) + + @property + def zoomable(self) -> bool: + """Whether the window can be zoomed. + + .. versionadded:: 0.0.4 + """ + return self.xa_elem.zoomable() + + @property + def zoomed(self) -> bool: + """Whether the window is currently zoomed. + + .. versionadded:: 0.0.4 + """ + return self.xa_elem.zoomed() + + @zoomed.setter + def zoomed(self, zoomed: bool): + self.set_property('zoomed', zoomed) + + @property + def document(self) -> 'XAMessagesDocument': + return self._new_element(self.xa_elem.document(), XAMessagesDocument)
+ + + + +
[docs]class XAMessagesDocumentList(XABase.XAList): + """A wrapper around a list of documents that employs fast enumeration techniques. + + All properties of documents can be called as methods on the wrapped list, returning a list containing each document's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAMessagesDocument, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def modified(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("modified") or [])
+ +
[docs] def file(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("file") or [])
+ +
[docs] def by_name(self, name: str) -> Union['XAMessagesDocument', None]: + return self.by_property("name", name)
+ +
[docs] def by_modified(self, modified: bool) -> Union['XAMessagesDocument', None]: + return self.by_property("modified", modified)
+ +
[docs] def by_file(self, file: str) -> Union['XAMessagesDocument', None]: + return self.by_property("file", file)
+ +
[docs]class XAMessagesDocument(XABase.XAObject): + """A class for managing and interacting with documents in Messages.app. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The title of the document. + + .. versionadded:: 0.0.4 + """ + return self.xa_elem.name() + + @property + def modified(self) -> bool: + """Whether the document has been modified since its last save. + + .. versionadded:: 0.0.4 + """ + return self.xa_elem.modified() + + @property + def file(self) -> str: + """The location of the document on the disk, if one exists. + + .. versionadded:: 0.0.4 + """ + return self.xa_elem.file()
+ + + + +
[docs]class XAMessagesChatList(XABase.XAList, XAClipboardCodable): + """A wrapper around a list of chats that employs fast enumeration techniques. + + All properties of chats can be called as methods on the wrapped list, returning a list containing each chat's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAMessagesChat, filter) + +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def account(self) -> 'XAMessagesAccountList': + ls = self.xa_elem.arrayByApplyingSelector_("account") or [] + return self._new_element(ls, XAMessagesAccountList)
+ +
[docs] def participants(self) -> list['XAMessagesParticipantList']: + ls = [] + for chat in self.xa_elem: + ls.append(self._new_element(chat.participants(), XAMessagesParticipantList)) + return ls
+ +
[docs] def by_id(self, id: str) -> 'XAMessagesChat': + return self.by_property("id", id)
+ +
[docs] def by_name(self, name: str) -> 'XAMessagesChat': + return self.by_property("name", name)
+ +
[docs] def by_account(self, account: 'XAMessagesAccount') -> 'XAMessagesChat': + return self.by_property("account", account.xa_elem)
+ +
[docs] def by_participants(self, participants: list['XAMessagesParticipant']) -> 'XAMessagesChat': + target_handles = [x.handle for x in participants] + for chat in self.xa_elem: + chat_participants = chat.participants() + + match = [] + for participant in chat_participants: + if participant.handle() in target_handles: + match.append(participant) + else: + match = [] + + if len(match) == len(participants): + return self._new_element(chat, XAMessagesChat)
+ +
[docs] def get_clipboard_representation(self) -> list[str]: + """Gets a clipboard-codable representation of each chat in the list. + + When the clipboard content is set to a list of chats, each chat's name is added to the clipboard. + + :return: The list of chat names + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + return self.name()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.id()) + ">"
+ +
[docs]class XAMessagesChat(XABase.XAObject, XAClipboardCodable): + """A class for managing and interacting with chats in Messages.app + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """The unique identifier for the chat. + + .. versionadded:: 0.0.1 + """ + return self.xa_elem.id() + + @property + def name(self) -> str: + """The name of the chat as it appears in the chat list. + + .. versionadded:: 0.0.1 + """ + return self.xa_elem.name() or "" + + @property + def account(self) -> 'XAMessagesAccount': + """The account that is participating in the chat. + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_elem.account(), XAMessagesAccount) + +
[docs] def send(self, message): + """Sends a message to the chat. + + _extended_summary_ + + :param message: _description_ + :type message: _type_ + + :Example 1: Send an SMS to a chat based on the chat ID + + >>> import PyXA + >>> app = PyXA.Application("Messages") + >>> chat = app.chats().by_id("SMS;-;+11234567891") + >>> chat.send("Hello!") + + .. versionadded:: 0.0.4 + """ + self.xa_prnt.xa_prnt.send(message, self.xa_elem)
+ +
[docs] def participants(self, filter: Union[dict, None] = None) -> 'XAMessagesParticipantList': + """Returns a list of participants, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_elem.participants(), XAMessagesParticipantList, filter)
+ +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of the chat. + + When the clipboard content is set to a chat, the chat's name is added to the clipboard. + + :return: The name of the chat + :rtype: str + + .. versionadded:: 0.0.8 + """ + return self.name
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.participants()) + ">"
+ + + + +
[docs]class XAMessagesFileTransferList(XABase.XAList, XAClipboardCodable): + """A wrapper around a list of file transfers that employs fast enumeration techniques. + + All properties of file transfers can be called as methods on the wrapped list, returning a list containing each file transfer's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAMessagesFileTransfer, filter) + +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def file_path(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("filePath") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def direction(self) -> list[XAMessagesApplication.MessageDirection]: + ls = self.xa_elem.arrayByApplyingSelector_("direction") or [] + return [XAMessagesApplication.MessageDirection(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def account(self) -> 'XAMessagesAccountList': + ls = [x.account() for x in self.xa_elem] + return self._new_element(ls, XAMessagesAccountList)
+ +
[docs] def participant(self) -> 'XAMessagesParticipantList': + ls = [x.participant() for x in self.xa_elem] + return self._new_element(ls, XAMessagesParticipantList)
+ +
[docs] def file_size(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("fileSize") or [])
+ +
[docs] def file_progress(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("fileProgress") or [])
+ +
[docs] def transfer_status(self) -> list[XAMessagesApplication.TransferStatus]: + ls = list(self.xa_elem.arrayByApplyingSelector_("transferStatus") or []) + try: + return [XAMessagesApplication.TransferStatus(x) for x in ls] + except ValueError: + return [XAMessagesApplication.TransferStatus(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def started(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("started") or [])
+ +
[docs] def by_id(self, id: str) -> 'XAMessagesFileTransfer': + return self.by_property("id", id)
+ +
[docs] def by_name(self, name: str) -> 'XAMessagesFileTransfer': + return self.by_property("name", name)
+ +
[docs] def by_file_path(self, file_path: XABase.XAPath) -> 'XAMessagesFileTransfer': + return self.by_property("filePath", file_path.xa_elem)
+ +
[docs] def by_direction(self, direction: XAMessagesApplication.MessageDirection) -> 'XAMessagesFileTransfer': + for x in self.xa_elem: + if x.direction() == direction.value: + return self._new_element(x, XAMessagesFileTransfer)
+ +
[docs] def by_account(self, account: 'XAMessagesAccount') -> 'XAMessagesFileTransfer': + return self.by_property("account", account.xa_elem)
+ +
[docs] def by_participant(self, participant: 'XAMessagesParticipant') -> 'XAMessagesFileTransfer': + return self.by_property("participant", participant.xa_elem)
+ +
[docs] def by_file_size(self, file_size: int) -> 'XAMessagesFileTransfer': + return self.by_property("fileSize", file_size)
+ +
[docs] def by_file_progress(self, file_progress: int) -> 'XAMessagesFileTransfer': + return self.by_property("fileProgress", file_progress)
+ +
[docs] def by_transfer_status(self, transfer_status: XAMessagesApplication.TransferStatus) -> 'XAMessagesFileTransfer': + for x in self.xa_elem: + if x.transferStatus() == transfer_status.value: + return self._new_element(x, XAMessagesFileTransfer)
+ +
[docs] def by_started(self, started: bool) -> 'XAMessagesFileTransfer': + return self.by_property("started", started)
+ +
[docs] def filter(self, filter: str, comparison_operation: Union[str, None] = None, value1: Union[Any, None] = None, value2: Union[Any, None] = None) -> XABase.XAList: + substitutions = { + "transfer status": "transferStatus", + "file size": "fileSize", + "file path": "filePath", + "file progress": "fileProgress" + } + filter = substitutions.get(filter, filter) + + if isinstance(value1, XAMessagesApplication.MessageDirection) or isinstance(value1, XAMessagesApplication.TransferStatus): + value1 = XAEvents.event_from_str(XABase.unOSType(value1.value)) + return super().filter(filter, comparison_operation, value1, value2)
+ +
[docs] def get_clipboard_representation(self) -> list[Union[str, AppKit.NSURL]]: + """Gets a clipboard-codable representation of each file transfer in the list. + + When the clipboard content is set to a list of file transfers, each file transfer's file path URL is added to the clipboard. + + :return: The list of file path URLs + :rtype: list[AppKit.NSURL] + + .. versionadded:: 0.0.8 + """ + items = [] + paths = self.file_path() + for path in paths: + items.append(path.xa_elem) + return items
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAMessagesFileTransfer(XABase.XAObject, XAClipboardCodable): + """A class for managing and interacting with file transfers in Messages.app + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """The unique identifier for the file transfer. + """ + return self.xa_elem.id() + + @property + def name(self) -> str: + """The name of the file. + """ + return self.xa_elem.name() + + @property + def file_path(self) -> XABase.XAPath: + """The local page to the file being transferred. + """ + return XABase.XAPath(self.xa_elem.filePath()) + + @property + def direction(self) -> XAMessagesApplication.MessageDirection: + """The direction that the file is being sent. + """ + return XAMessagesApplication.MessageDirection(self.xa_elem.direction()) + + @property + def account(self) -> 'XAMessagesAccount': + """The account on which the file transfer is taking place. + """ + return self._new_element(self.xa_elem.account(), XAMessagesAccount) + + @property + def participant(self) -> 'XAMessagesParticipant': + """The other participant in the file transfer. + """ + return self._new_element(self.xa_elem.participant(), XAMessagesParticipant) + + @property + def file_size(self) -> int: + """The total size of the file transfer in bytes. + """ + return self.xa_elem.fileSize() + + @property + def file_progress(self) -> int: + """The number of bytes that have been transferred. + """ + return self.xa_elem.fileProgress() + + @property + def transfer_status(self) -> XAMessagesApplication.TransferStatus: + """The current status of the file transfer. + """ + return XAMessagesApplication.TransferStatus(self.xa_elem.transferStatus()) + + @property + def started(self) -> datetime: + """The date and time that the file transfer started. + """ + return self.xa_elem.started() + +
[docs] def get_clipboard_representation(self) -> list[AppKit.NSURL]: + """Gets a clipboard-codable representation of the file transfer. + + When the clipboard content is set to a file transfer, the path of the file transfer is added to the clipboard. + + :return: The file path of the file transfer + :rtype: list[AppKit.NSURL] + + .. versionadded:: 0.0.8 + """ + return [self.file_path.xa_elem]
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAMessagesParticipantList(XABase.XAList, XAClipboardCodable): + """A wrapper around a list of participants that employs fast enumeration techniques. + + All properties of participants can be called as methods on the wrapped list, returning a list containing each participant's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAMessagesParticipant, filter) + +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def account(self) -> 'XAMessagesAccountList': + ls = self.xa_elem.arrayByApplyingSelector_("account") or [] + return self._new_element(ls, XAMessagesAccountList)
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def handle(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("handle") or [])
+ +
[docs] def first_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("firstName") or [])
+ +
[docs] def last_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("lastName") or [])
+ +
[docs] def full_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("fullName") or [])
+ +
[docs] def by_id(self, id: str) -> Union['XAMessagesParticipant', None]: + return self.by_property("id", id)
+ +
[docs] def by_account(self, account: 'XAMessagesAccount') -> Union['XAMessagesParticipant', None]: + for x in self: + if x.account.xa_elem == account.xa_elem: + return x + return self.by_property("account", account.xa_elem)
+ +
[docs] def by_name(self, name: str) -> Union['XAMessagesParticipant', None]: + return self.by_property("name", name)
+ +
[docs] def by_handle(self, handle: str) -> Union['XAMessagesParticipant', None]: + return self.by_property("handle", handle)
+ +
[docs] def by_first_name(self, first_name: str) -> Union['XAMessagesParticipant', None]: + return self.by_property("firstName", first_name)
+ +
[docs] def by_last_name(self, last_name: str) -> Union['XAMessagesParticipant', None]: + return self.by_property("lastName", last_name)
+ +
[docs] def by_full_name(self, full_name: str) -> Union['XAMessagesParticipant', None]: + return self.by_property("fullName", full_name)
+ +
[docs] def get_clipboard_representation(self) -> list[str]: + """Gets a clipboard-codable representation of each participant in the list. + + When the clipboard content is set to a list of participants, each participant's full name is added to the clipboard. + + :return: The list of participant names + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + return self.full_name()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAMessagesParticipant(XABase.XAObject, XAClipboardCodable): + """A class for managing and interacting with chat participants in Messages.app + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """The unique identifier for the participant. + + .. versionadded:: 0.0.1 + """ + return self.xa_elem.id() + + @property + def account(self) -> 'XAMessagesAccount': + """The account for the participant. + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_elem.account(), XAMessagesAccount) + + @property + def name(self) -> str: + """The name of the participant as it appears in the participant list + + .. versionadded:: 0.0.1 + """ + return self.xa_elem.name() or "" + + @property + def handle(self) -> str: + """The participant's handle. + + .. versionadded:: 0.0.1 + """ + return self.xa_elem.handle() or "" + + @property + def first_name(self) -> str: + """The first name of the participant, taken from their contact card (if available). + + .. versionadded:: 0.0.1 + """ + return self.xa_elem.firstName() or "" + + @property + def last_name(self) -> str: + """The last name of the participant, taken from their contact card (if available). + + .. versionadded:: 0.0.1 + """ + return self.xa_elem.lastName() or "" + + @property + def full_name(self) -> str: + """The full name of the participant, taken from their contact card (if available). + + .. versionadded:: 0.0.1 + """ + return self.xa_elem.fullName() or "" + +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of the participant. + + When the clipboard content is set to a participant, the full name of the participant is added to the clipboard. + + :return: The participant's full name + :rtype: str + + .. versionadded:: 0.0.8 + """ + return self.full_name
+ + def __repr__(self): + return "<" + str(type(self)) + self.full_name + ">"
+ + + + +
[docs]class XAMessagesAccountList(XABase.XAList, XAClipboardCodable): + """A wrapper around a list of accounts that employs fast enumeration techniques. + + All properties of accounts can be called as methods on the wrapped list, returning a list containing each account's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAMessagesAccount, filter) + +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def object_description(self) -> list[str]: + return list(self.xa_elem.get().arrayByApplyingSelector_("objectDescription") or [])
+ +
[docs] def enabled(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("enabled") or [])
+ +
[docs] def connection_status(self) -> list[XAMessagesApplication.ConnectionStatus]: + ls = self.xa_elem.arrayByApplyingSelector_("connectionStatus") or [] + return [XAMessagesApplication.ConnectionStatus(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def service_type(self) -> list[XAMessagesApplication.ServiceType]: + ls = [x.serviceType() for x in self.xa_elem] + return [XAMessagesApplication.ServiceType(x) for x in ls]
+ +
[docs] def by_id(self, id: str) -> Union['XAMessagesAccount', None]: + return self.by_property("id", id)
+ +
[docs] def by_object_description(self, object_description: str) -> Union['XAMessagesAccount', None]: + return self.by_property("objectDescription", object_description)
+ +
[docs] def by_enabled(self, enabled: bool) -> Union['XAMessagesAccount', None]: + return self.by_property("enabled", enabled)
+ +
[docs] def by_connection_status(self, connection_status: XAMessagesApplication.ConnectionStatus) -> Union['XAMessagesAccount', None]: + for account in self.xa_elem: + if account.connectionStatus() == connection_status.value: + return self._new_element(account, XAMessagesAccount)
+ +
[docs] def by_service_type(self, service_type: XAMessagesApplication.ServiceType) -> Union['XAMessagesAccount', None]: + for account in self.xa_elem: + if account.serviceType() == service_type.value: + return self._new_element(account, XAMessagesAccount)
+ +
[docs] def get_clipboard_representation(self) -> list[str]: + """Gets a clipboard-codable representation of each account in the list. + + When the clipboard content is set to a list of accounts, each account's object description is added to the clipboard. + + :return: The list of account descriptions + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + return self.object_description()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.service_type()) + ">"
+ +
[docs]class XAMessagesAccount(XABase.XAObject, XAClipboardCodable): + """A class for managing and interacting with accounts in Messages.app + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """The unique identifier for the account. + """ + return self.xa_elem.id() + + @property + def object_description(self) -> str: + """The name of the account as defined in the Account Preferences description field. + """ + return self.xa_elem.objectDescription() + + @property + def enabled(self) -> bool: + """Whether the account is currently enabled. + """ + return self.xa_elem.enabled() + + @enabled.setter + def enabled(self, enabled: bool): + self.set_property('enabled', enabled) + + @property + def connection_status(self) -> XAMessagesApplication.ConnectionStatus: + """The connection status for the account. + """ + return XAMessagesApplication.ConnectionStatus(self.xa_elem.connectionStatus()) + + @property + def service_type(self) -> XAMessagesApplication.ServiceType: + """The type of service for the account. + """ + return XAMessagesApplication.ServiceType(self.xa_elem.serviceType()) + +
[docs] def chats(self, filter: Union[dict, None] = None) -> XAMessagesChatList: + """Returns a list of chats, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_elem.chats(), XAMessagesChatList, filter)
+ +
[docs] def participants(self, filter: Union[dict, None] = None) -> XAMessagesParticipantList: + """Returns a list of participants, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.4 + """ + return self._new_element(self.xa_elem.participants(), XAMessagesParticipantList, filter)
+ +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of the account. + + When the clipboard content is set to an account, the name of the account is added to the clipboard. + + :return: The name of the account + :rtype: str + + .. versionadded:: 0.0.8 + """ + return self.object_description
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.service_type) + ">"
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Music.html b/docs/_modules/PyXA/apps/Music.html new file mode 100644 index 0000000..ef5795f --- /dev/null +++ b/docs/_modules/PyXA/apps/Music.html @@ -0,0 +1,1711 @@ + + + + + + PyXA.apps.Music — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Music

+""".. versionadded:: 0.0.1
+
+Control the macOS Music application using JXA-like syntax.
+"""
+
+from datetime import datetime
+from enum import Enum
+from typing import Literal, Union
+
+import AppKit
+from PyXA import XABase, XABaseScriptable
+
+from . import MediaApplicationBase
+
+
+
[docs]class XAMusicApplication(MediaApplicationBase.XAMediaApplication): + """A class for managing and interacting with Music.app. + + .. seealso:: :class:`XAMusicWindow`, class:`XAMusicSource`, :class:`XAMusicPlaylist`, :class:`XAMusicTrack` + + .. versionadded:: 0.0.1 + """ +
[docs] class PrintSetting(Enum): + """Options to use when printing. + """ + STANDARD_ERROR_HANDLING = XABase.OSType('lwst') #: Standard PostScript error handling + DETAILED_ERROR_HANDLING = XABase.OSType('lwdt') #: Print a detailed report of PostScript errors + TRACK_LISTING = XABase.OSType('kTrk') #: A basic listing of tracks within a playlist + ALBUM_LISTING = XABase.OSType('kAlb') #: A listing of a playlist grouped by album + CD_INSERT = XABase.OSType('kCDi') #: A printout of the playlist for jewel case inserts
+ +
[docs] class RepeatMode(Enum): + """Options for how to repeat playback. + """ + OFF = XABase.OSType('kRpO') #: Playback does not repeat + ONE = XABase.OSType('kRp1') #: The currently playing media item will be repeated + ALL = XABase.OSType('kAll') #: All media items in the current playlist will be repeated
+ +
[docs] class ShuffleMode(Enum): + """Options for how to shuffle playback. + """ + SONGS = XABase.OSType('kShS') #: Shuffle by song + ALBUMS = XABase.OSType('kShA') #: Shuffle by album + GROUPINGS = XABase.OSType('kShG') #: Shuffle by grouping
+ +
[docs] class DeviceKind(Enum): + """Kinds of devices. + """ + COMPUTER = XABase.OSType('kAPC') #: A computer device + AIRPORT_EXPRESS = XABase.OSType('kAPX') #: An airport express device + APPLE_TV = XABase.OSType('kAPT') #: An Apple TV device + AIRPLAY_DEVICE = XABase.OSType('kAPO') #: An AirPlay-enabled device + BLUETOOTH_DEVICE = XABase.OSType('kAPB') #: A BlueTooth-enabled device + HOMEPOD = XABase.OSType('kAPH') #: A HomePod device + UNKNOWN = XABase.OSType('kAPU') #: An unknown device
+ +
[docs] class iCloudStatus(Enum): + """iCloud statuses of media items. + """ + UNKNOWN = XABase.OSType('kUnk') #: Unknown cloud status + PURCHASED = XABase.OSType('kPur') #: A purchased media item + MATCHED = XABase.OSType('kMat') #: A matched media item + UPLOADED = XABase.OSType('kUpl') #: An unloaded media item + INELIGIBLE = XABase.OSType('kRej') #: A media item ineligible for listening + REMOVED = XABase.OSType('kRem') #: A removed media item + ERROR = XABase.OSType('kErr') #: A media item unavailable due to an error + DUPLICATE = XABase.OSType('kDup') #: A duplicate media item + SUBSCRIPTION = XABase.OSType('kSub') #: A media item obtained via a subscription to Apple Music + NO_LONGER_AVAILABLE = XABase.OSType('kRev') #: A media item unavailable due to expiration + NOT_UPLOADED = XABase.OSType('kUpP') #: A non-uploaded media item
+ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XAMusicWindow + + @property + def airplay_enabled(self) -> bool: + """Whether AirPlay is currently enabled. + """ + return self.xa_scel.airplayEnabled() + + @property + def converting(self) -> bool: + """Whether a track is currently being converted. + """ + return self.xa_scel.converting() + + @property + def current_airplay_devices(self) -> 'XAMusicAirPlayDeviceList': + """The currently selected AirPlay devices. + """ + ls = self.xa_scel.currentAirPlayDevices() + return self._new_element(ls, XAMusicAirPlayDeviceList) + + @current_airplay_devices.setter + def current_airplay_devices(self, current_airplay_devices: Union['XAMusicAirPlayDeviceList', list['XAMusicAirPlayDevice']]): + if isinstance(current_airplay_devices, list): + current_airplay_devices = [x.xa_elem for x in current_airplay_devices] + self.set_property('currentAirplayDevices', current_airplay_devices) + else: + self.set_property('currentAirplayDevices', current_airplay_devices.xa_elem) + + @property + def current_encoder(self) -> 'XAMusicEncoder': + """The currently selected encoder. + """ + return self._new_element(self.xa_scel.currentEncoder(), XAMusicEncoder) + + @current_encoder.setter + def current_encoder(self, current_encoder: 'XAMusicEncoder'): + self.set_property('currentEncoder', current_encoder.xa_elem) + + @property + def current_eq_preset(self) -> 'XAMusicEQPreset': + """The currently selected equalizer preset. + """ + return self._new_element(self.xa_scel.currentEQPreset(), XAMusicEQPreset) + + @current_eq_preset.setter + def current_eq_preset(self, current_eq_preset: 'XAMusicEQPreset'): + self.set_property('currentEQPreset', current_eq_preset.xa_elem) + + @property + def current_visual(self) -> 'XAMusicVisual': + """The currently selected visual plug-in. + """ + return self._new_element(self.xa_scel.currentVisual(), XAMusicVisual) + + @current_visual.setter + def current_visual(self, current_visual: 'XAMusicVisual'): + self.set_property('currentVisual', current_visual.xa_elem) + + @property + def eq_enabled(self) -> bool: + """Whether the equalizer is enabled. + """ + return self.xa_scel.eqEnabled() + + @eq_enabled.setter + def eq_enabled(self, eq_enabled: bool): + self.set_property('eqEnabled', eq_enabled) + + @property + def shuffle_enabled(self) -> bool: + """Whether songs are played in random order. + """ + return self.xa_scel.shuffleEnabled() + + @shuffle_enabled.setter + def shuffle_enabled(self, shuffle_enabled: bool): + self.set_property('shuffleEnabled', shuffle_enabled) + + @property + def shuffle_mode(self) -> 'XAMusicApplication.ShuffleMode': + """The playback shuffle mode. + """ + return XAMusicApplication.ShuffleMode(self.xa_scel.shuffleMode()) + + @shuffle_mode.setter + def shuffle_mode(self, shuffle_mode: 'XAMusicApplication.ShuffleMode'): + self.set_property('shuffleMode', shuffle_mode.value) + + @property + def song_repeat(self) -> 'XAMusicApplication.RepeatMode': + """The playback repeat mode. + """ + return XAMusicApplication.RepeatMode(self.xa_scel.songRepeat()) + + @song_repeat.setter + def song_repeat(self, song_repeat: 'XAMusicApplication.RepeatMode'): + self.set_property('songRepeat', song_repeat.value) + + @property + def visuals_enabled(self) -> bool: + """Whether visuals are currently displayed. + """ + return self.xa_scel.visualsEnabled() + + @visuals_enabled.setter + def visuals_enabled(self, visuals_enabled: bool): + self.set_property('visualsEnabled', visuals_enabled) + + @property + def current_track(self) -> 'XAMusicTrack': + """The currently playing (or paused but not stopped) track. + """ + return self._new_element(self.xa_scel.currentTrack(), XAMusicTrack) + + # def convert(self, items): + # self.xa_scel.convert_([item.xa_elem for item in items]) + +
[docs] def add_to_playlist(self, urls: list[Union[str, AppKit.NSURL]], playlist): + items = [] + for url in urls: + if isinstance(url, str): + url = AppKit.NSURL.alloc().initFileURLWithPath_(url) + items.append(url) + print(items) + self.xa_scel.add_to_(items, playlist.xa_elem)
+ +
[docs] def airplay_devices(self, filter: Union[dict, None] = None) -> 'XAMusicAirPlayDeviceList': + """Returns a list of AirPlay devices, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned AirPlay devices will have, or None + :type filter: Union[dict, None] + :return: The list of devices + :rtype: XAMusicAirPlayDeviceList + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Music") + >>> print(app.airplay_devices()) + <<class 'PyXA.apps.Music.XAMusicAirPlayDeviceList'>['ExampleUser\\'s MacBook Pro']> + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.AirPlayDevices(), XAMusicAirPlayDeviceList, filter)
+ +
[docs] def encoders(self, filter: Union[dict, None] = None) -> 'XAMusicEncoderList': + """Returns a list of encoders, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned encoders will have, or None + :type filter: Union[dict, None] + :return: The list of encoders + :rtype: XAMusicEncoderList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.encoders(), XAMusicEncoderList, filter)
+ +
[docs] def eq_presets(self, filter: Union[dict, None] = None) -> 'XAMusicEQPresetList': + """Returns a list of EQ presets, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned EQ presets will have, or None + :type filter: Union[dict, None] + :return: The list of presets + :rtype: XAMusicEQPresetList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.EQPresets(), XAMusicEQPresetList, filter)
+ +
[docs] def eq_windows(self, filter: Union[dict, None] = None) -> 'XAMusicEQWindowList': + """Returns a list of EQ windows, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned EQ windows will have, or None + :type filter: Union[dict, None] + :return: The list of windows + :rtype: XAMusicEQWindowList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.EQWindows(), XAMusicEQWindowList, filter)
+ +
[docs] def miniplayer_windows(self, filter: Union[dict, None] = None) -> 'XAMusicMiniplayerWindowList': + """Returns a list of miniplayer windows, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned miniplayer windows will have, or None + :type filter: Union[dict, None] + :return: The list of windows + :rtype: XAMusicMiniplayWindowList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.miniplayerWindows(), XAMusicMiniplayerWindowList, filter)
+ +
[docs] def tracks(self, filter: Union[dict, None] = None) -> 'XAMusicTrackList': + """Returns a list of tracks, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned tracks will have, or None + :type filter: Union[dict, None] + :return: The list of tracks + :rtype: XAMusicTrackList + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_scel.tracks(), XAMusicTrackList, filter)
+ +
[docs] def visuals(self, filter: Union[dict, None] = None) -> 'XAMusicVisualList': + """Returns a list of visuals, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned visuals will have, or None + :type filter: Union[dict, None] + :return: The list of visuals + :rtype: XAMusicVisualList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.sources(), XAMusicVisualList, filter)
+ + + +
[docs]class XAMusicAirPlayDeviceList(MediaApplicationBase.XAMediaItemList): + """A wrapper around lists of AirPlay devices that employs fast enumeration techniques. + + All properties of AirPlay devices can be called as methods on the wrapped list, returning a list containing each devices's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMusicAirPlayDevice) + +
[docs] def active(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("active") or [])
+ +
[docs] def available(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("available") or [])
+ +
[docs] def kind(self) -> list[XAMusicApplication.DeviceKind]: + ls = self.xa_elem.arrayByApplyingSelector_("kind") or [] + return [XAMusicApplication.DeviceKind(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def network_address(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("networkAddress") or [])
+ +
[docs] def protected(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("protected") or [])
+ +
[docs] def selected(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("selected") or [])
+ + def supports_audio(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("supportsAudio") or []) + +
[docs] def supports_audio(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("supportsVideo") or [])
+ +
[docs] def sound_volume(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("soundVolume") or [])
+ +
[docs] def by_active(self, active: bool) -> Union['XAMusicAirPlayDevice', None]: + return self.by_property("active", active)
+ +
[docs] def by_available(self, available: bool) -> Union['XAMusicAirPlayDevice', None]: + return self.by_property("available", available)
+ +
[docs] def by_kind(self, kind: XAMusicApplication.DeviceKind) -> Union['XAMusicAirPlayDevice', None]: + # TODO + return self.by_property("kind", kind.value)
+ +
[docs] def by_network_address(self, network_address: str) -> Union['XAMusicAirPlayDevice', None]: + return self.by_property("networkAddress", network_address)
+ +
[docs] def by_protected(self, protected: bool) -> Union['XAMusicAirPlayDevice', None]: + return self.by_property("protected", protected)
+ +
[docs] def by_selected(self, selected: bool) -> Union['XAMusicAirPlayDevice', None]: + return self.by_property("selected", selected)
+ +
[docs] def by_supports_audio(self, supports_audio: bool) -> Union['XAMusicAirPlayDevice', None]: + return self.by_property("supportsAudio", supports_audio)
+ +
[docs] def by_supports_video(self, supports_video: bool) -> Union['XAMusicAirPlayDevice', None]: + return self.by_property("supportsVideo", supports_video)
+ +
[docs] def by_sound_volume(self, sound_volume: int) -> Union['XAMusicAirPlayDevice', None]: + return self.by_property("soundVolume", sound_volume)
+ +
[docs]class XAMusicAirPlayDevice(MediaApplicationBase.XAMediaItem): + """An AirPlay device. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def active(self) -> bool: + """Whether the device is currently being played to. + """ + return self.xa_elem.active() + + @property + def available(self) -> bool: + """Whether the device is currently available. + """ + return self.xa_elem.available() + + @property + def kind(self) -> XAMusicApplication.DeviceKind: + """The kind of the device. + """ + return XAMusicApplication.DeviceKind(self.xa_elem.kind()) + + @property + def network_address(self) -> str: + """The MAC address of the device. + """ + return self.xa_elem.networkAddress() + + @property + def protected(self) -> bool: + """Whether the device is password/passcode protected. + """ + return self.xa_elem.protected() + + @property + def selected(self) -> bool: + """Whether the device is currently selected. + """ + return self.xa_elem.selected() + + @selected.setter + def selected(self, selected: bool): + self.set_property('selected', selected) + + @property + def supports_audio(self) -> bool: + """Whether the device supports audio playback. + """ + return self.xa_elem.supportsAudio() + + @property + def supports_video(self) -> bool: + """Whether the device supports video playback. + """ + return self.xa_elem.supportsVideo() + + @property + def sound_volume(self) -> int: + """The output volume for the device from 0 to 100. + """ + return self.xa_elem.soundVolume() + + @sound_volume.setter + def sound_volume(self, sound_volume: int): + self.set_property('soundVolume', sound_volume)
+ + + + +
[docs]class XAMusicEncoderList(MediaApplicationBase.XAMediaItemList): + """A wrapper around lists of encoders that employs fast enumeration techniques. + + All properties of encoders can be called as methods on the wrapped list, returning a list containing each encoders's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMusicEncoder) + +
[docs] def format(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("format") or [])
+ +
[docs] def by_format(self, format: str) -> Union['XAMusicEncoder', None]: + return self.by_property("format", format)
+ +
[docs]class XAMusicEncoder(MediaApplicationBase.XAMediaItem): + """An encoder in Music.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def format(self) -> str: + """The data format created by the encoder. + """ + return self.xa_elem.format()
+ + + + +
[docs]class XAMusicEQPresetList(MediaApplicationBase.XAMediaItemList): + """A wrapper around lists of equalizer presets that employs fast enumeration techniques. + + All properties of equalizer presets can be called as methods on the wrapped list, returning a list containing each preset's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMusicEQPreset) + +
[docs] def band1(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("band1") or [])
+ +
[docs] def band2(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("band2") or [])
+ +
[docs] def band3(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("band3") or [])
+ +
[docs] def band4(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("band4") or [])
+ +
[docs] def band5(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("band5") or [])
+ +
[docs] def band6(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("band6") or [])
+ +
[docs] def band7(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("band7") or [])
+ +
[docs] def band8(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("band8") or [])
+ +
[docs] def band9(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("band9") or [])
+ +
[docs] def band10(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("band10") or [])
+ +
[docs] def modifiable(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("modifiable") or [])
+ +
[docs] def preamp(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("preamp") or [])
+ +
[docs] def update_tracks(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("updateTracks") or [])
+ +
[docs] def by_band1(self, band1: float) -> Union['XAMusicEQPreset', None]: + return self.by_property("band1", band1)
+ +
[docs] def by_band2(self, band2: float) -> Union['XAMusicEQPreset', None]: + return self.by_property("band2", band2)
+ +
[docs] def by_band3(self, band3: float) -> Union['XAMusicEQPreset', None]: + return self.by_property("band3", band3)
+ +
[docs] def by_band4(self, band4: float) -> Union['XAMusicEQPreset', None]: + return self.by_property("band4", band4)
+ +
[docs] def by_band5(self, band5: float) -> Union['XAMusicEQPreset', None]: + return self.by_property("band5", band5)
+ +
[docs] def by_band6(self, band6: float) -> Union['XAMusicEQPreset', None]: + return self.by_property("band6", band6)
+ +
[docs] def by_band7(self, band7: float) -> Union['XAMusicEQPreset', None]: + return self.by_property("band7", band7)
+ +
[docs] def by_band8(self, band8: float) -> Union['XAMusicEQPreset', None]: + return self.by_property("band8", band8)
+ +
[docs] def by_band9(self, band9: float) -> Union['XAMusicEQPreset', None]: + return self.by_property("band9", band9)
+ +
[docs] def by_band10(self, band10: float) -> Union['XAMusicEQPreset', None]: + return self.by_property("band10", band10)
+ +
[docs] def by_modifiable(self, modifiable: bool) -> Union['XAMusicEQPreset', None]: + return self.by_property("modifiable", modifiable)
+ +
[docs] def by_preamp(self, preamp: float) -> Union['XAMusicEQPreset', None]: + return self.by_property("preamp", preamp)
+ +
[docs] def by_update_tracks(self, update_tracks: bool) -> Union['XAMusicEQPreset', None]: + return self.by_property("updateTracks", update_tracks)
+ +
[docs]class XAMusicEQPreset(MediaApplicationBase.XAMediaItem): + """An equalizer preset in Music.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def band1(self) -> float: + """The 32 Hz band level (-12.0 dB to +12.0 dB). + """ + return self.xa_elem.band1() + + @band1.setter + def band1(self, band1: float): + self.set_property('band1', band1) + + @property + def band2(self) -> float: + """The 64 Hz band level (-12.0 dB to +12.0 dB). + """ + return self.xa_elem.band2() + + @band2.setter + def band2(self, band2: float): + self.set_property('band2', band2) + + @property + def band3(self) -> float: + """The 125 HZ band level (-12.0 dB to +12.0 dB). + """ + return self.xa_elem.band3() + + @band3.setter + def band3(self, band3: float): + self.set_property('band3', band3) + + @property + def band4(self) -> float: + """The 250 Hz band level (-12.0 dB to +12.0 dB). + """ + return self.xa_elem.band4() + + @band4.setter + def band4(self, band4: float): + self.set_property('band4', band4) + + @property + def band5(self) -> float: + """The 500 Hz band level (-12.0 dB to +12.0 dB). + """ + return self.xa_elem.band5() + + @band5.setter + def band5(self, band5: float): + self.set_property('band5', band5) + + @property + def band6(self) -> float: + """The 1 kHz band level (-12.0 dB to +12.0 dB). + """ + return self.xa_elem.band6() + + @band6.setter + def band6(self, band6: float): + self.set_property('band6', band6) + + @property + def band7(self) -> float: + """The 2 kHz band level (-12.0 dB to +12.0 dB). + """ + return self.xa_elem.band7() + + @band7.setter + def band7(self, band7: float): + self.set_property('band7', band7) + + @property + def band8(self) -> float: + """The 4 kHz band level (-12.0 dB to +12.0 dB). + """ + return self.xa_elem.band8() + + @band8.setter + def band8(self, band8: float): + self.set_property('band8', band8) + + @property + def band9(self) -> float: + """The 8 kHz band level (-12.0 dB to +12.0 dB). + """ + return self.xa_elem.band9() + + @band9.setter + def band9(self, band9: float): + self.set_property('band9', band9) + + @property + def band10(self) -> float: + """The 16 kHz band level (-12.0 dB to +12.0 dB). + """ + return self.xa_elem.band10() + + @band10.setter + def band10(self, band10: float): + self.set_property('band10', band10) + + @property + def modifiable(self) -> bool: + """Whether the preset can be modified. + """ + return self.xa_elem.modifiable() + + @property + def preamp(self) -> float: + """The equalizer preamp level (-12.0 dB to +12.0 dB). + """ + return self.xa_elem.preamp() + + @preamp.setter + def preamp(self, preamp: float): + self.set_property('preamp', preamp) + + @property + def update_tracks(self) -> bool: + """Whether tracks using the preset are updated when the preset is renamed or deleted. + """ + return self.xa_elem.updateTracks() + + @update_tracks.setter + def update_tracks(self, update_tracks: bool): + self.set_property('updateTracks', update_tracks)
+ + + + +
[docs]class XAMusicPlaylistList(MediaApplicationBase.XAMediaPlaylistList): + """A wrapper around lists of playlists that employs fast enumeration techniques. + + All properties of playlists can be called as methods on the wrapped list, returning a list containing each playlist's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAMusicPlaylist + super().__init__(properties, filter, obj_class) + +
[docs] def disliked(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("disliked") or [])
+ +
[docs] def loved(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("loved") or [])
+ +
[docs] def by_disliked(self, disliked: bool) -> Union['XAMusicPlaylist', None]: + return self.by_property("disliked", disliked)
+ +
[docs] def by_loved(self, loved: bool) -> Union['XAMusicPlaylist', None]: + return self.by_property("loved", loved)
+ +
[docs]class XAMusicPlaylist(MediaApplicationBase.XAMediaPlaylist): + """A playlist in Music.app. + + .. seealso:: :class:`XAMusicLibraryPlaylist`, :class:`XAMusicUserPlaylist` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + if not hasattr(self, "xa_specialized"): + if self.special_kind == XAMusicApplication.PlaylistKind.USER or self.special_kind == XAMusicApplication.PlaylistKind.NONE: + self.__class__ = XAMusicUserPlaylist + + self.xa_specialized = True + self.__init__(properties) + + @property + def disliked(self) -> bool: + """Whether the playlist is disliked. + """ + return self.xa_elem.disliked() + + @disliked.setter + def disliked(self, disliked: bool): + self.set_property('disliked', disliked) + + @property + def loved(self) -> bool: + """Whether the playlist is loved. + """ + return self.xa_elem.loved() + + @loved.setter + def loved(self, loved: bool): + self.set_property('loved', loved) + +
[docs] def search(self, query: str, type: Literal["all", "artists", "albums", "displayed", "tracks"] = "displayed"): + search_ids = { + "all": XAMusicApplication.SearchFilter.ALL, + "artists": XAMusicApplication.SearchFilter.ARTISTS, + "albums": XAMusicApplication.SearchFilter.ALBUMS, + "displayed": XAMusicApplication.SearchFilter.DISPLAYED, + "tracks": XAMusicApplication.SearchFilter.NAMES, + } + + items = [] + results = self.xa_elem.searchFor_only_(query, search_ids[type]) + for result in results: + properties = { + "parent": self, + "element": result, + "appref": self.xa_aref, + "system_events": self.xa_sevt, + } + items.append(XAMusicTrack(properties)) + return items
+ +
[docs] def tracks(self, filter: Union[dict, None] = None) -> 'XAMusicTrackList': + """Returns a list of tracks, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned tracks will have, or None + :type filter: Union[dict, None] + :return: The list of tracks + :rtype: XAMusicTrackList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.tracks(), XAMusicTrackList, filter)
+ + + + +
[docs]class XAMusicAudioCDPlaylistList(XAMusicPlaylistList): + """A wrapper around lists of audio CD playlists that employs fast enumeration techniques. + + All properties of audio CD playlists can be called as methods on the wrapped list, returning a list containing each playlist's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMusicAudioCDPlaylist) + +
[docs] def artist(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("artist") or [])
+ +
[docs] def compilation(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("compilation") or [])
+ +
[docs] def composer(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("composer") or [])
+ +
[docs] def disc_count(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("discCount") or [])
+ +
[docs] def disc_number(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("discNumber") or [])
+ +
[docs] def genre(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("genre") or [])
+ +
[docs] def year(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("year") or [])
+ +
[docs] def by_artist(self, artist: str) -> Union['XAMusicAudioCDPlaylist', None]: + return self.by_property("artist", artist)
+ +
[docs] def by_compilation(self, compilation: bool) -> Union['XAMusicAudioCDPlaylist', None]: + return self.by_property("compilation", compilation)
+ +
[docs] def by_composer(self, composer: str) -> Union['XAMusicAudioCDPlaylist', None]: + return self.by_property("composer", composer)
+ +
[docs] def by_disc_count(self, disc_count: int) -> Union['XAMusicAudioCDPlaylist', None]: + return self.by_property("discCount", disc_count)
+ +
[docs] def by_disc_number(self, disc_number: int) -> Union['XAMusicAudioCDPlaylist', None]: + return self.by_property("discNumber", disc_number)
+ +
[docs] def by_genre(self, genre: str) -> Union['XAMusicAudioCDPlaylist', None]: + return self.by_property("genre", genre)
+ +
[docs] def by_year(self, year: int) -> Union['XAMusicAudioCDPlaylist', None]: + return self.by_property("year", year)
+ +
[docs]class XAMusicAudioCDPlaylist(XAMusicPlaylist): + """An audio CD playlist in Music.app. + + .. seealso:: :class:`XAMusicLibraryPlaylist`, :class:`XAMusicUserPlaylist` + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def artist(self) -> str: + """The artist of the CD. + """ + return self.xa_elem.artist() + + @artist.setter + def artist(self, artist: str): + self.set_property('artist', artist) + + @property + def compilation(self) -> bool: + """Whether the CD is a compilation album. + """ + return self.xa_elem.compilation() + + @compilation.setter + def compilation(self, compilation: bool): + self.set_property('compilation', compilation) + + @property + def composer(self) -> str: + """The composer of the CD. + """ + return self.xa_elem.composer() + + @composer.setter + def composer(self, composer: str): + self.set_property('composer', composer) + + @property + def disc_count(self) -> int: + """The total number of discs in the CD's album. + """ + return self.xa_elem.discCount() + + @disc_count.setter + def disc_count(self, disc_count: int): + self.set_property('discCount', disc_count) + + @property + def disc_number(self) -> int: + """The index of the CD disc in the source album. + """ + return self.xa_elem.discNumber() + + @disc_number.setter + def disc_number(self, disc_number: int): + self.set_property('discNumber', disc_number) + + @property + def genre(self) -> str: + """The genre of the CD. + """ + return self.xa_elem.genre() + + @genre.setter + def genre(self, genre: str): + self.set_property('genre', genre) + + @property + def year(self) -> int: + """The year the album was recorded/released. + """ + return self.xa_elem.year() + + @year.setter + def year(self, year: int): + self.set_property('year', year) + +
[docs] def audio_cd_tracks(self, filter: Union[dict, None] = None) -> 'XAMusicAudioCDTrackList': + """Returns a list of audio CD tracks, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned audio CD tracks will have, or None + :type filter: Union[dict, None] + :return: The list of audio CD tracks + :rtype: XAMusicAudioCDTrackList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.audioCDTracks(), XAMusicAudioCDTrackList, filter)
+ + + + +
[docs]class XAMusicRadioTunerPlaylistList(XAMusicPlaylistList): + """A wrapper around lists of radio tuner playlists that employs fast enumeration techniques. + + All properties of radio tuner playlists can be called as methods on the wrapped list, returning a list containing each playlist's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMusicRadioTunerPlaylist)
+ +
[docs]class XAMusicRadioTunerPlaylist(XAMusicPlaylist): + """A radio playlist in Music.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties) + +
[docs] def url_tracks(self, filter: Union[dict, None] = None) -> 'MediaApplicationBase.XAMediaURLTrackList': + """Returns a list of URL tracks, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned URL tracks will have, or None + :type filter: Union[dict, None] + :return: The list of URL tracks + :rtype: MediaApplicationBase.XAMediaURLTrackList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.URLTracks(), MediaApplicationBase.XAMediaURLTrackList, filter)
+ + + + +
[docs]class XAMusicSourceList(MediaApplicationBase.XAMediaSourceList): + """A wrapper around lists of sources that employs fast enumeration techniques. + + All properties of sources can be called as methods on the wrapped list, returning a list containing each source's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMusicSource)
+ +
[docs]class XAMusicSource(MediaApplicationBase.XAMediaSource): + """A media source in Music.app. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + +
[docs] def audio_cd_playlists(self, filter: Union[dict, None] = None) -> 'XAMusicAudioCDPlaylistList': + """Returns a list of audio CD playlists, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned audio CD playlists will have, or None + :type filter: Union[dict, None] + :return: The list of audio CD playlists + :rtype: XAMusicAudioCDPlaylistList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.audioCDPlaylists(), XAMusicAudioCDPlaylistList, filter)
+ +
[docs] def radio_tuner_playlists(self, filter: Union[dict, None] = None) -> 'XAMusicRadioTunerPlaylistList': + """Returns a list of radio tuner playlists, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned radio tuner playlists will have, or None + :type filter: Union[dict, None] + :return: The list of radio tuner playlists + :rtype: XAMusicRadioTunerPlaylistList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.radioTunerPlaylists(), XAMusicRadioTunerPlaylistList, filter)
+ +
[docs] def subscription_playlists(self, filter: Union[dict, None] = None) -> 'XAMusicSubscriptionPlaylistList': + """Returns a list of subscription playlists, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned subscription playlists will have, or None + :type filter: Union[dict, None] + :return: The list of subscription playlists + :rtype: XAMusicSubscriptionPlaylistList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.subscriptionPlaylists(), XAMusicSubscriptionPlaylistList, filter)
+ + + + +
[docs]class XAMusicSubscriptionPlaylistList(XAMusicPlaylistList): + """A wrapper around lists of subscription playlists that employs fast enumeration techniques. + + All properties of subscription playlists can be called as methods on the wrapped list, returning a list containing each playlist's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMusicSubscriptionPlaylist)
+ +
[docs]class XAMusicSubscriptionPlaylist(XAMusicPlaylist): + """A subscription playlist from Apple Music in Music.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties) + +
[docs] def file_tracks(self, filter: Union[dict, None] = None) -> 'MediaApplicationBase.XAMediaFileTrackList': + """Returns a list of file tracks, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned file tracks will have, or None + :type filter: Union[dict, None] + :return: The list of file tracks + :rtype: MediaApplicationBase.XAMediaFileTrackList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.fileTracks(), MediaApplicationBase.XAMediaFileTrackList, filter)
+ +
[docs] def url_tracks(self, filter: Union[dict, None] = None) -> 'MediaApplicationBase.XAMediaURLTrackList': + """Returns a list of URL tracks, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned URL tracks will have, or None + :type filter: Union[dict, None] + :return: The list of URL tracks + :rtype: MediaApplicationBase.XAMediaURLTrackList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.URLTracks(), MediaApplicationBase.XAMediaURLTrackList, filter)
+ + + + +
[docs]class XAMusicTrackList(MediaApplicationBase.XAMediaTrackList): + """A wrapper around lists of music tracks that employs fast enumeration techniques. + + All properties of music tracks can be called as methods on the wrapped list, returning a list containing each track's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAMusicTrack + super().__init__(properties, filter, obj_class) + +
[docs] def album_artist(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("albumArtist") or [])
+ +
[docs] def album_disliked(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("albumDisliked") or [])
+ +
[docs] def album_loved(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("albumLoved") or [])
+ +
[docs] def artist(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("artist") or [])
+ +
[docs] def bpm(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("bpm") or [])
+ +
[docs] def cloud_status(self) -> list[XAMusicApplication.iCloudStatus]: + ls = self.xa_elem.arrayByApplyingSelector_("cloudStatus") or [] + return [XAMusicApplication.iCloudStatus(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def compilation(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("compilation") or [])
+ +
[docs] def composer(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("composer") or [])
+ +
[docs] def disliked(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("disliked") or [])
+ +
[docs] def eq(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("EQ") or [])
+ +
[docs] def gapless(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("gapless") or [])
+ +
[docs] def loved(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("loved") or [])
+ +
[docs] def lyrics(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("lyrics") or [])
+ +
[docs] def movement(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("movement") or [])
+ +
[docs] def movement_count(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("movementCount") or [])
+ +
[docs] def movement_number(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("movementNumber") or [])
+ +
[docs] def shufflable(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("shufflable") or [])
+ +
[docs] def sort_artist(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("sortArtist") or [])
+ +
[docs] def sort_album_artist(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("sortAlbumArtist") or [])
+ +
[docs] def sort_composer(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("sortComposer") or [])
+ +
[docs] def work(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("work") or [])
+ +
[docs] def by_album_artist(self, album_artist: str) -> Union['XAMusicTrack', None]: + return self.by_property("albumArtist", album_artist)
+ +
[docs] def by_album_disliked(self, album_disliked: bool) -> Union['XAMusicTrack', None]: + return self.by_property("albumDisliked", album_disliked)
+ +
[docs] def by_album_loved(self, album_loved: bool) -> Union['XAMusicTrack', None]: + return self.by_property("albumLoved", album_loved)
+ +
[docs] def by_artist(self, artist: str) -> Union['XAMusicTrack', None]: + return self.by_property("artist", artist)
+ +
[docs] def by_bpm(self, bpm: int) -> Union['XAMusicTrack', None]: + return self.by_property("bpm", bpm)
+ +
[docs] def by_cloud_status(self, cloud_status: XAMusicApplication.iCloudStatus) -> Union['XAMusicTrack', None]: + # TODO + return self.by_property("cloudStatus", cloud_status.value)
+ +
[docs] def by_compilation(self, compilation: bool) -> Union['XAMusicTrack', None]: + return self.by_property("compilation", compilation)
+ +
[docs] def by_composer(self, composer: str) -> Union['XAMusicTrack', None]: + return self.by_property("composer", composer)
+ +
[docs] def by_disliked(self, disliked: bool) -> Union['XAMusicTrack', None]: + return self.by_property("disliked", disliked)
+ +
[docs] def by_eq(self, eq: str) -> Union['XAMusicTrack', None]: + return self.by_property("EQ", eq)
+ +
[docs] def by_gapless(self, gapless: bool) -> Union['XAMusicTrack', None]: + return self.by_property("gapless", gapless)
+ +
[docs] def by_loved(self, loved: bool) -> Union['XAMusicTrack', None]: + return self.by_property("loved", loved)
+ +
[docs] def by_lyrics(self, lyrics: str) -> Union['XAMusicTrack', None]: + return self.by_property("lyrics", lyrics)
+ +
[docs] def by_modification_date(self, modification_date: datetime) -> Union['XAMusicTrack', None]: + return self.by_property("modificationDate", modification_date)
+ +
[docs] def by_movement(self, movement: str) -> Union['XAMusicTrack', None]: + return self.by_property("movement", movement)
+ +
[docs] def by_movement_count(self, movement_count: int) -> Union['XAMusicTrack', None]: + return self.by_property("movementCount", movement_count)
+ +
[docs] def by_movement_number(self, movement_number: int) -> Union['XAMusicTrack', None]: + return self.by_property("movementNumber", movement_number)
+ +
[docs] def by_shufflable(self, shufflable: bool) -> Union['XAMusicTrack', None]: + return self.by_property("shufflable", shufflable)
+ +
[docs] def by_sort_artist(self, sort_artist: str) -> Union['XAMusicTrack', None]: + return self.by_property("sortArtist", sort_artist)
+ +
[docs] def by_sort_album_artist(self, sort_album_artist: str) -> Union['XAMusicTrack', None]: + return self.by_property("sortAlbumArtist", sort_album_artist)
+ +
[docs] def by_sort_composer(self, sort_composer: str) -> Union['XAMusicTrack', None]: + return self.by_property("sortComposer", sort_composer)
+ +
[docs] def by_work(self, work: str) -> Union['XAMusicTrack', None]: + return self.by_property("work", work)
+ +
[docs]class XAMusicTrack(MediaApplicationBase.XAMediaTrack): + """A class for managing and interacting with tracks in Music.app. + + .. seealso:: :class:`XAMusicSharedTrack`, :class:`MediaApplicationBase.XAMediaFileTrack`, :class:`XAMusicRemoteURLTrack` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + # print("Track type", self.objectClass.data()) + # if self.objectClass.data() == _SHARED_TRACK: + # self.__class__ = XAMusicSharedTrack + # self.__init__() + # elif self.objectClass.data() == _FILE_TRACK: + # self.__class__ = MediaApplicationBase.XAMediaFileTrack + # self.__init__() + # elif self.objectClass.data() == _URL_TRACK: + # self.__class__ = MediaApplicationBase.XAMediaURLTrack + # self.__init__() + + @property + def album_artist(self) -> str: + """The album artist of the track. + """ + return self.xa_elem.albumArtist() + + @album_artist.setter + def album_artist(self, album_artist: str): + self.set_property('albumArtist', album_artist) + + @property + def album_disliked(self) -> bool: + """Whether the album for the track is disliked. + """ + return self.xa_elem.albumDisliked() + + @album_disliked.setter + def album_disliked(self, album_disliked: bool): + self.set_property('albumDisliked', album_disliked) + + @property + def album_loved(self) -> bool: + """Whether the album for the track is loved. + """ + return self.xa_elem.albumLoved() + + @album_loved.setter + def album_loved(self, album_loved: bool): + self.set_property('albumLoved', album_loved) + + @property + def artist(self) -> str: + """The artist/source of the track. + """ + return self.xa_elem.artist() + + @artist.setter + def artist(self, artist: str): + self.set_property('artist', artist) + + @property + def bpm(self) -> int: + """The tempo of the track in beats per minute. + """ + return self.xa_elem.bpm() + + @bpm.setter + def bpm(self, bpm: int): + self.set_property('bpm', bpm) + + @property + def cloud_status(self) -> XAMusicApplication.iCloudStatus: + """The iCloud status of the track. + """ + return XAMusicApplication.iCloudStatus(self.xa_elem.cloudStatus()) + + @property + def compilation(self) -> bool: + """Whether the track is from a compilation album. + """ + return self.xa_elem.compilation() + + @compilation.setter + def compilation(self, compilation: bool): + self.set_property('compilation', compilation) + + @property + def composer(self) -> str: + """The composer of the track. + """ + return self.xa_elem.composer() + + @composer.setter + def composer(self, composer: str): + self.set_property('composer', composer) + + @property + def disliked(self) -> bool: + """Whether the track is disliked. + """ + return self.xa_elem.disliked() + + @disliked.setter + def disliked(self, disliked: bool): + self.set_property('disliked', disliked) + + @property + def eq(self) -> str: + """The name of the EQ preset of the track. + """ + return self.xa_elem.EQ() + + @eq.setter + def eq(self, eq: str): + self.set_property('EQ', eq) + + @property + def gapless(self) -> bool: + """Whether the track is a from a gapless album. + """ + return self.xa_elem.gapless() + + @gapless.setter + def gapless(self, gapless: bool): + self.set_property('gapless', gapless) + + @property + def loved(self) -> bool: + """Whether the track is loved. + """ + return self.xa_elem.loved() + + @loved.setter + def loved(self, loved: bool): + self.set_property('loved', loved) + + @property + def lyrics(self) -> str: + """The lyrics of the track. + """ + return self.xa_elem.lyrics() + + @lyrics.setter + def lyrics(self, lyrics: str): + self.set_property('lyrics', lyrics) + + @property + def movement(self) -> str: + """The movement name of the track. + """ + return self.xa_elem.movement() + + @movement.setter + def movement(self, movement: str): + self.set_property('movement', movement) + + @property + def movement_count(self) -> int: + """The total number of movements in the work. + """ + return self.xa_elem.movementCount() + + @movement_count.setter + def movement_count(self, movement_count: int): + self.set_property('movementCount', movement_count) + + @property + def movement_number(self) -> int: + """The index of the movement in the work. + """ + return self.xa_elem.movementNumber() + + @movement_number.setter + def movement_number(self, movement_number: int): + self.set_property('movementNumber', movement_number) + + @property + def shufflable(self) -> bool: + """Whether the track is included when shuffling. + """ + return self.xa_elem.shufflable() + + @shufflable.setter + def shufflable(self, shufflable: bool): + self.set_property('shufflable', shufflable) + + @property + def sort_artist(self) -> str: + """The string used for this track when sorting by artist. + """ + return self.xa_elem.sortArtist() + + @sort_artist.setter + def sort_artist(self, sort_artist: str): + self.set_property('sortArtist', sort_artist) + + @property + def sort_album_artist(self) -> str: + """The string used for this track when sorting by album artist. + """ + return self.xa_elem.sortAlbumArtist() + + @sort_album_artist.setter + def sort_album_artist(self, sort_album_artist: str): + self.set_property('sortAlbumArtist', sort_album_artist) + + @property + def sort_composer(self) -> str: + """The string used for this track when sorting by composer. + """ + return self.xa_elem.sortComposer() + + @sort_composer.setter + def sort_composer(self, sort_composer: str): + self.set_property('sortComposer', sort_composer) + + @property + def work(self) -> str: + """The work name of the track. + """ + return self.xa_elem.work() + + @work.setter + def work(self, work: str): + self.set_property('work', work)
+ + + +
[docs]class XAMusicAudioCDTrackList(XAMusicTrackList): + """A wrapper around lists of music audio CD tracks that employs fast enumeration techniques. + + All properties of music audio CD tracks can be called as methods on the wrapped list, returning a list containing each track's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMusicAudioCDTrack) + +
[docs] def location(self) -> list[XABase.XAURL]: + ls = self.xa_elem.arrayByApplyingSelector_("location") or [] + return [XABase.XAURL(x) for x in ls]
+ +
[docs] def by_location(self, location: XABase.XAURL) -> Union['XAMusicAudioCDTrack', None]: + return self.by_property("location", location.xa_elem)
+ +
[docs]class XAMusicAudioCDTrack(XAMusicTrack): + """An audio CD track in Music.app. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def location(self) -> XABase.XAPath: + """The location of the file represented by the track. + """ + return XABase.XAPath(self.xa_elem.location()) + + @location.setter + def location(self, location: XABase.XAPath): + self.set_property('location', location.xa_elem)
+ + + +
[docs]class XAMusicUserPlaylistList(XAMusicPlaylistList): + """A wrapper around lists of music user playlists that employs fast enumeration techniques. + + All properties of music user playlists can be called as methods on the wrapped list, returning a list containing each playlist's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMusicUserPlaylist) + +
[docs] def genius(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("genius") or [])
+ +
[docs] def by_genius(self, genius: bool) -> Union['XAMusicUserPlaylist', None]: + return self.by_property("genius", genius)
+ +
[docs]class XAMusicUserPlaylist(XAMusicPlaylist): + """A user-created playlist in Music.app. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def genius(self) -> bool: + """Whether the playlist is a genius playlist. + """ + return self.xa_elem.genius()
+ + + + +
[docs]class XAMusicVisualList(MediaApplicationBase.XAMediaItemList): + """A wrapper around lists of music visuals that employs fast enumeration techniques. + + All properties of music visuals can be called as methods on the wrapped list, returning a list containing each visual's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMusicVisual)
+ +
[docs]class XAMusicVisual(XAMusicPlaylist): + """A music visual in Music.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + +
[docs]class XAMusicWindowList(MediaApplicationBase.XAMediaWindowList): + """A wrapper around lists of music windows that employs fast enumeration techniques. + + All properties of music windows can be called as methods on the wrapped list, returning a list containing each windows's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAMusicWindow + super().__init__(properties, filter, obj_class)
+ +
[docs]class XAMusicWindow(MediaApplicationBase.XAMediaWindow, XABaseScriptable.XASBWindow): + """A windows of Music.app. + + .. seealso:: :class:`XAMusicBrowserWindow`, :class:`XAMusicPlaylistWindow`, :class:`XAMusicVideoWindow` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + obj_class = self.xa_elem.objectClass().data() + if not hasattr(self, "xa_specialized"): + if obj_class == b'WrBc': + self.__class__ = MediaApplicationBase.XAMediaBrowserWindow + elif obj_class == b'WlPc': + self.__class__ = MediaApplicationBase.XAMediaPlaylistWindow + elif obj_class == b'niwc': + self.__class__ = MediaApplicationBase.XAMediaVideoWindow + elif obj_class == b'WPMc': + self.__class__ = XAMusicMiniplayerWindow + elif obj_class == b'WQEc': + self.__class__ = XAMusicEQWindow + self.xa_specialized = True + self.__init__(properties)
+ + + + +
[docs]class XAMusicEQWindowList(XAMusicWindowList): + """A wrapper around lists of music equalizer windows that employs fast enumeration techniques. + + All properties of music equalizer windows can be called as methods on the wrapped list, returning a list containing each windows's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMusicEQWindow)
+ +
[docs]class XAMusicEQWindow(XAMusicWindow): + """An equalizer window in Music.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAMusicMiniplayerWindowList(XAMusicWindowList): + """A wrapper around lists of music miniplayer windows that employs fast enumeration techniques. + + All properties of music minipplayer windows can be called as methods on the wrapped list, returning a list containing each windows's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAMusicMiniplayerWindow)
+ +
[docs]class XAMusicMiniplayerWindow(XAMusicWindow): + """A miniplayer window in Music.app. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties): + super().__init__(properties)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Notes.html b/docs/_modules/PyXA/apps/Notes.html new file mode 100644 index 0000000..a095987 --- /dev/null +++ b/docs/_modules/PyXA/apps/Notes.html @@ -0,0 +1,1285 @@ + + + + + + PyXA.apps.Notes — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Notes

+""".. versionadded:: 0.0.1
+
+Control the macOS Notes application using JXA-like syntax.
+"""
+
+from datetime import datetime
+from enum import Enum
+from typing import Union
+
+import AppKit
+from ScriptingBridge import SBElementArray
+
+from PyXA import XABase
+from PyXA.XABase import OSType
+from PyXA import XABaseScriptable
+from ..XAProtocols import XACanOpenPath, XACanPrintPath, XAClipboardCodable, XADeletable, XAShowable
+
+
[docs]class XANotesApplication(XABaseScriptable.XASBApplication, XACanOpenPath, XACanPrintPath): + """A class for interacting with Notes.app. + + .. seealso:: :class:`XANotesWindow`, :class:`XANote`, :class:`XANotesFolder`, :class:`XANotesAccount` + + .. versionchanged:: 0.0.3 + + Added :func:`accounts`, :func:`attachments`, and related methods + + .. versionadded:: 0.0.1 + """ +
[docs] class FileFormat(Enum): + NATIVE = OSType('item') #: The native Notes format
+ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XANotesWindow + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether Notes is the active application. + """ + return self.xa_scel.frontmost() + + @frontmost.setter + def frontmost(self, frontmost: bool): + self.set_property("frontmost", frontmost) + + @property + def version(self) -> str: + """The version number of Notes.app. + """ + return self.xa_scel.version() + + @property + def default_account(self) -> 'XANotesAccount': + """The account that new notes are created in by default. + """ + return self._new_element(self.xa_scel.defaultAccount(), XANotesAccount) + + @default_account.setter + def default_account(self, default_account: 'XANotesAccount'): + self.set_property('defaultAccount', default_account.xa_elem) + + @property + def selection(self) -> 'XANoteList': + """A list of currently selected notes. + """ + return self._new_element(self.xa_scel.selection(), XANoteList) + + @selection.setter + def selection(self, selection: Union['XANoteList', list['XANote']]): + if isinstance(selection, list): + selection = [x.xa_elem for x in selection] + self.set_property("selection", selection) + else: + self.set_property('selection', selection.xa_elem) + +
[docs] def open(self, file_ref: Union[XABase.XAPath, str]) -> 'XANote': + if isinstance(file_ref, XABase.XAPath): + file_ref = file_ref.path + + super().open(file_ref) + return self.notes()[0]
+ +
[docs] def documents(self, filter: Union[dict, None] = None) -> 'XANotesDocumentList': + """Returns a list of documents, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_scel.documents(), XANotesDocumentList, filter)
+ +
[docs] def notes(self, filter: Union[dict, None] = None) -> 'XANoteList': + """Returns a list of notes, as PyXA objects, matching the given filter. + + :param filter: Keys and values to filter notes by, defaults to None + :type filter: dict, optional + :return: A PyXA list object wrapping a list of notes + :rtype: XANoteList + + :Example 1: Retrieve the name of each note + + >>> import PyXA + >>> app = PyXA.Application("Notes") + >>> print(app.notes().name()) + ['ExampleName1', 'ExampleName2', 'ExampleName3', ...] + + :Example 2: Retrieve notes by using a filter + + >>> import PyXA + >>> app = PyXA.Application("Notes") + >>> print(app.notes().containing("name", "fancy")) + [('ExampleName1', 'x-coredata://213D109C-B439-42A0-96EC-380DE31393E2/ICNote/p2964'), ('ExampleName11', 'x-coredata://213D109C-B439-42A0-96EC-380DE31393E2/ICNote/p2963'), ...] + + :Example 3: Iterate over each note + + >>> import PyXA + >>> app = PyXA.Application("Notes") + >>> for note in app.notes(): + >>> print(note.name) + ExampleName1 + ExampleName2 + ExampleName3 + ... + + .. versionchanged:: 0.0.3 + + Now returns an object of :class:`XANoteList` instead of a default list. + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_scel.notes(), XANoteList, filter)
+ +
[docs] def folders(self, filter: Union[dict, None] = None) -> 'XANotesFolderList': + """Returns a list of Notes folders, as PyXA objects, matching the given filter. + + :Example 1: Retrieve the name of each folder + + >>> import PyXA + >>> app = PyXA.Application("Notes") + >>> print(app.folders().name()) + ['ExampleFolder1', 'ExampleFolder2', 'ExampleFolder3', ...] + + .. versionchanged:: 0.0.3 + + Now returns an object of :class:`XANotesFolderList` instead of a default list. + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_scel.folders(), XANotesFolderList, filter)
+ +
[docs] def accounts(self, filter: Union[dict, None] = None) -> 'XANotesAccountList': + """Returns a list of Notes accounts, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_scel.accounts(), XANotesAccountList, filter)
+ +
[docs] def attachments(self, filter: Union[dict, None] = None) -> 'XANotesAttachmentList': + """Returns a list of attachments, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.3 + """ + return self._new_element(self.xa_scel.attachments(), XANotesAttachmentList, filter)
+ +
[docs] def new_note(self, name = "New Note", body = "", folder: 'XANotesFolder' = None) -> 'XANote': + """Creates a new note with the given name and body text in the given folder. + If no folder is provided, the note is created in the default Notes folder. + + :param name: The name of the note, defaults to "New Note" + :type name: str, optional + :param body: The initial body text of the note, defaults to "" + :type body: str, optional + :param folder: The folder to create the new note in, defaults to None + :type folder: XANotesFolder, optional + :return: A reference to the newly created note. + :rtype: XANote + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Notes") + >>> note = app.new_note("PyXA Notes", "Example text of new note.") + >>> print(note) + <<class 'PyXA.apps.Notes.XANote'>PyXA Notes, x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICNote/p3388> + + .. seealso:: :class:`XANote`, :func:`new_folder` + + .. versionadded:: 0.0.1 + """ + if folder is None: + folder = self + name = name.replace('\n', '<br />') + body = body.replace('\n', '<br />') + properties = { + "body": f"<b>{name}</b><br />{body}", + } + note = self.make("note", properties) + folder.notes().push(note) + return folder.notes()[0]
+ +
[docs] def new_folder(self, name: str = "New Folder", account: 'XANotesAccount' = None) -> 'XANotesFolder': + """Creates a new Notes folder with the given name. + + :param name: The name of the folder, defaults to "New Folder" + :type name: str, optional + :return: A reference to the newly created folder. + :rtype: XANote + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Notes") + >>> folder = app.new_folder("PyXA Notes Folder") + >>> print(folder) + <<class 'PyXA.apps.Notes.XANotesFolder'>PyXA Notes Folder, x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICFolder/p3389> + + .. seealso:: :class:`XANotesFolder`, :func:`new_note` + + .. versionadded:: 0.0.1 + """ + if account is None: + account = self + + properties = { + "name": name, + } + + folder = self.make("folder", properties) + account.folders().push(folder) + return account.folders().by_name(name)
+ +
[docs] def make(self, specifier: str, properties: Union[dict, None] = None, data: Union[XABase.XAPath, str, None] = None): + """Creates a new element of the given specifier class without adding it to any list. + + Use :func:`XABase.XAList.push` to push the element onto a list. + + :param specifier: The classname of the object to create + :type specifier: str + :param properties: The properties to give the object + :type properties: dict + :return: A PyXA wrapped form of the object + :rtype: XABase.XAObject + + :Example 1: Make a new folder and add a new note to that folder + + >>> import PyXA + >>> app = PyXA.Application("Notes") + >>> new_folder = app.make("folder", {"name": "Example Folder"}) + >>> new_note = app.make("note", {"name": "Example Note"}) + >>> app.folders().push(new_folder) + >>> new_folder.notes().push(new_note) + + .. versionadded:: 0.0.3 + """ + if properties is None: + properties = {} + + if isinstance(data, str): + data = XABase.XAPath(data) + + if isinstance(data, XABase.XAPath): + data = data.xa_elem + + obj = self.xa_scel.classForScriptingClass_(specifier).alloc().initWithData_andProperties_(data, properties) + + if specifier == "note": + return self._new_element(obj, XANote) + elif specifier == "account": + return self._new_element(obj, XANotesAccount) + elif specifier == "folder": + return self._new_element(obj, XANotesFolder) + elif specifier == "attachment": + return self._new_element(obj, XANoteAttachment)
+ + +
[docs]class XANoteList(XABase.XAList, XAClipboardCodable): + """A wrapper around a list of notes. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XANote, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def body(self) -> list[str]: + return [note.body for note in self]
+ +
[docs] def plaintext(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("plaintext") or [])
+ +
[docs] def creation_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("creationDate") or [])
+ +
[docs] def modification_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("modificationDate") or [])
+ +
[docs] def password_protected(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("passwordProtected") or [])
+ +
[docs] def shared(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("shared") or [])
+ +
[docs] def container(self) -> 'XANotesFolderList': + ls = self.xa_elem.arrayByApplyingSelector_("container") or [] + return self._new_element(ls, XANotesFolderList)
+ +
[docs] def attachments(self) -> 'XANotesAttachmentList': + ls = self.xa_elem.arrayByApplyingSelector_("attachments") or [] + return self._new_element(ls, XANotesAttachmentList)
+ +
[docs] def by_name(self, name: str) -> 'XANote': + return self.by_property("name", name)
+ +
[docs] def by_id(self, id: str) -> 'XANote': + return self.by_property("id", id)
+ +
[docs] def by_body(self, body: str) -> 'XANote': + return self.by_property("body", body)
+ +
[docs] def by_plaintext(self, plaintext: str) -> 'XANote': + return self.by_property("plaintext", plaintext)
+ +
[docs] def by_creation_date(self, creation_date: datetime) -> 'XANote': + for note in self.xa_elem: + if note.creationDate() == creation_date: + return self._new_element(note, XANote)
+ +
[docs] def by_modification_date(self, modification_date: datetime) -> 'XANote': + for note in self.xa_elem: + if note.modificationDate() == modification_date: + return self._new_element(note, XANote)
+ +
[docs] def by_password_protected(self, password_protected: bool) -> 'XANote': + return self.by_property("passwordProtected", password_protected)
+ +
[docs] def by_shared(self, shared: bool) -> 'XANote': + return self.by_property("shared", shared)
+ +
[docs] def by_container(self, container: 'XANotesFolder') -> 'XANote': + for note in self.xa_elem: + if note.container().get() == container.xa_elem.get(): + return self._new_element(note, XANote)
+ +
[docs] def show_separately(self) -> 'XANoteList': + """Shows each note in the list in a separate window. + + :Example 1: Show the currently selected notes in separate windows + + >>> import PyXA + >>> app = PyXA.Application("Notes") + >>> notes = app.selection.show_separately() + + .. versionadded:: 0.0.4 + """ + for note in self.xa_elem: + note.showSeparately_(True) + return self
+ +
[docs] def get_clipboard_representation(self) -> list[str]: + """Gets a clipboard-codable representation of each note in the list. + + When the clipboard content is set to a list of notes, the plaintext of each note is added to the clipboard. + + :return: A list of note plaintext representations + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + return self.plaintext()
+ + def __repr__(self): + return "<" + str(type(self)) + "length: " + str(len(self.xa_elem)) + ">"
+ + +
[docs]class XANotesDocumentList(XABase.XAList, XAClipboardCodable): + """A wrapper around a list of documents. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XANotesDocument, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def modified(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("modified") or [])
+ +
[docs] def file(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("file") or [])
+ +
[docs] def by_name(self, name: str) -> 'XANotesDocument': + return self.by_property("name", name)
+ +
[docs] def by_modified(self, modified: bool) -> 'XANotesDocument': + return self.by_property("modified", modified)
+ +
[docs] def by_file(self, file: str) -> 'XANotesDocument': + return self.by_property("file", file)
+ +
[docs] def get_clipboard_representation(self) -> list[str]: + """Gets a clipboard-codable representation of each document in the list. + + When the clipboard content is set to a list of documents, the name of each document is added to the clipboard. + + :return: A list of document names + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + return self.name()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ + +
[docs]class XANotesAccountList(XABase.XAList, XAClipboardCodable): + """A wrapper around a list of accounts. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XANotesAccount, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def upgraded(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("upgraded") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def default_folder(self) -> 'XANotesFolderList': + ls = self.xa_elem.arrayByApplyingSelector_("defaultFolder") or [] + return self._new_element(ls, XANotesFolderList)
+ +
[docs] def notes(self) -> 'XANoteList': + ls = self.xa_elem.arrayByApplyingSelector_("notes") or [] + return self._new_element(ls, XANoteList)
+ +
[docs] def folders(self) -> 'XANotesFolderList': + ls = self.xa_elem.arrayByApplyingSelector_("folders") or [] + return self._new_element(ls, XANotesFolderList)
+ +
[docs] def by_name(self, name: str) -> 'XANotesAccount': + return self.by_property("name", name)
+ +
[docs] def by_upgraded(self, upgraded: bool) -> 'XANotesAccount': + return self.by_property("upgraded", upgraded)
+ +
[docs] def by_id(self, id: str) -> 'XANotesAccount': + return self.by_property("id", id)
+ +
[docs] def by_default_folder(self, default_folder: 'XANotesFolder') -> 'XANotesAccount': + return self.by_property("defaultFolder", default_folder.xa_elem)
+ +
[docs] def get_clipboard_representation(self) -> list[str]: + """Gets a clipboard-codable representation of each account in the list. + + When the clipboard content is set to a list of accounts, the name of each account is added to the clipboard. + + :return: A list of account names + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + return self.name()
+ + def __repr__(self): + return "<" + str(type(self)) + str(list(zip(self.name(), self.id()))) + ">"
+ + +
[docs]class XANotesFolderList(XABase.XAList, XAClipboardCodable): + """A wrapper around a list of Notes folders. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XANotesFolder, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def shared(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("shared") or [])
+ +
[docs] def container(self) -> XANotesAccountList: + ls = self.xa_elem.arrayByApplyingSelector_("container") or [] + return self._new_element(ls, XANotesAccountList)
+ +
[docs] def folders(self) -> 'XANotesFolderList': + ls = self.xa_elem.arrayByApplyingSelector_("folders") or [] + return self._new_element(ls, XANotesFolderList)
+ +
[docs] def notes(self) -> XANoteList: + ls = self.xa_elem.arrayByApplyingSelector_("notes") or [] + return self._new_element(ls, XANoteList)
+ +
[docs] def by_name(self, name: str) -> 'XANotesFolder': + return self.by_property("name", name)
+ +
[docs] def by_id(self, id: str) -> 'XANotesFolder': + return self.by_property("id", id)
+ +
[docs] def by_shared(self, shared: bool) -> 'XANotesFolder': + return self.by_property("shared", shared)
+ +
[docs] def by_container(self, container: 'XANotesAccount') -> 'XANotesFolder': + return self.by_property("container", container.xa_elem)
+ +
[docs] def get_clipboard_representation(self) -> list[str]: + """Gets a clipboard-codable representation of each folder in the list. + + When the clipboard content is set to a list of folders, the name of each folder is added to the clipboard. + + :return: A list of folder names + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + return self.name()
+ + def __repr__(self): + return "<" + str(type(self)) + str(list(zip(self.name(), self.id()))) + ">"
+ + +
[docs]class XANotesAttachmentList(XABase.XAList, XAClipboardCodable): + """A wrapper around a list of attachments. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XANoteAttachment, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def content_identifier(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("contentIdentifier") or [])
+ +
[docs] def creation_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("creationDate") or [])
+ +
[docs] def modification_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("modificationDate") or [])
+ +
[docs] def url(self) -> list[XABase.XAURL]: + ls = self.xa_elem.arrayByApplyingSelector_("URL") or [] + return [XABase.XAURL(x) for x in ls]
+ +
[docs] def shared(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("shared") or [])
+ +
[docs] def container(self) -> XANoteList: + ls = self.xa_elem.arrayByApplyingSelector_("container") or [] + return self._new_element(ls, XANoteList)
+ +
[docs] def by_name(self, name: str) -> Union['XANoteAttachment', None]: + return self.by_property("name", name)
+ +
[docs] def by_id(self, id: str) -> Union['XANoteAttachment', None]: + return self.by_property("id", id)
+ +
[docs] def by_content_identifier(self, content_identifier: str) -> Union['XANoteAttachment', None]: + return self.by_property("contentIdentifier", content_identifier)
+ +
[docs] def by_creation_date(self, creation_date: datetime) -> 'XANoteAttachment': + for attachment in self.xa_elem: + if attachment.creationDate() == creation_date: + return self._new_element(attachment, XANoteAttachment)
+ +
[docs] def by_modification_date(self, modification_date: datetime) -> Union['XANoteAttachment', None]: + for attachment in self.xa_elem: + if attachment.modificationDate() == modification_date: + return self._new_element(attachment, XANoteAttachment)
+ +
[docs] def by_url(self, url: Union[str, XABase.XAURL]) -> Union['XANoteAttachment', None]: + if not isinstance(url, XABase.XAURL): + url = XABase.XAURL(url) + return self.by_property("URL", url.xa_elem)
+ +
[docs] def by_shared(self, shared: bool) -> Union['XANoteAttachment', None]: + return self.by_property("shared", shared)
+ +
[docs] def by_container(self, container: 'XANote') -> Union['XANoteAttachment', None]: + for attachment in self.xa_elem: + if attachment.container().get() == container.xa_elem.get(): + return self._new_element(attachment, XANoteAttachment)
+ +
[docs] def save(self, directory: str) -> 'XANotesAttachmentList': + """Saves all attachments in the list in the specified directory. + + :param directory: The directory to store the saved attachments in + :type directory: str + :return: A reference to the attachment list object + :rtype: XANotesAttachmentList + + :Example 1: Save the attachments in currently selected notes to the downloads folder + + >>> import PyXA + >>> app = PyXA.Application("Notes") + >>> app.selection.attachments().save("/Users/exampleuser/Downloads/") + + .. versionadded:: 0.0.4 + """ + for attachment_ls in self.xa_elem: + if isinstance(attachment_ls, SBElementArray): + for attachment in attachment_ls: + url = AppKit.NSURL.alloc().initFileURLWithPath_(directory + attachment.name()) + attachment.saveIn_as_(url, XANotesApplication.FileFormat.NATIVE.value) + else: + url = AppKit.NSURL.alloc().initFileURLWithPath_(directory + attachment_ls.name()) + attachment_ls.saveIn_as_(url, XANotesApplication.FileFormat.NATIVE.value) + return self
+ + def __repr__(self): + return "<" + str(type(self)) + str(list(zip(self.name(), self.id()))) + ">"
+ + +
[docs]class XANotesWindow(XABaseScriptable.XASBWindow): + """A window of Notes.app. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def document(self) -> 'XANotesDocument': + """The active document. + """ + return self._new_element(self.xa_scel.document(), XANotesDocument)
+ + +
[docs]class XANotesFolder(XABase.XAObject, XAClipboardCodable): + """A class for interacting with Notes folders and their contents. + + .. seealso:: class:`XANote` + + .. versionchanged:: 0.0.3 + + Added :func:`show` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the folder. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def id(self) -> str: + """The unique identifier for the folder. + """ + return self.xa_elem.id() + + @property + def shared(self) -> bool: + """Whether the folder is shared. + """ + return self.xa_elem.shared() + + @property + def container(self) -> 'XANotesAccount': + """The account the folder belongs to. + """ + return self._new_element(self.xa_elem.container(), XANotesAccount) + +
[docs] def show(self) -> 'XANotesFolder': + """Shows the folder in the main Notes window. + + .. versionadded:: 0.0.3 + """ + self.xa_elem.showSeparately_(False) + return self
+ +
[docs] def notes(self, filter: Union[dict, None] = None) -> 'XANoteList': + """Returns a list of notes, as PyXA objects, matching the given filter. + + :param filter: Keys and values to filter notes by, defaults to None + :type filter: dict, optional + :return: A PyXA list object wrapping a list of notes + :rtype: XANoteList + + .. versionchanged:: 0.0.3 + + Now returns an object of :class:`XANoteList` instead of a default list. + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_elem.notes(), XANoteList, filter)
+ +
[docs] def delete(self): + """Permanently deletes the folder. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.delete()
+ +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of the folder. + + When the clipboard content is set to a notes folder, the name of the folder is added to the clipboard. + + :return: The name of the notes folder + :rtype: str + + .. versionadded:: 0.0.8 + """ + return self.name
+ + def __repr__(self): + return "<" + str(type(self)) + self.name + ", " + self.id + ">"
+ + +
[docs]class XANotesDocument(XABase.XAObject, XAClipboardCodable): + """A class for interacting with documents in Notes.app. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the document. + """ + return self.xa_elem.name() + + @property + def modified(self) -> bool: + """Whether the document has been modified since the last save. + """ + return self.xa_elem.modified() + + @property + def file(self) -> str: + """The location of the document on the disk, if one exists. + """ + return self.xa_elem.file() + +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of the document. + + When the clipboard content is set to a document, the document's name is added to the clipboard. + + :return: The name of the document + :rtype: str + + .. versionadded:: 0.0.8 + """ + return self.name
+ + def __repr__(self): + return "<" + str(type(self)) + self.name + ">"
+ + +
[docs]class XANote(XABase.XAObject, XAClipboardCodable, XAShowable, XADeletable): + """A class for interacting with notes in the Notes application. + + .. seealso:: :class:`XANotesFolder` + + .. versionchanged:: 0.0.3 + + Added :func:`show` and :func:`show_separately` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the note (generally the first line of the body). + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def id(self) -> str: + """The unique identifier for the note. + """ + return self.xa_elem.id() + + @property + def body(self) -> str: + """The HTML content of the note. + """ + return self.xa_elem.body() + + @body.setter + def body(self, body: str): + self.set_property('body', body) + + @property + def plaintext(self) -> str: + """The plaintext content of the note. + """ + return self.xa_elem.plaintext() + + @plaintext.setter + def plaintext(self, plaintext: set): + self.set_property('plaintext', plaintext) + + @property + def creation_date(self) -> datetime: + """The date and time the note was created. + """ + return self.xa_elem.creationDate() + + @property + def modification_date(self) -> datetime: + """The date and time the note was last modified. + """ + return self.xa_elem.modificationDate() + + @property + def password_protected(self) -> bool: + """Whether the note is password protected. + """ + return self.xa_elem.passwordProtected() + + @property + def shared(self) -> bool: + """Whether the note is shared. + """ + return self.xa_elem.shared() + + @property + def container(self) -> XANotesFolder: + """The folder that the note is in. + """ + return self._new_element(self.xa_elem.container(), XANotesFolder) + +
[docs] def show(self) -> 'XANote': + """Shows the note in the main Notes window. + + :return: A reference to the note object + :rtype: XANote + + .. versionadded:: 0.0.3 + """ + self.xa_elem.showSeparately_(False) + return self
+ +
[docs] def show_separately(self) -> 'XANote': + """Shows the note in a separate window. + + :return: A reference to the note object + :rtype: XANote + + .. versionadded:: 0.0.3 + """ + self.xa_elem.showSeparately_(True) + return self
+ +
[docs] def attachments(self, filter: Union[dict, None] = None) -> 'XANotesAttachmentList': + """Returns a list of attachments, as PyXA objects, matching the given filter. + + :param filter: Keys and values to filter attachments by, defaults to None + :type filter: dict, optional + :return: A PyXA list object wrapping a list of attachments + :rtype: XANotesAttachmentList + + :Example 1: List all attachments of a note + + >>> import PyXA + >>> app = PyXA.Application("Notes") + >>> note = app.notes()[-4] + >>> print(note.attachments()) + <<class 'PyXA.apps.Notes.XANotesAttachmentList'>[('Example.pdf, 'x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICAttachment/p526')]> + + :Example 2: Save the attachments of a note to the Downloads folder + + >>> import PyXA + >>> app = PyXA.Application("Notes") + >>> note = app.notes()[0] + >>> print(note.attachments().save("/Users/exampleuser/Downloads/")) + + .. versionchanged:: 0.0.3 + + Now returns an object of :class:`XANotesAttachmentList` instead of a default list. + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_elem.attachments(), XANotesAttachmentList, filter)
+ +
[docs] def move_to(self, folder: 'XANotesFolder') -> 'XANote': + """Moves the note to the specified folder. + + :param folder: The folder to move the note to + :type folder: XANotesFolder + :return: A reference to the note object + :rtype: XANote + + .. versionadded:: 0.0.4 + """ + self.xa_elem.moveTo_(folder.xa_elem) + return self
+ +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of the note. + + When the clipboard content is set to a note, the plaintext representation of the note is added to the clipboard. + + :return: The plaintext representation of the note + :rtype: str + + .. versionadded:: 0.0.8 + """ + return self.plaintext
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ", " + str(self.id) + ">"
+ + +
[docs]class XANoteAttachment(XABase.XAObject, XAClipboardCodable): + """A class for interacting with attachments in the Notes application. + + .. versionchanged:: 0.0.3 + + Added :func:`show` and :func:`show_separately` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the attachment. + """ + return self.xa_elem.name() + + @property + def id(self) -> str: + """The unique identifier for the attachment. + """ + return self.xa_elem.id() + + @property + def content_identifier(self) -> str: + """The content ID of the attachment in the note's HTML. + """ + return self.xa_elem.contentIdentifier() + + @property + def creation_date(self) -> datetime: + """The date the attachment was created. + """ + return self.xa_elem.creationDate() + + @property + def modification_date(self) -> datetime: + """The date the attachment was last modified. + """ + return self.xa_elem.modificationDate() + + @property + def url(self) -> Union[XABase.XAURL, None]: + """The URL that the attachment represents, if any. + """ + url = self.xa_elem.URL() + if url is not None: + return XABase.XAURL(url) + + @property + def shared(self) -> bool: + """Whether the attachment is shared. + """ + return self.xa_elem.shared() + + @property + def container(self) -> 'XANote': + """The note containing the attachment. + """ + return self._new_element(self.xa_elem.container(), XANote) + +
[docs] def show(self) -> 'XANoteAttachment': + """Shows the attachment in the main Notes window. + + :return: A reference to the attachment object + :rtype: XANoteAttachment + + .. versionadded:: 0.0.3 + """ + self.xa_elem.showSeparately_(False) + return self
+ +
[docs] def show_separately(self) -> 'XANoteAttachment': + """Shows the attachment in a separate window. + + :return: A reference to the attachment object + :rtype: XANoteAttachment + + .. versionadded:: 0.0.3 + """ + self.xa_elem.showSeparately_(True) + return self
+ +
[docs] def save(self, directory: str) -> 'XANoteAttachment': + """Saves the attachment to the specified directory. + + :param directory: The directory to store the saved attachment in + :type directory: str + :return: A reference to the attachment object + :rtype: XANoteAttachment + + .. versionadded:: 0.0.4 + """ + url = AppKit.NSURL.alloc().initFileURLWithPath_(directory + self.name) + self.xa_elem.saveIn_as_(url, XANotesApplication.FileFormat.NATIVE.value) + return self
+ +
[docs] def delete(self): + """Permanently deletes the attachment. + + .. versionadded:: 0.0.4 + """ + self.xa_elem.delete()
+ +
[docs] def get_clipboard_representation(self) -> Union[str, list[Union[AppKit.NSURL, str]]]: + """Gets a clipboard-codable representation of the attachment. + + When the clipboard content is set to an attachment, the URL of the attachment (if one exists) and the attachment's name are added to the clipboard. + + :return: The URL and name of the attachment, or just the name of the attachment + :rtype: list[Union[AppKit.NSURL, str]] + + .. versionadded:: 0.0.8 + """ + if self.url is None: + return self.name + return [self.url, self.name]
+ + def __repr__(self): + return "<" + str(type(self)) + self.name + ", " + self.id + ">"
+ + +
[docs]class XANotesAccount(XABase.XAObject, XAClipboardCodable): + """A class for interacting with accounts in the Notes application. + + .. versionchanged:: 0.0.3 + + Added :func:`show` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the account. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def upgraded(self) -> bool: + """Whether the account is upgraded. + """ + return self.xa_elem.upgraded() + + @property + def id(self) -> str: + """The unique identifier of the account. + """ + return self.xa_elem.id() + + @property + def default_folder(self) -> 'XANotesFolder': + """The default folder for creating new notes. + """ + return self._new_element(self.xa_elem.defaultFolder(), XANotesFolder) + + @default_folder.setter + def default_folder(self, default_folder: 'XANotesFolder'): + self.set_property('defaultFolder', default_folder.xa_elem) + +
[docs] def show(self) -> 'XANotesAccount': + """Shows the first folder belonging to the account. + + :return: A reference to the account object + :rtype: XANotesAccount + + .. versionadded:: 0.0.3 + """ + self.xa_elem.showSeparately_(False) + return self
+ +
[docs] def notes(self, filter: Union[dict, None] = None) -> 'XANoteList': + """Returns a list of notes, as PyXA objects, matching the given filter. + + :param filter: Keys and values to filter notes by, defaults to None + :type filter: dict, optional + :return: A PyXA list object wrapping a list of notes + :rtype: XANoteList + + :Example 1: List all notes belonging to an account + + >>> import PyXA + >>> app = PyXA.Application("Notes") + >>> account = app.accounts()[0] + >>> print(account.notes()) + <<class 'PyXA.apps.Notes.XANoteList'>[('PyXA Stuff', 'x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICNote/p3380'), ('Important Note', 'x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICNote/p614'), ...]> + + .. versionchanged:: 0.0.3 + + Now returns an object of :class:`XANoteList` instead of a default list. + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_elem.notes(), XANoteList, filter)
+ +
[docs] def folders(self, filter: Union[dict, None] = None) -> 'XANotesFolderList': + """Returns a list of folders, as PyXA objects, matching the given filter. + + :param filter: Keys and values to filter folders by, defaults to None + :type filter: dict, optional + :return: A PyXA list object wrapping a list of folders + :rtype: XANotesFolderList + + :Example 1: List all folders belonging to an account + + >>> import PyXA + >>> app = PyXA.Application("Notes") + >>> account = app.accounts()[0] + >>> print(account.folders()) + <<class 'PyXA.apps.Notes.XANotesFolderList'>[('Imported Notes', 'x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICFolder/p3104'), ('Notes', 'x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICFolder/p3123'), ...]> + + .. versionchanged:: 0.0.3 + + Now returns an object of :class:`XANotesFolderList` instead of a default list. + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_elem.folders(), XANotesFolderList, filter)
+ +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of the account. + + When the clipboard content is set to an account, the account's name are added to the clipboard. + + :return: The name of the account + :rtype: str + + .. versionadded:: 0.0.8 + """ + return self.name
+ + def __repr__(self): + return "<" + str(type(self)) + self.name + ", " + self.id + ">"
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/OmniOutliner.html b/docs/_modules/PyXA/apps/OmniOutliner.html new file mode 100644 index 0000000..2da8752 --- /dev/null +++ b/docs/_modules/PyXA/apps/OmniOutliner.html @@ -0,0 +1,2956 @@ + + + + + + PyXA.apps.OmniOutliner — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.OmniOutliner

+""".. versionadded:: 0.0.9
+
+Control OmniOutliner using JXA-like syntax.
+"""
+from datetime import datetime
+from enum import Enum
+from typing import Union
+import AppKit
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+from ..XAProtocols import XACanOpenPath, XACanPrintPath, XAClipboardCodable, XACloseable, XADeletable, XAPrintable
+
+
[docs]class XAOmniOutlinerApplication(XABaseScriptable.XASBApplication, XACanOpenPath, XACanPrintPath): + """A class for managing and interacting with OmniOutliner.app. + + .. versionadded:: 0.0.9 + """ +
[docs] class DisplayType(Enum): + """Note display types. + """ + INLINE = XABase.OSType('Ond1') #: Inline display type + OUT_OF_LINE = XABase.OSType('Ond2') #: Out of line display type
+ +
[docs] class SortOrder(Enum): + """Sort order directions. + """ + ASCENDING = XABase.OSType('OOs1') #: Ascending sort order + DESCENDING = XABase.OSType('OOs2') #: Descending sort order + NONE = XABase.OSType('OOno') #: No sort direction
+ +
[docs] class CheckboxState(Enum): + """Checkbox states. + """ + CHECKED = XABase.OSType('OOS2') #: Checkbox checked + UNCHECKED = XABase.OSType('OOS0') #: Checkbox unchecked + NONE = XABase.OSType('OOno') #: No checkbox state + INDETERMINATE = XABase.OSType('OOS1') #: Indeterminate checkbox state
+ +
[docs] class ColumnType(Enum): + """Column types. + """ + STYLED_TEXT = XABase.OSType('Oct0') + CHECKBOX = XABase.OSType('Oct1') + DATETIME = XABase.OSType('Oct2') + DURATION = XABase.OSType('Oct3') + POPUP = XABase.OSType('Oct4') + NUMERIC = XABase.OSType('Oct5')
+ +
[docs] class ColumnSummaryType(Enum): + """Column summary types. + """ + NONE = XABase.OSType('OOno') + HIDDEN = XABase.OSType('Osm1') + CALCULATED = XABase.OSType('Osm2') + TOTAL = XABase.OSType('Osm3') + MAXIMUM = XABase.OSType('Osm4') + MINIMUM = XABase.OSType('Osm5') + AVERAGE = XABase.OSType('Osm6')
+ +
[docs] class Alignment(Enum): + """Text alignment types. + """ + CENTER = XABase.OSType('OTa1') + JUSTIFIED = XABase.OSType('OTa3') + LEFT = XABase.OSType('OTa0') + NATURAL = XABase.OSType('OTa4') + RIGHT = XABase.OSType('OTa2')
+ +
[docs] class FormatStyle(Enum): + """Format styles. + """ + SHORT = XABase.OSType('OOFS') + MEDIUM = XABase.OSType('OOFM') + LONG = XABase.OSType('OOFL') + FULL = XABase.OSType('OOFF')
+ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XAOmniOutlinerWindow + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name + + @property + def frontmost(self) -> bool: + """Whether OmniOutliner is the active application. + """ + return self.xa_scel.frontmost() + + @property + def version(self) -> str: + """The version of OmniOutliner.app. + """ + return self.xa_scel.version + + @property + def build_number(self) -> str: + """The build number of the application, for example 63.1 or 63. Major and minor versions are separated by a dot, so 63.10 comes after 63.1. + """ + return self.xa_scel.buildNumber() + + @property + def imported_files_should_store_compressed(self) -> bool: + """Controls whether OmniOutliner will default imported files to being stored in a compressed format. + """ + return self.xa_scel.importedFilesShouldStoreCompressed() + + @imported_files_should_store_compressed.setter + def imported_files_should_store_compressed(self, imported_files_should_store_compressed: bool): + self.set_property("importedFilesShouldStoreCompressed", imported_files_should_store_compressed) + + @property + def prompt_on_file_format_upgrade(self) -> bool: + """Controls whether OmniOutliner will prompt the user when updating a older file format to a newer one. + """ + return self.xa_scel.promptOnFileFormatUpgrade() + + @prompt_on_file_format_upgrade.setter + def prompt_on_file_format_upgrade(self, prompt_on_file_format_upgrade: bool): + self.set_property("promptOnFileFormatUpgrade", prompt_on_file_format_upgrade) + +
[docs] def documents(self, filter: dict = None) -> 'XAOmniOutlinerDocumentList': + """Returns a list of documents, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_scel.documents(), XAOmniOutlinerDocumentList, filter)
+ +
[docs] def preferences(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerPreferenceList': + """Returns a list of preferences, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_scel.preferences(), XAOmniOutlinerPreferenceList, filter)
+ +
[docs] def document_types(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerDocumentTypeList': + """Returns a list of document types, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_scel.documentTypes(), XAOmniOutlinerDocumentTypeList, filter)
+ +
[docs] def readable_document_types(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerReadableDocumentTypeList': + """Returns a list of readable document types, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_scel.readableDocumentTypes(), XAOmniOutlinerReadableDocumentTypeList, filter)
+ +
[docs] def writable_document_types(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerWritableDocumentTypeList': + """Returns a list of writable document types, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_scel.writableDocumentTypes(), XAOmniOutlinerWritableDocumentTypeList, filter)
+ +
[docs] def xsl_transforms(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerXslTransformList': + """Returns a list of XSL transforms, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_scel.xslTransforms(), XAOmniOutlinerXslTransformList, filter)
+ +
[docs] def test(self): + self.xa_scel.collapseall_()
+ + + + +
[docs]class XAOmniOutlinerWindow(XABaseScriptable.XASBWindow): + """A window of OmniOutliner.app. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def document(self) -> 'XAOmniOutlinerDocument': + """The document whose contents are currently displayed in the window. + """ + return self._new_element(self.xa_elem.document(), XAOmniOutlinerDocument) + + @document.setter + def document(self, document: 'XAOmniOutlinerDocument'): + self.set_property("document", document.xa_elem)
+ + + + +
[docs]class XAOmniOutlinerRichTextList(XABase.XATextList): + """A wrapper around lists of rich texts that employs fast enumeration techniques. + + All properties of rich texts can be called as methods on the wrapped list, returning a list containing each texts's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAOmniOutlinerRichText)
+ +
[docs]class XAOmniOutlinerRichText(XABase.XAText, XADeletable): + """A row object in OmniOutliner.app. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def style(self) -> 'XAOmniOutlinerStyle': + """The style of the text. + """ + return self._new_element(self.xa_elem.style(), XAOmniOutlinerStyle) + + @style.setter + def style(self, style: 'XAOmniOutlinerStyle'): + self.set_property("style", style.xa_elem) + + @property + def baseline_offset(self) -> float: + """Number of pixels shifted above or below the normal baseline. + """ + return self.xa_elem.baselineOffset() + + @baseline_offset.setter + def baseline_offset(self, baseline_offset: float): + self.set_property("baselineOffset", baseline_offset) + + @property + def underlined(self) -> bool: + """Is the first character underlined? + """ + return self.xa_elem.underlined() + + @underlined.setter + def underlined(self, underlined: bool): + self.set_property("underlined", underlined) + + @property + def superscript(self) -> int: + """The superscript level of the text. + """ + return self.xa_elem.superscript() + + @superscript.setter + def superscript(self, superscript: int): + self.set_property("superscript", superscript) + + @property + def alignment(self) -> XAOmniOutlinerApplication.Alignment: + """Alignment of the text. + """ + return XAOmniOutlinerApplication.Alignment(self.xa_elem.alignment()) + + @alignment.setter + def alignment(self, alignment: XAOmniOutlinerApplication.Alignment): + self.set_property("alignment", alignment.value) + +
[docs] def bold(self): + """Bolds the text. + + .. versionadded:: 0.0.9 + """ + self.xa_elem.bold()
+ +
[docs] def italicize(self): + """Italicizes the text. + + .. versionadded:: 0.0.9 + """ + self.xa_elem.italicize()
+ +
[docs] def unbold(self): + """Unbolds the text. + + .. versionadded:: 0.0.9 + """ + self.xa_elem.unbold()
+ +
[docs] def underline(self): + """Underlines the text. + + .. versionadded:: 0.0.9 + """ + self.xa_elem.underline()
+ +
[docs] def unitalicize(self): + """Unitalicizes the text. + + .. versionadded:: 0.0.9 + """ + self.xa_elem.unitalicize()
+ +
[docs] def ununderline(self): + """Ununderlines the text. + + .. versionadded:: 0.0.9 + """ + self.xa_elem.ununderline()
+ +
[docs] def replace(self, replacement: str, regex_to_find: Union[str, None] = None, string_to_find: Union[str, None] = None): + """Replaces the text. + + :param replacement: The replacement strng + :type replacement: str + :param regex_to_find: Regular expression to find and replace, defaults to None + :type regex_to_find: Union[str, None], optional + :param string_to_find: String to find and replace, defaults to None + :type string_to_find: Union[str, None], optional + + .. versionadded:: 0.0.9 + """ + self.xa_elem.replaceMatchingRegularExpression_replacement_string_(regex_to_find, replacement, string_to_find)
+ +
[docs] def file_attachments(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerFileAttachmentList': + """Returns a list of file attachments, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.fileAttachments(), XAOmniOutlinerFileAttachmentList, filter)
+ + + + +
[docs]class XAOmniOutlinerFileAttachmentList(XABase.XATextList): + """A wrapper around lists of file attachments that employs fast enumeration techniques. + + All properties of file attachments can be called as methods on the wrapped list, returning a list containing attachments texts's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAOmniOutlinerFileAttachment)
+ +
[docs]class XAOmniOutlinerFileAttachment(XABase.XAText): + """A file attachment object in OmniOutliner.app. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def file_name(self) -> str: + """The path to the file for the attachment, if the attachment resides outside the document. + """ + return self.xa_elem.fileName() + + @property + def embdedded(self) -> bool: + """If true, the attached file will reside inside the document on the next save. + """ + return self.xa_elem.embedded()
+ + + + +
[docs]class XAOmniOutlinerDocumentList(XABase.XAList): + """A wrapper around lists of OmniOutliner documents that employs fast enumeration techniques. + + All properties of documents can be called as methods on the wrapped list, returning a list containing each document's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAOmniOutlinerDocument, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def modified(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("modified") or [])
+ +
[docs] def file(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("file") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def alternate_color(self) -> list[XABase.XAColor]: + ls = self.xa_elem.arrayByApplyingSelector_("alternateColor") or [] + return [XABase.XAColor(x) for x in ls]
+ +
[docs] def background_color(self) -> list[XABase.XAColor]: + ls = self.xa_elem.arrayByApplyingSelector_("backgroundColor") or [] + return [XABase.XAColor(x) for x in ls]
+ +
[docs] def canredo(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("canredo") or [])
+ +
[docs] def canundo(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("canundo") or [])
+ +
[docs] def children_are_sections(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("childrenAreSections") or [])
+ +
[docs] def column_title_style(self) -> 'XAOmniOutlinerStyleList': + ls = self.xa_elem.arrayByApplyingSelector_("columnTitleStyle") or [] + return self._new_element(ls, XAOmniOutlinerStyleList)
+ +
[docs] def editable(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("editable") or [])
+ +
[docs] def folded_editing_enabled(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("foldedEditingEnabled") or [])
+ +
[docs] def has_subtopics(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("hasSubtopics") or [])
+ +
[docs] def horizontal_grid_color(self) -> list[XABase.XAColor]: + ls = self.xa_elem.arrayByApplyingSelector_("horizontalGridColor") or [] + return [XABase.XAColor(x) for x in ls]
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def note_column(self) -> 'XAOmniOutlinerColumnList': + ls = self.xa_elem.arrayByApplyingSelector_("noteColumn") or [] + return self._new_element(ls, XAOmniOutlinerColumnList)
+ +
[docs] def note_display(self) -> list[XAOmniOutlinerApplication.DisplayType]: + ls = self.xa_elem.arrayByApplyingSelector_("noteDisplay") or [] + return [XAOmniOutlinerApplication.DisplayType(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def save_identifier(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("saveIdentifier") or [])
+ +
[docs] def save_identifier_enabled(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("saveIdentifierEnabled") or [])
+ +
[docs] def sorting_postponed(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("sortingPostponed") or [])
+ +
[docs] def status_sort_order(self) -> list[XAOmniOutlinerApplication.SortOrder]: + ls = self.xa_elem.arrayByApplyingSelector_("statusSortOrder") or [] + return [XAOmniOutlinerApplication.SortOrder(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def status_visible(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("statusVisible") or [])
+ +
[docs] def store_compressed(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("storeCompressed") or [])
+ +
[docs] def style(self) -> 'XAOmniOutlinerStyleList': + ls = self.xa_elem.arrayByApplyingSelector_("style") or [] + return self._new_element(ls, XAOmniOutlinerStyleList)
+ +
[docs] def title(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("title") or [])
+ +
[docs] def topic_column(self) -> 'XAOmniOutlinerColumnList': + ls = self.xa_elem.arrayByApplyingSelector_("topicColumn") or [] + return self._new_element(ls, XAOmniOutlinerColumnList)
+ +
[docs] def undo_enabled(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("undoEnabled") or [])
+ +
[docs] def verticalGridColor(self) -> list[XABase.XAColor]: + ls = self.xa_elem.arrayByApplyingSelector_("verticalGridColor") or [] + return [XABase.XAColor(x) for x in ls]
+ +
[docs] def visible(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("visible") or [])
+ +
[docs] def writes_wrapper(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("writesWrapper") or [])
+ +
[docs] def topiccolumnid(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("topiccolumnid") or [])
+ +
[docs] def notecolumnid(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("notecolumnid") or [])
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAOmniOutlinerDocument(XABase.XAObject, XACloseable, XAPrintable): + """A document in OmniOutliner.app. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the document. + """ + return self.xa_elem.name() + + @property + def modified(self) -> bool: + """Whether the document has been modified since it was last saved. + """ + return self.xa_elem.modified() + + @property + def file(self) -> XABase.XAPath: + """The location of the file on disk, if it has one. + """ + return XABase.XAPath(self.xa_elem.file()) + + @property + def alternate_color(self) -> XABase.XAColor: + """The background color of every other row. + """ + return XABase.XAColor(self.xa_elem.alternateColor()) + + @alternate_color.setter + def alternate_color(self, alternate_color: XABase.XAColor): + self.set_property("alternateColor", alternate_color.xa_elem) + + @property + def background_color(self) -> XABase.XAColor: + """The background color of the document. + """ + return XABase.XAColor(self.xa_elem.alternateColor()) + + @background_color.setter + def background_color(self, background_color: XABase.XAColor): + self.set_property("backgroundColor", background_color.xa_elem) + + @property + def canredo(self) -> bool: + """Whether the document can redo the most recently undone command. + """ + return self.xa_elem.canredo() + + @property + def canundo(self) -> bool: + """Whether the document can undo the most recent command. + """ + return self.xa_elem.canundo() + + @property + def children_are_sections(self) -> bool: + """This is always true for documents. This is here to make it easier to deal with mixed lists of rows and documents. + """ + return self.xa_elem.childrenAreSections() + + @property + def column_title_style(self) -> 'XAOmniOutlinerStyle': + """The style of column titles. + """ + return self._new_element(self.xa_elem.columnTitleStyle(), XAOmniOutlinerStyle) + + @column_title_style.setter + def column_title_style(self, column_title_style: 'XAOmniOutlinerStyle'): + self.set_property("columnTitleStyle", column_title_style.xa_elem) + + @property + def editable(self) -> bool: + """This lets you know whether the document is editable. For example, the release notes document is not editable, so your script may want to avoid trying to edit it. + """ + return self.xa_elem.editable() + + @property + def folded_editing_enabled(self) -> bool: + """Whether folded editing of item and inline note text is enabled. + """ + return self.xa_elem.foldedEditingEnabled() + + @folded_editing_enabled.setter + def folded_editing_enabled(self, folded_editing_enabled: bool): + self.set_property("foldedEditingEnabled", folded_editing_enabled) + + @property + def has_subtopics(self) -> bool: + """Whether the document has any subtopics. + """ + return self.xa_elem.hasSubtopics() + + @property + def horizontal_grid_color(self) -> XABase.XAColor: + """The color of hairline dividers between rows. + """ + return XABase.XAColor(self.xa_elem.horizontalGridColor()) + + @horizontal_grid_color.setter + def horizontal_grid_color(self, horizontal_grid_color: XABase.XAColor): + self.set_property("horizontalGridColor", horizontal_grid_color.xa_elem) + + @property + def id(self) -> str: + """An identifier unique to the document. + """ + return self.xa_elem.id() + + @property + def note_column(self) -> 'XAOmniOutlinerColumn': + """The column of the document that contains the notes for the rows. + """ + return self._new_element(self.xa_elem.noteColumn(), XAOmniOutlinerColumn) + + @property + def note_display(self) -> XAOmniOutlinerApplication.DisplayType: + """Whether notes are displayed inline. + """ + return XAOmniOutlinerApplication.DisplayType(self.xa_elem.noteDisplay()) + + @note_display.setter + def note_display(self, note_display: XAOmniOutlinerApplication.DisplayType): + self.set_property("noteDisplay", note_display.value) + + @property + def save_identifier(self) -> str: + """A string that changes each time the document is saved. If the save identifier is disabled, then this returns 'missing value'. + """ + return self.xa_elem.saveIdentifier() + + @property + def save_identifier_enabled(self) -> bool: + """Controls whether a save identifier will be emitted in the archived document each time the document is saved. This is useful for external tools that need to quickly determine whether the document has changed without relying on the file modification time. + """ + return self.xa_elem.saveIdentifierEnabled() + + @save_identifier_enabled.setter + def save_identifier_enabled(self, save_identifier_enabled: bool): + self.set_property("saveIdentifierEnabled", save_identifier_enabled) + + @property + def sorting_postponed(self) -> bool: + """Whether sorting is currently postponed for the document. + """ + return self.xa_elem.sortingPostponed() + + @sorting_postponed.setter + def sorting_postponed(self, sorting_postponed: bool): + self.set_property("sortingPostponed", sorting_postponed) + + @property + def status_sort_order(self) -> XAOmniOutlinerApplication.SortOrder: + """The sort order used for the status checkbox in the topic column. + """ + return XAOmniOutlinerApplication.SortOrder(self.xa_elem.statusSortOrder()) + + @status_sort_order.setter + def status_sort_order(self, status_sort_order: XAOmniOutlinerApplication.SortOrder): + self.set_property("statusSortOrder", status_sort_order.value) + + @property + def status_visible(self) -> bool: + """Whether the status checkbox is visible in the outline column. + """ + return self.xa_elem.statusVisible() + + @status_visible.setter + def status_visible(self, status_visible: bool): + self.set_property("statusVisible", status_visible) + + @property + def store_compressed(self) -> bool: + """Whether xml should be compressed when saved. + """ + return self.xa_elem.storeCompressed() + + @store_compressed.setter + def store_compressed(self, store_compressed: bool): + self.set_property("storeCompressed", store_compressed) + + @property + def style(self) -> 'XAOmniOutlinerStyle': + """The default style for the document. + """ + return self._new_element(self.xa_elem.style(), XAOmniOutlinerStyle) + + @style.setter + def style(self, style: 'XAOmniOutlinerStyle'): + self.set_property("style", style.xa_elem) + + @property + def title(self) -> str: + """This is the title of the document. + """ + return self.xa_elem.title() + + @title.setter + def title(self, title: str): + self.set_property("title", title) + + @property + def topic_column(self) -> 'XAOmniOutlinerColumn': + """The column of the document that displays the hierarchy of rows. + """ + return self._new_element(self.xa_elem.topicColumn(), XAOmniOutlinerColumn) + + @property + def undo_enabled(self) -> bool: + """Controls whether undo is currently enabled in the document. This should be used very carefully. If it is set to 'false', all previously registered undo events will be removed and any further modifications to the document will not record undo operations. + """ + return self.xa_elem.undoEnabled() + + @undo_enabled.setter + def undo_enabled(self, undo_enabled: bool): + self.set_property("undoEnabled", undo_enabled) + + @property + def vertical_grid_color(self) -> XABase.XAColor: + """The color hairline dividers between columns. + """ + return XABase.XAColor(self.xa_elem.verticalGridColor()) + + @vertical_grid_color.setter + def vertical_grid_color(self, vertical_grid_color: XABase.XAColor): + self.set_property("verticalGridColor", vertical_grid_color.xa_elem) + + @property + def visible(self) -> bool: + """Whether the interface for the document is visible. Note that miniaturized counts as visible. Mostly this isn't useful to third parties right now. + """ + return self.xa_elem.visible() + + @property + def writes_wrapper(self) -> bool: + """If set to true, this indicates that the document will write itself as a file wrapper (folder). + """ + return self.xa_elem.writesWrapper() + + @writes_wrapper.setter + def writes_wrapper(self, writes_wrapper: bool): + self.set_property("writesWrapper", writes_wrapper) + + @property + def topiccolumnid(self) -> str: + """The topic column id for newly created documents. + """ + return self.xa_elem.topiccolumnid() + + @topiccolumnid.setter + def topiccolumnid(self, topiccolumnid: str): + self.set_property("topiccolumnid", topiccolumnid) + + @property + def notescolumnid(self) -> str: + """The note column id for newly created documents. + """ + return self.xa_elem.notescolumndid() + + @notescolumnid.setter + def notescolumnid(self, notescolumnid: str): + self.set_property("notescolumnid", notescolumnid) + +
[docs] def undo(self): + """Undoes the most recent change. + + .. versionadded:: 0.0.9 + """ + self.xa_elem.undo()
+ +
[docs] def redo(self): + """Redoes the most recent undo operation. + + .. versionadded:: 0.0.9 + """ + self.xa_elem.redo()
+ +
[docs] def select(self, items: Union[XABase.XAObject, list[XABase.XAObject], None] = None, extend: bool = False): + """Selects one or more objects. + + :param items: An object or list of objects to select + :type items: Union[XABase.XAObject, list[XABase.XAObject], None] + :param extend: Whether the selection is replaced or extended, defaults to False + :type extend: bool, optional + + .. versionadded:: 0.0.9 + """ + if items is None: + # Select this document + self.xa_elem.selectExtending_(extend) + elif isinstance(items, XABase.XAObject): + # Select one object (can be an XAList) + self.xa_elem.select_extending_(items.xa_elem, extend) + elif isinstance(items, list): + # Select a list of items + items = [x.xa_elem for x in items] + self.xa_elem.select_extending_(items, extend)
+ +
[docs] def add(self, items: Union[XABase.XAObject, list[XABase.XAObject]]): + """Adds objects to the document. + + :param items: The object(s) to add + :type items: Union[XABase.XAObject, list[XABase.XAObject]] + + .. versionadded:: 0.0.9 + """ + if isinstance(items, list): + items = [x.xa_elem for x in items] + self.xa_elem.add_to_(items, self.xa_elem)
+ +
[docs] def add_to(self, destination: XABase.XAObject): + """Adds the document to a location. + + :param destination: The container to which to add the document + :type destination: XABase.XAObject + + .. versionadded:: 0.0.9 + """ + self.xa_elem.addTo_(destination.xa_elem)
+ +
[docs] def remove(self, items: Union[XABase.XAObject, list[XABase.XAObject]]): + """Remove objects from the document. + + :param items: The object(s) to remove + :type items: Union[XABase.XAObject, list[XABase.XAObject]] + + .. versionadded:: 0.0.9 + """ + if isinstance(items, list): + items = [x.xa_elem for x in items] + self.xa_elem.remove_from_(items, self.xa_elem)
+ +
[docs] def remove_from(self, container: XABase.XAObject): + """Adds the document to a location. + + :param container: The container from which to remove the document + :type container: XABase.XAObject + + .. versionadded:: 0.0.9 + """ + self.xa_elem.removeFrom_(container.xa_elem)
+ +
[docs] def expand_all(self, items: Union['XAOmniOutlinerDocument', 'XAOmniOutlinerRow', XAOmniOutlinerDocumentList, 'XAOmniOutlinerRowList', list['XAOmniOutlinerDocument'], list['XAOmniOutlinerRow'], None] = None): + """Expand the entire outline of an object. + + .. versionadded:: 0.0.9 + """ + if items is None: + # Expand the entire document + self.xa_elem.expandAll() + elif isinstance(items, list): + # Expand a list of items + items = [x.xa_elem for x in items] + self.xa_elem.expandAll_(items) + else: + # Expand an XAList of items + self.xa_elem.expandAll_(items.xa_elem)
+ +
[docs] def collapse_all(self, items: Union['XAOmniOutlinerDocument', 'XAOmniOutlinerRow', XAOmniOutlinerDocumentList, 'XAOmniOutlinerRowList', list['XAOmniOutlinerDocument'], list['XAOmniOutlinerRow'], None] = None): + """Collapse the entire outline of an object. + + .. versionadded:: 0.0.9 + """ + if items is None: + # Collapse the entire document + self.xa_elem.collapseAll() + elif isinstance(items, list): + # Collapse a list of items + items = [x.xa_elem for x in items] + self.xa_elem.collapseAll_(items) + else: + # Collapse an XAObject, which can be an XAList + self.xa_elem.collapseAll_(items.xa_elem)
+ +
[docs] def group(self, rows: Union['XAOmniOutlinerRow', 'XAOmniOutlinerRowList', list['XAOmniOutlinerRow'], None] = None): + """Increase the outline level of a list of rows by creating a new parent row for them and moving under that new row. + + :param rows: The rows to group, defaults to None + :type rows: Union[XAOmniOutlinerRow, XAOmniOutlinerRowList, list[XAOmniOutlinerRow], None], optional + + .. versionadded:: 0.0.9 + """ + if rows is None: + # Group the entire document + self.xa_elem.group() + elif isinstance(rows, list): + # Group a list of rows + rows = [x.xa_elem for x in rows] + self.xa_elem.group_(rows) + else: + # Group an XAObject, which can be an XAList + self.xa_elem.group_(rows.xa_elem)
+ +
[docs] def ungroup(self, rows: Union['XAOmniOutlinerRow', 'XAOmniOutlinerRowList', list['XAOmniOutlinerRow'], None] = None): + """Decrease the outline level of all children of a row, moving them left one step. + + :param rows: The rows to ungroup, defaults to None + :type rows: Union[XAOmniOutlinerRow, XAOmniOutlinerRowList, list[XAOmniOutlinerRow], None], optional + + .. versionadded:: 0.0.9 + """ + if rows is None: + # Ungroup the entire document + self.xa_elem.ungroup() + elif isinstance(rows, list): + # Ungroup a list of rows + rows = [x.xa_elem for x in rows] + self.xa_elem.ungroup_(rows) + else: + # Ungroup an XAObject, which can be an XAList + self.xa_elem.ungroup_(rows.xa_elem)
+ +
[docs] def hoist(self, rows: Union['XAOmniOutlinerRow', 'XAOmniOutlinerRowList', list['XAOmniOutlinerRow'], None] = None): + """Hide all rows in the outline, except for the descendants of the row passed to this command. + + :param rows: The rows to hoist, defaults to None + :type rows: Union[XAOmniOutlinerRow, XAOmniOutlinerRowList, list[XAOmniOutlinerRow], None], optional + + .. versionadded:: 0.0.9 + """ + if rows is None: + # Hoist the entire document + self.xa_elem.hoist() + elif isinstance(rows, list): + # Hoist a list of rows + rows = [x.xa_elem for x in rows] + self.xa_elem.hoist_(rows) + else: + # Hoist an XAObject, which can be an XAList + self.xa_elem.hoist_(rows.xa_elem)
+ +
[docs] def unhoist(self, documents: Union['XAOmniOutlinerDocument', XAOmniOutlinerDocumentList, list['XAOmniOutlinerDocument'], None] = None, unhoist_all: bool = False): + """Show rows hidden in the last hoist operation on a document. + + :param documents: The documents to unhoist, defaults to None + :type documents: Union[XAOmniOutlinerDocument, XAOmniOutlinerDocumentList, list[XAOmniOutlinerDocument], None], optional + :param unhoist_all: Reverse just the last Hoist operation on the outline, or show items hidden by all previous Hoist operations, defaults to False + :type unhoist_all: bool, optional + + .. versionadded:: 0.0.9 + """ + if documents is None: + # Unhoist the current document + self.xa_elem.unhoistUnhoistingAll_(unhoist_all) + elif isinstance(documents, list): + # Unhoist a list of documents + documents = [x.xa_elem for x in documents] + self.xa_elem.unhoist_unhoistingAll_(documents, unhoist_all) + else: + # Unhoist an XAObject, which can be an XAList + self.xa_elem.unhoist_unhoistingAll_(documents, unhoist_all)
+ +
[docs] def pbcopy(self, items: list[XABase.XAObject], type: Union[str, list[str], None] = None, clipboard_name: Union[str, None] = None): + """Copies one or more nodes to the clipboard. + + :param items: The list of items to copy to the clipboard + :type items: list[XABase.XAObject] + :param type: The list of type identifier to use when copying the trees. If omitted, all writable clipboard types are used, defaults to None + :type type: Union[str, list[str], None], optional + :param clipboard_name: The name of the clipboard to copy to, defaults to None + :type clipboard_name: Union[str, None], optional + + .. versionadded:: 0.0.9 + """ + self.xa_elem.pbcopyItems_as_to_(items, type, clipboard_name)
+ +
[docs] def pbpaste(self, location: XABase.XAObject, clipboard_name: Union[str, None] = None): + """Pastes nodes from the clipboard. + + :param location: The location at which to paste the nodes + :type location: XABase.XAObject + :param clipboard_name: The name of the clipboard to paste from, defaults to None + :type clipboard_name: Union[str, None], optional + + .. versionadded:: 0.0.9 + """ + self.xa_elem.pbpasteAt_from_(location, clipboard_name)
+ +
[docs] def export(self, file: Union[str, XABase.XAPath], type: Union[str, None] = None): + """Exports the document to the specified location and file type. Unlike the "save" command, this will never set the name of the document or change its modified flag. + + :param file: Where to place the exported document + :type file: Union[str, XABase.XAPath] + :param type: The name of a writable file type to use when writing the document. Defaults to the appropriate type for the path extension on the export destination, defaults to None + :type type: Union[str, None], optional + + .. versionadded:: 0.0.9 + """ + if isinstance(file, str): + file = XABase.XAPath(file) + self.xa_elem.exportTo_as_(file.xa_elem, type)
+ +
[docs] def selected_columns(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerSelectedColumnList': + """Returns a list of selected columns, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.selectedColumns(), XAOmniOutlinerSelectedColumnList, filter)
+ +
[docs] def sections(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerSectionList': + """Returns a list of sections, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.sections(), XAOmniOutlinerSectionList, filter)
+ +
[docs] def selected_rows(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerSelectedRowList': + """Returns a list of selected rows, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.selectedRows(), XAOmniOutlinerSelectedRowList, filter)
+ +
[docs] def children(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerChildList': + """Returns a list of children, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.children(), XAOmniOutlinerChildList, filter)
+ +
[docs] def columns(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerColumnList': + """Returns a list of columns, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.columns(), XAOmniOutlinerColumnList, filter)
+ +
[docs] def rows(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerRowList': + """Returns a list of rows, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.rows(), XAOmniOutlinerRowList, filter)
+ +
[docs] def leaves(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerLeafList': + """Returns a list of leaves, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.leaves(), XAOmniOutlinerLeafList, filter)
+ +
[docs] def level_styles(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerLevelStyleList': + """Returns a list of level styles, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.levelStyles(), XAOmniOutlinerLevelStyleList, filter)
+ +
[docs] def named_styles(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerNamedStyleList': + """Returns a list of named styles, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.namedStyles(), XAOmniOutlinerNamedStyleList, filter)
+ + + + +
[docs]class XAOmniOutlinerDocumentTypeList(XABase.XAList): + """A wrapper around lists of document types that employs fast enumeration techniques. + + All properties of document types can be called as methods on the wrapped list, returning a list containing each types's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAOmniOutlinerDocumentType + super().__init__(properties, obj_class, filter)
+ +
[docs]class XAOmniOutlinerDocumentType(XABase.XAObject): + """A document type in OmniOutliner.app. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def uti(self) -> str: + """The Uniform Type Identifier for this document type. + """ + return self.xa_elem.uti() + + @property + def display_name(self) -> str: + """A user-presentable display name for this document type. + """ + return self.xa_elem.displayName() + + @property + def file_extensions(self) -> list[str]: + """File extensions for this document type. + """ + return self.xa_elem.fileExtensions()
+ + + + +
[docs]class XAOmniOutlinerReadableDocumentTypeList(XAOmniOutlinerDocumentTypeList): + """A wrapper around lists of readable document types that employs fast enumeration techniques. + + All properties of document types can be called as methods on the wrapped list, returning a list containing each types's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAOmniOutlinerReadableDocumentType)
+ +
[docs]class XAOmniOutlinerReadableDocumentType(XAOmniOutlinerDocumentType): + """A readable document type in OmniOutliner.app. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAOmniOutlinerWritableDocumentTypeList(XAOmniOutlinerDocumentTypeList): + """A wrapper around lists of writable document types that employs fast enumeration techniques. + + All properties of document types can be called as methods on the wrapped list, returning a list containing each types's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAOmniOutlinerReadableDocumentType)
+ +
[docs]class XAOmniOutlinerWritableDocumentType(XAOmniOutlinerDocumentType): + """A writable document type in OmniOutliner.app. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAOmniOutlinerEnumerationList(XABase.XAList): + """A wrapper around lists of enumerations that employs fast enumeration techniques. + + All properties of enumerations can be called as methods on the wrapped list, returning a list containing each enumeration's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAOmniOutlinerEnumeration, filter)
+ +
[docs]class XAOmniOutlinerEnumeration(XABase.XAObject): + """An enumeration in OmniOutliner.app. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """An identifier for the enumeration that is unique within the column. + """ + return self.xa_elem.id() + + @property + def index(self) -> str: + """The index of the enumeration member in the column. + """ + return self.xa_elem.index() + + @index.setter + def index(self, index: int): + self.set_property("index", index) + + @property + def name(self) -> str: + """The name of the enumeration. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property("name", name) + +
[docs] def move_to(self, destination: 'XAOmniOutlinerColumn'): + """Moves the enumeration to a new column. + + :param destination: The column to move the enumeration to + :type destination: XAOmniOutlinerColumn + + .. versionadded:: 0.0.9 + """ + self.xa_elem.moveTo_(destination.xa_elem)
+ + + + +
[docs]class XAOmniOutlinerColumnList(XABase.XAList): + """A wrapper around lists of OmniOutliner columns that employs fast enumeration techniques. + + All properties of columns can be called as methods on the wrapped list, returning a list containing each column's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAOmniOutlinerColumn + super().__init__(properties, obj_class, filter)
+ +
[docs]class XAOmniOutlinerColumn(XABase.XAObject): + """A column in OmniOutliner.app. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def alignment(self) -> XAOmniOutlinerApplication.Alignment: + """Default alignment for cells of the column. + """ + return XAOmniOutlinerApplication.Alignment(self.xa_elem.alignment()) + + @alignment.setter + def alignment(self, alignment: XAOmniOutlinerApplication.Alignment): + self.set_property("alignment", alignment.value) + + @property + def background_color(self) -> XABase.XAColor: + """The background color of the column. + """ + return XABase.XAColor(self.xa_elem.backgroundColor()) + + @background_color.setter + def background_color(self, background_color: XABase.XAColor): + self.set_property("backgroundColor", background_color.xa_elem) + + @property + def column_style(self) -> 'XAOmniOutlinerStyle': + """The style of the column. This is used as the default style for values in the column (but is overriden by any style attributes defined on rows). + """ + return self._new_element(self.xa_elem.columnStyle(), XAOmniOutlinerStyle) + + @column_style.setter + def column_style(self, column_style: 'XAOmniOutlinerStyle'): + self.set_property("columnStyle", column_style.xa_elem) + + @property + def document(self) -> XAOmniOutlinerDocument: + """The document containing the column. + """ + return self._new_element(self.xa_elem.document(), XAOmniOutlinerDocument) + + @document.setter + def document(self, document: XAOmniOutlinerDocument): + self.set_property("document", document.xa_elem) + + @property + def column_format(self) -> 'XAOmniOutlinerColumFormat': + """All aspects of the column's format. + """ + return self._new_element(self.xa_elem.columnFormat(), XAOmniOutlinerColumFormat) + + @column_format.setter + def column_format(self, column_format: 'XAOmniOutlinerColumFormat'): + self.set_property("columnFormat", column_format.xa_elem) + + @property + def format_string(self) -> str: + """The format string for formatted columns. Depends on the type of the column. + """ + return self.xa_elem.formatString() + + @format_string.setter + def format_string(self, format_string: str): + self.set_property("formatString", format_string) + + @property + def id(self) -> str: + """An identifier for the column that is unique within the document. + """ + return self.xa_elem.id() + + @property + def index(self) -> int: + """The index of the column in the document. This includes hidden columns. + """ + return self.xa_elem.index() + + @index.setter + def index(self, index: int): + self.set_property("index", index) + + @property + def name(self) -> str: + """The name of the column. This is currently the same as the title, but in the future the title may be styled while the name will always be a plain string. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property("name", name) + + @property + def sort_order(self) -> XAOmniOutlinerApplication.SortOrder: + """The sort order of the column. + """ + return XAOmniOutlinerApplication.SortOrder(self.xa_elem.sortOrder()) + + @sort_order.setter + def sort_order(self, sort_order: XAOmniOutlinerApplication.SortOrder): + self.set_property("sortOrder", sort_order.value) + + @property + def summary_type(self) -> XAOmniOutlinerApplication.ColumnSummaryType: + """This is the summary type of the column. + """ + return XAOmniOutlinerApplication.SortOrder(self.xa_elem.summaryType()) + + @summary_type.setter + def summary_type(self, summary_type: XAOmniOutlinerApplication.ColumnSummaryType): + self.set_property("summaryType", summary_type.value) + + @property + def title(self) -> str: + """The title of the column. + """ + return self.xa_elem.title() + + @title.setter + def title(self, title: str): + self.set_property("title", title) + + @property + def column_type(self) -> XAOmniOutlinerApplication.ColumnType: + """This is the type of the column. + """ + return XAOmniOutlinerApplication.ColumnType(self.xa_elem.columnType()) + + @column_type.setter + def column_type(self, column_type: XAOmniOutlinerApplication.ColumnType): + self.set_property("columnType", column_type.value) + + @property + def width(self) -> int: + """The width of the column in pixels. + """ + return self.xa_elem.width() + + @width.setter + def width(self, width: int): + self.set_property("width", width) + + @property + def visible(self) -> bool: + """Whether the column is visible or not. + """ + return self.xa_elem.visible() + + @visible.setter + def visible(self, visible: bool): + self.set_property("visible", visible) + +
[docs] def move_to(self, destination: XAOmniOutlinerDocument): + """Moves the column to the specified document. + + :param destination: The document to move the column to + :type destination: XAOmniOutlinerDocument + + .. versionadded:: 0.0.9 + """ + self.xa_elem.moveTo_(destination.xa_elem)
+ +
[docs] def enumerations(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerEnumerationList': + """Returns a list of enumerations, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.enumerations(), XAOmniOutlinerEnumerationList, filter)
+ + + + +
[docs]class XAOmniOutlinerSelectedColumnList(XAOmniOutlinerColumnList): + """A wrapper around lists of selected columns that employs fast enumeration techniques. + + All properties of columns can be called as methods on the wrapped list, returning a list containing each column's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAOmniOutlinerSelectedColumn)
+ +
[docs]class XAOmniOutlinerSelectedColumn(XABase.XAObject): + """A style object in OmniOutliner.app. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAOmniOutlinerColumFormat(XABase.XAObject): + """A column format in OmniOutliner.app. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def format(self) -> str: + """The ICU format string. + """ + return self.xa_elem.format() + + @format.setter + def format(self, format: str): + self.set_property("format", format) + + @property + def id(self) -> str: + """The identifier for built-in formats. + """ + return self.xa_elem.id() + + @property + def calendar(self) -> str: + """The calendar to use for date formats. + """ + return self.xa_elem.calendar() + + @calendar.setter + def calendar(self, calendar: str): + self.set_property("calendar", calendar) + + @property + def locale(self) -> str: + """The locale identifier (such as "en_US" or "ja_JP") for formats. + """ + return self.xa_elem.locale() + + @locale.setter + def locale(self, locale: str): + self.set_property("locale", locale) + + @property + def timezone(self) -> str: + """The time zone to use for date formats. + """ + return self.xa_elem.timezone() + + @timezone.setter + def timezone(self, timezone: str): + self.set_property("timezone", timezone) + + @property + def date_style(self) -> XAOmniOutlinerApplication.FormatStyle: + """The style of date format to use, based off the user's preference. + """ + return XAOmniOutlinerApplication.FormatStyle(self.xa_elem.dateStyle()) + + @date_style.setter + def date_style(self, date_style: XAOmniOutlinerApplication.FormatStyle): + self.set_property("dateStyle", date_style.value) + + @property + def time_style(self) -> XAOmniOutlinerApplication.FormatStyle: + """The style of time format to use, based off the user's preference. + """ + return XAOmniOutlinerApplication.FormatStyle(self.xa_elem.timeStyle()) + + @time_style.setter + def time_style(self, time_style: XAOmniOutlinerApplication.FormatStyle): + self.set_property("timeStyle", time_style.value) + + @property + def currency(self): + """The ISO currency identifier (such as "USD" or "JPY") for columns with a currency format. Must be used with an id of "currency. + """ + return self.xa_elem.currency() + + @currency.setter + def currency(self, currency: str): + self.set_property("currency", currency)
+ + + + +
[docs]class XAOmniOutlinerRowList(XABase.XAList): + """A wrapper around lists of rows that employs fast enumeration techniques. + + All properties of rows can be called as methods on the wrapped list, returning a list containing each row's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAOmniOutlinerRow + super().__init__(properties, obj_class, filter)
+ +
[docs]class XAOmniOutlinerRow(XABase.XAObject): + """A row object in OmniOutliner.app. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def children_are_sections(self) -> bool: + """Whether the row's children are treated as separate sections. + """ + return self.xa_elem.childrenAreSections() + + @children_are_sections.setter + def children_are_sections(self, children_are_sections: bool): + self.set_property("childrenAreSections", children_are_sections) + + @property + def document(self) -> XAOmniOutlinerDocument: + """The document containing the row. + """ + return self._new_element(self.xa_elem.document(), XAOmniOutlinerDocument) + + @property + def expanded(self) -> bool: + """Whether the row's subtopics are visible. + """ + return self.xa_elem.expanded() + + @expanded.setter + def expanded(self, expanded: bool): + self.set_property("expanded", expanded) + + @property + def has_subtopics(self) -> bool: + """Whether the row has any subtopics. + """ + return self.xa_elem.hasSubtopics() + + @property + def id(self) -> str: + """An identifier for the row that is unique within the document. + """ + return self.xa_elem.id() + + @property + def name(self) -> str: + """The name of the row (just a plain string version of the topic). + """ + return self.xa_elem.name() + + @property + def index(self) -> int: + """The index of the row among its siblings. + """ + return self.xa_elem.index() + + @index.setter + def index(self, index: int): + self.set_property("index", index) + + @property + def level(self) -> int: + """How 'deep' this item is. Top-level rows are level 1, subtopics of those rows are level 2, and so on. + """ + return self.xa_elem.level() + + @property + def note(self) -> XAOmniOutlinerRichText: + """Contents of the note column. + """ + return self._new_element(self.xa_elem.note(), XAOmniOutlinerRichText) + + @note.setter + def note(self, note: XAOmniOutlinerRichText): + self.set_property("note", note.xa_elem) + + @property + def note_cell(self) -> 'XAOmniOutlinerCell': + """The cell for the note column in the row. + """ + return self._new_element(self.xa_elem.noteCell(), XAOmniOutlinerCell) + + @note_cell.setter + def note_cell(self, note_cell: 'XAOmniOutlinerCell'): + self.set_property("noteCell", note_cell.xa_elem) + + @property + def note_expanded(self) -> bool: + """Whether inline note is currently displayed. + """ + return self.xa_elem.noteExpanded() + + @note_expanded.setter + def note_expanded(self, note_expanded: bool): + self.set_property("noteExpanded", note_expanded) + + @property + def parent(self) -> 'XAOmniOutlinerRow': + """The row that contains this row. + """ + return self._new_element(self.xa_elem.parent(), XAOmniOutlinerRow) + + @property + def selected(self) -> bool: + """This is true if the row is selected. Note that attempts to set this while the row is not visible (collapsed parent, hoisted root isn't an ancestor, etc.) will silently do nothing. + """ + return self.xa_elem.selected() + + @selected.setter + def selected(self, selected: bool): + self.set_property("selected", selected) + + @property + def state(self) -> XAOmniOutlinerApplication.CheckboxState: + """The state of the check box for this row. + """ + return XAOmniOutlinerApplication.CheckboxState(self.xa_elem.state()) + + @state.setter + def state(self, state: XAOmniOutlinerApplication.CheckboxState): + self.set_property("state", state.value) + + @property + def style(self) -> 'XAOmniOutlinerStyle': + """The style of the row. + """ + return self._new_element(self.xa_elem.style(), XAOmniOutlinerStyle) + + @style.setter + def style(self, style: 'XAOmniOutlinerStyle'): + self.set_property("style", style.xa_elem) + + @property + def topic(self) -> XAOmniOutlinerRichText: + """Contents of the outline column. + """ + return self._new_element(self.xa_elem.topic(), XAOmniOutlinerRichText) + + @topic.setter + def topic(self, topic: XAOmniOutlinerRichText): + self.set_property("topic", topic.xa_elem) + + @property + def topic_cell(self) -> 'XAOmniOutlinerCell': + """The cell for the topic column in the row. + """ + return self._new_element(self.xa_elem.topicCell(), XAOmniOutlinerCell) + + @property + def visible(self) -> bool: + """Whether this row is in the outline view. It must be a descendent of the current root item taking hoisting into account, with no collapsed ancestors below the current root. Hoisted rows are visible in the outline and so are considered visible. + """ + return self.xa_elem.visible() + +
[docs] def expand_all(self, items: Union['XAOmniOutlinerRow', list['XAOmniOutlinerRow'], XAOmniOutlinerRowList, None] = None): + """Expands a row or list of rows. + + :param items: The row(s) to expand, defaults to None + :type items: Union[XAOmniOutlinerRow, list[XAOmniOutlinerRow], XAOmniOutlinerRowList, None], optional + + .. versionadded:: 0.0.9 + """ + if items is None: + # Expand all items in the row + self.xa_elem.expandAll() + elif isinstance(items, list): + # Expand a list of rows + items = [x.xa_elem for x in items] + self.xa_elem.expandAll_(items)
+ +
[docs] def collapse_all(self, items: Union['XAOmniOutlinerRow', list['XAOmniOutlinerRow'], XAOmniOutlinerRowList, None] = None): + """Collapses a row or list of rows. + + :param items: The row(s) to collapse, defaults to None + :type items: Union[XAOmniOutlinerRow, list[XAOmniOutlinerRow], XAOmniOutlinerRowList, None], optional + + .. versionadded:: 0.0.9 + """ + if items is None: + # Collapse all items in the row + self.xa_elem.collapseAll() + elif isinstance(items, list): + # Collapse a list of rows + items = [x.xa_elem for x in items] + self.xa_elem.collapseAll_(items)
+ +
[docs] def indent(self): + """Indents the row. + + .. versionadded:: 0.0.9 + """ + self.xa_elem.indent()
+ +
[docs] def outdent(self): + """Outdents the row. + + .. versionadded:: 0.0.9 + """ + self.xa_elem.outdent()
+ +
[docs] def add(self, items: Union[XABase.XAObject, list[XABase.XAObject]]): + """Adds objects to the row. + + :param items: The object(s) to add + :type items: Union[XABase.XAObject, list[XABase.XAObject]] + + .. versionadded:: 0.0.9 + """ + if isinstance(items, list): + items = [x.xa_elem for x in items] + self.xa_elem.add_to_(items, self.xa_elem)
+ +
[docs] def add_to(self, destination: XABase.XAObject): + """Adds the row to a location. + + :param destination: The container to which to add the row + :type destination: XABase.XAObject + + .. versionadded:: 0.0.9 + """ + self.xa_elem.addTo_(destination.xa_elem)
+ +
[docs] def remove(self, items: Union[XABase.XAObject, list[XABase.XAObject]]): + """Remove objects from the row. + + :param items: The object(s) to remove + :type items: Union[XABase.XAObject, list[XABase.XAObject]] + + .. versionadded:: 0.0.9 + """ + if isinstance(items, list): + items = [x.xa_elem for x in items] + self.xa_elem.remove_from_(items, self.xa_elem)
+ +
[docs] def remove_from(self, container: XABase.XAObject): + """Removes the row from a location. + + :param container: The container from which to remove the row + :type container: XABase.XAObject + + .. versionadded:: 0.0.9 + """ + self.xa_elem.removeFrom_(container.xa_elem)
+ +
[docs] def group(self, rows: Union['XAOmniOutlinerRow', 'XAOmniOutlinerRowList', list['XAOmniOutlinerRow'], None] = None): + """Increase the outline level of a list of rows by creating a new parent row for them and moving under that new row. + + :param rows: The rows to group, defaults to None + :type rows: Union[XAOmniOutlinerRow, XAOmniOutlinerRowList, list[XAOmniOutlinerRow], None], optional + + .. versionadded:: 0.0.9 + """ + if rows is None: + # Group the entire row + self.xa_elem.group() + elif isinstance(rows, list): + # Group a list of rows + rows = [x.xa_elem for x in rows] + self.xa_elem.group_(rows) + else: + # Group an XAObject, which can be an XAList + self.xa_elem.group_(rows.xa_elem)
+ +
[docs] def ungroup(self, rows: Union['XAOmniOutlinerRow', 'XAOmniOutlinerRowList', list['XAOmniOutlinerRow'], None] = None): + """Decrease the outline level of all children of a row, moving them left one step. + + :param rows: The rows to ungroup, defaults to None + :type rows: Union[XAOmniOutlinerRow, XAOmniOutlinerRowList, list[XAOmniOutlinerRow], None], optional + + .. versionadded:: 0.0.9 + """ + if rows is None: + # Ungroup the entire row + self.xa_elem.ungroup() + elif isinstance(rows, list): + # Ungroup a list of rows + rows = [x.xa_elem for x in rows] + self.xa_elem.ungroup_(rows) + else: + # Ungroup an XAObject, which can be an XAList + self.xa_elem.ungroup_(rows.xa_elem)
+ +
[docs] def hoist(self, rows: Union['XAOmniOutlinerRow', 'XAOmniOutlinerRowList', list['XAOmniOutlinerRow'], None] = None): + """Hide all rows in the outline, except for the descendants of the row passed to this command. + + :param rows: The rows to hoist, defaults to None + :type rows: Union[XAOmniOutlinerRow, XAOmniOutlinerRowList, list[XAOmniOutlinerRow], None], optional + + .. versionadded:: 0.0.9 + """ + if rows is None: + # Hoist the entire row + self.xa_elem.hoist() + elif isinstance(rows, list): + # Hoist a list of rows + rows = [x.xa_elem for x in rows] + self.xa_elem.hoist_(rows) + else: + # Hoist an XAObject, which can be an XAList + self.xa_elem.hoist_(rows.xa_elem)
+ +
[docs] def pbcopy(self, items: list[XABase.XAObject], type: Union[str, list[str], None] = None, clipboard_name: Union[str, None] = None): + """Copies one or more nodes to the clipboard. + + :param items: The list of items to copy to the clipboard + :type items: list[XABase.XAObject] + :param type: The list of type identifier to use when copying the trees. If omitted, all writable clipboard types are used, defaults to None + :type type: Union[str, list[str], None], optional + :param clipboard_name: The name of the clipboard to copy to, defaults to None + :type clipboard_name: Union[str, None], optional + + .. versionadded:: 0.0.9 + """ + self.xa_elem.pbcopyItems_as_to_(items, type, clipboard_name)
+ +
[docs] def pbpaste(self, location: XABase.XAObject, clipboard_name: Union[str, None] = None): + """Pastes nodes from the clipboard. + + :param location: The location at which to paste the nodes + :type location: XABase.XAObject + :param clipboard_name: The name of the clipboard to paste from, defaults to None + :type clipboard_name: Union[str, None], optional + + .. versionadded:: 0.0.9 + """ + self.xa_elem.pbpasteAt_from_(location, clipboard_name)
+ +
[docs] def import_file(self, file: Union[str, XABase.XAPath]): + """Imports a file, as rows, to a specified location. Returns the list of imported rows. + + :param file: The file to import + :type file: Union[str, XABase.XAPath] + + .. versionadded:: 0.0.9 + """ + if isinstance(file, str): + file = XABase.XAPath(file) + self.xa_elem.import_to_(file.xa_elem, self.xa_elem)
+ +
[docs] def ancestors(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerAncestorList': + """Returns a list of ancestors, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.ancestors(), XAOmniOutlinerAncestorList, filter)
+ +
[docs] def cells(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerCellList': + """Returns a list of cells, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.cells(), XAOmniOutlinerCellList, filter)
+ +
[docs] def rows(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerRowList': + """Returns a list of rows, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.rows(), XAOmniOutlinerRowList, filter)
+ +
[docs] def children(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerChildList': + """Returns a list of children, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.children(), XAOmniOutlinerChildList, filter)
+ +
[docs] def conduit_setting_domains(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerConduitSettingDomainList': + """Returns a list of conduit setting domains, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.conduitSettingDomains(), XAOmniOutlinerConduitSettingDomainList, filter)
+ +
[docs] def following_siblings(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerFollowingSiblingList': + """Returns a list of following siblings, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.followingSiblings(), XAOmniOutlinerFollowingSiblingList, filter)
+ +
[docs] def leaves(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerLeafList': + """Returns a list of leaves, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.leaves(), XAOmniOutlinerLeafList, filter)
+ +
[docs] def paragraphs(self, filter: Union[dict, None] = None) -> 'XABase.XAParagraphList': + """Returns a list of paragraphs, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.paragraphs(), XABase.XAParagraphList, filter)
+ +
[docs] def rowpath(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerPathComponentList': + """Returns a row path, or list of path components as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.rowpath(), XAOmniOutlinerPathComponentList, filter)
+ +
[docs] def preceding_siblings(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerPrecedingSiblingList': + """Returns a list of preceding siblings, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.precedingSiblings(), XAOmniOutlinerPrecedingSiblingList, filter)
+ +
[docs] def sections(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerSectionList': + """Returns a list of sections, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.sections(), XAOmniOutlinerSectionList, filter)
+ +
[docs] def selected_rows(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerSelectedRowList': + """Returns a list of selected rows, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.selectedRows(), XAOmniOutlinerSelectedRowList, filter)
+ + + + +
[docs]class XAOmniOutlinerChildList(XAOmniOutlinerRowList): + """A wrapper around lists of child rows that employs fast enumeration techniques. + + All properties of child rows can be called as methods on the wrapped list, returning a list containing each child row's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAOmniOutlinerChild)
+ +
[docs]class XAOmniOutlinerChild(XAOmniOutlinerRow): + """For a document, the top level rows. For a row, the rows one level below this one. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAOmniOutlinerAncestorList(XAOmniOutlinerRowList): + """A wrapper around lists of ancestor rows that employs fast enumeration techniques. + + All properties of ancestor rows can be called as methods on the wrapped list, returning a list containing each ancestor row's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAOmniOutlinerAncestor)
+ +
[docs]class XAOmniOutlinerAncestor(XAOmniOutlinerRow): + """The rows that this row is contained by, from the top level on down. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAOmniOutlinerSectionList(XAOmniOutlinerRowList): + """A wrapper around lists of sections that employs fast enumeration techniques. + + All properties of sections can be called as methods on the wrapped list, returning a list containing each section's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAOmniOutlinerSection)
+ +
[docs]class XAOmniOutlinerSection(XAOmniOutlinerRow): + """The sections underneath the document or row. Note that a row is not a section of itself, so if you access this on a single row, an empty list will be returned. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAOmniOutlinerSelectedRowList(XAOmniOutlinerRowList): + """A wrapper around lists of selected rows that employs fast enumeration techniques. + + All properties of selected rows can be called as methods on the wrapped list, returning a list containing each selected row's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAOmniOutlinerSelectedRow)
+ +
[docs]class XAOmniOutlinerSelectedRow(XAOmniOutlinerRow): + """The sections underneath the document or row. Note that a row is not a section of itself, so if you access this on a single row, an empty list will be returned. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAOmniOutlinerLeafList(XAOmniOutlinerRowList): + """A wrapper around lists of leaf rows that employs fast enumeration techniques. + + All properties of leaf rows can be called as methods on the wrapped list, returning a list containing each leaf row's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAOmniOutlinerLeaf)
+ +
[docs]class XAOmniOutlinerLeaf(XAOmniOutlinerRow): + """The leaf rows underneath a document or row. Note that a row is not its own leaf, so if you access this on a single row with no children, that row will not be returned (use the command 'bottom rows' for that). + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAOmniOutlinerFollowingSiblingList(XAOmniOutlinerRowList): + """A wrapper around lists of following siblings that employs fast enumeration techniques. + + All properties of following siblings can be called as methods on the wrapped list, returning a list containing each siblings's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAOmniOutlinerFollowingSibling)
+ +
[docs]class XAOmniOutlinerFollowingSibling(XAOmniOutlinerRow): + """The row which follows this row. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAOmniOutlinerPrecedingSiblingList(XAOmniOutlinerRowList): + """A wrapper around lists of preceding siblings that employs fast enumeration techniques. + + All properties of preceding siblings can be called as methods on the wrapped list, returning a list containing each siblings's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAOmniOutlinerPrecedingSibling)
+ +
[docs]class XAOmniOutlinerPrecedingSibling(XAOmniOutlinerRow): + """The row which precedes this row. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + + +
[docs]class XAOmniOutlinerPathComponentList(XAOmniOutlinerRowList): + """A wrapper around lists of path components that employs fast enumeration techniques. + + All properties of path components can be called as methods on the wrapped list, returning a list containing each path component's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAOmniOutlinerPathComponent)
+ +
[docs]class XAOmniOutlinerPathComponent(XAOmniOutlinerRow): + """A list of rows up to and including the given row. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAOmniOutlinerCellList(XABase.XAList): + """A wrapper around lists of cells that employs fast enumeration techniques. + + All properties of cells can be called as methods on the wrapped list, returning a list containing each cell's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAOmniOutlinerCell, filter)
+ +
[docs]class XAOmniOutlinerCell(XABase.XAObject): + """A cell object in OmniOutliner.app. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def column(self) -> XAOmniOutlinerColumn: + """Column that this cell is in. + """ + return self._new_element(self.xa_elem.column(), XAOmniOutlinerColumn) + + @column.setter + def column(self, column: XAOmniOutlinerColumn): + self.set_property("column", column.xa_elem) + + @property + def state(self) -> XAOmniOutlinerApplication.CheckboxState: + """State of the cell. This is only valid on checkbox columns. + """ + return XAOmniOutlinerApplication.CheckboxState(self.xa_elem.state()) + + @state.setter + def state(self, state: XAOmniOutlinerApplication.CheckboxState): + self.set_property("state", state.value) + + @property + def id(self) -> str: + """The unique identifier of the cell within the containing row. This identifier is the same as the identifier of the cell's column. + """ + return self.xa_elem.id() + + @property + def text(self) -> XAOmniOutlinerRichText: + """Text of the cell. This is only valid on text columns. + """ + return self._new_element(self.xa_elem.text(), XAOmniOutlinerRichText) + + @text.setter + def text(self, text: XAOmniOutlinerRichText): + self.set_property("text", text.xa_elem) + + @property + def value(self) -> Union[str, datetime, int, float, 'XAOmniOutlinerEnumeration', XAOmniOutlinerApplication.CheckboxState]: + """Contents of the cell, whatever the type. + """ + # TODO + return self.xa_elem.value() + + @value.setter + def value(self, value: Union[str, datetime, int, float, 'XAOmniOutlinerEnumeration', XAOmniOutlinerApplication.CheckboxState]): + # TODO + self.set_property("value", value) + + @property + def row(self) -> XAOmniOutlinerRow: + """Row that this cell is in. + """ + self._new_element(self.xa_elem.row(), XAOmniOutlinerRow) + + @property + def name(self) -> str: + """The name of the cell. This is the same as the name of the cell's column. + """ + return self.xa_elem.name() + +
[docs] def replace(self, replacement: str, regex_to_find: Union[str, None] = None, string_to_find: Union[str, None] = None): + """Replaces the contents of the cell. + + :param replacement: The replacement string + :type replacement: str + :param regex_to_find: The regular expression to find and replace, defaults to None + :type regex_to_find: Union[str, None], optional + :param string_to_find: The string to find and replace, defaults to None + :type string_to_find: Union[str, None], optional + + .. versionadded:: 0.0.9 + """ + self.xa_elem.replaceMatchingRegularExpression_replacement_string_(regex_to_find, replacement, string_to_find)
+ + + + +
[docs]class XAOmniOutlinerStyleList(XABase.XAList): + """A wrapper around lists of OmniOutliner styles that employs fast enumeration techniques. + + All properties of styles can be called as methods on the wrapped list, returning a list containing each style's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAOmniOutlinerStyle + super().__init__(properties, obj_class, filter)
+ +
[docs]class XAOmniOutlinerStyle(XABase.XAObject): + """A style object in OmniOutliner.app. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def container(self) -> XABase.XAObject: + """The object owning the style. + """ + container = self.xa_elem.container() + if hasattr(container, "alternateColor"): + return self._new_element(container, XAOmniOutlinerDocument) + # TODO -- other types! + + @property + def font(self) -> str: + """The name of the font of the style. + """ + return self.xa_elem.font() + + @font.setter + def font(self, font: str): + self.set_property("font", font) + +
[docs] def named_styles(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerNamedStyleList': + """Returns a list of named styles, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.namedStyles(), XAOmniOutlinerNamedStyleList, filter)
+ +
[docs] def attributes(self, filter: Union[dict, None] = None) -> 'XAOmniOutlinerAttributeList': + """Returns a list of attributes, as PyXA objects, matching the given filter. + + .. versionadded:: 0.0.9 + """ + return self._new_element(self.xa_elem.attributes(), XAOmniOutlinerAttributeList, filter)
+ + + + +
[docs]class XAOmniOutlinerLevelStyleList(XAOmniOutlinerStyleList): + """A wrapper around lists of level styles that employs fast enumeration techniques. + + All properties of level styles can be called as methods on the wrapped list, returning a list containing each style's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAOmniOutlinerLevelStyle)
+ +
[docs]class XAOmniOutlinerLevelStyle(XABase.XAObject): + """A level style object in a document. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAOmniOutlinerNamedStyleList(XAOmniOutlinerStyleList): + """A wrapper around lists of named styles that employs fast enumeration techniques. + + All properties of named styles can be called as methods on the wrapped list, returning a list containing each styles's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAOmniOutlinerNamedStyleList)
+ +
[docs]class XAOmniOutlinerNamedStyle(XAOmniOutlinerStyle): + """A named style object. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """An identifier for the named style that is unique within its document. Currently this identifier is not persistent between two different sessions of editing the document. + """ + return self.xa_elem.id() + + @property + def name(self) -> str: + """The name of the style. Must be unique within the containing document. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property("name", name)
+ + + + +
[docs]class XAOmniOutlinerAttributeList(XABase.XAList): + """A wrapper around lists of attributes that employs fast enumeration techniques. + + All properties of attributes can be called as methods on the wrapped list, returning a list containing each attribute's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAOmniOutlinerAttribute, filter)
+ +
[docs]class XAOmniOutlinerAttribute(XABase.XAObject): + """An attribute of a style. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the attribute. + """ + return self.xa_elem.name() + + @property + def style(self) -> XAOmniOutlinerStyle: + """The style to which the attribute refers. + """ + return self._new_element(self.xa_elem.style(), XAOmniOutlinerStyle) + + @style.setter + def style(self, style: XAOmniOutlinerStyle): + self.set_property("style", style.xa_elem) + + @property + def has_local_value(self) -> bool: + """If true, the containing style defines a local value for this attribute. + """ + return self.xa_elem.hasLocalValue() + + @property + def defining_style(self) -> XAOmniOutlinerStyle: + """The style responsible for the effective value in this attributes's style. This processes the local values, inherited styles and cascade chain. + """ + return self._new_element(self.xa_elem.definingStyle(), XAOmniOutlinerStyle) + + @property + def value(self) -> Union['XAOmniOutlinerGenericColor', XABase.XAColor, str, XABase.XAURL, float, list[float], int, bool, 'XAOmniOutlinerPoint', None]: + """The value of the attribute in its style. + """ + # TODO + return self.xa_elem.value() + + @value.setter + def value(self, value: Union['XAOmniOutlinerGenericColor', XABase.XAColor, str, XABase.XAURL, float, list[float], int, bool, 'XAOmniOutlinerPoint', None]): + self.set_property("value", value) + + @property + def default_value(self) -> Union['XAOmniOutlinerGenericColor', XABase.XAColor, str, XABase.XAURL, float, list[float], int, bool, 'XAOmniOutlinerPoint', None]: + """The default value of the attribute in its style. + """ + return self.xa_elem.defaultValue() + + @default_value.setter + def default_value(self, default_value: Union['XAOmniOutlinerGenericColor', XABase.XAColor, str, XABase.XAURL, float, list[float], int, bool, 'XAOmniOutlinerPoint', None]): + self.set_property("defaultValue", default_value) + +
[docs] def clear(self): + """Clears a locally set value for a style attribute. + + .. versionadded:: 0.0.9 + """ + self.xa_elem.clear()
+ + + + +
[docs]class XAOmniOutlinerPoint(XABase.XAObject): + """A point value. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def x(self) -> float: + """The x coordinate of the point. + """ + return self.xa_elem.x() + + @x.setter + def x(self, x: float): + self.set_property("x", x) + + @property + def y(self) -> float: + """The y coordinate of the point. + """ + return self.xa_elem.y() + + @x.setter + def y(self, y: float): + self.set_property("y", y)
+ + + +
[docs]class XAOmniOutlinerPNGData(XABase.XAObject): + """A PNG data object. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAOmniOutlinerTIFFData(XABase.XAObject): + """A TIFF data object. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAOmniOutlinerArchiveData(XABase.XAObject): + """A archive data object. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAOmniOutlinerGenericColor(XABase.XAObject): + """A generic color value. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def r(self) -> float: + """If the color is in a RGB color space, this is the calibrated floating point red component, from zero to one. + """ + return self.xa_elem.r() + + @r.setter + def r(self, r: float): + self.set_property("r", r) + + @property + def g(self) -> float: + """If the color is in a RGB color space, this is the calibrated floating point green component, from zero to one. + """ + return self.xa_elem.g() + + @g.setter + def g(self, g: float): + self.set_property("g", g) + + @property + def b(self) -> float: + """If the color is in a RGB color space, this is the calibrated floating point blue component, from zero to one. + """ + return self.xa_elem.b() + + @b.setter + def b(self, b: float): + self.set_property("b", b) + + @property + def w(self) -> float: + """If the color is in a White color space, this is the calibrated floating point white component, from zero to one, with zero being totally black and one being totally white. + """ + return self.xa_elem.w() + + @w.setter + def w(self, w: float): + self.set_property("w", w) + + @property + def c(self) -> float: + """If the color is in a CMYK color space, this is the device-specific floating point cyan component, from zero to one. There is currently no support for calibrated CYMK color spaces. + """ + return self.xa_elem.c() + + @c.setter + def c(self, c: float): + self.set_property("c", c) + + @property + def y(self) -> float: + """If the color is in a CMYK color space, this is the device-specific floating point yellow component, from zero to one. There is currently no support for calibrated CYMK color spaces. + """ + return self.xa_elem.y() + + @y.setter + def y(self, y: float): + self.set_property("y", y) + + @property + def m(self) -> float: + """If the color is in a CMYK color space, this is the device-specific floating point magenta component, from zero to one. There is currently no support for calibrated CYMK color spaces. + """ + return self.xa_elem.m() + + @m.setter + def m(self, m: float): + self.set_property("m", m) + + @property + def k(self) -> float: + """If the color is in a CMYK color space, this is the device-specific floating point black component, from zero to one. There is currently no support for calibrated CYMK color spaces. + """ + return self.xa_elem.k() + + @k.setter + def k(self, k: float): + self.set_property("k", k) + + @property + def h(self) -> float: + """If the color is in a HSV color space, this is the calibrated floating point hue component, from zero to one. + """ + return self.xa_elem.h() + + @h.setter + def h(self, h: float): + self.set_property("h", h) + + @property + def s(self) -> float: + """If the color is in a HSV color space, this is the calibrated floating point saturation component, from zero to one. + """ + return self.xa_elem.s() + + @s.setter + def s(self, s: float): + self.set_property("s", s) + + @property + def v(self) -> float: + """If the color is in a HSV color space, this is the calibrated floating point value component, from zero to on. + """ + return self.xa_elem.v() + + @v.setter + def v(self, v: float): + self.set_property("v", v) + + @property + def a(self) -> float: + return self.xa_elem.a() + + @a.setter + def a(self, a: float): + """The opacity or alpha of the color as a floating point number from zero to one with zero being totally transparent and one being totally opaque. + """ + self.set_property('a', a) + + @property + def catalog(self) -> str: + """If the color is in a catalog color space, this is the name of the catalog. + """ + return self.xa_elem.catalog() + + @catalog.setter + def catalog(self, catalog: str): + self.set_property("catalog", catalog) + + @property + def name(self) -> str: + """If the color is in a catalog color space, this is the name of color with in the catalog. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property("name", name) + + @property + def png(self) -> XAOmniOutlinerPNGData: + """If the color is in a pattern color space, this is PNG data for the image representing the pattern. + """ + return self._new_element(self.xa_elem.png(), XAOmniOutlinerPNGData) + + @png.setter + def png(self, png: XAOmniOutlinerPNGData): + self.set_property("png", png.xa_elem) + + @property + def tiff(self) -> XAOmniOutlinerTIFFData: + """If the color is in a pattern color space, this is TIFF data for the image representing the pattern. + """ + return self._new_element(self.xa_elem.tiff(), XAOmniOutlinerTIFFData) + + @tiff.setter + def tiff(self, tiff: XAOmniOutlinerTIFFData): + self.set_property("tiff", tiff.xa_elem) + + @property + def archive(self) -> XAOmniOutlinerArchiveData: + """If the color cannot be represented in any other format, a binary archive is placed in this property. + """ + return self._new_element(self.xa_elem.archive(), XAOmniOutlinerArchiveData) + + @archive.setter + def archive(self, archive: XAOmniOutlinerArchiveData): + self.set_property("archive", archive.xa_elem)
+ + + + +
[docs]class XAOmniOutlinerPreferenceList(XABase.XAList): + """A wrapper around lists of preferences that employs fast enumeration techniques. + + All properties of preferences can be called as methods on the wrapped list, returning a list containing each preference's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAOmniOutlinerPreference, filter)
+ +
[docs]class XAOmniOutlinerPreference(XABase.XAObject): + """A row object in OmniOutliner.app. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """The identifier of the preference. + """ + return self.xa_elem.id() + + @property + def value(self) -> Union[str, float, int, bool, None]: + """The current value of the preference. + """ + return self.xa_elem.value() + + @value.setter + def value(self, value: Union[str, float, int, bool, None]): + self.set_property("value", value) + + @property + def default_value(self) -> Union[str, float, int, bool, None]: + """The default value of the preference. + """ + return self.xa_elem.defaultValue() + + @default_value.setter + def default_value(self, default_value: Union[str, float, int, bool, None]): + self.set_property("defaultValue", default_value)
+ + + + +
[docs]class XAOmniOutlinerConduitSettingDomainList(XABase.XAList): + """A wrapper around lists of conduit setting domains that employs fast enumeration techniques. + + All properties of conduit setting domains can be called as methods on the wrapped list, returning a list containing each domain's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAOmniOutlinerConduitSettingDomain, filter)
+ +
[docs]class XAOmniOutlinerConduitSettingDomain(XABase.XAObject): + """A group of custom settings from one external source. Note that conduit setting domains should only be referenced by 'id'. The first time one is referenced it will be created. Any other type of access (by index, every, etc.) will produce an error. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """The unique identifier of the domain. These should typically be in the reverse-DNS style of bundle identifiers ("com.mycompany.myproduct"). + """ + return self.xa_elem.id() + + @property + def settings(self) -> list[Union[str, None]]: + """Values must be strings or 'missing value' (removes value). To set a single entry, concatenate the current value with the changes and then re-set it. Concatenating an empty and non-empty record crashes AppleScript, so 'missing value' will be returned. + """ + return self.xa_elem.settings() + + @settings.setter + def settings(self, settings: list[Union[str, None]]): + self.set_property("settings", settings) + + @property + def external_id(self) -> str: + """Identifies the conduit externally to OmniOutliner. This might be a record identifier in an external database. This will not get copied when duplicating the row, or if a 'save as' or 'save to' operation is performed instead of a normal 'save'. + """ + return self.xa_elem.externalId() + + @property + def container(self) -> XABase.XAObject: + """The row or document containing this group of conduit settings. + """ + # TODO + return self.xa_elem.container()
+ + + + +
[docs]class XAOmniOutlinerXslTransformList(XABase.XAList): + """A wrapper around lists of XSL transforms that employs fast enumeration techniques. + + All properties of XSL transforms can be called as methods on the wrapped list, returning a list containing each transforms's value for the property. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAOmniOutlinerXslTransform, filter)
+ +
[docs]class XAOmniOutlinerXslTransform(XABase.XAObject): + """This class represents an available XSL transformation that may be applied when loading or saving documents. + + .. versionadded:: 0.0.9 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def directory_extension(self) -> str: + """The prefered file extension for file-system representations of wrapped file documents handled by this plugin. + """ + return self.xa_elem.directoryExtension() + + @directory_extension.setter + def directory_extension(self, directory_extension: str): + self.set_property("directoryExtension", directory_extension) + + @property + def directory_index_file_name(self) -> str: + """When writing a document with attachments, this specifies the name of the index file written inside the directory containing the transformed XML. + """ + return self.xa_elem.directoryIndexFileName() + + @directory_index_file_name.setter + def directory_index_file_name(self, directory_index_file_name: str): + self.set_property("directoryIndexFileName", directory_index_file_name) + + @property + def write_attachments(self) -> bool: + """When writing a document with attachments, this specifies whether the attachments will be written to the output location. + """ + return self.xa_elem.writeAttachments() + + @write_attachments.setter + def write_attachments(self, write_attachments: bool): + self.set_property("writeAttachments", write_attachments) + + @property + def display_name(self) -> str: + """The human readable name for the transform. + """ + return self.xa_elem.displayName() + + @display_name.setter + def display_name(self, display_name: str): + self.set_property("displayName", display_name) + + @property + def file_extension(self) -> str: + """The preferred file extension for file-system representations of flat file documents handled by this plugin. + """ + return self.xa_elem.fileExtension() + + @file_extension.setter + def file_extension(self, file_extension: str): + self.set_rpoperty("fileExtension", file_extension) + + @property + def id(self) -> str: + """A unique identifier for the transform to be used as the 'as' parameter of the 'save' command. + """ + return self.xa_elem.id() + + @property + def is_export(self) -> bool: + """Returns true if the source format is a native format for OmniOutliner. + """ + return self.xa_elem.isExport() + + @property + def is_import(self) -> bool: + """Returns true if the result format is a native format for OmniOutliner. + """ + return self.xa_elem.isImport() + + @property + def parameter_names(self) -> str: + """Names of all XSL parameters set on this transform. + """ + return self.xa_elem.parameterNames() + + @property + def result_format(self) -> str: + """A description of the data type produced by this transform. For XML data types, this is the DTD public identifier. + """ + return self.xa_elem.resultFormat() + + @result_format.setter + def result_format(self, result_format: str): + self.set_rpoperty("resultFormat", result_format) + + @property + def source_format(self) -> str: + """A description of the data type consumed by this transform. For XML data types, this is the DTD public identifier. + """ + return self.xa_elem.sourceFormat() + + @source_format.setter + def source_format(self, source_format: str): + self.set_property("sourceFormat", source_format) + + @property + def stylesheet(self) -> str: + """The XSL source for the transform. + """ + return self.xa_elem.stylesheet() + + @stylesheet.setter + def stylesheet(self, stylesheet: str): + self.set_property("stylesheet", stylesheet) + +
[docs] def get_parameter(self, parameter_name: str) -> str: + """Gets the XPath expression currently set for a XSL parameter + + :param parameter_name: The name of the parameter + :type parameter_name: str + :return: The XPath expression currently set for the parameter + :rtype: str + + .. versionadded:: 0.0.9 + """ + return self.xa_elem.getParameterNamed_(parameter_name)
+ +
[docs] def set_parameter(self, parameter_name: str, value: str): + """Sets the XPath expression for a parameter. Note that to set a string constant you must quote the string. For example "foo" means "element foo" but "'foo'" means "constant string 'foo'". + + :param parameter_name: The name of the parameter + :type parameter_name: str + :param value: The value of the parameter + :type value: str + + .. versionadded:: 0.0.9 + """ + self.xa_elem.setParameterTo_named_(value, parameter_name)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Pages.html b/docs/_modules/PyXA/apps/Pages.html new file mode 100644 index 0000000..ffd67ca --- /dev/null +++ b/docs/_modules/PyXA/apps/Pages.html @@ -0,0 +1,1211 @@ + + + + + + PyXA.apps.Pages — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Pages

+""".. versionadded:: 0.0.6
+
+Control the macOS Pages application using JXA-like syntax.
+"""
+from enum import Enum
+from typing import Any, Union, Self
+
+import AppKit, ScriptingBridge
+
+from PyXA import XABase
+from PyXA.XABase import OSType
+from . import iWorkApplicationBase
+
+
[docs]class XAPagesApplication(iWorkApplicationBase.XAiWorkApplication): + """A class for managing and interacting with Pages.app. + + .. seealso:: :class:`XAPagesWindow`, :class:`XAPagesDocument` + + .. versionadded:: 0.0.6 + """ +
[docs] class ExportFormat(Enum): + """Options for what format to export a Pages project as. + """ + Pages = OSType('Pgff') #: The Pages native file format + EPUB = OSType('Pepu') #: EPUB format + PLAINTEXT = OSType('Ptxf') #: Plaintext format + PDF = OSType('Ppdf') #: PDF format + MICROSOFT_WORD = OSType('Pwrd') #: MS Word format + RTF = OSType('Prtf') #: RTF format + PAGES_09 = OSType('PPag') #: Pages 09 format
+ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XAPagesWindow + +
[docs] def documents(self, filter: Union[dict, None] = None) -> 'XAPagesDocumentList': + """Returns a list of documents, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned documents will have, or None + :type filter: Union[dict, None] + :return: The list of documents + :rtype: XAPagesDocumentList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_scel.documents(), XAPagesDocumentList, filter)
+ +
[docs] def new_document(self, file_path: Union[str, XABase.XAPath] = "./Untitled.pages", template: 'XAPagesTemplate' = None) -> 'XAPagesDocument': + """Creates a new document at the specified path and with the specified template. + + :param file_path: The path to create the document at, defaults to "./Untitled.key" + :type file_path: str, optional + :param template: The template to initialize the document with, defaults to None + :type template: XAPagesPage, optional + :return: The newly created document object + :rtype: XAPagesDocument + + .. versionadded:: 0.0.8 + """ + if isinstance(file_path, str): + file_path = XABase.XAPath(file_path) + + properties = { + "file": file_path.xa_elem, + } + + if template is not None: + properties["documentTemplate"] = template.xa_elem + + new_document = self.make("document", properties) + return self.documents().push(new_document)
+ +
[docs] def templates(self, filter: Union[dict, None] = None) -> 'XAPagesTemplateList': + """Returns a list of templates, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned templates will have, or None + :type filter: Union[dict, None] + :return: The list of templates + :rtype: XAPagesTemplateList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_scel.templates(), XAPagesTemplateList, filter)
+ +
[docs] def make(self, specifier: str, properties: dict = None): + """Creates a new element of the given specifier class without adding it to any list. + + Use :func:`XABase.XAList.push` to push the element onto a list. + + :param specifier: The classname of the object to create + :type specifier: str + :param properties: The properties to give the object + :type properties: dict + :return: A PyXA wrapped form of the object + :rtype: XABase.XAObject + + :Example 1: Making a new document + + >>> import PyXA + >>> pages = PyXA.Application("Pages") + >>> new_doc = pages.make("document", {"bodyText": "This is a whole new document!"}) + >>> pages.documents().push(new_doc) + + :Example 3: Making new elements on a page + + >>> import PyXA + >>> pages = PyXA.Application("Pages") + >>> new_line = pages.make("line", {"startPoint": (100, 100), "endPoint": (200, 200)}) + >>> pages.documents()[0].pages()[0].lines().push(new_line) + + .. versionadded:: 0.0.5 + """ + if properties is None: + properties = {} + + obj = self.xa_scel.classForScriptingClass_(specifier).alloc().initWithProperties_(properties) + + if specifier == "document": + return self._new_element(obj, XAPagesDocument) + elif specifier == "shape": + return self._new_element(obj, iWorkApplicationBase.XAiWorkShape) + elif specifier == "table": + return self._new_element(obj, iWorkApplicationBase.XAiWorkTable) + elif specifier == "audioClip": + return self._new_element(obj, iWorkApplicationBase.XAiWorkAudioClip) + elif specifier == "chart": + return self._new_element(obj, iWorkApplicationBase.XAiWorkChart) + elif specifier == "image": + return self._new_element(obj, iWorkApplicationBase.XAiWorkImage) + elif specifier == "page": + return self._new_element(obj, XAPagesPage) + elif specifier == "line": + return self._new_element(obj, iWorkApplicationBase.XAiWorkLine) + elif specifier == "movie": + return self._new_element(obj, iWorkApplicationBase.XAiWorkMovie) + elif specifier == "textItem": + return self._new_element(obj, iWorkApplicationBase.XAiWorkTextItem) + elif specifier == "group": + return self._new_element(obj, iWorkApplicationBase.XAiWorkGroup) + elif specifier == "iWorkItem": + return self._new_element(obj, iWorkApplicationBase.XAiWorkiWorkItem)
+ + + + +
[docs]class XAPagesWindow(iWorkApplicationBase.XAiWorkWindow): + """A class for managing and interacting with windows in Pages.app. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def document(self) -> 'XAPagesDocument': + """The document currently displayed in the window. + """ + return self._new_element(self.xa_elem.document(), XAPagesDocument)
+ + + + +
[docs]class XAPagesDocumentList(iWorkApplicationBase.XAiWorkDocumentList): + """A wrapper around lists of themes that employs fast enumeration techniques. + + All properties of themes can be called as methods on the wrapped list, returning a list containing each theme's value for the property. + + .. versionadded:: 0.0.5 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAPagesDocument) + +
[docs] def properties(self) -> list[dict]: + raw_dicts = self.xa_elem.arrayByApplyingSelector_("properties") or [] + pyxa_dicts = [None] * len(self.xa_elem) + for index, doc in enumerate(self.xa_elem): + pyxa_dicts[index] = { + "id": raw_dicts[index]["id"], + "current_page": self._new_element(raw_dicts[index]["currentPage"], XAPagesDocument), + "file": XABase.XAPath(raw_dicts[index]["file"]), + "modified": raw_dicts[index]["modified"], + "document_body": raw_dicts[index]["documentBody"], + "document_template": self._new_element(raw_dicts[index]["documentTemplate"], XAPagesTemplate), + "body_text": raw_dicts[index]["bodyText"], + "facing_pages": raw_dicts[index]["facingPages"], + "selection": self._new_element(raw_dicts[index]["selection"], iWorkApplicationBase.XAiWorkiWorkItemList), + "name": raw_dicts[index]["name"], + "password_protected": raw_dicts[index]["passwordProtected"] + } + return pyxa_dicts
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def modified(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("modified") or [])
+ +
[docs] def file(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("file") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def document_template(self) -> 'XAPagesTemplateList': + ls = self.xa_elem.arrayByApplyingSelector_("documentTemplate") or [] + return self._new_element(ls, XAPagesTemplateList)
+ +
[docs] def body_text(self) -> XABase.XATextList: + ls = self.xa_elem.arrayByApplyingSelector_("bodyText") or [] + return self._new_element(ls, XABase.XATextList)
+ +
[docs] def document_body(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("documentBody") or [])
+ +
[docs] def facing_pages(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("facingPages") or [])
+ +
[docs] def current_page(self) -> 'XAPagesPageList': + ls = self.xa_elem.arrayByApplyingSelector_("currentPage") or [] + return self._new_element(ls, XAPagesPageList)
+ +
[docs] def by_properties(self, properties: dict) -> Union['XAPagesDocument', None]: + raw_dict = {} + + if "id" in properties: + raw_dict["id"] = properties["id"] + + if "current_page" in properties: + raw_dict["currentPage"] = properties["current_page"].xa_elem + + if "file" in properties: + if isinstance(properties["file"], str): + raw_dict["file"] = properties["file"] + else: + raw_dict["file"] = properties["file"].xa_elem + + if "modified" in properties: + raw_dict["modified"] = properties["modified"] + + if "document_body" in properties: + raw_dict["documentBody"] = properties["document_body"] + + if "document_template" in properties: + raw_dict["documentTemplate"] = properties["document_template".xa_elem] + + if "body_text" in properties: + raw_dict["bodyText"] = properties["body_text"] + + if "facing_pages" in properties: + raw_dict["facingPages"] = properties["facing_pages"] + + if "selection" in properties: + selection = properties["selection"] + if isinstance(selection, list): + selection = [x.xa_elem for x in selection] + raw_dict["selection"] = selection + + if "name" in properties: + raw_dict["name"] = properties["name"] + + if "password_protected" in properties: + raw_dict["passwordProtected"] = properties["password_protected"] + + for document in self.xa_elem: + if all(raw_dict[x] == document.properties()[x] for x in raw_dict): + return self._new_element(document, XAPagesDocument)
+ +
[docs] def by_name(self, name: str) -> Union['XAPagesDocument', None]: + return self.by_property("name", name)
+ +
[docs] def by_modified(self, modified: bool) -> Union['XAPagesDocument', None]: + return self.by_property("modified", modified)
+ +
[docs] def by_file(self, file: Union[str, XABase.XAPath]) -> Union['XAPagesDocument', None]: + if isinstance(file, XABase.XAPath): + file = file.url + return self.by_property("file", file)
+ +
[docs] def by_id(self, id: str) -> Union['XAPagesDocument', None]: + return self.by_property("id", id)
+ +
[docs] def by_document_template(self, document_template: 'XAPagesTemplate') -> Union['XAPagesDocument', None]: + return self.by_property("documentTemplate", document_template.xa_elem)
+ +
[docs] def by_body_text(self, body_text: Union[str, XABase.XAText]) -> Union['XAPagesDocument', None]: + if isinstance(body_text, str): + self.by_property('bodyText', body_text) + else: + self.by_property('bodyText', body_text.xa_elem)
+ +
[docs] def by_document_body(self, document_body: bool) -> Union['XAPagesDocument', None]: + return self.by_property("documentBody", document_body)
+ +
[docs] def by_facing_pages(self, facing_pages: bool) -> Union['XAPagesDocument', None]: + return self.by_property("facingPages", facing_pages)
+ +
[docs] def by_current_page(self, current_page: 'XAPagesPage') -> Union['XAPagesDocument', None]: + return self.by_property("currentPage", current_page.xa_elem)
+ +
[docs] def audio_clips(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkAudioClipList': + ls = [x for x in self.xa_elem.arrayByApplyingSelector_("audioClips")] + return self._new_element(ls, iWorkApplicationBase.XAiWorkAudioClipList, filter)
+ +
[docs] def charts(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkChartList': + ls = [x for x in self.xa_elem.arrayByApplyingSelector_("charts")] + return self._new_element(ls, iWorkApplicationBase.XAiWorkChartList, filter)
+ +
[docs] def groups(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkGroupList': + ls = [x for x in self.xa_elem.arrayByApplyingSelector_("groups")] + return self._new_element(ls, iWorkApplicationBase.XAiWorkGroupList, filter)
+ +
[docs] def images(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkImageList': + ls = [x for x in self.xa_elem.arrayByApplyingSelector_("images")] + return self._new_element(ls, iWorkApplicationBase.XAiWorkImageList, filter)
+ +
[docs] def iwork_items(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkiWorkItemList': + ls = [x for x in self.xa_elem.arrayByApplyingSelector_("iWorkItems")] + return self._new_element(ls, iWorkApplicationBase.XAiWorkiWorkItemList, filter)
+ +
[docs] def lines(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkLineList': + ls = [x for x in self.xa_elem.arrayByApplyingSelector_("lines")] + return self._new_element(ls, iWorkApplicationBase.XAiWorkLineList, filter)
+ +
[docs] def movies(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkMovieList': + ls = [x for x in self.xa_elem.arrayByApplyingSelector_("movies")] + return self._new_element(ls, iWorkApplicationBase.XAiWorkMovieList, filter)
+ +
[docs] def pages(self, filter: Union[dict, None] = None) -> 'XAPagesPageList': + ls = [x for x in self.xa_elem.arrayByApplyingSelector_("pages")] + return self._new_element(ls, XAPagesPageList, filter)
+ +
[docs] def sections(self, filter: Union[dict, None] = None) -> 'XAPagesSectionList': + ls = [x for x in self.xa_elem.arrayByApplyingSelector_("sections")] + return self._new_element(ls, XAPagesSectionList, filter)
+ +
[docs] def shapes(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkShapeList': + ls = [x for x in self.xa_elem.arrayByApplyingSelector_("shapes")] + return self._new_element(ls, iWorkApplicationBase.XAiWorkShapeList, filter)
+ +
[docs] def tables(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkTableList': + ls = [x for x in self.xa_elem.arrayByApplyingSelector_("tables")] + return self._new_element(ls, iWorkApplicationBase.XAiWorkTableList, filter)
+ +
[docs] def text_items(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkTextItemList': + ls = [x for x in self.xa_elem.arrayByApplyingSelector_("textItems")] + return self._new_element(ls, iWorkApplicationBase.XAiWorkTableList, filter)
+ +
[docs] def placeholder_texts(self, filter: Union[dict, None] = None) -> 'XAPagesPlaceholderTextList': + ls = [x for x in self.xa_elem.arrayByApplyingSelector_("placeholderTexts")] + return self._new_element(ls, iWorkApplicationBase.XAiWorkTableList, filter)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAPagesDocument(iWorkApplicationBase.XAiWorkDocument): + """A class for managing and interacting with Pages documents. + + .. seealso:: :class:`XAPagesApplication` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the document. + """ + raw_dict = self.xa_elem.properties() + pyxa_dict = { + "id": raw_dict["id"], + "current_page": self._new_element(raw_dict["currentPage"], XAPagesDocument), + "file": XABase.XAPath(raw_dict["file"]), + "modified": raw_dict["modified"], + "document_body": raw_dict["documentBody"], + "document_template": self._new_element(raw_dict["documentTemplate"], XAPagesTemplate), + "body_text": raw_dict["bodyText"], + "facing_pages": raw_dict["facingPages"], + "selection": self._new_element(raw_dict["selection"], iWorkApplicationBase.XAiWorkiWorkItemList), + "name": raw_dict["name"], + "password_protected": raw_dict["passwordProtected"] + } + return pyxa_dict + + @property + def document_template(self) -> 'XAPagesTemplate': + """The template assigned to the document. + """ + return self._new_element(self.xa_elem.documentTemplate(), XAPagesTemplate) + + @property + def body_text(self) -> XABase.XAText: + """The document body text. + """ + return self._new_element(self.xa_elem.bodyText(), XABase.XAText) + + @body_text.setter + def body_text(self, body_text: Union[XABase.XAText, str]): + if isinstance(body_text, str): + self.set_property('bodyText', body_text) + else: + self.set_property('bodyText', str(body_text)) + + @property + def document_body(self) -> bool: + """Whether the document has body text. + """ + return self.xa_elem.documentBody() + + @property + def facing_pages(self) -> bool: + """Whether the document has facing pages. + """ + return self.xa_elem.facingPages() + + @facing_pages.setter + def facing_pages(self, facing_pages: bool): + self.set_property('facingPages', facing_pages) + + @property + def current_page(self) -> 'XAPagesPage': + """The current page of the document. + """ + return self._new_element(self.xa_elem.currentPage(), XAPagesPage) + +
[docs] def export(self, file_path: Union[str, AppKit.NSURL] = None, format: XAPagesApplication.ExportFormat = XAPagesApplication.ExportFormat.PDF): + """Exports the document in the specified format. + + :param file_path: The path to save the exported file at, defaults to None + :type file_path: Union[str, AppKit.NSURL], optional + :param format: The format to export the file in, defaults to XAPagesApplication.ExportFormat.PDF + :type format: XAPagesApplication.ExportFormat, optional + + .. versionadded:: 0.0.3 + """ + if file_path is None: + file_path = self.file.path()[:-4] + ".pdf" + if isinstance(file_path, str): + file_path = AppKit.NSURL.alloc().initFileURLWithPath_(file_path) + self.xa_elem.exportTo_as_withProperties_(file_path, format.value, None)
+ +
[docs] def new_page(self, text: Union[str, XABase.XAText]) -> 'XAPagesPage': + """Creates a new page at the end of the document. + + :param text: The text to initialize the new page with + :type text: Union[str, XABase.XAText] + :return: A reference to the newly created page object + :rtype: XAPagesPage + + .. versionadded:: 0.0.6 + """ + parent = self.xa_prnt + while not hasattr(parent, "make"): + parent = parent.xa_prnt + + new_page = parent.make("page", {}) + page = self.pages().push(new_page) + page.body_text = text + return page
+ +
[docs] def audio_clips(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkAudioClipList': + """Returns a list of audio clips, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned audio clips will have, or None + :type filter: Union[dict, None] + :return: The list of audio clips + :rtype: iWorkApplicationBase.XAiWorkAudioClipList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.audioClips(), iWorkApplicationBase.XAiWorkAudioClipList, filter)
+ +
[docs] def charts(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkChartList': + """Returns a list of charts, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned charts will have, or None + :type filter: Union[dict, None] + :return: The list of charts + :rtype: iWorkApplicationBase.XAiWorkChartList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.charts(), iWorkApplicationBase.XAiWorkChartList, filter)
+ +
[docs] def groups(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkGroupList': + """Returns a list of groups, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned groups will have, or None + :type filter: Union[dict, None] + :return: The list of groups + :rtype: iWorkApplicationBase.XAiWorkGroupList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.groups(), iWorkApplicationBase.XAiWorkGroupList, filter)
+ +
[docs] def images(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkImageList': + """Returns a list of images, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned images will have, or None + :type filter: Union[dict, None] + :return: The list of images + :rtype: iWorkApplicationBase.XAiWorkImageList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.images(), iWorkApplicationBase.XAiWorkImageList, filter)
+ +
[docs] def iwork_items(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkiWorkItemList': + """Returns a list of iWork items, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned iWork items will have, or None + :type filter: Union[dict, None] + :return: The list of iWork items + :rtype: iWorkApplicationBase.XAiWorkiWorkItemList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.iWorkItems(), iWorkApplicationBase.XAiWorkiWorkItemList, filter)
+ +
[docs] def lines(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkLineList': + """Returns a list of lines, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned lines will have, or None + :type filter: Union[dict, None] + :return: The list of lines + :rtype: iWorkApplicationBase.XAiWorkLineList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.lines(), iWorkApplicationBase.XAiWorkLineList, filter)
+ +
[docs] def movies(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkMovieList': + """Returns a list of movies, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned movies will have, or None + :type filter: Union[dict, None] + :return: The list of movies + :rtype: iWorkApplicationBase.XAiWorkMovieList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.movies(), iWorkApplicationBase.XAiWorkMovieList, filter)
+ +
[docs] def pages(self, filter: Union[dict, None] = None) -> 'XAPagesPageList': + """Returns a list of pages, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned pages will have, or None + :type filter: Union[dict, None] + :return: The list of pages + :rtype: XAPagesPageList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.pages(), XAPagesPageList, filter)
+ +
[docs] def sections(self, filter: Union[dict, None] = None) -> 'XAPagesSectionList': + """Returns a list of sections, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned sections will have, or None + :type filter: Union[dict, None] + :return: The list of sections + :rtype: XAPagesSectionList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.sections(), XAPagesSectionList, filter)
+ +
[docs] def shapes(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkShapeList': + """Returns a list of shapes, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned shapes will have, or None + :type filter: Union[dict, None] + :return: The list of shapes + :rtype: iWorkApplicationBase.XAiWorkShapeList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.shapes(), iWorkApplicationBase.XAiWorkShapeList, filter)
+ +
[docs] def tables(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkTableList': + """Returns a list of tables, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned tables will have, or None + :type filter: Union[dict, None] + :return: The list of tables + :rtype: iWorkApplicationBase.XAiWorkTableList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.tables(), iWorkApplicationBase.XAiWorkTableList, filter)
+ +
[docs] def text_items(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkTextItemList': + """Returns a list of text items, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned text items will have, or None + :type filter: Union[dict, None] + :return: The list of text items + :rtype: iWorkApplicationBase.XAiWorkTextItemList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.textItems(), iWorkApplicationBase.XAiWorkTextItemList, filter)
+ +
[docs] def placeholder_texts(self, filter: Union[dict, None] = None) -> 'XAPagesPlaceholderTextList': + """Returns a list of placeholder texts, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned placeholder texts will have, or None + :type filter: Union[dict, None] + :return: The list of placeholder texts + :rtype: XAPagesPlaceholderTextList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.placeholderTexts(), XAPagesPlaceholderTextList, filter)
+ + def __repr__(self): + try: + return "<" + str(type(self)) + str(self.name) + ">" + except AttributeError: + # Probably dealing with a proxy object created via make() + return "<" + str(type(self)) + str(self.xa_elem) + ">"
+ + + + +
[docs]class XAPagesTemplateList(XABase.XAList): + """A wrapper around lists of templates that employs fast enumeration techniques. + + All properties of templates can be called as methods on the wrapped list, returning a list containing each template's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAPagesTemplate, filter) + +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def by_id(self, id: str) -> Union['XAPagesTemplate', None]: + return self.by_property("id", id)
+ +
[docs] def by_name(self, name: str) -> Union['XAPagesTemplate', None]: + return self.by_property("name", name)
+ + def __repr__(self): + return f"<{str(type(self))}{self.name()}>"
+ +
[docs]class XAPagesTemplate(XABase.XAObject): + """A class for managing and interacting with Pages templates. + + .. seealso:: :class:`XAPagesApplication` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """The unique identifier for the template. + """ + return self.xa_elem.id() + + @property + def name(self) -> str: + """The localized name of the template. + """ + return self.xa_elem.name() + + def __repr__(self): + try: + return f"<{str(type(self))}{self.name}, id={str(self.id)}>" + except AttributeError: + # Probably dealing with a proxy object created via make() + return "<" + str(type(self)) + str(self.xa_elem) + ">"
+ + + + +
[docs]class XAPagesSectionList(XABase.XAList): + """A wrapper around lists of sections that employs fast enumeration techniques. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAPagesSection, filter) + +
[docs] def body_text(self) -> XABase.XATextList: + ls = self.xa_elem.arrayByApplyingSelector_("bodyText") or [] + return self._new_element(ls, XABase.XATextList)
+ +
[docs] def by_body_text(self, body_text: Union[str, XABase.XAText]) -> Union['XAPagesSection', None]: + if isinstance(body_text, str): + self.by_property('bodyText', body_text) + else: + self.by_property('bodyText', str(body_text))
+ +
[docs] def audio_clips(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkAudioClipList': + ls = self.xa_elem.arrayByApplyingSelector_("audioClips") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, iWorkApplicationBase.XAiWorkAudioClipList, filter)
+ +
[docs] def charts(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkChartList': + ls = self.xa_elem.arrayByApplyingSelector_("charts") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, iWorkApplicationBase.XAiWorkChartList, filter)
+ +
[docs] def groups(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkGroupList': + ls = self.xa_elem.arrayByApplyingSelector_("groups") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, iWorkApplicationBase.XAiWorkGroupList, filter)
+ +
[docs] def images(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkImageList': + ls = self.xa_elem.arrayByApplyingSelector_("images") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, iWorkApplicationBase.XAiWorkImageList, filter)
+ +
[docs] def iwork_items(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkiWorkItemList': + ls = self.xa_elem.arrayByApplyingSelector_("iWorkItems") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, iWorkApplicationBase.XAiWorkiWorkItemList, filter)
+ +
[docs] def lines(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkLineList': + ls = self.xa_elem.arrayByApplyingSelector_("lines") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, iWorkApplicationBase.XAiWorkLineList, filter)
+ +
[docs] def movies(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkMovieList': + ls = self.xa_elem.arrayByApplyingSelector_("movies") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, iWorkApplicationBase.XAiWorkMovieList, filter)
+ +
[docs] def shapes(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkShapeList': + ls = self.xa_elem.arrayByApplyingSelector_("shapes") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, iWorkApplicationBase.XAiWorkShapeList, filter)
+ +
[docs] def tables(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkTableList': + ls = self.xa_elem.arrayByApplyingSelector_("tables") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, iWorkApplicationBase.XAiWorkTableList, filter)
+ +
[docs] def pages(self, filter: Union[dict, None] = None) -> 'XAPagesPageList': + ls = self.xa_elem.arrayByApplyingSelector_("pages") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, XAPagesPageList, filter)
+ +
[docs] def text_items(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkTextItemList': + ls = self.xa_elem.arrayByApplyingSelector_("textItems") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, iWorkApplicationBase.XAiWorkTableList, filter)
+ + def __repr__(self): + return f"<{str(type(self))}length:{len(self.xa_elem)}>"
+ +
[docs]class XAPagesSection(XABase.XAObject): + """A class for managing and interacting with sections in Pages. + + .. seealso:: :class:`XAPagesApplication`, :class:`iWorkApplicationBase.XAiWorkiWorkItem` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def body_text(self) -> XABase.XAText: + """The section body text. + """ + return self._new_element(self.xa_elem.bodyText(), XABase.XAText) + + @body_text.setter + def body_text(self, body_text: Union[XABase.XAText, str]): + if isinstance(body_text, str): + self.set_property('bodyText', body_text) + else: + self.set_property('bodyText', str(body_text)) + +
[docs] def iwork_items(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkiWorkItemList': + """Returns a list of iWork items, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned iWork items will have, or None + :type filter: Union[dict, None] + :return: The list of iWork items + :rtype: iWorkApplicationBase.XAiWorkiWorkItemList + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_elem.iWorkItems(), iWorkApplicationBase.XAiWorkiWorkItemList, filter)
+ +
[docs] def audio_clips(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkAudioClipList': + """Returns a list of audio clips, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned audio clips will have, or None + :type filter: Union[dict, None] + :return: The list of audio clips + :rtype: iWorkApplicationBase.XAiWorkAudioClipList + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_elem.audioClips(), iWorkApplicationBase.XAiWorkAudioClipList, filter)
+ +
[docs] def charts(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkChartList': + """Returns a list of charts, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned charts will have, or None + :type filter: Union[dict, None] + :return: The list of charts + :rtype: iWorkApplicationBase.XAiWorkChartList + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_elem.charts(), iWorkApplicationBase.XAiWorkChartList, filter)
+ +
[docs] def images(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkImageList': + """Returns a list of images, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned images will have, or None + :type filter: Union[dict, None] + :return: The list of images + :rtype: iWorkApplicationBase.XAiWorkImageList + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_elem.images(), iWorkApplicationBase.XAiWorkImageList, filter)
+ +
[docs] def groups(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkGroupList': + """Returns a list of groups, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned groups will have, or None + :type filter: Union[dict, None] + :return: The list of groups + :rtype: iWorkApplicationBase.XAiWorkGroupList + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_elem.groups(), iWorkApplicationBase.XAiWorkGroupList, filter)
+ +
[docs] def lines(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkLineList': + """Returns a list of lines, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned lines will have, or None + :type filter: Union[dict, None] + :return: The list of lines + :rtype: iWorkApplicationBase.XAiWorkLineList + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_elem.lines(), iWorkApplicationBase.XAiWorkLineList, filter)
+ +
[docs] def movies(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkMovieList': + """Returns a list of movies, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned movies will have, or None + :type filter: Union[dict, None] + :return: The list of movies + :rtype: iWorkApplicationBase.XAiWorkMovieList + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_elem.movies(), iWorkApplicationBase.XAiWorkMovieList, filter)
+ +
[docs] def shapes(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkShapeList': + """Returns a list of shapes, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned shapes will have, or None + :type filter: Union[dict, None] + :return: The list of shapes + :rtype: iWorkApplicationBase.XAiWorkShapeList + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_elem.shapes(), iWorkApplicationBase.XAiWorkShapeList, filter)
+ +
[docs] def pages(self, filter: Union[dict, None] = None) -> 'XAPagesPageList': + """Returns a list of pages, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned pages will have, or None + :type filter: Union[dict, None] + :return: The list of pages + :rtype: XAPagesPageList + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_elem.pages(), XAPagesPageList, filter)
+ +
[docs] def tables(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkTableList': + """Returns a list of tables, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned tables will have, or None + :type filter: Union[dict, None] + :return: The list of tables + :rtype: iWorkApplicationBase.XAiWorkTableList + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_elem.tables(), iWorkApplicationBase.XAiWorkTableList, filter)
+ +
[docs] def text_items(self, filter: Union[dict, None] = None) -> 'iWorkApplicationBase.XAiWorkTextItemList': + """Returns a list of text_items, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned text_items will have, or None + :type filter: Union[dict, None] + :return: The list of text_items + :rtype: iWorkApplicationBase.XAiWorkTextItemList + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_elem.textItems(), iWorkApplicationBase.XAiWorkTextItemList, filter)
+ + + +
[docs]class XAPagesContainerList(iWorkApplicationBase.XAiWorkContainerList): + """A wrapper around lists of containers that employs fast enumeration techniques. + + .. versionadded:: 0.0.8 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAPagesContainer + self._xa_ccls = XAPagesPageList + super().__init__(properties, filter, obj_class)
+ +
[docs]class XAPagesContainer(iWorkApplicationBase.XAiWorkContainer): + """A class for managing and interacting with containers in Pages. + + .. versionadded:: 0.0.8 + """ + def __init__(self, properties): + self._xa_ccls = XAPagesPageList + super().__init__(properties)
+ + + + +
[docs]class XAPagesPageList(XAPagesContainerList): + """A wrapper around lists of pages that employs fast enumeration techniques. + + All properties of pages can be called as methods on the wrapped list, returning a list containing each page's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAPagesPage) + +
[docs] def properties(self) -> list[dict]: + raw_dicts = self.xa_elem.arrayByApplyingSelector_("properties") or [] + pyxa_dicts = [None] * len(self.xa_elem) + for index, raw_dict in enumerate(raw_dicts): + pyxa_dicts[index] = { + "body_text": self._new_element(raw_dict["bodyText"], XABase.XAText) + } + return pyxa_dicts
+ +
[docs] def body_text(self) -> XABase.XATextList: + ls = self.xa_elem.arrayByApplyingSelector_("bodyText") or [] + return self._new_element(ls, XABase.XATextList)
+ +
[docs] def by_properties(self, properties: dict) -> Union['XAPagesPage', None]: + raw_dict = {} + + if "body_text" in properties: + raw_dict["bodyText"] = str(properties["body_text"]) + + for page in self.xa_elem: + if all([raw_dict[x] == page.properties()[x] for x in raw_dict]): + return self._new_element(page, XAPagesPage)
+ +
[docs] def by_body_text(self, body_text: Union[str, XABase.XAText]) -> Union['XAPagesPage', None]: + if isinstance(body_text, str): + self.by_property('bodyText', body_text) + else: + self.by_property('bodyText', body_text.xa_elem)
+ + def __repr__(self): + return "<" + str(type(self)) + "length:" + str(len(self.xa_elem)) + ">"
+ +
[docs]class XAPagesPage(XAPagesContainer): + """A class for managing and interacting with pages in Pages documents. + + .. seealso:: :class:`XAPagesApplication`, :class:`iWorkApplicationBase.XAiWorkiWorkItem` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the page. + """ + raw_dict = self.xa_elem.properties() + pyxa_dict = { + "body_text": self._new_element(raw_dict["bodyText"], XABase.XAText) + } + return pyxa_dict + + @property + def body_text(self) -> XABase.XAText: + """The page body text. + """ + return self._new_element(self.xa_elem.bodyText(), XABase.XAText) + + @body_text.setter + def body_text(self, body_text: Union[XABase.XAText, str]): + if isinstance(body_text, str): + self.set_property('bodyText', body_text) + else: + self.set_property('bodyText', str(body_text)) + +
[docs] def add_image(self, file_path: Union[str, XABase.XAPath, XABase.XAImage]) -> 'iWorkApplicationBase.XAiWorkImage': + """Adds the image at the specified path to the page. + + :param file_path: The path to the image file + :type file_path: Union[str, XABase.XAPath, XABase.XAImage] + :return: The newly created image object + :rtype: iWorkApplicationBase.XAiWorkImage + + .. versionadded:: 0.0.6 + """ + url = file_path + if isinstance(url, str): + url = XABase.XAPath(url).url + elif isinstance(url, XABase.XAImage): + url = XABase.XAPath(url.file).xa_elem + elif isinstance(url, XABase.XAPath): + url = url.url + + parent = self.xa_prnt + while not hasattr(parent, "make"): + parent = parent.xa_prnt + + image = self.images().push(parent.make("image", { "file": url })) + image.xa_prnt = self + return image
+ + + +
[docs]class XAPagesPlaceholderTextList(XABase.XATextList): + """A wrapper around lists of placeholder texts that employs fast enumeration techniques. + + All properties of placeholder texts can be called as methods on the wrapped list, returning a list containing each text's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAPagesPlaceholderText) + +
[docs] def tag(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("tag") or [])
+ +
[docs] def by_tag(self, tag: str) -> Union['XAPagesPlaceholderText', None]: + return self.by_property("tag", tag)
+ +
[docs]class XAPagesPlaceholderText(XABase.XAText): + """A placeholder text in Pages.app. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def tag(self) -> str: + """The placeholder text's script tag. + """ + return self.xa_elem.tag() + + @tag.setter + def tag(self, tag: str): + self.set_property('tag', tag)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/PhotosApp.html b/docs/_modules/PyXA/apps/PhotosApp.html new file mode 100644 index 0000000..b1f97f0 --- /dev/null +++ b/docs/_modules/PyXA/apps/PhotosApp.html @@ -0,0 +1,1102 @@ + + + + + + PyXA.apps.PhotosApp — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.PhotosApp

+""".. versionadded:: 0.0.2
+
+Control the macOS Photos application using JXA-like syntax.
+
+.. todo::
+
+   - Add support for folders and containers
+   - Add image operations such as rotate, flip
+   - Add ability to add new albums
+   - Add ability to move photos to albums/folders
+"""
+from curses import meta
+from datetime import datetime
+from pprint import pprint
+from typing import Any, Union
+from AppKit import NSImage, NSURL, NSFileManager
+
+import AppKit
+import Photos
+import PhotosUI
+import Quartz
+
+from PyObjCTools import AppHelper
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+from ..XAProtocols import XACanOpenPath, XAClipboardCodable, XAImageLike
+from ..XAErrors import AuthenticationError
+
+
[docs]class XAPhotosApplication(XABaseScriptable.XASBApplication, XACanOpenPath): + """A class for managing and interacting with Photos.app. + + .. versionadded:: 0.0.2 + """ + def __check_authorization(self): + # Check current authorization status + auth_status = Photos.PHPhotoLibrary.authorizationStatusForAccessLevel_(Photos.PHAccessLevelReadWrite) + + # Request authorization if necessary + if auth_status != Photos.PHAuthorizationStatusAuthorized: + auth_status = Photos.PHPhotoLibrary.requestAuthorizationForAccessLevel_handler_(Photos.PHAccessLevelReadWrite, None) + + # Raise error on insufficient authorization status + if auth_status != Photos.PHAuthorizationStatusAuthorized: + raise AuthenticationError("You must grant PyXA access to the Photos library in order to use this module.") + + def __init__(self, properties): + super().__init__(properties) + + # Ensure authorization to Photos library + self.__check_authorization() + + self.__photos_library = Photos.PHPhotoLibrary.sharedPhotoLibrary() + self.__image_manager = Photos.PHCachingImageManager.defaultManager() + + @property + def properties(self) -> dict: + """All properties of the application. + """ + return self.xa_scel.properties() + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether Photos is the frontmost application. + """ + return self.xa_scel.frontmost() + + @property + def version(self) -> str: + """The version of Photos.app. + """ + return self.xa_scel.version() + + @property + def selection(self) -> 'XAPhotosMediaItemList': + """The currently selected media items in the application. + """ + return self._new_element(self.xa_scel.selection(), XAPhotosMediaItemList) + + @property + def favorites_album(self) -> 'XAPhotosAlbum': + """Favorited media items album. + """ + return self._new_element(self.xa_scel.favoritesAlbum(), XAPhotosAlbum) + + @property + def slideshow_running(self) -> bool: + """Returns true if a slideshow is currently running. + """ + return self.xa_scel.slideshowRunning() + + @property + def recently_deleted_album(self) -> 'XAPhotosAlbum': + """The set of recently deleted media items. + """ + return self._new_element(self.xa_scel.recentlyDeletedAlbum(), XAPhotosAlbum) + + @property + def library_path(self) -> XABase.XAPath: + """The path to the Photos library container. + """ + return XABase.XAPath(self.__photos_library.photoLibraryURL()) + +
[docs] def open(self, path: Union[str, XABase.XAPath, list[Union[str, XABase.XAPath]]]) -> 'XAPhotosApplication': + """Imports the file at the given filepath without adding it to any particular album. + + :param target: The path to a file to import into photos. + :type target: Union[str, XABase.XAPath, list[str, list[XABase.XAPath]]] + :return: The Photos application object + :rtype: XAPhotosApplication + + .. versionadded:: 0.0.1 + """ + if isinstance(path, list): + for index, item in enumerate(path): + if isinstance(item, str): + path[index] = XABase.XAPath(item) + return self.import_files(path) + + if isinstance(path, str): + return self.import_files([XABase.XAPath(path)]) + + return self.import_files([path])
+ +
[docs] def import_files(self, files: list[Union[str, NSURL]], destination_album: Union['XAPhotosAlbum', None] = None, skip_duplicate_checking: bool = False) -> 'XAPhotosMediaItemList': + """Imports a list of files into the specified album. + + :param files: The files to import + :type files: list[Union[str, NSURL]] + :param destination_album: The album to import items into, defaults to None + :type destination_album: Union[XAPhotosAlbum, None], optional + :param skip_duplicate_checking: Whether the skip checking duplicates and import everything, defaults to False + :type skip_duplicate_checking: bool, optional + :return: The list of imported media items + :rtype: XAPhotosMediaItemList + + .. versionadded:: 0.0.6 + """ + urls = [] + for file in files: + if not isinstance(file, XABase.XAPath): + file = XABase.XAPath(file) + urls.append(file.xa_elem) + + ls = None + if destination_album is None: + ls = self.xa_scel.import_into_skipCheckDuplicates_(urls, None, skip_duplicate_checking) + else: + ls = self.xa_scel.import_into_skipCheckDuplicates_(urls, destination_album.xa_elem, skip_duplicate_checking) + return self._new_element(ls, XAPhotosMediaItemList)
+ +
[docs] def export(self, media_items: Union['XAPhotosMediaItemList', list['XAPhotosMediaItem']], destination_path: Union[str, NSURL], use_originals: bool = False) -> 'XAPhotosApplication': + """Exports a list of media items to the specified folder. + + :param media_items: The media items to export + :type media_items: Union[XAPhotosMediaItemList, list[XAPhotosMediaItem]] + :param destination_path: The folder to store the exported files in + :type destination_path: Union[str, NSURL] + :param use_originals: Whether to export the original files or rendered jpgs, defaults to False + :type use_originals: bool, optional + :return: The Photos application object + :rtype: XAPhotosApplication + + .. versionadded:: 0.0.6 + """ + if not isinstance(destination_path, NSURL): + destination_path = XABase.XAPath(destination_path).xa_elem + if isinstance(media_items, XAPhotosMediaItemList): + self.xa_scel.export_to_usingOriginals_(media_items.xa_elem, destination_path, use_originals) + else: + self.xa_scel.export_to_usingOriginals_(media_items, destination_path, use_originals) + return self
+ +
[docs] def search(self, query: str) -> 'XAPhotosMediaItemList': + """Searches for items matching the given search string. + + :param query: The string to search + :type query: str + :return: A list of media items matching the search query + :rtype: XAPhotosMediaItemList + + .. versionadded:: 0.0.6 + """ + ls = self.xa_scel.searchFor_(query) + return self._new_element(ls, XAPhotosMediaItemList)
+ +
[docs] def add(self, media_items: Union['XAPhotosMediaItemList', list['XAPhotosMediaItem']], album: 'XAPhotosAlbum') -> 'XAPhotosApplication': + """Adds the given list of media items to the specified album. + + :param media_items: The media items to add + :type media_items: Union[XAPhotosMediaItemList, list[XAPhotosMediaItem]] + :param album: The album to add the media items to + :type album: XAPhotosAlbum + :return: The Photos application object + :rtype: XAPhotosApplication + + .. versionadded:: 0.0.6 + """ + if isinstance(media_items, XAPhotosMediaItemList): + self.xa_scel.add_to_(media_items.xa_elem, album.xa_elem) + else: + self.xa_scel.add_to_(media_items, album.xa_elem) + return self
+ +
[docs] def start_slideshow(self, item_list: Union['XAPhotosMediaItemList', 'XAPhotosAlbum', 'XAPhotosFolder']) -> 'XAPhotosApplication': + """Starts an ad-hoc slideshow from the given list of media items, an album, or a folder. + + :param item_list: The list of media items, an album, or a folder to create a slideshow from + :type item_list: Union['XAPhotosMediaItemList', 'XAPhotosAlbum', 'XAPhotosFolder'] + :return: The Photos application object + :rtype: XAPhotosApplication + + .. versionadded:: 0.0.6 + """ + self.xa_scel.startSlideshowUsing_(item_list.xa_elem) + return self
+ +
[docs] def stop_slideshow(self) -> 'XAPhotosApplication': + """Stops the currently playing slideshow. + + :return: The Photos application object + :rtype: XAPhotosApplication + + .. versionadded:: 0.0.6 + """ + self.xa_scel.endSlideshow() + return self
+ +
[docs] def next_slide(self) -> 'XAPhotosApplication': + """Skips to the next slide in the currently playing slideshow. + + :return: The Photos application object + :rtype: XAPhotosApplication + + .. versionadded:: 0.0.6 + """ + self.xa_scel.nextSlide() + return self
+ +
[docs] def previous_slide(self) -> 'XAPhotosApplication': + """Skips to the previous slide in the currently playing slideshow. + + :return: The Photos application object + :rtype: XAPhotosApplication + + .. versionadded:: 0.0.6 + """ + self.xa_scel.previousSlide() + return self
+ +
[docs] def pause_slideshow(self) -> 'XAPhotosApplication': + """Pauses the currently playing slideshow. + + :return: The Photos application object + :rtype: XAPhotosApplication + + .. versionadded:: 0.0.6 + """ + self.xa_scel.pauseSlideshow() + return self
+ +
[docs] def resume_slideshow(self) -> 'XAPhotosApplication': + """Resumes the currently playing slideshow (from a paused state). + + :return: The Photos application object + :rtype: XAPhotosApplication + + .. versionadded:: 0.0.6 + """ + self.xa_scel.resumeSlideshow() + return self
+ +
[docs] def containers(self, filter: Union[dict, None] = None) -> 'XAPhotosContainerList': + """Returns a list of containers, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned containers will have, or None + :type filter: Union[dict, None] + :return: The list of containers + :rtype: XAPhotosContainerList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_scel.containers(), XAPhotosContainerList, filter)
+ +
[docs] def albums(self, filter: Union[dict, None] = None) -> 'XAPhotosAlbumList': + """Returns a list of albums, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned albums will have, or None + :type filter: Union[dict, None] + :return: The list of albums + :rtype: XAPhotosAlbumList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_scel.albums(), XAPhotosAlbumList, filter)
+ +
[docs] def folders(self, filter: Union[dict, None] = None) -> 'XAPhotosFolderList': + """Returns a list of folders, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned folders will have, or None + :type filter: Union[dict, None] + :return: The list of folders + :rtype: XAPhotosFolderList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_scel.folders(), XAPhotosFolderList, filter)
+ +
[docs] def media_items(self, filter: Union[dict, None] = None) -> 'XAPhotosMediaItemList': + """Returns a list of media items, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned media items will have, or None + :type filter: Union[dict, None] + :return: The list of media items + :rtype: XAPhotosMediaItemList + + .. versionadded:: 0.0.6 + """ + fetch_options = Photos.PHFetchOptions.alloc().init() + all_photos = Photos.PHAsset.fetchAssetsWithOptions_(fetch_options) + all_photos_list = all_photos.objectsAtIndexes_(AppKit.NSIndexSet.alloc().initWithIndexesInRange_((0, all_photos.count()))) + + list_obj = self._new_element(all_photos_list, XAPhotosMediaItemList, filter) + list_obj.xa_scel = self.xa_scel.mediaItems() + return list_obj
+ +
[docs] def make(self, specifier: str, properties: dict = None): + """Creates a new element of the given specifier class without adding it to any list. + + Use :func:`XABase.XAList.push` to push the element onto a list. + + :param specifier: The classname of the object to create + :type specifier: str + :param properties: The properties to give the object + :type properties: dict + :return: A PyXA wrapped form of the object + :rtype: XABase.XAObject + + :Example 1: Make a new album + + >>> import PyXA + >>> app = PyXA.Application("Photos") + >>> new_album = app.make("album", {"name": "PyXA"}) + >>> app.albums().push(new_album) + + .. versionadded:: 0.0.6 + """ + if properties is None: + properties = {} + + obj = self.xa_scel.classForScriptingClass_(specifier).alloc().initWithProperties_(properties) + + if specifier == "album": + elem = self._new_element(obj, XAPhotosAlbum) + return elem + elif specifier == "folder": + elem = self._new_element(obj, XAPhotosFolder) + return elem
+ + + + +
[docs]class XAPhotosMediaItemList(XABase.XAList, XAClipboardCodable): + """A wrapper around lists of media items that employs fast enumeration techniques. + + All properties of media items can be called as methods on the wrapped list, returning a list containing each media item's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAPhotosMediaItem, filter) + + self.__resource_manager = Photos.PHAssetResourceManager.defaultManager() + self.__image_manager = Photos.PHCachingImageManager.defaultManager() + self.__metadata_storage = [] + + def __get_metadata(self, asset, storage): + def result_handler(img_data, img_uti, img_orientation, img_info): + source = Quartz.CGImageSourceCreateWithData(img_data, {Quartz.kCGImageSourceShouldCache: True}) + metadata = Quartz.CGImageSourceCopyPropertiesAtIndex(source, 0, {Quartz.kCGImageSourceShouldCache: True}) + if metadata is not None: + storage.append(metadata) + print(metadata) + + options = Photos.PHImageRequestOptions.alloc().init() + options.setSynchronous_(True) + options.setDeliveryMode_(Photos.PHImageRequestOptionsDeliveryModeHighQualityFormat) + + self.__image_manager.requestImageDataAndOrientationForAsset_options_resultHandler_(asset, options, result_handler) + + def _new_element(self, obj: AppKit.NSObject, obj_class: type = XABase.XAObject, *args: list[Any]) -> 'XABase.XAObject': + element = super()._new_element(obj, obj_class, *args) + predicate = XABase.XAPredicate() + predicate.add_eq_condition("id", obj.localIdentifier()) + ls = predicate.evaluate(self.xa_scel) + element.xa_scel = ls[0] + return element + +
[docs] def properties(self) -> list[dict]: + return list(self.xa_scel.arrayByApplyingSelector_("properties") or [])
+ +
[docs] def keywords(self) -> list[list[str]]: + ls = self.xa_scel.arrayByApplyingSelector_("keywords") or [] + return [keyword for keywordlist in ls for keyword in keywordlist]
+ +
[docs] def duration(self) -> list[float]: + return [x.duration() for x in self.xa_elem]
+ +
[docs] def title(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("title") or [])
+ +
[docs] def file_path(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("mainFileURL") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def object_description(self) -> list[str]: + return list(self.xa_scel.arrayByApplyingSelector_("objectDescription") or [])
+ +
[docs] def favorite(self) -> list[bool]: + return [x.isFavorite() for x in self.xa_elem]
+ +
[docs] def creation_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("creationDate") or [])
+ +
[docs] def modification_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("modificationDate") or [])
+ +
[docs] def is_burst(self) -> list[bool]: + return [x.representsBurst() for x in self.xa_elem]
+ +
[docs] def is_video(self) -> list[bool]: + return [x.isVideo() for x in self.xa_elem]
+ +
[docs] def is_hidden(self) -> list[bool]: + return [x.isHidden() for x in self.xa_elem]
+ +
[docs] def is_photo(self) -> list[bool]: + return [x.isPhoto() for x in self.xa_elem]
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("localIdentifier") or [])
+ +
[docs] def height(self) -> list[int]: + return [x.pixelHeight() for x in self.xa_elem]
+ +
[docs] def width(self) -> list[int]: + return [x.pixelWidth() for x in self.xa_elem]
+ +
[docs] def filename(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("filename") or [])
+ +
[docs] def altitude(self) -> list[float]: + locations = self.xa_elem.arrayByApplyingSelector_("location") or [] + return [x.altitude() for x in locations]
+ +
[docs] def size(self) -> list[tuple[float, float]]: + paths = self.file_path() + file_manager = AppKit.NSFileManager.defaultManager() + attributes = [file_manager.attributesOfItemAtPath_error_(x.path, None) for x in paths] + return [x[0][AppKit.NSFileSize] for x in attributes if x is not None and x[0] is not None]
+ +
[docs] def location(self) -> list[list[Union[float, None]]]: + ls = self.xa_elem.arrayByApplyingSelector_("location") or [] + return [XABase.XALocation( + latitude = x.coordinate()[0], + longitude = x.coordinate()[1], + altitude = x.altitude(), + radius = x.horizontalAccuracy() + ) for x in ls]
+ +
[docs] def by_properties(self, properties: dict) -> Union['XAPhotosMediaItem', None]: + predicate = XABase.XAPredicate() + predicate.add_eq_condition("properties", properties) + ls = predicate.evaluate(self.xa_scel).get() + obj = ls[0] + return self._new_element(obj, self.xa_ocls)
+ +
[docs] def by_keywords(self, keywords: list[str]) -> Union['XAPhotosMediaItem', None]: + return self.by_property("keywords", keywords)
+ +
[docs] def by_title(self, title: str) -> Union['XAPhotosMediaItem', None]: + return self.by_property("title", title)
+ +
[docs] def by_object_description(self, object_description: str) -> Union['XAPhotosMediaItem', None]: + return self.by_property("objectDescription", object_description)
+ +
[docs] def by_favorite(self, favorite: bool) -> Union['XAPhotosMediaItem', None]: + return self.by_property("favorite", favorite)
+ +
[docs] def by_date(self, date: datetime) -> Union['XAPhotosMediaItem', None]: + return self.by_property("date", date)
+ +
[docs] def by_id(self, id: str) -> Union['XAPhotosMediaItem', None]: + return self.by_property("id", id)
+ +
[docs] def by_height(self, height: int) -> Union['XAPhotosMediaItem', None]: + return self.by_property("height", height)
+ +
[docs] def by_width(self, width: int) -> Union['XAPhotosMediaItem', None]: + return self.by_property("width", width)
+ +
[docs] def by_filename(self, filename: str) -> Union['XAPhotosMediaItem', None]: + return self.by_property("filename", filename)
+ +
[docs] def by_altitude(self, altitude: float) -> Union['XAPhotosMediaItem', None]: + return self.by_property("altitude", altitude)
+ +
[docs] def by_size(self, size: int) -> Union['XAPhotosMediaItem', None]: + return self.by_property("size", size)
+ +
[docs] def by_location(self, location: XABase.XALocation) -> Union['XAPhotosMediaItem', None]: + loc = (location.latitude, location.longitude) + return self.by_property("location", loc)
+ +
[docs] def get_clipboard_representation(self) -> list[NSURL]: + """Gets a clipboard-codable representation of each media item in the list. + + When the clipboard content is set to a list of media items, each item's file URL is added to the clipboard. + + :return: A list of media item file URLs + :rtype: list[NSURL] + + .. versionadded:: 0.0.8 + """ + return [x._get_url() for x in self]
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.id()) + ">"
+ +
[docs]class XAPhotosMediaItem(XABase.XAObject, XAClipboardCodable, XAImageLike): + """A photo or video in Photos.app. + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + + self.__photos_library = Photos.PHPhotoLibrary.sharedPhotoLibrary() + self.__image_manager = Photos.PHCachingImageManager.defaultManager() + self.__metadata_storage = [] + + fetch_options = Photos.PHFetchOptions.alloc().init() + all_photos = Photos.PHAsset.fetchAssetsWithOptions_(fetch_options) + + def __get_metadata(self, force: bool = True): + if self.__metadata_storage != [] and force is False: + return + + def result_handler(img_data, img_uti, img_orientation, img_info): + source = Quartz.CGImageSourceCreateWithData(img_data, {Quartz.kCGImageSourceShouldCache: True}) + metadata = Quartz.CGImageSourceCopyPropertiesAtIndex(source, 0, {Quartz.kCGImageSourceShouldCache: True}) + if metadata is not None: + self.__metadata_storage.append(metadata) + + options = Photos.PHImageRequestOptions.alloc().init() + options.setSynchronous_(True) + options.setDeliveryMode_(Photos.PHImageRequestOptionsDeliveryModeHighQualityFormat) + + self.__image_manager.requestImageDataAndOrientationForAsset_options_resultHandler_(self.xa_elem, options, result_handler) + + @property + def properties(self) -> dict: + """All properties of the media item. + """ + return self.xa_scel.properties() + + @property + def keywords(self) -> list[str]: + """A list of keywords to associate with a media item. + """ + self.xa_scel = self.xa_scel.get() + return list(self.xa_scel.keywords()) + + @keywords.setter + def keywords(self, keywords: list[str]): + self.set_scriptable_property('keywords', keywords) + + @property + def name(self) -> str: + """The name (title) of the media item. + """ + return self.xa_elem.title() + + @name.setter + def name(self, name: str): + self.set_scriptable_property("name", name) + + @property + def object_description(self) -> str: + """A description of the media item. + """ + return self.xa_scel.objectDescription() + + @object_description.setter + def object_description(self, object_description: str): + self.set_scriptable_property('objectDescription', object_description) + + @property + def favorite(self) -> bool: + """Whether the media item has been favorited. + """ + return self.xa_elem.favorite() + + @favorite.setter + def favorite(self, favorite: bool): + self.set_property('favorite', favorite) + + @property + def creation_date(self) -> datetime: + """The creation date of the media item. + """ + return self.xa_elem.creationDate() + + @creation_date.setter + def creation_date(self, creation_date: datetime): + self.set_scriptable_property('date', creation_date) + + @property + def modification_date(self) -> datetime: + """The last modification date of the media item. + """ + return self.xa_elem.modificationDate() + + @property + def is_photo(self) -> bool: + """Whether the media item is a photo. + """ + return self.xa_elem.isPhoto() + + @property + def duration(self) -> float: + """The duration of the media item. + """ + return self.xa_elem.duration() + + @property + def file_path(self) -> XABase.XAPath: + """The path to the main file for the media item. + """ + return XABase.XAPath(self.xa_elem.mainFileURL()) + + @property + def is_video(self) -> bool: + """Whether the media item is a video. + """ + return self.xa_elem.isVideo() + + @property + def is_hidden(self) -> bool: + """Whether the media item is hidden. + """ + return self.xa_elem.isHidden() + + @property + def is_burst(self) -> bool: + """Whether the media item is a burst photo. + """ + return self.xa_elem.representsBurst() + + @property + def id(self) -> str: + """The unique ID of the media item. + """ + return self.xa_elem.localIdentifier() + + @property + def height(self) -> int: + """The height of the media item in pixels. + """ + return self.xa_elem.pixelHeight() + + @property + def width(self) -> int: + """The width of the media item in pixels. + """ + return self.xa_elem.pixelWidth() + + @property + def filename(self) -> str: + """The name of the file on disk. + """ + return self.xa_elem.filename() + + @property + def altitude(self) -> float: + """The GPS altitude in meters. + """ + return self.xa_scel.altitude() + + @property + def size(self) -> int: + """The selected media item file size. + """ + return self.xa_scel.size() + + @property + def location(self) -> XABase.XALocation: + """The GPS latitude and longitude, in an ordered list of 2 numbers or missing values. Latitude in range -90.0 to 90.0, longitude in range -180.0 to 180.0. + """ + loc = self.xa_elem.location() + return XABase.XALocation( + latitude = loc.coordinate()[0], + longitude = loc.coordinate()[1], + altitude = loc.altitude(), + radius = loc.horizontalAccuracy() + ) + + @location.setter + def location(self, location: Union[XABase.XALocation, list[float]]): + if isinstance(location, list): + self.set_property('location', location) + else: + self.set_property('location', [location.latitude, location.longitude]) + +
[docs] def spotlight(self) -> 'XAPhotosMediaItem': + """Shows the media item in the front window of Photos.app. + + :return: The media item object + :rtype: XAPhotosMediaItem + + .. versionadded:: 0.0.6 + """ + self.xa_scel.spotlight() + return self
+ +
[docs] def duplicate(self) -> 'XAPhotosMediaItem': + """Duplicates the media item. + + :return: The newly created media item object + :rtype: XAPhotosMediaItem + + .. versionadded:: 0.0.2 + """ + return self.xa_scel.duplicate()
+ +
[docs] def show_in_preview(self): + """Opens the media item in Preview.app. + + .. versionadded:: 0.0.2 + """ + self.xa_wksp.openURL_(self.file_path.xa_elem)
+ +
[docs] def reveal_in_finder(self): + """Opens a Finder window or tab focused on the media item's containing folder with the media item selected. + + .. versionadded:: 0.0.2 + """ + self.xa_wksp.activateFileViewerSelectingURLs_([self.file_path.xa_elem])
+ +
[docs] def get_clipboard_representation(self) -> NSURL: + """Gets a clipboard-codable representation of the media item. + + When the clipboard content is set to a media item, the item's file URL is added to the clipboard. + + :return: The media item's file URL + :rtype: NSURL + + .. versionadded:: 0.0.8 + """ + return self.file_path.xa_elem
+ +
[docs] def get_image_representation(self) -> XABase.XAPath: + """Gets a representation of the object that can be used to initialize an :class:`~PyXA.XABase.XAImage` object. + + :return: The XAImage-compatible form of this object + :rtype: XABase.XAPath + """ + return self.file_path
+ + def __repr__(self): + if self.name is None: + return "<" + str(type(self)) + "id=" + self.id + ">" + return "<" + str(type(self)) + self.name + ", id=" + self.id + ">"
+ + + + +
[docs]class XAPhotosContainerList(XABase.XAList, XAClipboardCodable): + """A wrapper around lists of containers that employs fast enumeration techniques. + + All properties of containers can be called as methods on the wrapped list, returning a list containing each container's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAPhotosContainer + super().__init__(properties, obj_class, filter) + +
[docs] def properties(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("properties") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def parent(self) -> 'XAPhotosFolderList': + ls = self.xa_elem.arrayByApplyingSelector_("parent") or [] + return self._new_element(ls, XAPhotosFolderList)
+ +
[docs] def by_properties(self, properties: dict) -> Union['XAPhotosContainer', None]: + return self.by_property("properties", properties)
+ +
[docs] def by_id(self, id: str) -> Union['XAPhotosContainer', None]: + return self.by_property("id", id)
+ +
[docs] def by_name(self, name: str) -> Union['XAPhotosContainer', None]: + return self.by_property("name", name)
+ +
[docs] def by_parent(self, parent: 'XAPhotosFolder') -> Union['XAPhotosContainer', None]: + return self.by_property("parent", parent.xa_elem)
+ +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of each container in the list. + + When the clipboard content is set to a list of containers, each containers's name is added to the clipboard. + + :return: The container's name + :rtype: str + + .. versionadded:: 0.0.8 + """ + return self.name()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAPhotosContainer(XABase.XAObject, XAClipboardCodable): + """A class for... + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the container. + """ + return self.xa_elem.properties() + + @property + def id(self) -> str: + """The unique ID of this container. + """ + return self.xa_elem.id() + + @property + def name(self) -> str: + """The name of this container. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def parent(self) -> 'XAPhotosFolder': + """This container's parent folder, if any. + """ + return self._new_element(self.xa_elem.parent(), XAPhotosFolder) + +
[docs] def spotlight(self) -> 'XAPhotosContainer': + """Shows the container in the front window of Photos.app. + + :return: The container object + :rtype: XAPhotosContainer + + .. versionadded:: 0.0.6 + """ + self.xa_elem.spotlight() + return self
+ +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of the container. + + When the clipboard content is set to a container, the containers's name is added to the clipboard. + + :return: The container's name + :rtype: str + + .. versionadded:: 0.0.8 + """ + return self.name
+ + def __repr__(self): + return "<" + str(type(self)) + self.name + ", id=" + self.id + ">"
+ + + + +
[docs]class XAPhotosAlbumList(XAPhotosContainerList): + """A wrapper around lists of albums that employs fast enumeration techniques. + + All properties of albums can be called as methods on the wrapped list, returning a list containing each album's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAPhotosAlbum) + +
[docs] def push(self, container: 'XAPhotosContainer'): + name = "New Album" + desc = container.xa_elem.description() + if "name" in desc: + name = desc[desc.index("name") + 7:desc.index(";")] + super().push(container) + container.set_property("name", name)
+ +
[docs]class XAPhotosAlbum(XAPhotosContainer): + """An album in Photos.app. + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + +
[docs] def media_items(self, filter: Union[dict, None] = None) -> 'XAPhotosMediaItemList': + """Returns a list of media items, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned media items will have, or None + :type filter: Union[dict, None] + :return: The list of media items + :rtype: XAPhotosMediaItemList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.mediaItems(), XAPhotosMediaItemList, filter)
+ + + + +
[docs]class XAPhotosFolderList(XAPhotosContainerList): + """A wrapper around lists of folders that employs fast enumeration techniques. + + All properties of folders can be called as methods on the wrapped list, returning a list containing each folder's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAPhotosFolder) + +
[docs] def push(self, container: 'XAPhotosContainer'): + name = "New Folder" + desc = container.xa_elem.description() + if "name" in desc: + name = desc[desc.index("name") + 7:desc.index(";")] + super().push(container) + container.set_property("name", name)
+ +
[docs]class XAPhotosFolder(XAPhotosContainer): + """A folder in Photos.app. + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + +
[docs] def containers(self, filter: Union[dict, None] = None) -> 'XAPhotosContainerList': + """Returns a list of containers, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned containers will have, or None + :type filter: Union[dict, None] + :return: The list of containers + :rtype: XAPhotosContainerList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.containers(), XAPhotosContainerList, filter)
+ +
[docs] def albums(self, filter: Union[dict, None] = None) -> 'XAPhotosAlbumList': + """Returns a list of albums, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned albums will have, or None + :type filter: Union[dict, None] + :return: The list of albums + :rtype: XAPhotosAlbumList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.albums(), XAPhotosAlbumList, filter)
+ +
[docs] def folders(self, filter: Union[dict, None] = None) -> 'XAPhotosFolderList': + """Returns a list of folders, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned folders will have, or None + :type filter: Union[dict, None] + :return: The list of folders + :rtype: XAPhotosFolderList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.folders(), XAPhotosFolderList, filter)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Preview.html b/docs/_modules/PyXA/apps/Preview.html new file mode 100644 index 0000000..9fa8fee --- /dev/null +++ b/docs/_modules/PyXA/apps/Preview.html @@ -0,0 +1,373 @@ + + + + + + PyXA.apps.Preview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Preview

+""".. versionadded:: 0.0.1
+
+Control the macOS Preview application using JXA-like syntax.
+"""
+
+from typing import Union, Self
+
+import AppKit
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+from ..XAProtocols import XACanOpenPath, XACanPrintPath, XAClipboardCodable, XACloseable, XAPrintable
+
+
[docs]class XAPreviewApplication(XABaseScriptable.XASBApplication, XACanOpenPath, XACanPrintPath): + """A class for managing and interacting with Preview.app. + + .. seealso:: :class:`XAPreviewWindow`, :class:`XAPreviewDocument` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XAPreviewWindow + + @property + def frontmost(self) -> bool: + """Whether Preview is the active application. + """ + return self.xa_scel.frontmost() + + @frontmost.setter + def frontmost(self, frontmost: bool): + self.set_property("frontmost", frontmost) + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def version(self) -> str: + """The version of Preview.app. + """ + return self.xa_scel.version() + +
[docs] def print(self, path: Union[str, AppKit.NSURL], show_prompt: bool = True): + """Opens the print dialog for the file at the given path, if the file can be opened in Preview. + + :param path: The path of the file to print. + :type path: Union[str, AppKit.NSURL] + :param show_prompt: Whether to show the print dialog or skip directly printing, defaults to True + :type show_prompt: bool, optional + + .. versionadded:: 0.0.1 + """ + if isinstance(path, str): + path = AppKit.NSURL.alloc().initFileURLWithPath_(path) + self.xa_scel.print_printDialog_withProperties_(path, show_prompt, None)
+ +
[docs] def documents(self, filter: dict = None) -> 'XAPreviewDocumentList': + """Returns a list of documents matching the filter. + + :Example 1: List all documents + + >>> import PyXA + >>> app = PyXA.Application("Preview") + >>> print(app.documents()) + <<class 'PyXA.apps.Preview.XAPreviewDocumentList'>['Example1.pdf', 'Example2.pdf']> + + .. versionchanged:: 0.0.4 + + Now returns an object of :class:`XAPreviewDocumentList` instead of a default list. + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_scel.documents(), XAPreviewDocumentList, filter)
+ + + + +
[docs]class XAPreviewWindow(XABaseScriptable.XASBWindow, XABaseScriptable.XASBPrintable): + """A class for managing and interacting with Preview windows. + + .. seealso:: :class:`XAPreviewApplication` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the window. + """ + return self.xa_elem.properties() + + @property + def document(self) -> 'XAPreviewDocument': + """The document currently displayed in the window. + """ + return self._new_element(self.xa_elem.document(), XAPreviewDocument) + + @document.setter + def document(self, document: 'XAPreviewDocument'): + self.set_property("document", document.xa_elem) + + @property + def floating(self) -> bool: + """Whether the window floats. + """ + return self.xa_elem.floating() + + @property + def modal(self) -> bool: + """Whether the window is a modal view. + """ + return self.xa_elem.modal() + + @property + def titled(self) -> bool: + """Whether the window has a title bar. + """ + return self.xa_elem.titled()
+ + + + +
[docs]class XAPreviewDocumentList(XABase.XAList, XAClipboardCodable): + """A wrapper around lists of documents that employs fast enumeration techniques. + + All properties of documents can be called as methods on the wrapped list, returning a list containing each documents's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAPreviewDocument, filter) + +
[docs] def properties(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("properties") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def path(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("path") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def modified(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("modified") or [])
+ +
[docs] def by_properties(self, properties: dict) -> Union['XAPreviewDocument', None]: + return self.by_property("properties", properties)
+ +
[docs] def by_name(self, name: str) -> Union['XAPreviewDocument', None]: + return self.by_property("name", name)
+ +
[docs] def by_path(self, path: Union[str, XABase.XAPath]) -> Union['XAPreviewDocument', None]: + if isinstance(path, str): + path = XABase.XAPath(str) + return self.by_property("path", str(path.xa_elem))
+ +
[docs] def by_modified(self, modified: bool) -> Union['XAPreviewDocument', None]: + return self.by_property("modified", modified)
+ +
[docs] def get_clipboard_representation(self) -> list[AppKit.NSURL]: + """Gets a clipboard-codable representation of each document in the list. + + When the clipboard content is set to a document, each documents's file URL is added to the clipboard. + + :return: The document's file URL + :rtype: list[AppKit.NSURL] + + .. versionadded:: 0.0.8 + """ + paths = self.path() + return [x.xa_elem for x in paths]
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAPreviewDocument(XABase.XATextDocument, XAPrintable, XACloseable, XAClipboardCodable): + """A class for managing and interacting with documents in Preview. + + .. seealso:: :class:`XAPreviewApplication` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the document. + """ + return self.xa_elem.properties() + + @property + def name(self) -> str: + """The name of the document. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property("name", name) + + @property + def path(self) -> XABase.XAPath: + """The document's file path. + """ + return XABase.XAPath(self.xa_elem.path()) + + @path.setter + def path(self, path: XABase.XAPath): + self.set_property("path", path.xa_elem) + + @property + def modified(self) -> bool: + """Whether the document has been modified since the last save. + """ + return self.xa_elem.modified() + +
[docs] def print(self, print_properties: Union[dict, None] = None, show_dialog: bool = True) -> Self: + """Prints the document. + + :param print_properties: Properties to set for printing, defaults to None + :type print_properties: Union[dict, None], optional + :param show_dialog: Whether to show the print dialog, defaults to True + :type show_dialog: bool, optional + :return: The document object + :rtype: Self + + .. versionadded:: 0.0.4 + """ + if print_properties is None: + print_properties = {} + self.xa_elem.print_printDialog_withProperties_(self.xa_elem, show_dialog, print_properties) + return self
+ +
[docs] def save(self, file_path: str = None): + """Saves the document. + + If a file path is provided, Preview will attempt to save the file with the specified file extension at that path. If automatic conversion fails, the document will be saved in its original file format. If no path is provided, the document is saved at the current path for the document. + + :Example 1: Save a PDF (or any compatible document) as a PNG + + >>> import PyXA + >>> app = PyXA.Application("Preview") + >>> doc = app.documents()[0] # A PDF + >>> # Save to Downloads to avoid permission errors + >>> doc.save("/Users/steven/Downloads/Example.png") + + .. versionadded:: 0.0.4 + """ + self.xa_elem.saveAs_in_(None, file_path)
+ +
[docs] def get_clipboard_representation(self) -> AppKit.NSURL: + """Gets a clipboard-codable representation of the document. + + When the clipboard content is set to a document, the documents's file URL is added to the clipboard. + + :return: The document's file URL + :rtype: AppKit.NSURL + + .. versionadded:: 0.0.8 + """ + return self.path.xa_elem
+ + def __repr__(self): + return self.name
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/QuickTimePlayer.html b/docs/_modules/PyXA/apps/QuickTimePlayer.html new file mode 100644 index 0000000..49a5512 --- /dev/null +++ b/docs/_modules/PyXA/apps/QuickTimePlayer.html @@ -0,0 +1,895 @@ + + + + + + PyXA.apps.QuickTimePlayer — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.QuickTimePlayer

+""".. versionadded:: 0.0.6
+
+Control the macOS QuickTime application using JXA-like syntax.
+"""
+from typing import Any, Union
+
+import AppKit
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+from ..XAProtocols import XACanOpenPath
+
+
[docs]class XAQuickTimeApplication(XABaseScriptable.XASBApplication, XACanOpenPath): + """A class for managing and interacting with QuickTime.app. + + .. seealso:: :class:`XAQuickTimeWindow`, :class:`XAQuickTimeDocument`, :class:`XAQuickTimeAudioRecordingDevice`, :class:`XAQuickTimeVideoRecordingDevice`, :class:`XAQuickTimeAudioCompressionPreset`, :class:`XAQuickTimeMovieCompressionPreset`, :class:`XAQuickTimeScreenCompressionPreset` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XAQuickTimeWindow + + @property + def properties(self) -> dict: + """Every property of the QuickTime application. + """ + return self.xa_scel.properties() + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether QuickTime is the frontmost application. + """ + return self.xa_scel.frontmost() + + @frontmost.setter + def frontmost(self, frontmost: bool): + self.set_property("frontmost", frontmost) + + @property + def version(self) -> str: + """The version of QuickTime.app. + """ + return self.xa_scel.version() + + @property + def current_document(self) -> 'XAQuickTimeDocument': + """The document currently open in the front window of QuickTime. + """ + return self.front_window.document + +
[docs] def open(self, path: Union[str, AppKit.NSURL]) -> 'XAQuickTimeDocument': + """Opens the file at the given filepath. + + :param target: The path of a file to open. + :type target: Union[str, AppKit.NSURL] + :return: A reference to the newly opened document. + :rtype: XAQuickTimeDocument + + .. versionadded:: 0.0.6 + """ + if not isinstance(path, AppKit.NSURL): + if "://" not in path: + path = XABase.XAPath(path) + self.xa_wksp.openURLs_withAppBundleIdentifier_options_additionalEventParamDescriptor_launchIdentifiers_([path.xa_elem], self.xa_elem.bundleIdentifier(), 0, None, None) + return self._new_element(self.front_window.document, XAQuickTimeDocument)
+ +
[docs] def open_url(self, url: Union[str, AppKit.NSURL]) -> 'XAQuickTimeDocument': + """Opens the file at the given (remote) URL. + + :param target: The path of a file to stream. + :type target: Union[str, NSURL] + :return: A reference to the newly opened document. + :rtype: XAQuickTimeDocument + + .. versionadded:: 0.0.6 + """ + if not isinstance(url, AppKit.NSURL): + if "://" not in url: + url = XABase.XAURL(url) + self.xa_scel.openURL_(url)
+ +
[docs] def new_audio_recording(self) -> 'XAQuickTimeDocument': + """Starts a new audio recording. + + :return: The newly created audio recording document. + :rtype: XAQuickTimeDocument + + .. versionadded:: 0.0.6 + """ + return self.xa_scel.newAudioRecording()
+ +
[docs] def new_movie_recording(self) -> 'XAQuickTimeDocument': + """Starts a new movie recording. + + :return: The newly created movie recording document. + :rtype: XAQuickTimeDocument + + .. versionadded:: 0.0.6 + """ + return self.xa_scel.newMovieRecording()
+ +
[docs] def new_screen_recording(self) -> 'XAQuickTimeApplication': + """Starts a new screen recording. + + :return: A reference to the application object. + :rtype: XAQuickTimeApplication + + .. versionadded:: 0.0.6 + """ + self.xa_scel.newScreenRecording() + return self
+ +
[docs] def documents(self, filter: Union[dict, None] = None) -> 'XAQuickTimeDocumentList': + """Returns a list of documents, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned documents will have, or None + :type filter: Union[dict, None] + :return: The list of documents + :rtype: XAQuickTimeDocumentList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.documents(), XAQuickTimeDocumentList, filter)
+ +
[docs] def audio_recording_devices(self, filter: Union[dict, None] = None) -> 'XAQuickTimeAudioRecordingDeviceList': + """Returns a list of audio recording devices, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned audio recording devices will have, or None + :type filter: Union[dict, None] + :return: The list of audio recording devices + :rtype: XAQuickTimeAudioRecordingDeviceList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.audioRecordingDevices(), XAQuickTimeAudioRecordingDeviceList, filter)
+ +
[docs] def video_recording_devices(self, filter: Union[dict, None] = None) -> 'XAQuickTimeVideoRecordingDeviceList': + """Returns a list of video recording devices, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned video recording devices will have, or None + :type filter: Union[dict, None] + :return: The list of video recording devices + :rtype: XAQuickTimeVideoRecordingDeviceList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.videoRecordingDevices(), XAQuickTimeVideoRecordingDeviceList, filter)
+ +
[docs] def audio_compression_presets(self, filter: Union[dict, None] = None) -> 'XAQuickTimeAudioCompressionPresetList': + """Returns a list of audio compression presets, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned p[resets] will have, or None + :type filter: Union[dict, None] + :return: The list of audio compression presets + :rtype: XAQuickTimeAudioCompressionPresetList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.audioCompressionPresets(), XAQuickTimeAudioCompressionPresetList, filter)
+ +
[docs] def movie_compression_presets(self, filter: Union[dict, None] = None) -> 'XAQuickTimeMovieCompressionPresetList': + """Returns a list of movie compression presets, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned presets will have, or None + :type filter: Union[dict, None] + :return: The list of movie compression presets + :rtype: XAQuickTimeMovieCompressionPresetList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.movieCompressionPresets(), XAQuickTimeMovieCompressionPresetList, filter)
+ +
[docs] def screen_compression_presets(self, filter: Union[dict, None] = None) -> 'XAQuickTimeScreenCompressionPresetList': + """Returns a list of screen compression presets, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned presets will have, or None + :type filter: Union[dict, None] + :return: The list of screen compression presets + :rtype: XAQuickTimeScreenCompressionPresetList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.screenCompressionPresets(), XAQuickTimeScreenCompressionPresetList, filter)
+ + + +
[docs]class XAQuickTimeWindow(XABaseScriptable.XASBWindow): + """A QuickTime window. + + .. seealso:: :class:`XAQuickTimeApplication` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """Every property of a QuickTime window. + """ + return self.xa_elem.properties() + + @property + def document(self) -> 'XAQuickTimeDocument': + """The document currently displayed in the front window of QuickTime. + """ + return self._new_element(self.xa_elem.document(), XAQuickTimeDocument) + +
[docs] def set_property(self, property_name: str, value: Any): + """Sets the specified property to the given value. + + .. deprecated:: 0.1.1 + + Set the desired attribute directly instead. + """ + if isinstance(value, tuple): + if isinstance(value[0], tuple): + # Value is a rectangle boundary + x = value[0][0] + y = value[0][1] + w = value[1][0] + h = value[1][1] + value = AppKit.NSValue.valueWithRect_(AppKit.NSMakeRect(x, y, w, h)) + super().set_property(property_name, value)
+ + + + +
[docs]class XAQuickTimeDocumentList(XABase.XAList): + """A wrapper around lists of themes that employs fast enumeration techniques. + + All properties of themes can be called as methods on the wrapped list, returning a list containing each theme's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAQuickTimeDocument, filter) + +
[docs] def properties(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("properties") or [])
+ +
[docs] def audio_volume(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("audioVolume") or [])
+ +
[docs] def current_time(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("currentTime") or [])
+ +
[docs] def data_rate(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("dataRate") or [])
+ +
[docs] def data_size(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("dataSize") or [])
+ +
[docs] def duration(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("duration") or [])
+ +
[docs] def looping(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("looping") or [])
+ +
[docs] def muted(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("muted") or [])
+ +
[docs] def natural_dimensions(self) -> list[tuple[int, int]]: + return list(self.xa_elem.arrayByApplyingSelector_("naturalDimensions") or [])
+ +
[docs] def playing(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("playing") or [])
+ +
[docs] def rate(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("rate") or [])
+ +
[docs] def presenting(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("presenting") or [])
+ +
[docs] def current_microphone(self) -> 'XAQuickTimeAudioRecordingDeviceList': + ls = self.xa_elem.arrayByApplyingSelector_("currentMicrophone") or [] + return self._new_element(ls, XAQuickTimeAudioRecordingDeviceList)
+ +
[docs] def current_camera(self) -> 'XAQuickTimeVideoRecordingDeviceList': + ls = self.xa_elem.arrayByApplyingSelector_("currentCamera") or [] + return self._new_element(ls, XAQuickTimeVideoRecordingDeviceList)
+ +
[docs] def current_audio_compression(self) -> 'XAQuickTimeAudioCompressionPresetList': + ls = self.xa_elem.arrayByApplyingSelector_("currentAudioCompression") or [] + return self._new_element(ls, XAQuickTimeAudioCompressionPresetList)
+ +
[docs] def current_movie_compression(self) -> 'XAQuickTimeMovieCompressionPresetList': + ls = self.xa_elem.arrayByApplyingSelector_("currentMovieCompression") or [] + return self._new_element(ls, XAQuickTimeMovieCompressionPresetList)
+ +
[docs] def current_screen_compression(self) -> 'XAQuickTimeScreenCompressionPresetList': + ls = self.xa_elem.arrayByApplyingSelector_("currentScreenCompression") or [] + return self._new_element(ls, XAQuickTimeScreenCompressionPresetList)
+ +
[docs] def by_properties(self, properties: dict) -> 'XAQuickTimeDocument': + return self.by_property("properties", properties)
+ +
[docs] def by_audio_volume(self, audio_volume: float) -> 'XAQuickTimeDocument': + return self.by_property("audioVolume", audio_volume)
+ +
[docs] def by_current_time(self, current_time: float) -> 'XAQuickTimeDocument': + return self.by_property("currentTime", current_time)
+ +
[docs] def by_data_rate(self, data_rate: int) -> 'XAQuickTimeDocument': + return self.by_property("dataRate", data_rate)
+ +
[docs] def by_data_size(self, data_size: int) -> 'XAQuickTimeDocument': + return self.by_property("dataSize", data_size)
+ +
[docs] def by_duration(self, duration: float) -> 'XAQuickTimeDocument': + return self.by_property("duration", duration)
+ +
[docs] def by_looping(self, looping: bool) -> 'XAQuickTimeDocument': + return self.by_property("looping", looping)
+ +
[docs] def by_muted(self, muted: bool) -> 'XAQuickTimeDocument': + return self.by_property("muted", muted)
+ +
[docs] def by_natural_dimensions(self, natural_dimensions: tuple[int, int]) -> 'XAQuickTimeDocument': + return self.by_property("naturalDimensions", natural_dimensions)
+ +
[docs] def by_playing(self, playing: bool) -> 'XAQuickTimeDocument': + return self.by_property("playing", playing)
+ +
[docs] def by_rate(self, rate: float) -> 'XAQuickTimeDocument': + return self.by_property("rate", rate)
+ +
[docs] def by_presenting(self, presenting: bool) -> 'XAQuickTimeDocument': + return self.by_property("presenting", presenting)
+ +
[docs] def by_current_microphone(self, current_microphone: float) -> 'XAQuickTimeDocument': + return self.by_property("currentMicrophone", current_microphone.xa_elem)
+ +
[docs] def by_current_camera(self, current_camera: float) -> 'XAQuickTimeDocument': + return self.by_property("currentCamera", current_camera.xa_elem)
+ +
[docs] def by_current_audio_compression(self, current_audio_compression: float) -> 'XAQuickTimeDocument': + return self.by_property("currentAudioCompression", current_audio_compression.xa_elem)
+ +
[docs] def by_current_movie_compression(self, current_movie_compression: float) -> 'XAQuickTimeDocument': + return self.by_property("currentMovieCompression", current_movie_compression.xa_elem)
+ +
[docs] def by_current_screen_compression(self, current_screen_compression: float) -> 'XAQuickTimeDocument': + return self.by_property("currentScreenCompression", current_screen_compression.xa_elem)
+ +
[docs]class XAQuickTimeDocument(XABase.XAObject): + """A class for managing and interacting with documents in QuickTime.app. + + .. seealso:: :class:`XAQuickTimeApplication` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the document. + """ + return self.xa_elem.properties() + + @property + def audio_volume(self) -> float: + """The volume of the movie from 0 to 1 (0 to 100%). + """ + return self.xa_elem.audioVolume() + + @audio_volume.setter + def audio_volume(self, audio_volume: float): + self.set_property("audioVolume", audio_volume) + + @property + def current_time(self) -> float: + """The current time of the movie in seconds. + """ + return self.xa_elem.currentTime() + + @current_time.setter + def current_time(self, current_time: float): + self.set_property("currentTime", current_time) + + @property + def data_rate(self) -> int: + """The data rate of the movie in bytes per second. + """ + return self.xa_elem.dataRate() + + @property + def data_size(self) -> int: + """The data size of the movie in bytes. + """ + return self.xa_elem.dataSize() + + @property + def duration(self) -> float: + """The duration of the movie in seconds. + """ + return self.xa_elem.duration() + + @property + def looping(self) -> bool: + """Whether the movie plays in a loop. + """ + return self.xa_elem.looping() + + @looping.setter + def looping(self, looping: bool): + self.set_property("looping", looping) + + @property + def muted(self) -> bool: + """Whether the movie is muted. + """ + return self.xa_elem.muted() + + @muted.setter + def muted(self, muted: bool): + self.set_property("muted", muted) + + @property + def natural_dimensions(self) -> tuple[int, int]: + """The national dimensions of the movie. + """ + return self.xa_elem.naturalDimensions() + + @property + def playing(self) -> bool: + """Whether the movie is currently playing. + """ + return self.xa_elem.playing() + + @property + def rate(self) -> float: + """The current rate of the movie. + """ + return self.xa_elem.rate() + + @rate.setter + def rate(self, rate: float): + self.set_property("rate", rate) + + @property + def presenting(self) -> bool: + """Whether the movie is presented in full screen. + """ + return self.xa_elem.presenting() + + @presenting.setter + def presenting(self, presenting: bool): + self.set_property("presenting", presenting) + + @property + def current_microphone(self) -> 'XAQuickTimeAudioRecordingDevice': + """The currently previewing audio device. + """ + return self._new_element(self.xa_elem.currentMicrophone(), XAQuickTimeAudioRecordingDevice) + + @current_microphone.setter + def current_microphone(self, current_microphone: 'XAQuickTimeAudioRecordingDevice'): + self.set_property("currentMicrophone", current_microphone.xa_elem) + + @property + def current_camera(self) -> 'XAQuickTimeVideoRecordingDevice': + """The currently previewing video device. + """ + return self._new_element(self.xa_elem.currentCamera(), XAQuickTimeVideoRecordingDevice) + + @current_camera.setter + def current_camera(self, current_camera: 'XAQuickTimeVideoRecordingDevice'): + self.set_property("currentCamera", current_camera.xa_elem) + + @property + def current_audio_compression(self) -> 'XAQuickTimeAudioCompressionPreset': + """The current audio compression preset. + """ + return self._new_element(self.xa_elem.currentAudioCompression(), XAQuickTimeAudioCompressionPreset) + + @current_audio_compression.setter + def current_audio_compression(self, current_audio_compression: 'XAQuickTimeAudioCompressionPreset'): + self.set_property("currentAudioCompression", current_audio_compression.xa_elem) + + @property + def current_movie_compression(self) -> 'XAQuickTimeMovieCompressionPreset': + """The current movie compression preset. + """ + return self._new_element(self.xa_elem.currentMovieCompression(), XAQuickTimeMovieCompressionPreset) + + @current_movie_compression.setter + def current_movie_compression(self, current_movie_compression: 'XAQuickTimeMovieCompressionPreset'): + self.set_property("currentMovieCompression", current_movie_compression.xa_elem) + + @property + def current_screen_compression(self) -> 'XAQuickTimeScreenCompressionPreset': + """The current screen compression preset. + """ + return self._new_element(self.xa_elem.currentScreenCompression(), XAQuickTimeScreenCompressionPreset) + + @current_screen_compression.setter + def current_screen_compression(self, current_screen_compression: 'XAQuickTimeScreenCompressionPreset'): + self.set_property("currentScreenCompression", current_screen_compression.xa_elem) + +
[docs] def play(self) -> 'XAQuickTimeDocument': + self.xa_elem.play() + return self
+ +
[docs] def start(self) -> 'XAQuickTimeDocument': + self.xa_elem.start() + return self
+ +
[docs] def pause(self) -> 'XAQuickTimeDocument': + self.xa_elem.pause() + return self
+ +
[docs] def resume(self) -> 'XAQuickTimeDocument': + self.xa_elem.resume() + return self
+ +
[docs] def stop(self) -> 'XAQuickTimeDocument': + self.xa_elem.stop() + return self
+ +
[docs] def step_backward(self, num_steps: int) -> 'XAQuickTimeDocument': + self.xa_elem.stepBackwardBy_(num_steps) + return self
+ +
[docs] def step_forward(self, num_steps: int) -> 'XAQuickTimeDocument': + self.xa_elem.stepForwardBy_(num_steps) + return self
+ +
[docs] def trim(self, start_time: float, end_time: float) -> 'XAQuickTimeDocument': + self.xa_elem.trimFrom_to_(start_time, end_time) + return self
+ +
[docs] def present(self) -> 'XAQuickTimeDocument': + self.xa_elem.present() + return self
+ + + + +
[docs]class XAQuickTimeAudioRecordingDeviceList(XABase.XAList): + """A wrapper around lists of audio recording devices that employs fast enumeration techniques. + + All properties of audio recording devices can be called as methods on the wrapped list, returning a list containing each devices's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAQuickTimeAudioRecordingDevice, filter) + +
[docs] def properties(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("properties") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("ID") or [])
+ +
[docs]class XAQuickTimeAudioRecordingDevice(XABase.XAObject): + """A class for managing and interacting with microphones in QuickTime.app. + + .. seealso:: :class:`XAQuickTimeApplication` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the device. + """ + return self.xa_elem.properties() + + @property + def name(self) -> str: + """The name of the device. + """ + return self.xa_elem.name() + + @property + def id(self) -> str: + """The unique identifier for the device. + """ + return self.xa_elem.ID()
+ + + + +
[docs]class XAQuickTimeVideoRecordingDeviceList(XABase.XAList): + """A wrapper around lists of video recording devices that employs fast enumeration techniques. + + All properties of video recording devices can be called as methods on the wrapped list, returning a list containing each devices's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAQuickTimeVideoRecordingDevice, filter) + +
[docs] def properties(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("properties") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("ID") or [])
+ +
[docs]class XAQuickTimeVideoRecordingDevice(XABase.XAObject): + """A class for managing and interacting with cameras in QuickTime.app. + + .. seealso:: :class:`XAQuickTimeApplication` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the device. + """ + return self.xa_elem.properties() + + @property + def name(self) -> str: + """The name of the device. + """ + return self.xa_elem.name() + + @property + def id(self) -> str: + """The unique identifier for the device. + """ + return self.xa_elem.ID()
+ + + + +
[docs]class XAQuickTimeAudioCompressionPresetList(XABase.XAList): + """A wrapper around lists of audio compression presets that employs fast enumeration techniques. + + All properties of audio compression presets can be called as methods on the wrapped list, returning a list containing each presets's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAQuickTimeAudioCompressionPreset, filter) + +
[docs] def properties(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("properties") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("ID") or [])
+ +
[docs]class XAQuickTimeAudioCompressionPreset(XABase.XAObject): + """A class for managing and interacting with audio compression presets in QuickTime.app. + + .. seealso:: :class:`XAQuickTimeApplication` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the preset. + """ + return self.xa_elem.properties() + + @property + def name(self) -> str: + """The name of the preset. + """ + return self.xa_elem.name() + + @property + def id(self) -> str: + """The unique identifier for the preset. + """ + return self.xa_elem.ID()
+ + + + +
[docs]class XAQuickTimeMovieCompressionPresetList(XABase.XAList): + """A wrapper around lists of movie compression presets that employs fast enumeration techniques. + + All properties of movie compression presets can be called as methods on the wrapped list, returning a list containing each presets's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAQuickTimeMovieCompressionPreset, filter) + +
[docs] def properties(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("properties") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("ID") or [])
+ +
[docs]class XAQuickTimeMovieCompressionPreset(XABase.XAObject): + """A class for managing and interacting with movie compression presets in QuickTime.app. + + .. seealso:: :class:`XAQuickTimeApplication` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the preset. + """ + return self.xa_elem.properties() + + @property + def name(self) -> str: + """The name of the preset. + """ + return self.xa_elem.name() + + @property + def id(self) -> str: + """The unique identifier for the preset. + """ + return self.xa_elem.ID()
+ + + + +
[docs]class XAQuickTimeScreenCompressionPresetList(XABase.XAList): + """A wrapper around lists of screen compression presets that employs fast enumeration techniques. + + All properties of screen compression presets can be called as methods on the wrapped list, returning a list containing each presets's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAQuickTimeScreenCompressionPreset, filter) + +
[docs] def properties(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("properties") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("ID") or [])
+ +
[docs]class XAQuickTimeScreenCompressionPreset(XABase.XAObject): + """A class for managing and interacting with screen compression presets in QuickTime.app. + + .. seealso:: :class:`XAQuickTimeApplication` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the preset. + """ + return self.xa_elem.properties() + + @property + def name(self) -> str: + """The name of the preset. + """ + return self.xa_elem.name() + + @property + def id(self) -> str: + """The unique identifier for the preset. + """ + return self.xa_elem.ID()
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/RStudio.html b/docs/_modules/PyXA/apps/RStudio.html new file mode 100644 index 0000000..2c78d7f --- /dev/null +++ b/docs/_modules/PyXA/apps/RStudio.html @@ -0,0 +1,133 @@ + + + + + + PyXA.apps.RStudio — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.RStudio

+""".. versionadded:: 0.1.0
+
+Control RStudio using JXA-like syntax.
+"""
+
+from typing import Any
+from PyXA import XABaseScriptable
+
+
[docs]class XARStudioApplication(XABaseScriptable.XASBApplication): + """A class for interacting with RStudio.app. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + +
[docs] def cmd(self, cmd: str): + """Executes R code in RStudio, does NOT return the execution result. + + :param cmd: The R code to evaluate + :type cmd: str + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("RStudio") + >>> app.cmd("5*5") + + .. versionadded:: 0.1.0 + """ + self.xa_scel.cmd_(cmd)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Reminders.html b/docs/_modules/PyXA/apps/Reminders.html new file mode 100644 index 0000000..3384ef9 --- /dev/null +++ b/docs/_modules/PyXA/apps/Reminders.html @@ -0,0 +1,1318 @@ + + + + + + PyXA.apps.Reminders — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Reminders

+""".. versionadded:: 0.0.1
+
+Control the macOS Reminders application using JXA-like syntax.
+"""
+
+from datetime import datetime
+from typing import Literal, Union
+
+import EventKit
+import AppKit
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+
+
[docs]class XARemindersApplication(XABaseScriptable.XASBApplication): + """A class for managing and interacting with scripting elements of the Reminders application. + + .. seealso:: :class:`XARemindersAccount`, :class:`XARemindersList`, :class:`XARemindersReminder` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XARemindersWindow + + self.pasteboard_types = { + "com.apple.reminders.reminderCopyPaste": self._get_clipboard_reminder, + } + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether Reminders is the active application. + """ + return self.xa_scel.frontmost() + + @property + def version(self) -> str: + """The version number of Reminders.app. + """ + return self.xa_scel.version() + + @property + def default_account(self) -> 'XARemindersAccount': + """The default account in the Reminders application. + """ + return self._new_element(self.xa_scel.defaultAccount(), XARemindersAccount) + + @property + def default_list(self) -> 'XARemindersList': + """The default list in the Reminders application. + """ + return self._new_element(self.xa_scel.defaultList(), XARemindersList) + + def _get_clipboard_reminder(self, reminder_name: str) -> 'XARemindersReminder': + return self.reminders({"name": reminder_name})[0] + +
[docs] def documents(self, filter: Union[dict, None] = None) -> 'XARemindersDocumentList': + """Returns a list of documents, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned documents will have, or None + :type filter: Union[dict, None] + :return: The list of documents + :rtype: XARemindersDocumentList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_scel.documents(), XARemindersDocumentList, filter)
+ +
[docs] def accounts(self, filter: Union[dict, None] = None) -> 'XARemindersAccountList': + """Returns a list of accounts, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned accounts will have, or None + :type filter: Union[dict, None] + :return: The list of accounts + :rtype: XARemindersAccountList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_scel.accounts(), XARemindersAccountList, filter)
+ +
[docs] def lists(self, filter: Union[dict, None] = None) -> 'XARemindersListList': + """Returns a list of reminder lists, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned lists will have, or None + :type filter: Union[dict, None] + :return: The list of reminder lists + :rtype: XARemindersListList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_scel.lists(), XARemindersListList, filter)
+ +
[docs] def reminders(self, filter: Union[dict, None] = None) -> 'XARemindersReminderList': + """Returns a list of reminders, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned reminders will have, or None + :type filter: Union[dict, None] + :return: The list of reminders + :rtype: XARemindersReminderList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_scel.reminders(), XARemindersReminderList, filter)
+ +
[docs] def new_list(self, name: str = "New List", color: str = "#FF0000", emblem: str = "symbol0") -> 'XARemindersList': + """Creates a new reminder with the given name, body, and due date in the specified reminder list. + + If no list is provided, the reminder is created in the default list. + + :param title: The name of the list, defaults to "New List" + :type name: str, optional + :param color: The HEX color of the list's icon. + :type color: str, optional + :param emblem: The symbol to use as the list's icon. + :type emblem: str, optional + :return: A reference to the newly created list. + :rtype: XAReminderList + + .. versionadded:: 0.0.1 + """ + new_list = self.make("list", {"name": name, "color": color, "emblem": emblem}) + self.lists().push(new_list) + return self.lists()[-1]
+ +
[docs] def new_reminder(self, name: str = "New Reminder", due_date: datetime = None, reminder_list: 'XARemindersList' = None) -> 'XARemindersReminder': + """Creates a new reminder with the given name, body, and due date in the specified reminder list. + If no list is provided, the reminder is created in the default list. + + :param title: The name of the reminder, defaults to "New Reminder" + :type title: str, optional + :param notes: The text notes attached to the reminder, defaults to "" + :type notes: str, optional + :param due_date: The date and time when the reminder will be due. + :type due_date: datetime, optional + :param reminder_list: The list that the new reminder will be added to. + :type reminder_list: XAReminderList, optional + :return: A reference to the newly created reminder. + :rtype: XAReminder + + :Example: + + >>> from datetime import datetime, timedelta + >>> import PyXA + >>> app = PyXA.Application("Reminder") + >>> due_date = datetime.now() + timedelta(hours = 1) + >>> reminder = app.new_reminder("Read PyXA listation", "Complete 1 tutorial", due_date) + >>> print(reminder.id) + B0DD7836-7C05-48D4-B806-D6A76317452E + + .. seealso:: :class:`XAReminder`, :func:`new_list` + + .. versionadded:: 0.0.1 + """ + new_reminder = self.make("reminder", {"name": name, "dueDate": due_date}) + if reminder_list is None: + self.reminders().push(new_reminder) + return self.reminders()[-1] + reminder_list.push(new_reminder) + return reminder_list.reminders()[-1]
+ +
[docs] def make(self, specifier: str, properties: dict = None): + """Creates a new element of the given specifier class without adding it to any list. + + Use :func:`XABase.XAList.push` to push the element onto a list. + + :param specifier: The classname of the object to create + :type specifier: str + :param properties: The properties to give the object + :type properties: dict + :return: A PyXA wrapped form of the object + :rtype: XABase.XAObject + + .. versionadded:: 0.0.6 + """ + if properties is None: + properties = {} + + obj = self.xa_scel.classForScriptingClass_(specifier).alloc().initWithProperties_(properties) + + if specifier == "document": + return self._new_element(obj, XARemindersDocument) + elif specifier == "list": + return self._new_element(obj, XARemindersList) + elif specifier == "reminder": + return self._new_element(obj, XARemindersReminder)
+ + +
[docs]class XARemindersWindow(XABaseScriptable.XASBWindow): + """A window of the Reminders application. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def document(self) -> 'XARemindersDocument': + """The document whose contents are displayed in the window. + """ + return self._new_element(self.xa_elem.document(), XARemindersDocument) + +
[docs] def close(self, save: bool = True) -> None: + """Closes the window. + + :param save: Whether to save the current document before closing, defaults to True + :type save: bool, optional + :return: The window object + :rtype: XARemindersDocument + + .. versionadded:: 0.0.6 + """ + return self.xa_elem.closeSaving_savingIn_(save, None)
+ +
[docs] def save(self) -> 'XARemindersWindow': + """Saves the current document of the window. + + :return: The window object + :rtype: XARemindersWindow + + .. versionadded:: 0.0.6 + """ + return self.xa_elem.saveIn_as_(None, None)
+ +
[docs] def print(self, properties: dict, show_dialog: bool = True) -> 'XARemindersWindow': + """Prints the window. + + :param properties: The settings to pre-populate the print dialog with + :type properties: dict + :param show_dialog: Whether to show the print dialog or skip right to printing, defaults to True + :type show_dialog: bool, optional + :return: The window object + :rtype: XARemindersWindow + + .. versionadded:: 0.0.6 + """ + return self.xa_elem.printWithProperties_printDialog_(properties, show_dialog)
+ +
[docs] def lists(self, filter: Union[dict, None] = None) -> 'XARemindersListList': + """Returns a list of reminder lists, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned lists will have, or None + :type filter: Union[dict, None] + :return: The list of reminder lists + :rtype: XARemindersListList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.lists(), XARemindersListList, filter)
+ +
[docs] def reminders(self, filter: Union[dict, None] = None) -> 'XARemindersReminderList': + """Returns a list of reminders, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned reminders will have, or None + :type filter: Union[dict, None] + :return: The list of reminders + :rtype: XARemindersReminderList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.reminders(), XARemindersReminderList, filter)
+ + + + +
[docs]class XARemindersDocumentList(XABase.XAList): + """A wrapper around lists of documents that employs fast enumeration techniques. + + All properties of documents can be called as methods on the wrapped list, returning a list containing each document's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XARemindersDocument, filter) + +
[docs] def properties(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("properties") or [])
+ +
[docs] def name(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def modified(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("modified") or [])
+ +
[docs] def file(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("file") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def by_properties(self, properties: dict) -> Union['XARemindersDocument', None]: + return self.by_property("properties", properties)
+ +
[docs] def by_name(self, name: str) -> Union['XARemindersDocument', None]: + return self.by_property("name", name)
+ +
[docs] def by_modified(self, modified: bool) -> Union['XARemindersDocument', None]: + return self.by_property("modified", modified)
+ +
[docs] def by_file(self, file: XABase.XAPath) -> Union['XARemindersDocument', None]: + return self.by_property("file", file.xa_elem)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XARemindersDocument(XABase.XAObject): + """A document in the Reminders application. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the document. + """ + return self.xa_elem.properties() + + @property + def name(self) -> str: + """The name of the document. + """ + return self.xa_elem.name() + + @property + def modified(self) -> bool: + """Whether the document has been modified since it was last saved. + """ + return self.xa_elem.modified() + + @property + def file(self) -> XABase.XAPath: + """The location of the document on disk, if it has one. + """ + return XABase.XAPath(self.xa_elem.file()) + +
[docs] def close(self, save: bool = True, location: Union[str, AppKit.NSURL] = None) -> None: + """Closes a document. + """ + file_path = XABase.XAPath(location).xa_elem + return self.xa_elem.closeSaving_savingIn_(save, file_path)
+ +
[docs] def save(self) -> None: + """Saves a document. + """ + return self.xa_elem.saveIn_as_(...)
+ +
[docs] def print(self, properties: dict, show_dialog: bool = True) -> None: + """Prints a document. + """ + return self.xa_elem.printWithProperties_printDialog_(properties, show_dialog)
+ +
[docs] def delete(self) -> None: + """Deletes the document. + """ + return self.xa_elem.delete()
+ +
[docs] def duplicate(self) -> None: + """Copies an object. + """ + return self.xa_elem.duplicateTo_withProperties_(...)
+ +
[docs] def move_to(self, window: XARemindersWindow) -> None: + """Move an object to a new location. + """ + return self.xa_elem.moveTo_(window.xa_elem)
+ + + + +
[docs]class XARemindersAccountList(XABase.XAList): + """A wrapper around lists of accounts that employs fast enumeration techniques. + + All properties of accounts can be called as methods on the wrapped list, returning a list containing each account's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XARemindersAccount, filter) + +
[docs] def properties(self) -> list[dict]: + ls = self.xa_elem.arrayByApplyingSelector_("properties") or [] + return [dict(x) for x in ls]
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def by_properties(self, properties: dict) -> Union['XARemindersAccount', None]: + for account in self.xa_elem: + if account.properties() == properties: + return self._new_element(account, XARemindersAccount)
+ +
[docs] def by_id(self, id: str) -> Union['XARemindersAccount', None]: + return self.by_property("id", id)
+ +
[docs] def by_name(self, name: str) -> Union['XARemindersAccount', None]: + return self.by_property("name", name)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XARemindersAccount(XABase.XAObject): + """An account in the Reminders application. + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the account. + """ + return dict(self.xa_elem.properties()) + + @property + def id(self) -> str: + """The unique identifier of the account. + """ + return self.xa_elem.id() + + @property + def name(self) -> str: + """The name of the account. + """ + return self.xa_elem.name() + +
[docs] def show(self) -> 'XARemindersAccount': + """Shows the account in the front window. + + :return: The account object + :rtype: XARemindersAccount + + .. versionadded:: 0.0.6 + """ + self.xa_elem.show()
+ + + + +
[docs]class XARemindersListList(XABase.XAList): + """A wrapper around lists of reminder lists that employs fast enumeration techniques. + + All properties of reminder lists can be called as methods on the wrapped list, returning a list containing each list's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XARemindersList, filter) + +
[docs] def properties(self) -> list[dict]: + ls = self.xa_elem.arrayByApplyingSelector_("properties") or [] + return [dict(x) for x in ls]
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def name(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def container(self) -> XARemindersAccountList: + ls = self.xa_elem.arrayByApplyingSelector_("container") or [] + return self._new_element(ls, XARemindersAccountList)
+ +
[docs] def color(self) -> list[dict]: + return list(self.xa_elem.arrayByApplyingSelector_("color") or [])
+ +
[docs] def emblem(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("emblem") or [])
+ +
[docs] def reminders(self) -> 'XARemindersReminderList': + ls = self.xa_elem.arrayByApplyingSelector_("reminders") or [] + return self._new_element(ls, XARemindersReminderList)
+ +
[docs] def by_properties(self, properties: dict) -> Union['XARemindersList', None]: + for ls in self.xa_elem: + if ls.properties() == properties: + return self._new_element(ls, XARemindersList)
+ +
[docs] def by_id(self, id: str) -> Union['XARemindersList', None]: + return self.by_property("id", id)
+ +
[docs] def by_name(self, name: str) -> Union['XARemindersList', None]: + return self.by_property("name", name)
+ +
[docs] def by_container(self, container: 'XARemindersList') -> Union['XARemindersList', None]: + for ls in self.xa_elem: + if ls.container().get() == container.xa_elem.get(): + return self._new_element(ls, XARemindersList)
+ +
[docs] def by_color(self, color: str) -> Union['XARemindersList', None]: + return self.by_property("color", color)
+ +
[docs] def by_emblem(self, emblem: str) -> Union['XARemindersList', None]: + return self.by_property("emblem", emblem)
+ +
[docs] def delete(self): + """Deletes all reminder lists in the list. + + .. versionadded:: 0.0.6 + """ + [x.delete() for x in self.xa_elem]
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XARemindersList(XABase.XAObject): + """A class for... + """ + def __init__(self, properties): + super().__init__(properties) + + # EventKit Properties + if hasattr(self.xa_elem, "id"): + lists = XABase.XAPredicate().from_args("calendarIdentifier", self.xa_elem.id()).evaluate(self.xa_estr.calendars()) + if len(lists) > 0: + elem = lists[0] + + self.summary = elem.summary() #: An overview of the list's information + self.subscription_url = elem.subscriptionURL() #: The URL of the list used to subscribe to it + self.sharing_status: bool = elem.sharingStatus() #: Whether the list is shared + self.sharees = elem.sharees() #: A list of individuals with whom the list is shared with + + @property + def properties(self) -> dict: + """All properties of the list. + """ + return dict(self.xa_elem.properties()) + + @property + def id(self) -> str: + """The unique identifier of the list. + """ + return self.xa_elem.id() + + @property + def name(self) -> str: + """The name of the list. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def container(self) -> Union[XARemindersAccount, 'XARemindersList']: + """The container of the list. + """ + return self._new_element(self.xa_elem.container(), XARemindersAccount) + + @property + def color(self) -> str: + """The color of the list. + """ + return self.xa_elem.color() + + @color.setter + def color(self, color: str): + self.set_property('color', color) + + @property + def emblem(self) -> str: + """The emblem icon name of the list. + """ + return self.xa_elem.emblem() + + @emblem.setter + def emblem(self, emblem: str): + self.set_property('emblem', emblem) + +
[docs] def delete(self) -> None: + """Deletes the list. + + .. versionadded:: 0.0.6 + """ + return self.xa_elem.delete()
+ +
[docs] def show(self) -> 'XARemindersList': + """Shows the list in the front Reminders window. + + :return: The list object + :rtype: XARemindersList + + .. versionadded:: 0.0.6 + """ + self.xa_elem.show() + return self
+ +
[docs] def reminders(self, filter: Union[dict, None] = None) -> 'XARemindersReminderList': + """Returns a list of reminders, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned reminders will have, or None + :type filter: Union[dict, None] + :return: The list of reminders + :rtype: XARemindersReminderList + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.reminders(), XARemindersReminderList, filter)
+ + + + + +
[docs]class XARemindersReminderList(XABase.XAList): + """A wrapper around lists of reminders that employs fast enumeration techniques. + + All properties of reminders can be called as methods on the wrapped list, returning a list containing each reminder's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XARemindersReminder, filter) + +
[docs] def properties(self) -> list[dict]: + ls = self.xa_elem.arrayByApplyingSelector_("properties") or [] + return [dict(x) for x in ls]
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def container(self) -> XARemindersListList: + ls = self.xa_elem.arrayByApplyingSelector_("container") or [] + return self._new_element(ls, XARemindersListList)
+ +
[docs] def creation_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("creationDate") or [])
+ +
[docs] def modification_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("modificationDate") or [])
+ +
[docs] def body(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("body") or [])
+ +
[docs] def completed(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("completed") or [])
+ +
[docs] def completion_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("completionDate") or [])
+ +
[docs] def due_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("dueDate") or [])
+ +
[docs] def allday_due_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("alldayDueDate") or [])
+ +
[docs] def remind_me_date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("remindMeDate") or [])
+ +
[docs] def priority(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("priority") or [])
+ +
[docs] def flagged(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("flagged") or [])
+ +
[docs] def alarms(self) -> list['XARemindersAlarmList']: + return [x.alarms() for x in self]
+ +
[docs] def by_properties(self, properties: dict) -> Union['XARemindersReminder', None]: + for reminder in self.xa_elem: + if reminder.properties() == properties: + return self._new_element(reminder, XARemindersReminder)
+ +
[docs] def by_name(self, name: str) -> Union['XARemindersReminder', None]: + return self.by_property("name", name)
+ +
[docs] def by_id(self, id: str) -> Union['XARemindersReminder', None]: + return self.by_property("id", id)
+ +
[docs] def by_container(self, container: 'XARemindersList') -> Union['XARemindersReminder', None]: + for reminder in self.xa_elem: + if reminder.container().get() == container.xa_elem.get(): + return self._new_element(reminder, XARemindersReminder)
+ +
[docs] def by_creation_date(self, creation_date: datetime) -> Union['XARemindersReminder', None]: + for reminder in self.xa_elem: + if reminder.creationDate() == creation_date: + return self._new_element(reminder, XARemindersReminder)
+ +
[docs] def by_modification_date(self, modification_date: datetime) -> Union['XARemindersReminder', None]: + for reminder in self.xa_elem: + if reminder.modificationDate() == modification_date: + return self._new_element(reminder, XARemindersReminder)
+ +
[docs] def by_body(self, body: str) -> Union['XARemindersReminder', None]: + return self.by_property("body", body)
+ +
[docs] def by_completed(self, completed: bool) -> Union['XARemindersReminder', None]: + return self.by_property("completed", completed)
+ +
[docs] def by_completion_date(self, completion_date: datetime) -> Union['XARemindersReminder', None]: + for reminder in self.xa_elem: + if reminder.completionDate() == completion_date: + return self._new_element(reminder, XARemindersReminder)
+ +
[docs] def by_due_date(self, due_date: datetime) -> Union['XARemindersReminder', None]: + for reminder in self.xa_elem: + if reminder.dueDate() == due_date: + return self._new_element(reminder, XARemindersReminder)
+ +
[docs] def by_allday_due_date(self, allday_due_date: datetime) -> Union['XARemindersReminder', None]: + for reminder in self.xa_elem: + if reminder.alldayDueDate() == allday_due_date: + return self._new_element(reminder, XARemindersReminder)
+ +
[docs] def by_remind_me_date(self, remind_me_date: datetime) -> Union['XARemindersReminder', None]: + for reminder in self.xa_elem: + if reminder.remindMeDate() == remind_me_date: + return self._new_element(reminder, XARemindersReminder)
+ +
[docs] def by_priority(self, priority: int) -> Union['XARemindersReminder', None]: + return self.by_property("priority", priority)
+ +
[docs] def by_flagged(self, flagged: bool) -> Union['XARemindersReminder', None]: + return self.by_property("flagged", flagged)
+ +
[docs] def delete(self): + """Deletes all reminders in the list. + + .. versionadded:: 0.0.6 + """ + [x.delete() for x in self.xa_elem]
+ +
[docs] def move_to(self, list: XARemindersList): + """Moves all reminders in the list to the specified reminder list. + + :param list: The list to move reminders into + :type list: XARemindersList + + .. versionadded:: 0.0.6 + """ + [x.moveTo_(list.xa_elem) for x in self.xa_elem]
+ + def __repr__(self): + return "<" + str(type(self)) + "length: " + str(len(self)) + ">"
+ +
[docs]class XARemindersReminder(XABase.XAObject): + """A reminder in Reminders.app. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + self.__properties = None + + @property + def properties(self) -> dict: + """All properties of the reminder. + + .. versionadded:: 0.0.6 + """ + if self.__properties is None: + self.__properties = self.xa_elem.properties() + return dict(self.__properties.copy()) + + @property + def name(self) -> str: + """The name of the reminder. + + .. versionadded:: 0.0.6 + """ + if self.__properties is None: + self.__properties = self.xa_elem.properties() + return self.__properties["name"] + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def id(self) -> str: + """The unique identifier of the reminder. + + .. versionadded:: 0.0.6 + """ + if self.__properties is None: + self.__properties = self.xa_elem.properties() + return self.__properties["id"] + + @property + def container(self) -> Union[XARemindersList, 'XARemindersReminder']: + """The container of the reminder. + + .. versionadded:: 0.0.6 + """ + return self._new_element(self.xa_elem.container(), XARemindersList) + + @property + def creation_date(self) -> datetime: + """The creation date of the reminder. + + .. versionadded:: 0.0.6 + """ + if self.__properties is None: + self.__properties = self.xa_elem.properties() + return self.__properties["creationDate"] + + @property + def modification_date(self) -> datetime: + """The modification date of the reminder. + + .. versionadded:: 0.0.6 + """ + if self.__properties is None: + self.__properties = self.xa_elem.properties() + return self.__properties["modificationDate"] + + @property + def body(self) -> str: + """The notes attached to the reminder. + + .. versionadded:: 0.0.6 + """ + if self.__properties is None: + self.__properties = self.xa_elem.properties() + return self.__properties["body"] or "" + + @body.setter + def body(self, body: str): + self.set_property('body', body) + + @property + def completed(self) -> bool: + """Whether the reminder is completed. + + .. versionadded:: 0.0.6 + """ + if self.__properties is None: + self.__properties = self.xa_elem.properties() + return self.__properties["completed"] + + @completed.setter + def completed(self, completed: bool): + self.set_property('completed', completed) + + @property + def completion_date(self) -> Union[datetime, None]: + """The completion date of the reminder. + + .. versionadded:: 0.0.6 + """ + if self.__properties is None: + self.__properties = self.xa_elem.properties() + return self.__properties["completionDate"] + + @completion_date.setter + def completion_date(self, completion_date: datetime): + self.set_property('completionDate', completion_date) + + @property + def due_date(self) -> Union[datetime, None]: + """The due date of the reminder; will set both date and time. + + .. versionadded:: 0.0.6 + """ + if self.__properties is None: + self.__properties = self.xa_elem.properties() + print(self.__properties) + return self.__properties["dueDate"] + + @due_date.setter + def due_date(self, due_date: datetime): + self.set_property('dueDate', due_date) + + @property + def allday_due_date(self) -> Union[datetime, None]: + """The all-day due date of the reminder; will only set a date. + + .. versionadded:: 0.0.6 + """ + if self.__properties is None: + self.__properties = self.xa_elem.properties() + return self.__properties["allDayDueDate"] + + @allday_due_date.setter + def allday_due_date(self, allday_due_date: datetime): + self.set_property('alldayDueDate', allday_due_date) + + @property + def remind_me_date(self) -> Union[datetime, None]: + """The remind date of the reminder. + + .. versionadded:: 0.0.6 + """ + if self.__properties is None: + self.__properties = self.xa_elem.properties() + return self.__properties["remindMeDate"] + + @remind_me_date.setter + def remind_me_date(self, remind_me_date: datetime): + self.set_property('remindMeDate', remind_me_date) + + @property + def priority(self) -> int: + """The priority of the reminder; 0: no priority, 1–4: high, 5: medium, 6–9: low. + + .. versionadded:: 0.0.6 + """ + if self.__properties is None: + self.__properties = self.xa_elem.properties() + return self.__properties["priority"] + + @priority.setter + def priority(self, priority: int): + self.set_property('priority', priority) + + @property + def flagged(self) -> bool: + """Whether the reminder is flagged. + + .. versionadded:: 0.0.6 + """ + if self.__properties is None: + self.__properties = self.xa_elem.properties() + return self.__properties["flagged"] + + @flagged.setter + def flagged(self, flagged: bool): + self.set_property('flagged', flagged) + + @property + def all_day(self) -> bool: + """Whether the reminder is all day or a specific time. + + .. versionadded:: 0.0.6 + """ + reminder = self.__get_ek_reminder() + return reminder.allDay() == 1 + + @property + def notes(self) -> str: + """User-inputted notes for this reminder. + + .. versionadded:: 0.0.6 + """ + reminder = self.__get_ek_reminder() + return reminder.notes() + + @property + def url(self) -> XABase.XAURL: + """The URL attached to the reminder, if there is one. + + .. versionadded:: 0.0.6 + """ + reminder = self.__get_ek_reminder() + return XABase.XAURL(reminder.URL()) + + @property + def recurrence_rule(self) -> 'XARemindersRecurrenceRule': + """The recurrence rule for the reminder. + + .. versionadded:: 0.0.6 + """ + reminder = self.__get_ek_reminder() + if reminder.recurrenceRule() is not None: + return self._new_element(reminder.recurrenceRule(), XARemindersRecurrenceRule) + + def __get_ek_reminder(self) -> EventKit.EKReminder: + predicate = self.xa_estr.predicateForRemindersInCalendars_(None) + reminders = self.xa_estr.remindersMatchingPredicate_(predicate) + + reminder_id = self.xa_elem.properties()["id"] if self.__properties is None else self.__properties["id"] + + if reminder_id is not None: + predicate = AppKit.NSPredicate.predicateWithFormat_("%@ CONTAINS calendarItemIdentifier", reminder_id) + reminders = reminders.filteredArrayUsingPredicate_(predicate) + + if len(reminders) > 0: + return reminders[0] + +
[docs] def delete(self) -> None: + """Deletes the reminder. + + .. versionadded:: 0.0.6 + """ + return self.xa_elem.delete()
+ +
[docs] def move_to(self, list: XARemindersList) -> 'XARemindersReminder': + """Moves the reminder to the specified list. + + :param list: The list to move the reminder to + :type list: XARemindersList + :return: The moved reminder object + :rtype: XARemindersReminder + + .. versionadded:: 0.0.6 + """ + self.xa_elem.moveTo_(list.xa_elem) + return list.reminders()[-1]
+ +
[docs] def show(self) -> 'XARemindersReminder': + """Shows the reminder in the front Reminders window. + + :return: The reminder object + :rtype: XARemindersReminder + + .. versionadded:: 0.0.6 + """ + self.xa_elem.show() + return self
+ +
[docs] def alarms(self, filter: Union[dict, None] = None) -> 'XARemindersAlarmList': + """Returns a list of alarms, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned alarms will have, or None + :type filter: Union[dict, None] + :return: The list of alarms + :rtype: XARemindersAlarmList + + .. versionadded:: 0.0.6 + """ + reminder = self.__get_ek_reminder() + return self._new_element(reminder.alarms() or AppKit.NSArray.alloc().initWithArray_([]), XARemindersAlarmList, filter)
+ + def __repr__(self): + return "<" + str(type(self)) + self.name + ">"
+ + + + +
[docs]class XARemindersRecurrenceRule(XABase.XAObject): + """A class for interacting with Reminders. + + .. seealso:: :class:`XARemindersReminder` + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def frequency(self) -> str: + """Specifier for the base unit of recurrence, i.e. daily, weekly, monthly, or yearly. + """ + return self.xa_elem.frequency() + + @property + def interval(self) -> int: + """The number of frequency units between recurrences. + """ + return self.xa_elem.interval() + + @property + def end_date(self) -> datetime: + """The end date and time of recurrence. + """ + return self.xa_elem.endDate() + +
[docs] def set_frequency(self, frequency: Literal["daily", "weekly", "monthly", "yearly"]): + """Sets the frequency of recurrence. + + :param frequency: A specifier for the base unit of recurrence. + :type frequency: Literal["daily", "weekly", "monthly", "yearly"] + + .. versionadded:: 0.0.2 + """ + freq_ids = { + "daily": 0, + "weekly": 1, + "monthly": 2, + "yearly": 3, + } + self.xa_elem.setFrequency_(freq_ids[frequency]) + self.xa_estr.saveReminder_commit_error_(self.xa_prnt.xa_elem, True, None)
+ +
[docs] def set_interval(self, interval: int): + """Sets the interval of recurrence. + + :param interval: The interval; the number of frequency units between recurrences. + :type interval: int + + .. versionadded:: 0.0.2 + """ + self.xa_elem.setInterval_(interval) + self.xa_estr.saveReminder_commit_error_(self.xa_prnt.xa_elem, True, None)
+ +
[docs] def set_end_date(self, end_date: datetime): + """Sets the date and time when the recurrence ends. + + :param end_date: The absolute end day of recurrence. + :type end_date: datetime + + .. versionadded:: 0.0.2 + """ + self.xa_elem.setEndDate_(end_date) + self.xa_estr.saveReminder_commit_error_(self.xa_prnt.xa_elem, True, None)
+ + def __repr__(self): + return "<" + str(type(self)) + f"freq={self.xa_elem.frequencyString()}, interval={self.interval}, end_date={self.end_date}, id={self.id}>"
+ + + + +
[docs]class XARemindersAlarmList(XABase.XAList): + """A wrapper around lists of reminder alarms that employs fast enumeration techniques. + + All properties of alarms can be called as methods on the wrapped list, returning a list containing each alarm's value for the property. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XARemindersAlarm, filter) + +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("sharedUID") or [])
+ +
[docs] def snoozed(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("isSnoozed") or [])
+ +
[docs] def date(self) -> list[datetime]: + return list(self.xa_elem.arrayByApplyingSelector_("absoluteDate") or [])
+ +
[docs] def proximity_direction(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("proximityString") or [])
+ +
[docs] def location(self) -> list[XABase.XALocation]: + return [x.location for x in self]
+ +
[docs] def by_id(self, id: str) -> Union['XARemindersAlarm', None]: + return self.by_property("sharedUID", id)
+ +
[docs] def by_snoozed(self, snoozed: bool) -> Union['XARemindersAlarm', None]: + return self.by_property("isSnoozed", snoozed)
+ +
[docs] def by_date(self, date: datetime) -> Union['XARemindersAlarm', None]: + return self.by_property("absoluteDate", date)
+ +
[docs] def by_proximity_direction(self, proximity_direction: str) -> Union['XARemindersAlarm', None]: + return self.by_property("proximityString", proximity_direction)
+ +
[docs] def by_location(self, location: XABase.XALocation) -> Union['XARemindersAlarm', None]: + return self.by_property("structuredLocation", location.xa_elem)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.id()) + ">"
+ +
[docs]class XARemindersAlarm(XABase.XAObject): + """An alarm attached to a reminder. + + .. seealso:: :class:`XARemindersReminder` + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """A unique identifier for this alarm. + """ + return self.xa_elem.sharedUID() + + @property + def snoozed(self) -> bool: + """Whether the alarm is snoozed. + """ + return self.xa_elem.isSnoozed() + + @property + def date(self) -> datetime: + """The date and time of a date-based alarm. + """ + return self.xa_elem.absoluteDate() + + @property + def proximity_direction(self) -> str: + """Whether a location-based alarm is for arriving or departing. + """ + return self.xa_elem.proximityString() + + @property + def location(self) -> XABase.XALocation: + location = self.xa_elem.structuredLocation() + if location is not None: + return XABase.XALocation( + title = location.title(), + latitude = location.geoLocation().coordinate()[0], + longitude = location.geoLocation().coordinate()[1], + radius = location.radiusNumber() or 0, + raw_value = location + ) + +
[docs] def set_date(self, date: datetime): + """Sets the date and time of the alarm. + + :param date: The absolute date that the alarm will go off. + :type date: datetime + + .. versionadded:: 0.0.2 + """ + self.xa_elem.setAbsoluteDate_(date) + self.xa_estr.saveReminder_commit_error_(self.xa_prnt.xa_prnt.xa_elem, True, None)
+ +
[docs] def set_location(self, location: XABase.XALocation): + """Sets the location and radius of the alarm. + + :param location: The location (with specified radius) that the alarm will go off. + :type location: XABase.XALocation + + .. versionadded:: 0.0.2 + """ + location.raw_value = self.location.raw_value + location.prepare_for_export() + self.xa_estr.saveReminder_commit_error_(self.xa_prnt.xa_prnt.xa_elem, True, None)
+ + def __repr__(self): + return "<" + str(type(self)) + "id=" + self.id + ">"
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Safari.html b/docs/_modules/PyXA/apps/Safari.html new file mode 100644 index 0000000..718b51f --- /dev/null +++ b/docs/_modules/PyXA/apps/Safari.html @@ -0,0 +1,1044 @@ + + + + + + PyXA.apps.Safari — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Safari

+""".. versionadded:: 0.0.1
+
+Control Safari using JXA-like syntax.
+"""
+
+from enum import Enum
+from typing import Any, Union, Self
+import threading
+
+import AppKit
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+from ..XAProtocols import XACanOpenPath, XAClipboardCodable, XACloseable
+
+
[docs]class XASafariApplication(XABaseScriptable.XASBApplication, XABaseScriptable.XASBPrintable, XABase.XAObject, XACanOpenPath): + """A class for interacting with Safari.app. + + .. seealso:: :class:`XASafariDocument`, :class:`XASafariTab`, :class:`XABaseScriptable.XASBApplication`, :class:`XABaseScriptable.XASBSaveable`, :class:`XABaseScriptable.XASBPrintable` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XASafariWindow + + @property + def frontmost(self) -> bool: + """Whether Safari is the active application. + """ + return self.xa_scel.frontmost() + + @frontmost.setter + def frontmost(self, frontmost: bool): + self.set_property("frontmost", frontmost) + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def version(self) -> str: + """The version of Safari.app. + """ + return self.xa_scel.version() + + @property + def current_document(self) -> 'XASafariDocument': + """The currently displayed document in the active tab. + """ + return self._new_element(self.xa_scel.documents()[0], XASafariDocument) + + @property + def current_tab(self) -> 'XASafariTab': + """The currently active tab. + """ + return self.front_window.current_tab + + @current_tab.setter + def current_tab(self, current_tab: 'XASafariTab'): + self.front_window.current_tab = current_tab + +
[docs] def open(self, url: Union[str, XABase.XAURL, XABase.XAPath] = "https://google.com") -> 'XASafariTab': + """Opens a URL in new tab. + + :param url: The URL or path to open, defaults to "http://google.com" + :type url: Union[str, XABase.XAURL, XABase.XAPath], optional + :return: A reference to the newly created tab object + :rtype: XASafariTab + + :Example 1: Open local and external URLs + + >>> import PyXA + >>> app = PyXA.Application("Safari") + >>> app.open("https://www.google.com") + >>> app.open("google.com") + >>> app.open("/Users/exampleuser/Documents/WebPage.html") + + .. versionadded:: 0.0.1 + """ + if isinstance(url, str): + url = XABase.XAURL(url) + + self.activate() + new_tab = self.make("tab", {"URL": url.url}) + tab = self.front_window.tabs().push(new_tab) + self.front_window.current_tab = tab + return tab
+ +
[docs] def show_bookmarks(self) -> 'XASafariApplication': + """Activates Safari and opens Safari's bookmarks page. + + :return: A reference to the newly opened Bookmarks tab + :rtype: XASafariTab + + .. versionadded:: 0.0.1 + """ + self.activate() + self.xa_scel.showBookmarks(); + return self.front_window.current_tab
+ +
[docs] def add_to_reading_list(self, item: Union[str, XABase.XAURL, 'XASafariTab', 'XASafariDocument']) -> 'XASafariApplication': + """Adds a URL to the reading list. + + :param item: A URL string or a Safari tab or document containing the URL to add to the reading list. + :type item: Union[str, XASafariTab, XASafariDocument] + :return: A reference to the Safari application object. + :rtype: XASafariTab + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Safari") + >>> window = app.front_window + >>> doc = app.current_document + >>> tab = window.current_tab + >>> app.add_to_reading_list(doc) + >>> app.add_to_reading_list(tab) + + .. versionadded:: 0.0.1 + """ + if isinstance(item, str) or isinstance(item, XABase.XAURL): + item = XABase.XAURL(item).xa_elem + elif isinstance(item, XASafariTab) or isinstance(item, XASafariDocument): + item = item.xa_elem.URL() + + self.xa_scel.addReadingListItem_andPreviewText_withTitle_(item, None, None) + return self
+ +
[docs] def search(self, term: str) -> 'XASafariApplication': + """Activates Safari and searches the specified string in a new tab of the frontmost Safari window. Uses the default search engine. + + :param term: The string to search + :type term: str + :return: A reference to the newly opened Search tab + :rtype: XASafariTab + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Safari") + >>> app.search("What is PyXA?") + + .. seealso:: :func:`search_in_tab` + + .. versionadded:: 0.0.1 + """ + self.activate() + self.xa_scel.searchTheWebIn_for_(self.xa_scel.windows()[0], term) + return self.front_window.current_tab
+ +
[docs] def search_in_tab(self, tab: 'XASafariTab', term: str) -> 'XASafariApplication': + """Searches the given search string in the specified tab. Uses the default search engine. + + :param tab: The tab to conduct the web search in. + :type tab: XASafariTab + :param term: The string to search. + :type term: str + :return: A reference to the tab object + :rtype: XASafariTab + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Safari") + >>> tab = app.front_window.current_tab + >>> app.search_in_tab(tab, "What is PyXA?") + + .. seealso:: :func:`search` + + .. versionadded:: 0.0.1 + """ + self.xa_scel.searchTheWebIn_for_(tab.xa_elem, term) + return tab
+ +
[docs] def do_javascript(self, script: str, tab: 'XASafariTab' = None) -> Any: + """Runs JavaScript in the specified tab. If no tab is specified, the script is run in the current tab of the frontmost Safari window. + + :param script: The script to run. + :type script: str + :param tab: The tab to execute the JavaScript script in, defaults to None + :type tab: XASafariTab + :return: The value returned from the script after it completes execution. + :rtype: Any + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Safari") + >>> tab = app.front_window.current_tab + >>> script = "(function example() { return 1 + 1 })()" + >>> print(app.do_javascript(script, tab)) + 2.0 + + .. versionadded:: 0.0.1 + """ + if tab is None: + tab = self.front_window.current_tab + return self.xa_scel.doJavaScript_in_(script, tab.xa_elem)
+ +
[docs] def email(self, item: Union['XASafariDocument', 'XASafariTab']): + """Opens a new email draft with the content of a tab or document. + + :param item: The object to email + :type item: Union[XASafariDocument, XASafariTab] + + .. versionadded:: 0.0.4 + """ + self.xa_scel.emailContentsOf_(item.xa_elem)
+ +
[docs] def save(self): + self.xa_elem.saveIn_as_(None, None)
+ +
[docs] def documents(self, filter: dict = None) -> 'XASafariDocumentList': + """Returns a list of documents matching the given filter. + + .. versionchanged:: 0.0.4 + + Now returns an object of :class:`XASafariDocumentList` instead of a default list. + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_scel.documents(), XASafariDocumentList, filter)
+ +
[docs] def new_tab(self, url: Union[str, XABase.XAURL, XABase.XAPath]) -> 'XASafariTab': + """Activates Safari to a new tab at the specified URL or path. + + :param url: The URL or path to open in a new tab + :type url: Union[str, XABase.XAURL, XABase.XAPath] + :return: A reference to the newly opened tab + :rtype: XASafariTab + + .. versionadded:: 0.1.0 + """ + url = XABase.XAURL(url).url + new_tab = self.make("tab", {"URL": url}) + tab = self.front_window.tabs().push(new_tab) + self.front_window.current_tab = tab + self.activate() + return tab
+ +
[docs] def make(self, specifier: str, properties: dict): + """Creates a new element of the given specifier class without adding it to any list. + + Use :func:`XABase.XAList.push` to push the element onto a list. + + :param specifier: The classname of the object to create + :type specifier: str + :param properties: The properties to give the object + :type properties: dict + :return: A PyXA wrapped form of the object + :rtype: XABase.XAObject + + :Example 1: Make a new tab in Safari's front window + + >>> import PyXA + >>> app = PyXA.Application("Safari") + >>> new_tab = app.make("tab", {"URL": "http://google.com"}) + >>> app.front_window.tabs().push(new_tab) + + :Example 2: Open a page in a new window by making a new document + + >>> import PyXA + >>> app = PyXA.Application("Safari") + >>> new_doc = app.make("document", {"URL": "http://google.com"}) + >>> app.documents().push(new_doc) + + .. versionadded:: 0.0.4 + """ + adjusted_properties = properties.copy() + + # Get URLs in a common format + if "URL" in adjusted_properties: + url = XABase.XAURL(adjusted_properties["URL"]).url + adjusted_properties["URL"] = url + elif "url" in adjusted_properties: + url = XABase.XAURL(adjusted_properties["url"]).url + adjusted_properties["URL"] = url + adjusted_properties.pop("URL") + + if specifier == "document": + obj = self.xa_scel.classForScriptingClass_(specifier).alloc().initWithProperties_(adjusted_properties) + return self._new_element(obj, XASafariDocument) + elif specifier == "tab": + obj = self.xa_scel.classForScriptingClass_(specifier).alloc().initWithProperties_(adjusted_properties) + return self._new_element(obj, XASafariTab)
+ + + + +
[docs]class XASafariWindow(XABaseScriptable.XASBWindow, XABaseScriptable.XASBPrintable, XABase.XAObject): + """A window of Safari.app. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def document(self) -> 'XASafariDocument': + """The document currently displayed in the window. + """ + return self._new_element(self.xa_elem.document(), XASafariDocument) + + @property + def current_tab(self) -> 'XASafariTab': + """The currently selected tab. + """ + return self._new_element(self.xa_elem.currentTab(), XASafariTab) + + @current_tab.setter + def current_tab(self, current_tab: 'XASafariTab'): + self.set_property("currentTab", current_tab.xa_elem) + +
[docs] def tabs(self, filter: dict = None) -> 'XASafariTabList': + """Returns a list of tabs matching the given filter. + + .. versionchanged:: 0.0.4 + + Now returns an object of :class:`XASafariTabList` instead of a default list. + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_elem.tabs(), XASafariTabList, filter)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XASafariGeneric(XACloseable, XABase.XAObject): + """A generic class containing methods relevant to Safari tabs and documents. + + .. seealso:: :class:`XASafariDocument`, :class:`XASafariTab` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + +
[docs] def search(self, term: str) -> Self: + """Searches for the specified term in the current tab or document. + + :param term: The term to search + :type term: str + :return: A reference to the object that called this method + :rtype: Self + + .. versionadded:: 0.0.1 + """ + self.xa_elem.searchTheWebIn_for_(self.xa_elem, term) + return self
+ +
[docs] def add_to_reading_list(self) -> Self: + """Adds the URL of a tab or document to the reading list. + + :return: A reference to the object that called this method. + :rtype: Self + + .. versionadded:: 0.0.1 + """ + self.xa_elem.addReadingListItem_andPreviewText_withTitle_(self.xa_elem.URL(), None, None) + return self
+ +
[docs] def do_javascript(self, script: str) -> Any: + """Runs JavaScript in a tab or document. + + :return: The value returned from the script after it completes execution + :rtype: Any + + .. versionadded:: 0.0.1 + """ + return self.xa_elem.doJavaScript_in_(script, self.xa_elem)
+ +
[docs] def email(self) -> Self: + """Opens a new email draft with the content of a tab or document. + + :param item: The object to email + :type item: Union[XASafariDocument, XASafariTab] + :return: A reference to the object that called this method. + :rtype: Self + + .. versionadded:: 0.0.4 + """ + self.xa_elem.emailContentsOf_(self.xa_elem) + return self
+ +
[docs] def reload(self) -> Self: + """Reloads the tab or document. + + :return: A reference to the object that called this method. + :rtype: Self + + .. versionadded:: 0.0.4 + """ + self.set_property("URL", self.url) + return self
+ + + + +
[docs]class XASafariDocumentList(XABase.XAList, XAClipboardCodable): + """A wrapper around lists of Safari documents that employs fast enumeration techniques. + + All properties of documents can be called as methods on the wrapped list, returning a list containing each document's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASafariDocument, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def modified(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("modified") or [])
+ +
[docs] def file(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("file") or [])
+ +
[docs] def source(self) -> list[str]: + return [x.source() for x in self.xa_elem]
+ +
[docs] def url(self) -> list[XABase.XAURL]: + ls = self.xa_elem.arrayByApplyingSelector_("URL") or [] + return [XABase.XAURL(x) for x in ls]
+ +
[docs] def text(self) -> list[XABase.XAText]: + ls = [x.text() for x in self.xa_elem] + return [XABase.XAText(x) for x in ls]
+ +
[docs] def by_name(self, name: str) -> Union['XASafariDocument', None]: + return self.by_property("name", name)
+ +
[docs] def by_modified(self, modified: bool) -> Union['XASafariDocument', None]: + return self.by_property("modified", modified)
+ +
[docs] def by_file(self, file: str) -> Union['XASafariDocument', None]: + return self.by_property("file", file)
+ +
[docs] def by_source(self, source: str) -> Union['XASafariDocument', None]: + for doc in self.xa_elem: + if doc.source() == source: + return self._new_element(doc, XASafariDocument)
+ +
[docs] def by_url(self, url: XABase.XAURL) -> Union['XASafariDocument', None]: + return self.by_property("URL", str(url.xa_elem))
+ +
[docs] def by_text(self, text: Union[str, XABase.XAText]) -> Union['XASafariDocument', None]: + for doc in self.xa_elem: + if doc.text() == str(text): + return self._new_element(doc, XASafariDocument)
+ +
[docs] def reload(self) -> Self: + """Reloads all documents in the list. + + :return: A reference to the document list object. + :rtype: Self + + .. versionadded:: 0.0.4 + """ + for document in self.xa_elem: + document.setValue_forKey_(document.URL(), "URL") + return self
+ +
[docs] def add_to_reading_list(self) -> Self: + """Adds the URL of all documents in the list to the reading list. + + :return: A reference to the document list object. + :rtype: Self + + .. versionadded:: 0.0.5 + """ + for document in self: + document.add_to_reading_list() + return self
+ +
[docs] def email(self) -> Self: + """Opens a new email draft with embedded links to the URL of each document in the list. + + :return: A reference to the document list object. + :rtype: Self + + .. versionadded:: 0.0.5 + """ + for document in self: + document.email() + return self
+ +
[docs] def do_javascript(self, script: str) -> Self: + """Runs a given JavaScript script in each document in the list. + + :return: A reference to the document list object. + :rtype: Self + + .. versionadded:: 0.0.5 + """ + for document in self: + document.do_javascript(script) + return self
+ +
[docs] def search(self, term: str) -> Self: + """Searches for the given term in each document in the list, using the default search engine. + + :return: A reference to the document list object. + :rtype: Self + + .. versionadded:: 0.0.5 + """ + for document in self: + document.search(term) + return self
+ +
[docs] def close(self): + """Closes each tab in the list. + + .. versionadded:: 0.0.5 + """ + length = len(self) + for _index in range(length): + self[0].close()
+ +
[docs] def get_clipboard_representation(self) -> list[AppKit.NSURL]: + """Gets a clipboard-codable representation of each document in the list. + + When the clipboard content is set to a list of Safari documents, each document's URL is added to the clipboard. + + :return: A list of document URLs + :rtype: list[AppKit.NSURL] + + .. versionadded:: 0.0.8 + """ + urls = self.url() + return [x.xa_elem for x in urls]
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASafariDocument(XASafariGeneric, XAClipboardCodable, XABaseScriptable.XASBPrintable): + """A class for interacting with Safari documents. + + .. seealso:: :class:`XASafariGeneric`, :class:`XABaseScriptable.XASBPrintable`, :class:`XABaseScriptable.XASBSaveable` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The title of the document. + """ + return self.xa_elem.name() + + @property + def modified(self) -> bool: + """Whether the document has been modified since its last save. + """ + return self.xa_elem.modified() + + @property + def file(self) -> str: + """The location of the document on the disk, if there is one. + """ + file = self.xa_elem.file() + if file is not None: + return XABase.XAPath(file) + + @property + def source(self) -> str: + """The HTML source of the web page currently loaded in the document. + """ + return self.xa_elem.source() + + @property + def url(self) -> XABase.XAURL: + """The current URL of the document. + """ + return XABase.XAURL(self.xa_elem.URL()) + + @url.setter + def url(self, url: Union[str, XABase.XAURL]): + if isinstance(url, str): + url = XABase.XAURL(url) + self.set_property("URL", url.xa_elem) + + @property + def text(self) -> XABase.XAText: + """The text of the web page currently loaded in the document. + """ + return self._new_element(self.xa_elem.text(), XABase.XAText) + +
[docs] def print(self, properties: dict = None, show_dialog: bool = True): + """Prints or opens the print dialog for the document. + + :param properties: The print properties to pre-set for the print, defaults to None + :type properties: dict, optional + :param show_dialog: Whether to display the print dialog, defaults to True + :type show_dialog: bool, optional + + .. versionadded:: 0.0.5 + """ + if properties is None: + properties = {} + + print_thread = threading.Thread(target=self.xa_elem.printWithProperties_printDialog_, args=(properties, show_dialog), name="Print Document") + print_thread.start()
+ +
[docs] def get_clipboard_representation(self) -> AppKit.NSURL: + """Gets a clipboard-codable representation of the document. + + When the clipboard content is set to a Safari document, the document's URL is added to the clipboard. + + :return: The document's URL + :rtype: AppKit.NSURL + + .. versionadded:: 0.0.8 + """ + return self.url.xa_elem
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + +
[docs]class XASafariTabList(XABase.XAList, XAClipboardCodable): + """A wrapper around lists of tabs that employs fast enumeration techniques. + + All properties of tabs can be called as methods on the wrapped list, returning a list containing each tab's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASafariTab, filter) + +
[docs] def source(self) -> list[str]: + """Gets the source HTML of each tab in the list. + + This will activate Safari, individually focus each tab, refocus the original tab, then return a list of all tabs' source HTML. + + :return: A list of source HTML + :rtype: list[str] + + .. versionadded:: 0.0.4 + """ + current_tab = self.xa_prnt.current_tab.index - 1 + sources = [""] * len(self.xa_elem) + self.xa_aref.activateWithOptions_(AppKit.NSApplicationActivateIgnoringOtherApps) + for index, tab in enumerate(self): + self.xa_prnt.current_tab = tab + sources[index] = tab.source + self.xa_prnt.current_tab = self.xa_prnt.tabs()[current_tab] + return sources
+ +
[docs] def url(self) -> list[XABase.XAURL]: + ls = self.xa_elem.arrayByApplyingSelector_("URL") or [] + return [XABase.XAURL(x) for x in ls]
+ +
[docs] def index(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("index") or [])
+ +
[docs] def text(self) -> list[XABase.XAText]: + """Gets the visible text of each tab in the list. + + This will activate Safari, individually focus each tab, refocus the original tab, then return a list of all tabs' visible text. + + :return: A list of visible text + :rtype: list[XABase.XAText] + + .. versionadded:: 0.0.4 + """ + current_tab = self.xa_prnt.current_tab.index - 1 + texts = [""] * len(self.xa_elem) + self.xa_aref.activateWithOptions_(AppKit.NSApplicationActivateIgnoringOtherApps) + for index, tab in enumerate(self): + self.xa_prnt.current_tab = tab + texts[index] = tab.text + self.xa_prnt.current_tab = self.xa_prnt.tabs()[current_tab] + return texts
+ +
[docs] def visible(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("visible") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def by_source(self, source: str) -> Union['XASafariTab', None]: + for tab in self.xa_elem: + if tab.source() == source: + return self._new_element(tab, XASafariTab)
+ +
[docs] def by_url(self, url: XABase.XAURL) -> Union['XASafariTab', None]: + return self.by_property("URL", str(url.xa_elem))
+ +
[docs] def by_index(self, index: int) -> Union['XASafariTab', None]: + return self.by_property("index", index)
+ +
[docs] def by_text(self, text: Union[str, XABase.XAText]) -> Union['XASafariTab', None]: + for tab in self.xa_elem: + if tab.text() == str(text): + return self._new_element(tab, XASafariTab)
+ +
[docs] def by_visible(self, visible: bool) -> Union['XASafariTab', None]: + return self.by_property("visible", visible)
+ +
[docs] def by_name(self, name: str) -> Union['XASafariTab', None]: + return self.by_property("name", name)
+ +
[docs] def reload(self) -> Self: + """Reloads all tabs in the list. + + :return: A reference to the tab list object. + :rtype: Self + + .. versionadded:: 0.0.4 + """ + for tab in self.xa_elem: + tab.setValue_forKey_(tab.URL(), "URL") + return self
+ +
[docs] def add_to_reading_list(self) -> Self: + """Adds the URL of all tabs in the list to the reading list. + + :return: A reference to the tab list object. + :rtype: Self + + .. versionadded:: 0.0.5 + """ + for tab in self: + tab.add_to_reading_list() + return self
+ +
[docs] def email(self) -> Self: + """Opens a new email draft with embedded links to the URL of each tab in the list. + + :return: A reference to the tab list object. + :rtype: Self + + .. versionadded:: 0.0.5 + """ + for tab in self: + tab.email() + return self
+ +
[docs] def do_javascript(self, script: str) -> Self: + """Runs a given JavaScript script in each tab in the list. + + :return: A reference to the tab list object. + :rtype: Self + + .. versionadded:: 0.0.5 + """ + for tab in self: + tab.do_javascript(script) + return self
+ +
[docs] def search(self, term: str) -> Self: + """Searches for the given term in each tab in the list, using the default search engine. + + :return: A reference to the tab list object. + :rtype: Self + + .. versionadded:: 0.0.5 + """ + for tab in self: + tab.search(term) + return self
+ +
[docs] def move_to(self, window: XASafariWindow) -> Self: + """Moves all tabs in the list to the specified window. + + :param window: The window to move tabs to + :type window: XASafariWindow + :return: The tab list object + :rtype: Self + + .. seealso:: :func:`duplicate_to` + + .. versionadded:: 0.0.5 + """ + for tab in self.xa_elem: + tab.moveTo_(window.xa_elem) + tab.close() + return self
+ +
[docs] def duplicate_to(self, window: XASafariWindow) -> Self: + """Duplicate all tabs in the list in the specified window. + + :param window: The window to duplicate tabs in + :type window: XASafariWindow + :return: The tab list object + :rtype: Self + + .. seealso:: :func:`move_to` + + .. versionadded:: 0.0.5 + """ + for tab in self.xa_elem: + tab.moveTo_(window.xa_elem) + return self
+ +
[docs] def close(self): + """Closes each tab in the list. + + .. versionadded:: 0.0.5 + """ + length = len(self) + for _index in range(length): + self[0].close()
+ +
[docs] def get_clipboard_representation(self) -> list[AppKit.NSURL]: + """Gets a clipboard-codable representation of each tab in the list. + + When the clipboard content is set to a list of Safari tabs, each tabs's URL is added to the clipboard. Pasting the copied list into an app such as Numbers will place each URL in a separate cell of a column. + + :return: A list of tab URLs + :rtype: list[AppKit.NSURL] + + .. versionadded:: 0.0.8 + """ + urls = self.url() + return [x.xa_elem for x in urls]
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASafariTab(XASafariGeneric, XAClipboardCodable): + """A class for interacting with Safari tabs. + + .. seealso:: :class:`XASafariGeneric` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def source(self) -> str: + """The HTML source of the web page currently loaded in the tab. + """ + return self.xa_elem.source() + + @property + def url(self) -> XABase.XAURL: + """The current URL of the tab. + """ + return XABase.XAURL(self.xa_elem.URL()) + + @url.setter + def url(self, url: Union[str, XABase.XAURL]): + if isinstance(url, str): + url = XABase.XAURL(url) + self.set_property("URL", url.xa_elem) + + @property + def index(self) -> int: + """The index of the tab, ordered left to right. + """ + return self.xa_elem.index() + + @property + def text(self) -> XABase.XAText: + """The text of the web page currently loaded in the tab. + """ + return self._new_element(self.xa_elem.text(), XABase.XAText) + + @property + def visible(self) -> bool: + """Whether the tab is currently visible. + """ + return self.xa_elem.visible() + + @property + def name(self) -> str: + """The title of the tab. + """ + return self.xa_elem.name() + +
[docs] def move_to(self, window: 'XASafariWindow') -> Self: + """Moves the tab to the specified window. After, the tab will exist in only one location. + + :param window: The window to move the tab to. + :type window: XASafariWindow + :return: A reference to the tab object. + :rtype: Self + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Safari") + >>> tab = app.front_window.current_tab + >>> window2 = app.window(1) + >>> tab.move_to(window2) + + .. seealso:: :func:`duplicate_to` + + .. versionadded:: 0.0.1 + """ + self.xa_elem.moveTo_(window.xa_elem) + self.close() + return self
+ +
[docs] def duplicate_to(self, window: 'XASafariWindow') -> Self: + """Duplicates the tab in the specified window. The tab will then exist in two locations. + + :param window: The window to duplicate the tab in. + :type window: XASafariWindow + :return: A reference to the tab object. + :rtype: Self + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Safari") + >>> tab = app.front_window.current_tab + >>> window2 = app.window(1) + >>> tab.duplicate_to(window2) + + .. seealso:: :func:`move_to` + + .. versionadded:: 0.0.1 + """ + self.xa_elem.moveTo_(window.xa_elem) + return self
+ +
[docs] def get_clipboard_representation(self) -> AppKit.NSURL: + """Gets a clipboard-codable representation of the tab. + + When the clipboard content is set to a Safari tab, the tab's URL is added to the clipboard. + + :return: The tabs's URL + :rtype: AppKit.NSURL + + .. versionadded:: 0.0.8 + """ + return self.url.xa_elem
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Shortcuts.html b/docs/_modules/PyXA/apps/Shortcuts.html new file mode 100644 index 0000000..e03ffed --- /dev/null +++ b/docs/_modules/PyXA/apps/Shortcuts.html @@ -0,0 +1,519 @@ + + + + + + PyXA.apps.Shortcuts — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Shortcuts

+""".. versionadded:: 0.0.2
+
+Control the macOS Shortcuts application using JXA-like syntax.
+"""
+from typing import Any, Union
+
+import AppKit
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+from ..XAProtocols import XACanOpenPath, XAClipboardCodable
+
+
[docs]class XAShortcutsApplication(XABaseScriptable.XASBApplication, XACanOpenPath): + """A class for managing and interacting with Shortcuts.app. + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether Shortcuts is the active application. + """ + return self.xa_scel.frontmost() + + @frontmost.setter + def frontmost(self, frontmost: bool): + self.set_property("frontmost", frontmost) + + @property + def version(self) -> str: + """The version number of Shortcuts.app. + """ + return self.xa_scel.version() + +
[docs] def run(self, shortcut: 'XAShortcut', input: Any = None) -> Any: + """Runs the shortcut with the provided input. + + :param shortcut: The shortcut to run + :type shortcut: XAShortcut + :param input: The input to pass to the shortcut, defaults to None + :type input: Any, optional + :return: The return value of the last action to execute + :rtype: Any + + .. versionadded:: 0.0.4 + """ + return shortcut.run(input)
+ +
[docs] def folders(self, filter: dict = None) -> 'XAShortcutFolderList': + """Returns a list of folders matching the given filter. + + :Example 1: Get all folders + + >>> import PyXA + >>> app = PyXA.Application("Shortcuts") + >>> print(app.folders()) + <<class 'PyXA.apps.Shortcuts.XAShortcutFolderList'>['Starter Shortcuts', 'Window Management', 'Dev Tools', ...]> + + :Example 2: Get the number of shortcuts contained in each folder + + >>> import PyXA + >>> app = PyXA.Application("Shortcuts") + >>> all_shortcuts = app.folders().shortcuts() + >>> lengths = [len(ls) for ls in all_shortcuts] + >>> print(lengths) + [4, 3, 2, 15, 12, ...] + + .. versionchanged:: 0.0.4 + + Now returns an object of :class:`XAShortcutFolderList` instead of a default list. + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_scel.folders(), XAShortcutFolderList, filter)
+ +
[docs] def shortcuts(self, filter: dict = None) -> 'XAShortcutList': + """Returns a list of shortcuts matching the given filter. + + :Example 1: Get all shortcuts + + >>> import PyXA + >>> app = PyXA.Application("Shortcuts") + >>> print(app.shortcuts()) + <<class 'PyXA.apps.Shortcuts.XAShortcutList'>['Combine Screenshots & Share', 'Travel plans', 'Paywall Bypasser via Facebook', 'Display Notification', 'Text Converter For iMessage', ...]> + + .. versionchanged:: 0.0.4 + + Now returns an object of :class:`XAShortcutList` instead of a default list. + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_scel.shortcuts(), XAShortcutList, filter)
+ + + + +
[docs]class XAShortcutFolderList(XABase.XAList, XAClipboardCodable): + """A wrapper around lists of shortcuts folders that employs fast enumeration techniques. + + All properties of folders can be called as methods on the wrapped list, returning a list containing each folders's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAShortcutFolder, filter) + +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def by_id(self, id: str) -> Union['XAShortcutFolder', None]: + return self.by_property("id", id)
+ +
[docs] def by_name(self, name: str) -> Union['XAShortcutFolder', None]: + return self.by_property("name", name)
+ +
[docs] def shortcuts(self, filter: dict = None) -> list['XAShortcutList']: + ls = self.xa_elem.arrayByApplyingSelector_("shortcuts") or [] + return [self._new_element(x, XAShortcutList, filter) for x in ls.get()]
+ +
[docs] def get_clipboard_representation(self) -> list[str]: + """Gets a clipboard-codable representation of each folder in the list. + + When the clipboard content is set to a list of shortcut folders, each folders's name is added to the clipboard. + + :return: The list of folder names + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + return self.name()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAShortcutFolder(XABase.XAObject, XAClipboardCodable): + """A class for managing and interacting with folders of shortcuts. + + .. seealso:: :class:`XAShortcutsApplication` + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """A unique identifier for the folder. + """ + return self.xa_elem.id() + + @property + def name(self) -> str: + """The name string for the folder. + """ + return self.xa_elem.name() + +
[docs] def shortcuts(self, filter: dict = None) -> 'XAShortcutList': + """Returns a list of shortcuts matching the given filter. + + :Example 1: Get all shortcuts in a folder + + >>> import PyXA + >>> app = PyXA.Application("Shortcuts") + >>> folder = app.folders()[0] + >>> print(folder.shortcuts()) + <<class 'PyXA.apps.Shortcuts.XAShortcutList'>['Text Last Image', 'Shazam shortcut', 'Make QR Code', 'Music Quiz', ...]> + + :Example 2: Get a list of shortcut colors in a folder + + >>> import PyXA + >>> app = PyXA.Application("Shortcuts") + >>> folder = app.folders()[0] + >>> print(folder.shortcuts().color()) + [<<class 'PyXA.XABase.XAColor'>r=0.21521323919296265, g=0.7715266942977905, b=0.32515448331832886, a=0.0>, <<class 'PyXA.XABase.XAColor'>r=0.2379034161567688, g=0.3681696951389313, b=0.7627069354057312, a=0.0>, ...]> + + .. versionchanged:: 0.0.4 + + Now returns an object of :class:`XAShortcutList` instead of a default list. + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_elem.shortcuts(), XAShortcutList, filter)
+ +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of the folder. + + When the clipboard content is set to a shortcut folder, the folders's name is added to the clipboard. + + :return: The name of the folder + :rtype: str + + .. versionadded:: 0.0.8 + """ + return self.name
+ + def __repr__(self): + return "<" + str(type(self)) + self.name + ", id=" + str(self.id) + ">" + + def __eq__(self, other: 'XAShortcutFolder'): + if super().__eq__(other): + return True + + return self.id == other.id
+ + + + +
[docs]class XAShortcutList(XABase.XAList, XAClipboardCodable): + """A wrapper around lists of shortcuts that employs fast enumeration techniques. + + All properties of shortcuts can be called as methods on the wrapped list, returning a list containing each shortcut's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAShortcut, filter) + +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def subtitle(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("subtitle") or [])
+ +
[docs] def folder(self) -> XAShortcutFolderList: + ls = self.xa_elem.arrayByApplyingSelector_("id") or [] + return self._new_element(ls, XAShortcutFolderList)
+ +
[docs] def color(self) -> list[XABase.XAColor]: + ls = self.xa_elem.arrayByApplyingSelector_("color") or [] + return [XABase.XAColor(x) for x in ls]
+ +
[docs] def icon(self) -> XABase.XAImageList: + ls = self.xa_elem.arrayByApplyingSelector_("icon") or [] + return [XABase.XAImage(x) for x in ls]
+ +
[docs] def accepts_input(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("acceptsInput") or [])
+ +
[docs] def action_count(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("actionCount") or [])
+ +
[docs] def by_id(self, id: str) -> Union['XAShortcut', None]: + return self.by_property("id", id)
+ +
[docs] def by_name(self, name: str) -> Union['XAShortcut', None]: + return self.by_property("name", name)
+ +
[docs] def by_subtitle(self, subtitle: str) -> Union['XAShortcut', None]: + return self.by_property("subtitle", subtitle)
+ +
[docs] def by_folder(self, folder: XAShortcutFolder) -> Union['XAShortcut', None]: + return self.by_property("folder", folder.xa_elem)
+ +
[docs] def by_color(self, color: XABase.XAColor) -> Union['XAShortcut', None]: + return self.by_property("color", color.xa_elem)
+ +
[docs] def by_icon(self, icon: XABase.XAImage) -> Union['XAShortcut', None]: + return self.by_property("icon", icon.xa_elem)
+ +
[docs] def by_accepts_input(self, accepts_input: bool) -> Union['XAShortcut', None]: + return self.by_property("acceptsInput", accepts_input)
+ +
[docs] def by_action_count(self, action_count: int) -> Union['XAShortcut', None]: + return self.by_property("actionCount", action_count)
+ +
[docs] def get_clipboard_representation(self) -> list[Union[list[str], list[str], list[AppKit.NSImage]]]: + """Gets a clipboard-codable representation of each shortcut in the list. + + When the clipboard content is set to a list of shortcuts, each shortcut's name, subtitle, and icon are added to the clipboard. + + :return: A list of each shortcut's name, subtitle, and icon + :rtype: list[Union[list[str], list[str], list[AppKit.NSImage]]] + + .. versionadded:: 0.0.8 + """ + items = [] + names = self.name() + subtitles = self.subtitle() + icons = self.icon() + for index, name in enumerate(names): + items.append(name) + items.append(subtitles[index]) + items.append(icons[index].xa_elem) + return items
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAShortcut(XABaseScriptable.XASBPrintable, XAClipboardCodable): + """A class for managing and interacting with shortcuts. + + .. seealso:: :class:`XAShortcutsApplication` + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """The unique identifier for the shortcut. + """ + return self.xa_elem.id() + + @property + def name(self) -> str: + """The name of the shortcut. + """ + return self.xa_elem.name() + + @property + def subtitle(self) -> str: + """The shortcut's subtitle. + """ + return self.xa_elem.subtitle() + + @property + def folder(self) -> XAShortcutFolder: + """The folder that contains the shortcut. + """ + return self._new_element(self.xa_elem.folder(), XAShortcutFolder) + + @property + def color(self) -> XABase.XAColor: + """The color of the short. + """ + return XABase.XAColor(self.xa_elem.color()) + + @property + def icon(self) -> XABase.XAImage: + """The shortcut's icon. + """ + return XABase.XAImage(self.xa_elem.icon()) + + @property + def accepts_input(self) -> bool: + """Whether the shortcut accepts input data. + """ + return self.xa_elem.acceptsInput() + + @property + def action_count(self) -> int: + """The number of actions in the shortcut. + """ + return self.xa_elem.actionCount() + +
[docs] def run(self, input: Any = None) -> Any: + """Runs the shortcut with the provided input. + + :param input: The input to pass to the shortcut, defaults to None + :type input: Any, optional + :return: The value returned when the shortcut executes + :rtype: Any + + :Example 1: Run a shortcut without inputs + + >>> import PyXA + >>> app = PyXA.Application("Shortcuts") + >>> folder = app.folders().by_name("Dev Tools") + >>> shortcut = folder.shortcuts().by_name("Show IP Address") + >>> shortcut.run() + + :Example 2: Run a shortcut with text input + + >>> import PyXA + >>> app = PyXA.Application("Shortcuts") + >>> shortcut = app.shortcuts().by_name("Show Notification") + >>> shortcut.run("Testing 1 2 3...") + + :Example 3: Run a shortcut with URL input + + >>> import PyXA + >>> app = PyXA.Application("Shortcuts") + >>> safari = PyXA.Application("Safari") + >>> document = safari.document(0) + >>> shortcut = app.shortcuts().by_name("Save URL as PDF") + >>> shortcut.run(document.url) + + .. versionadded:: 0.0.2 + """ + if isinstance(input, XABase.XAObject): + input = input.xa_elem + return self.xa_elem.runWithInput_(input)
+ +
[docs] def get_clipboard_representation(self) -> list[Union[str, str, AppKit.NSImage]]: + """Gets a clipboard-codable representation of the shortcut. + + When the clipboard content is set to a shortcut, the shortcut's name, subtitle, and icon are added to the clipboard. + + :return: The shortcut's name, subtitle, and icon + :rtype: list[Union[str, str, AppKit.NSImage]] + + .. versionadded:: 0.0.8 + """ + return [self.name, self.subtitle, self.icon.xa_elem]
+ + def __repr__(self): + return "<" + str(type(self)) + self.name + ", id=" + str(self.id) + ">" + + def __eq__(self, other: 'XAShortcut'): + if super().__eq__(other): + return True + return self.id == other.id
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Spotify.html b/docs/_modules/PyXA/apps/Spotify.html new file mode 100644 index 0000000..e154e0e --- /dev/null +++ b/docs/_modules/PyXA/apps/Spotify.html @@ -0,0 +1,421 @@ + + + + + + PyXA.apps.Spotify — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Spotify

+""".. versionadded:: 0.1.0
+
+Control Spotify using JXA-like syntax.
+"""
+from enum import Enum
+from typing import Union
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+
+
[docs]class XASpotifyApplication(XABaseScriptable.XASBApplication): + """A class for managing and interacting with Spotify.app. + + .. versionadded:: 0.1.0 + """ +
[docs] class PlayerState(Enum): + """States of the Spotify track player. + """ + STOPPED = XABase.OSType('kPSS') + PLAYING = XABase.OSType('kPSP') + PAUSED = XABase.OSType('kPSp')
+ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether Spotify is the active application. + """ + return self.xa_scel.frontmost() + + @property + def version(self) -> str: + """The version of Spotify.app. + """ + return self.xa_scel.version() + + @property + def current_track(self) -> 'XASpotifyTrack': + """The currently playing track. + """ + return self._new_element(self.xa_scel.currentTrack(), XASpotifyTrack) + + @property + def sound_volume(self) -> int: + """The sound output volume (0 = minimum, 100 = maximum). + """ + return self.xa_scel.soundVolume() + + @sound_volume.setter + def sound_volume(self, sound_volume: int): + self.set_property('soundVolume', sound_volume) + + @property + def player_state(self) -> 'XASpotifyApplication.PlayerState': + """Is Spotify stopped, paused, or playing? + """ + return XASpotifyApplication.PlayerState(self.xa_scel.playerState()) + + @property + def player_position(self) -> float: + """The player's position within the currently playing track in seconds. + """ + return self.xa_scel.playerPosition() + + @player_position.setter + def player_position(self, player_position: float): + self.set_property('playerPosition', player_position) + + @property + def repeating_enabled(self) -> bool: + """Whether repeating is enabled in the current playback context. + """ + return self.xa_scel.repeatingEnabled() + + @property + def repeating(self) -> bool: + """Whether repeating is on or off. + """ + return self.xa_scel.repeating() + + @repeating.setter + def repeating(self, repeating: bool): + self.set_property('repeating', repeating) + + @property + def shuffling_enabled(self) -> bool: + """Whether shuffling is enabled in the current playback context. + """ + return self.xa_scel.shufflingEnabled() + + @property + def shuffling(self) -> bool: + """Whether shuffling is on or off. + """ + return self.xa_scel.shuffling() + + @shuffling.setter + def shuffling(self, shuffling: bool): + self.set_property('shuffling', shuffling) + +
[docs] def search(self, search_string: str = "", track: str = "", start_year: int = -1, end_year: int = -1, genre: str = "", artist: str = "", album: str = "", label: str = "", mood: str = ""): + """Opens the search tab and searches for content matching given parameters. + + .. versionadded:: 0.1.0 + """ + if track != "": + search_string += f" track:{track}" + + if start_year != -1: + if end_year == -1: + search_string += f" year:{start_year}-{start_year}" + else: + search_string += f" year:{start_year}-{end_year}" + + if genre != "": + search_string += f" genre:{genre}" + + if artist != "": + search_string += f" artist:{artist}" + + if album != "": + search_string += f" album:{album}" + + if label != "": + search_string += f" label:{label}" + + if mood != "": + search_string += f" mood:{mood}" + + XABase.XAURL(f"spotify:search:{search_string}").open()
+ +
[docs] def next_track(self): + """Skips to the next track. + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Spotify") + >>> app.next_track() + + + .. versionadded:: 0.1.0 + """ + self.xa_scel.nextTrack()
+ +
[docs] def previous_track(self): + """Skips to the previous track. + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Spotify") + >>> app.previous_track() + + .. versionadded:: 0.1.0 + """ + self.xa_scel.previousTrack()
+ +
[docs] def playpause(self): + """Toggles play/pause. + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Spotify") + >>> app.playpause() + + .. versionadded:: 0.1.0 + """ + self.xa_scel.playpause()
+ +
[docs] def pause(self): + """Pauses playback. + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Spotify") + >>> app.pause() + + .. versionadded:: 0.1.0 + """ + self.xa_scel.pause()
+ +
[docs] def play(self): + """Resumes playback. + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Spotify") + >>> app.play() + + .. versionadded:: 0.1.0 + """ + self.xa_scel.play()
+ +
[docs] def play_track(self, track_uri: str, context_uri: Union[str, None] = None): + """Starts playback of a track in the given context. + + :param track_uri: The URI of the track to play + :type track_uri: str + :param context_uri: The URI of the context to play in, defaults to None + :type context_uri: Union[str, None], optional + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Spotify") + >>> app.play_track("spotify:track:4LRPiXqCikLlN15c3yImP7") + + .. versionadded:: 0.1.0 + """ + self.xa_scel.playTrack_inContext_(track_uri, context_uri)
+ + + + +
[docs]class XASpotifyTrack(XABase.XAObject): + """A Spotify track. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def artist(self) -> str: + """The artist of the track. + """ + return self.xa_elem.artist() + + @property + def album(self) -> str: + """The album of the track. + """ + return self.xa_elem.album() + + @property + def disc_number(self) -> int: + """The disc number of the track. + """ + return self.xa_elem.discNumber() + + @property + def duration(self) -> int: + """The length of the track in milliseconds. + """ + return self.xa_elem.duration() + + @property + def played_count(self) -> int: + """The number of times this track has been played. + """ + return self.xa_elem.playedCount() + + @property + def track_number(self) -> int: + """The index of the track in its album. + """ + return self.xa_elem.trackNumber() + + @property + def starred(self) -> bool: + """Whether the track is starred. + """ + return self.xa_elem.starred() + + @property + def popularity(self) -> int: + """The popularity of this track, 0-100. + """ + return self.xa_elem.popularity() + + @property + def id(self) -> str: + """The ID of the track. + """ + return self.xa_elem.id() + + @property + def name(self) -> str: + """The name of the track. + """ + return self.xa_elem.name() + + @property + def artwork_url(self) -> XABase.XAURL: + """The URL of the track's album cover. + """ + return XABase.XAURL(self.xa_elem.artworkUrl()) + + @property + def artwork(self) -> XABase.XAImage: + """The album artwork image. + """ + return XABase.XAImage(self.artwork_url) + + @property + def album_artist(self) -> str: + """The album artist of the track. + """ + return self.xa_elem.albumArtist() + + @property + def spotify_url(self) -> type: + """The URL of the track. + """ + return XABase.XAURL(self.xa_elem.spotifyUrl()) + + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Stocks.html b/docs/_modules/PyXA/apps/Stocks.html new file mode 100644 index 0000000..20df7cd --- /dev/null +++ b/docs/_modules/PyXA/apps/Stocks.html @@ -0,0 +1,313 @@ + + + + + + PyXA.apps.Stocks — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Stocks

+""".. versionadded:: 0.0.6
+
+Control the macOS Stocks application using JXA-like syntax.
+"""
+
+from typing import Union
+from AppKit import NSPredicate, NSMutableArray, NSURL
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+from ..XAProtocols import XAClipboardCodable
+
+
[docs]class XAStocksApplication(XABase.XAApplication): + """A class for managing and interacting with Stocks.app. + + .. seealso:: :class:`XAStocksSavedStock` + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def sidebar_showing(self) -> bool: + """Whether the sidebar is currently showing. + """ + sidebar = self.front_window.xa_elem.groups()[0].groups()[0].groups()[0].groups()[0].groups()[0].groups()[1].groups()[0].groups()[0].groups()[1] + return sidebar.get() is not None + +
[docs] def show_symbol(self, ticker: str) -> 'XAStocksApplication': + """Displays the page for the specified ticker symbol. + + :param ticker: The ticker symbol for the desired stock + :type ticker: str + :return: A reference to the application object + :rtype: XAStocksApplication + + .. versionadded:: 0.0.6 + """ + XABase.XAURL("stocks://?symbol=" + ticker).open()
+ +
[docs] def go_back(self) -> 'XAStocksApplication': + """Clicks the 'back' button (from a new article when viewed in the Stocks app). + + :return: A reference to the application object + :rtype: XAStocksApplication + + .. versionadded:: 0.0.6 + """ + self.front_window.toolbars()[0].buttons()[0].actions()[0].perform() + return self
+ +
[docs] def show_business_news(self) -> 'XAStocksApplication': + """Shows the 'Business News' tab in the front stock window. + + :return: A reference to the application object + :rtype: XAStocksApplication + + .. versionadded:: 0.0.6 + """ + self.front_window.groups().at(0).groups().at(0).groups().at(0).groups().at(0).groups().at(0).groups().at(0).groups().at(0).groups().at(1).groups().at(0).groups().at(0).groups().at(0).groups().at(0).groups().at(0).groups().at(0).groups().at(0).groups().at(1).groups().at(0).groups().at(0).groups().at(1).groups().at(0).ui_elements().at(2).buttons().at(0).actions()[0].perform()
+ +
[docs] def new_tab(self): + """Opens a new tab. + + .. versionadded:: 0.0.6 + """ + predicate = NSPredicate.predicateWithFormat_("name == %@", "AXPress") + press_action = self.front_window.xa_elem.tabGroups()[0].buttons()[0].actions().filteredArrayUsingPredicate_(predicate)[0] + press_action.perform()
+ +
[docs] def saved_stocks(self) -> 'XAStocksSavedStockList': + """Gets a list of stocks. + + :return: The list of stocks + :rtype: XAStocksStockList + + .. versionadded:: 0.0.6 + """ + stock_element_list = self.front_window.xa_elem.groups()[0].groups()[0].groups()[0].groups()[0].groups()[0].groups()[0].groups()[0].groups()[1].groups()[0].groups()[0].groups()[0].groups()[0].groups()[0].groups()[0].groups()[0].groups()[1].groups()[0].groups()[0].groups()[1].groups()[0].groups() + + stocks = [] + def add_stock(element, index, stop): + nonlocal stocks + groups = element.groups() + if len(groups) == 1: + stocks.append(groups[0].UIElements()[0]) + + stock_element_list.enumerateObjectsUsingBlock_(add_stock) + + return self._new_element(NSMutableArray.alloc().initWithArray_(stocks), XAStocksSavedStockList)
+ + + + +
[docs]class XAStocksSavedStockList(XABase.XAList, XAClipboardCodable): + """A wrapper around a list of stocks. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAStocksSavedStock, filter) + +
[docs] def properties(self) -> list[str]: + return self.xa_elem.arrayByApplyingSelector_("properties")
+ +
[docs] def name(self) -> list[str]: + return [x.name for x in self]
+ +
[docs] def symbol(self) -> list[str]: + return [x.symbol for x in self]
+ +
[docs] def price(self) -> list[str]: + return [x.price for x in self]
+ +
[docs] def change(self) -> list[str]: + return [x.change for x in self]
+ +
[docs] def selected(self) -> list[str]: + ls = self.xa_elem.arrayByApplyingSelector_("selected") + return [x.get() for x in ls]
+ +
[docs] def get_clipboard_representation(self) -> list[Union[str, NSURL]]: + """Gets a clipboard-codable representation of each stock in the list. + + When the clipboard content is set to a list of saved stocks, each stocks's name, price, and stocks URI are added to the clipboard. + + :return: Each stock's name, price, and stocks URI + :rtype: list[Union[str, NSURL]] + + .. versionadded:: 0.0.8 + """ + items = [] + names = self.name() + prices = self.price() + symbols = self.symbol() + for index, name in enumerate(names): + items.append(name + " - " + str(prices[index])) + items.append(XABase.XAURL("stocks://?symbol=" + symbols[index]).xa_elem) + + return items
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.object_description()) + ">"
+ +
[docs]class XAStocksSavedStock(XABase.XAObject, XAClipboardCodable): + """A class for interacting with stocks in Stocks.app. + + .. versionadded:: 0.0.6 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the stock. + """ + return self.xa_elem.properties() + + @property + def name(self) -> str: + """The name of the stock (The company name). + """ + reversed = self.xa_elem.objectDescription().get()[::-1] + return reversed[reversed.index(",") + 1:][::-1] + + @property + def symbol(self) -> str: + """The symbol for the stock. + """ + return self.xa_elem.objectDescription().get().split(", ")[-1] + + @property + def price(self) -> float: + """The current price of the stock. + """ + value = self.xa_elem.value().get() + value = value.replace("selected, ", "") + return float(value.split(", ")[0].replace(",", "")) + + @property + def change(self) -> str: + """The percentage or point change of the stock in the current trading session. + """ + value = self.xa_elem.value().get() + return value.split(", ")[-1] + + @property + def selected(self) -> bool: + """Whether the stock is the currently selected stock. + """ + return self.xa_elem.selected().get() + +
[docs] def show(self): + """Shows the stock's tab in the front stock window. + + .. versionadded:: 0.0.6 + """ + self.xa_elem.actions()[0].perform()
+ +
[docs] def get_clipboard_representation(self) -> list[Union[str, NSURL]]: + """Gets a clipboard-codable representation of the stock. + + When the clipboard content is set to a saved stock, the stocks's name, price, and stocks URI are added to the clipboard. + + :return: The stock's name, price, and stocks URI + :rtype: list[Union[str, NSURL]] + + .. versionadded:: 0.0.8 + """ + return [self.name + " - " + str(self.price), XABase.XAURL("stocks://?symbol=" + self.symbol).xa_elem]
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/SystemEvents.html b/docs/_modules/PyXA/apps/SystemEvents.html new file mode 100644 index 0000000..c0b386c --- /dev/null +++ b/docs/_modules/PyXA/apps/SystemEvents.html @@ -0,0 +1,6795 @@ + + + + + + PyXA.apps.SystemEvents — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.SystemEvents

+""".. versionadded:: 0.1.0
+
+Control the macOS System Events application using JXA-like syntax.
+"""
+from datetime import datetime
+from enum import Enum
+from pprint import pprint
+from time import sleep
+from typing import Any, Union
+
+import AppKit
+import Quartz
+
+from PyXA import XABase
+from PyXA.XABase import OSType
+from PyXA import XABaseScriptable
+from PyXA.XAEvents import KEYCODES
+from PyXA.XAProtocols import XACanPrintPath, XACloseable, XAPrintable, XASelectable
+        
+
+
[docs]class XASystemEventsApplication(XABase.XAEventsApplication, XABaseScriptable.XASBApplication, XACanPrintPath): + """A class for managing and interacting with System Events.app. + + .. versionadded:: 0.1.0 + """ +
[docs] class DynamicStyle(Enum): + """Options for the dynamic style of the desktop background. + """ + AUTO = OSType('atmt') #: automatic (if supported, follows light/dark appearance) + DYNAMIC = OSType('dynm') #: dynamic (if supported, updates desktop picture based on time and/or location) + LIGHT = OSType('lite') #: light style + DARK = OSType('dark') #: dark style + UNKNOWN = OSType('unk\?') #: unknown style
+ +
[docs] class DoubleClickBehavior(Enum): + """Options for double click behaviors. + """ + MINIMIZE = OSType('ddmi') #: Minimize + OFF = OSType('ddof') #: Off + ZOOM = OSType('ddzo') #: Zoom
+ +
[docs] class MinimizeEffect(Enum): + """Options for the effect to use when minimizing applications. + """ + GENIE = OSType('geni') #: Genie effect + SCALE = OSType('scal') #: Scale effect
+ +
[docs] class ScreenLocation(Enum): + """Locations on the screen. + """ + BOTTOM = OSType('bott') #: Bottom of screen + LEFT = OSType('left') #: Left side of screen + RIGHT = OSType('righ') #: Right side of screen
+ +
[docs] class ScrollPageBehavior(Enum): + """Scroll page behaviors. + """ + JUMP_TO_HERE = OSType('tohr') #: Jump to here + JUMP_TO_NEXT_PAGE = OSType('nxpg') #: Jump to next page
+ +
[docs] class FontSmoothingStyle(Enum): + """Font smoothing styles. + """ + AUTOMATIC = OSType('autm') + LIGHT = OSType('lite') + MEDIUM = OSType('medi') + STANDARD = OSType('stnd') + STRONG = OSType('strg')
+ +
[docs] class Appearance(Enum): + """Appearance colors. + """ + BLUE = OSType('blue') + GRAPHITE = OSType('grft')
+ +
[docs] class HighlightColor(Enum): + """Highlight colors. + """ + BLUE = OSType('blue') + GOLD = OSType('gold') + GRAPHITE = OSType('grft') + GREEN = OSType('gren') + ORANGE = OSType('orng') + PURPLE = OSType('prpl') + RED = OSType('red ') + SILVER = OSType('slvr')
+ +
[docs] class MediaInsertionAction(Enum): + """Actions to perform when media is inserted. + """ + ASK_WHAT_TO_DO = OSType('dhas') + IGNORE = OSType('dhig') + OPEN_APPLICATION = OSType('dhap') + RUN_A_SCRIPT = OSType('dhrs')
+ +
[docs] class Key(Enum): + """Keys and key actions. + """ + COMMAND = 0 + CONTROL = 1 + OPTION = 2 + SHIFT = 3 + CAPS_LOCK = 4 + FUNCTION = 5
+ +
[docs] class AccessRight(Enum): + """Access right levels. + """ + NONE = OSType('none') + READ = OSType('read') #: Read only + READ_WRITE = OSType('rdwr') #: Read and write + WRITE = OSType('writ') #: Write only
+ +
[docs] class PictureRotation(Enum): + """Desktop image picture rotation settings. + """ + NEVER = 0 + USING_INTERVAL = 1 + USING_LOGIN = 2 + AFTER_SLEEP = 3
+ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Is this the active application? + """ + return self.xa_scel.frontmost() + + @property + def version(self) -> str: + """The version number of the application. + """ + return self.xa_scel.version() + + @property + def quit_delay(self) -> int: + """The time in seconds the application will idle before quitting; if set to zero, idle time will not cause the application to quit. + """ + return self.xa_scel.quitDelay() + + @quit_delay.setter + def quit_delay(self, quit_delay: int): + self.set_property('quitDelay', quit_delay) + + @property + def script_menu_enabled(self) -> bool: + """Is the Script menu installed in the menu bar? + """ + return self.xa_scel.scriptMenuEnabled() + + @property + def current_user(self) -> 'XASystemEventsUser': + """The currently logged in user. + """ + return self._new_element(self.xa_scel.currentUser(), XASystemEventsUser) + + @property + def appearance_preferences(self) -> 'XASystemEventsAppearancePreferencesObject': + """A collection of appearance preferences. + """ + return self._new_element(self.xa_scel.appearancePreferences(), XASystemEventsAppearancePreferencesObject) + + @appearance_preferences.setter + def appearance_preferences(self, appearance_preferences: 'XASystemEventsAppearancePreferencesObject'): + self.set_property('appearancePreferences', appearance_preferences.xa_elem) + + @property + def cd_and_dvd_preferences(self) -> 'XASystemEventsCDAndDVDPreferencesObject': + """The preferences for the current user when a CD or DVD is inserted. + """ + return self._new_element(self.xa_scel.CDAndDVDPreferences(), XASystemEventsCDAndDVDPreferencesObject) + + @cd_and_dvd_preferences.setter + def cd_and_dvd_preferences(self, cd_and_dvd_preferences: 'XASystemEventsCDAndDVDPreferencesObject'): + self.set_property('cd_and_dvd_preferences', cd_and_dvd_preferences.xa_elem) + + @property + def current_desktop(self) -> 'XASystemEventsDesktop': + """The primary desktop. + """ + return self._new_element(self.xa_scel.currentDesktop(), XASystemEventsDesktop) + + @property + def dock_preferences(self) -> 'XASystemEventsDockPreferencesObject': + """The preferences for the current user's dock. + """ + return self._new_element(self.xa_scel.dockPreferences(), XASystemEventsDockPreferencesObject) + + @dock_preferences.setter + def dock_preferences(self, dock_preferences: 'XASystemEventsDockPreferencesObject'): + self.set_property('dock_preferences', dock_preferences.xa_elem) + + @property + def network_preferences(self) -> 'XASystemEventsNetworkPreferencesObject': + """The preferences for the current user's network. + """ + return self._new_element(self.xa_scel.networkPreferences(), XASystemEventsNetworkPreferencesObject) + + @network_preferences.setter + def network_preferences(self, network_preferences: 'XASystemEventsNetworkPreferencesObject'): + self.set_property('network_preferences', network_preferences.xa_elem) + + @property + def current_screen_saver(self) -> 'XASystemEventsScreenSaver': + """The currently selected screen saver. + """ + return self._new_element(self.xa_scel.currentScreenSaver(), XASystemEventsScreenSaver) + + @current_screen_saver.setter + def current_screen_saver(self, current_screen_saver: 'XASystemEventsScreenSaver'): + self.set_property('currentScreenSaver', current_screen_saver.xa_elem) + + @property + def screen_saver_preferences(self) -> 'XASystemEventsScreenSaverPreferencesObject': + """The preferences common to all screen savers. + """ + return self._new_element(self.xa_scel.screenSaverPreferences(), XASystemEventsScreenSaverPreferencesObject) + + @screen_saver_preferences.setter + def screen_saver_preferences(self, screen_saver_preferences: 'XASystemEventsScreenSaverPreferencesObject'): + self.set_property('screenSaverPreferences', screen_saver_preferences.xa_elem) + + @property + def security_preferences(self) -> 'XASystemEventsSecurityPreferencesObject': + """A collection of security preferences. + """ + return self._new_element(self.xa_scel.securityPreferences(), XASystemEventsSecurityPreferencesObject) + + @security_preferences.setter + def security_preferences(self, security_preferences: 'XASystemEventsSecurityPreferencesObject'): + self.set_property('securityPreferences', security_preferences.xa_elem) + + @property + def application_support_folder(self) -> 'XABase.XAFolder': + """The Application Support folder. + """ + return self._new_element(self.xa_scel.applicationSupportFolder(), XABase.XAFolder) + + @property + def applications_folder(self) -> 'XABase.XAFolder': + """The user's Applications folder. + """ + return self._new_element(self.xa_scel.applicationsFolder(), XABase.XAFolder) + + @property + def classic_domain(self) -> 'XABase.XAClassicDomainObject': + """The collection of folders belonging to the Classic System. + """ + return self._new_element(self.xa_scel.ClassicDomain(), XABase.XAClassicDomainObject) + + @property + def desktop_folder(self) -> 'XABase.XAFolder': + """The user's Desktop folder. + """ + return self._new_element(self.xa_scel.desktopFolder(), XABase.XAFolder) + + @property + def desktop_pictures_folder(self) -> 'XABase.XAFolder': + """The Desktop Pictures folder. + """ + return self._new_element(self.xa_scel.desktopPicturesFolder(), XABase.XAFolder) + + @property + def documents_folder(self) -> 'XABase.XAFolder': + """The user's Documents folder. + """ + return self._new_element(self.xa_scel.documentsFolder(), XABase.XAFolder) + + @property + def downloads_folder(self) -> 'XABase.XAFolder': + """The user's Downloads folder. + """ + return self._new_element(self.xa_scel.downloadsFolder(), XABase.XAFolder) + + @property + def favorites_folder(self) -> 'XABase.XAFolder': + """The user's Favorites folder. + """ + return self._new_element(self.xa_scel.favoritesFolder(), XABase.XAFolder) + + @property + def folder_action_scripts_folder(self) -> 'XABase.XAFolder': + """The user's Folder Action Scripts folder. + """ + return self._new_element(self.xa_scel.FolderActionScriptsFolder(), XABase.XAFolder) + + @property + def fonts_folder(self) -> 'XABase.XAFolder': + """The Fonts folder. + """ + return self._new_element(self.xa_scel.fontsFolder(), XABase.XAFolder) + + @property + def home_folder(self) -> 'XABase.XAFolder': + """The Home folder of the currently logged in user. + """ + return self._new_element(self.xa_scel.homeFolder(), XABase.XAFolder) + + @property + def library_folder(self) -> 'XABase.XAFolder': + """The Library folder. + """ + return self._new_element(self.xa_scel.libraryFolder(), XABase.XAFolder) + + @property + def local_domain(self) -> 'XABase.XALocalDomainObject': + """The collection of folders residing on the Local machine. + """ + return self._new_element(self.xa_scel.localDomain(), XABase.XALocalDomainObject) + + @property + def movies_folder(self) -> 'XABase.XAFolder': + """The user's Movies folder. + """ + return self._new_element(self.xa_scel.moviesFolder(), XABase.XALocalDomainObject) + + @property + def music_folder(self) -> 'XABase.XAFolder': + """The user's Music folder. + """ + return self._new_element(self.xa_scel.musicFolder(), XABase.XAFolder) + + @property + def network_domain(self) -> 'XABase.XANetworkDomainObject': + """The collection of folders residing on the Network. + """ + return self._new_element(self.xa_scel.networkDomain(), XABase.XANetworkDomainObject) + + @property + def pictures_folder(self) -> 'XABase.XAFolder': + """The user's Pictures folder. + """ + return self._new_element(self.xa_scel.picturesFolder(), XABase.XAFolder) + + @property + def preferences_folder(self) -> 'XABase.XAFolder': + """The user's Preferences folder. + """ + return self._new_element(self.xa_scel.preferencesFolder(), XABase.XAFolder) + + @property + def public_folder(self) -> 'XABase.XAFolder': + """The user's Public folder. + """ + return self._new_element(self.xa_scel.publicFolder(), XABase.XAFolder) + + @property + def scripting_additions_folder(self) -> 'XABase.XAFolder': + """The Scripting Additions folder. + """ + return self._new_element(self.xa_scel.scriptingAdditionsFolder(), XABase.XAFolder) + + @property + def scripts_folder(self) -> 'XABase.XAFolder': + """The user's Scripts folder. + """ + return self._new_element(self.xa_scel.scriptsFolder(), XABase.XAFolder) + + @property + def shared_documents_folder(self) -> 'XABase.XAFolder': + """The Shared Documents folder. + """ + return self._new_element(self.xa_scel.sharedDocumentsFolder(), XABase.XAFolder) + + @property + def sites_folder(self) -> 'XABase.XAFolder': + """The user's Sites folder. + """ + return self._new_element(self.xa_scel.sitesFolder(), XABase.XAFolder) + + @property + def speakable_items_folder(self) -> 'XABase.XAFolder': + """The Speakable Items folder. + """ + return self._new_element(self.xa_scel.speakableItemsFolder(), XABase.XAFolder) + + @property + def startup_disk(self) -> 'XABase.XADisk': + """The disk from which Mac OS X was loaded. + """ + return self._new_element(self.xa_scel.startupDisk(), XABase.XADisk) + + @property + def system_domain(self) -> 'XABase.XASystemDomainObject': + """The collection of folders belonging to the System. + """ + return self._new_element(self.xa_scel.systemDomain(), XABase.XASystemDomainObject) + + @property + def temporary_items_folder(self) -> 'XABase.XAFolder': + """The Temporary Items folder. + """ + return self._new_element(self.xa_scel.temporaryItemsFolder(), XABase.XAFolder) + + @property + def trash(self) -> 'XABase.XAFolder': + """The user's Trash folder. + """ + return self._new_element(self.xa_scel.trash(), XABase.XAFolder) + + @property + def user_domain(self) -> 'XABase.XAUserDomainObject': + """The collection of folders belonging to the User. + """ + return self._new_element(self.xa_scel.userDomain(), XABase.XAUserDomainObject) + + @property + def utilities_folder(self) -> 'XABase.XAFolder': + """The Utilities folder. + """ + return self._new_element(self.xa_scel.utilitiesFolder(), XABase.XAFolder) + + @property + def workflows_folder(self) -> 'XABase.XAFolder': + """The Automator Workflows folder. + """ + return self._new_element(self.xa_scel.workflowsFolder(), XABase.XAFolder) + + @property + def folder_actions_enabled(self) -> bool: + """Are Folder Actions currently being processed? + """ + return self.xa_scel.folderActionsEnabled() + + @folder_actions_enabled.setter + def folder_actions_enabled(self, folder_actions_enabled: bool): + self.set_property('folderActionsEnabled', folder_actions_enabled) + + @property + def ui_elements_enabled(self) -> bool: + """Are UI element events currently being processed? + """ + return self.xa_scel.UIElementsEnabled() + + @property + def scripting_definition(self) -> 'XASystemEventsScriptingDefinitionObject': + """The scripting definition of the System Events application. + """ + return self._new_element(self.xa_scel.scriptingDefinition(), XASystemEventsScriptingDefinitionObject) + +
[docs] def log_out(self): + """Logs out the current user. + + .. versionadded:: 0.1.0 + """ + self.xa_scel.logOut()
+ +
[docs] def restart(self, state_saving_preference: bool = False): + """Restarts the computer. + + :param state_saving_preference: Whether the user defined state saving preference is followed, defaults to False (always saved) + :type state_saving_preference: bool, optional + + .. versionadded:: 0.1.0 + """ + self.xa_scel.restartStateSavingPreference_(state_saving_preference)
+ +
[docs] def shut_down(self, state_saving_preference: bool = False): + """Shuts down the computer. + + :param state_saving_preference: Whether the user defined state saving preference is followed, defaults to False (always saved) + :type state_saving_preference: bool, optional + + .. versionadded:: 0.1.0 + """ + self.xa_scel.shutDownStateSavingPreference_(state_saving_preference)
+ +
[docs] def sleep(self): + """Puts the computer to sleep. + + .. versionadded:: 0.1.0 + """ + self.xa_scel.sleep()
+ +
[docs] def begin_transaction(self) -> int: + """Discards the results of a bounded update session with one or more files. + + :return: _description_ + :rtype: int + """ + return self.xa_scel.beginTransaction()
+ +
[docs] def end_transaction(self): + """Ends the current transaction gracefully. + + .. versionadded:: 0.1.0 + """ + self.xa_scel.endTransaction()
+ +
[docs] def abort_transaction(self): + """Aborts the current transaction. + + .. versionadded:: 0.1.0 + """ + self.xa_scel.abortTransaction()
+ +
[docs] def click(self): + """Clicks on the application. + + .. versionadded:: 0.1.0 + """ + self.xa_scel.click()
+ +
[docs] def key_code(self, key_code: Union[int, list[int]], modifier: Union['XASystemEventsApplication.Key', list['XASystemEventsApplication.Key'], None] = None): + """Cause the target (active) process to behave as if key codes were entered. + + :param key_code: The key code(s) to be sent + :type key_code: Union[int, list[int]] + :param modifier: _description_, defaults to None + :type modifier: Union[XASystemEventsApplication.Key, list[XASystemEventsApplication.Key], None], optional + + .. versionadded:: 0.1.0 + """ + if not isinstance(key_code, list): + key_code = [key_code] + + if not isinstance(modifier, list): + modifier = [modifier] + + for key in key_code: + key_down_event = Quartz.CGEventCreateKeyboardEvent(None, key, True) + key_up_event = Quartz.CGEventCreateKeyboardEvent(None, key, False) + + for mod in modifier: + if mod == XASystemEventsApplication.Key.COMMAND: + Quartz.CGEventSetFlags(key_down_event, Quartz.kCGEventFlagMaskCommand) + elif mod == XASystemEventsApplication.Key.CONTROL: + Quartz.CGEventSetFlags(key_down_event, Quartz.kCGEventFlagMaskControl) + elif mod == XASystemEventsApplication.Key.OPTION: + Quartz.CGEventSetFlags(key_down_event, Quartz.kCGEventFlagMaskAlternate) + elif mod == XASystemEventsApplication.Key.SHIFT: + Quartz.CGEventSetFlags(key_down_event, Quartz.kCGEventFlagMaskShift) + elif mod == XASystemEventsApplication.Key.CAPS_LOCK: + Quartz.CGEventSetFlags(key_down_event, Quartz.kCGEventFlagMaskAlphaShift) + elif mod == XASystemEventsApplication.Key.FUNCTION: + Quartz.CGEventSetFlags(key_down_event, Quartz.kCGEventFlagMaskSecondaryFn) + + Quartz.CGEventPost(Quartz.kCGHIDEventTap, key_down_event) + Quartz.CGEventPost(Quartz.kCGHIDEventTap, key_up_event)
+ +
[docs] def key_stroke(self, keystroke: Union[int, list[int]], modifier: Union['XASystemEventsApplication.Key', list['XASystemEventsApplication.Key'], None] = None): + """Cause the target (active) process to behave as if keystrokes were entered. + + :param keystroke: The keystrokes to be sent + :type keystroke: Union[int, list[int]] + :param modifier: _description_, defaults to None + :type modifier: Union[XASystemEventsApplication.Key, list[XASystemEventsApplication.Key], None], optional + + .. versionadded:: 0.1.0 + """ + for key in keystroke: + key = str(key).lower() + if key in KEYCODES: + key = KEYCODES[key] + else: + print("Unknown key(s).") + + if not isinstance(modifier, list): + modifier = [modifier] + + key_down_event = Quartz.CGEventCreateKeyboardEvent(None, key, True) + key_up_event = Quartz.CGEventCreateKeyboardEvent(None, key, False) + + for mod in modifier: + if mod == XASystemEventsApplication.Key.COMMAND: + Quartz.CGEventSetFlags(key_down_event, Quartz.kCGEventFlagMaskCommand) + elif mod == XASystemEventsApplication.Key.CONTROL: + Quartz.CGEventSetFlags(key_down_event, Quartz.kCGEventFlagMaskControl) + elif mod == XASystemEventsApplication.Key.OPTION: + Quartz.CGEventSetFlags(key_down_event, Quartz.kCGEventFlagMaskAlternate) + elif mod == XASystemEventsApplication.Key.SHIFT: + Quartz.CGEventSetFlags(key_down_event, Quartz.kCGEventFlagMaskShift) + elif mod == XASystemEventsApplication.Key.CAPS_LOCK: + Quartz.CGEventSetFlags(key_down_event, Quartz.kCGEventFlagMaskAlphaShift) + elif mod == XASystemEventsApplication.Key.FUNCTION: + Quartz.CGEventSetFlags(key_down_event, Quartz.kCGEventFlagMaskSecondaryFn) + + Quartz.CGEventPost(Quartz.kCGHIDEventTap, key_down_event) + Quartz.CGEventPost(Quartz.kCGHIDEventTap, key_up_event)
+ +
[docs] def documents(self, filter: dict = None) -> Union['XASystemEventsDocumentList', None]: + """Returns a list of documents, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned documents will have, or None + :type filter: Union[dict, None] + :return: The list of documents + :rtype: XASystemEventsDocumentList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.documents(), XASystemEventsDocumentList, filter)
+ +
[docs] def users(self, filter: dict = None) -> Union['XASystemEventsUserList', None]: + """Returns a list of users, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned users will have, or None + :type filter: Union[dict, None] + :return: The list of users + :rtype: XASystemEventsUserList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.users(), XASystemEventsUserList, filter)
+ +
[docs] def desktops(self, filter: dict = None) -> Union['XASystemEventsDesktopList', None]: + """Returns a list of desktops, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned desktops will have, or None + :type filter: Union[dict, None] + :return: The list of desktops + :rtype: XASystemEventsDesktopList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.desktops(), XASystemEventsDesktopList, filter)
+ +
[docs] def login_items(self, filter: dict = None) -> Union['XASystemEventsLoginItemList', None]: + """Returns a list of login items, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned login items will have, or None + :type filter: Union[dict, None] + :return: The list of login items + :rtype: XASystemEventsLoginItemList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.loginItems(), XASystemEventsLoginItemList, filter)
+ +
[docs] def screen_savers(self, filter: dict = None) -> Union['XASystemEventsScreenSaverList', None]: + """Returns a list of screen savers, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned screen savers will have, or None + :type filter: Union[dict, None] + :return: The list of screen savers + :rtype: XASystemEventsScreenSaverList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.screenSavers(), XASystemEventsScreenSaverList, filter)
+ +
[docs] def aliases(self, filter: dict = None) -> Union['XABase.XAAliasList', None]: + """Returns a list of aliases, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned aliases will have, or None + :type filter: Union[dict, None] + :return: The list of aliases + :rtype: XABase.XAAliasList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.aliases(), XABase.XAAliasList, filter)
+ +
[docs] def disks(self, filter: dict = None) -> Union['XABase.XADiskList', None]: + """Returns a list of disks, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned disks will have, or None + :type filter: Union[dict, None] + :return: The list of disks + :rtype: XABase.XADiskList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.disks(), XABase.XADiskList, filter)
+ +
[docs] def disk_items(self, filter: dict = None) -> Union['XABase.XADiskItemList', None]: + """Returns a list of disk items, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned disk items will have, or None + :type filter: Union[dict, None] + :return: The list of disk items + :rtype: XABase.XADiskItemList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.diskItems(), XABase.XADiskItemList, filter)
+ +
[docs] def domains(self, filter: dict = None) -> Union['XABase.XADomainList', None]: + """Returns a list of domains, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned domains will have, or None + :type filter: Union[dict, None] + :return: The list of domains + :rtype: XABase.XADomainList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.domains(), XABase.XADomainList, filter)
+ +
[docs] def files(self, filter: dict = None) -> Union['XABase.XAFileList', None]: + """Returns a list of files, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned files will have, or None + :type filter: Union[dict, None] + :return: The list of files + :rtype: XABase.XAFileList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.files(), XABase.XAFileList, filter)
+ +
[docs] def file_packages(self, filter: dict = None) -> Union['XABase.XAFilePackageList', None]: + """Returns a list of file packages, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned file packages will have, or None + :type filter: Union[dict, None] + :return: The list of file packages + :rtype: XABase.XAFilePackageList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.filePackages(), XABase.XAFilePackageList, filter)
+ +
[docs] def folders(self, filter: dict = None) -> Union['XABase.XAFolderList', None]: + """Returns a list of folders, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned folders will have, or None + :type filter: Union[dict, None] + :return: The list of folders + :rtype: XABase.XAFolderList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.folders(), XABase.XAFolderList, filter)
+ +
[docs] def folder_actions(self, filter: dict = None) -> Union['XABase.XAFolderActionList', None]: + """Returns a list of folder actions, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned folder actions will have, or None + :type filter: Union[dict, None] + :return: The list of folder actions + :rtype: XABase.XAFolderActionList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.folderActions(), XABase.XAFolderActionList, filter)
+ +
[docs] def application_processes(self, filter: dict = None) -> Union['XASystemEventsApplicationProcessList', None]: + """Returns a list of application processes, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned processes will have, or None + :type filter: Union[dict, None] + :return: The list of processes + :rtype: XASystemEventsApplicationProcessList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.applicationProcesses(), XASystemEventsApplicationProcessList, filter)
+ +
[docs] def desk_accessory_processes(self, filter: dict = None) -> Union['XASystemEventsDeskAccessoryProcessList', None]: + """Returns a list of desk accessory processes, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned processes will have, or None + :type filter: Union[dict, None] + :return: The list of processes + :rtype: XASystemEventsDeskAccessoryProcessList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.deskAccessoryProcesses(), XASystemEventsDeskAccessoryProcessList, filter)
+ +
[docs] def processes(self, filter: dict = None) -> Union['XASystemEventsProcessList', None]: + """Returns a list of processes, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned processes will have, or None + :type filter: Union[dict, None] + :return: The list of processes + :rtype: XASystemEventsProcessList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.processes(), XASystemEventsProcessList, filter)
+ +
[docs] def ui_elements(self, filter: dict = None) -> Union['XASystemEventsUIElementList', None]: + """Returns a list of UI elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned UI elements will have, or None + :type filter: Union[dict, None] + :return: The list of UI elements + :rtype: XASystemEventsUIElementList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.UIElements(), XASystemEventsUIElementList, filter)
+ +
[docs] def property_list_files(self, filter: dict = None) -> Union['XASystemEventsPropertyListFileList', None]: + """Returns a list of property list files, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned property list files will have, or None + :type filter: Union[dict, None] + :return: The list of property list files + :rtype: XASystemEventsPropertyListFileList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.propertyListFiles(), XASystemEventsPropertyListFileList, filter)
+ +
[docs] def property_list_items(self, filter: dict = None) -> Union['XASystemEventsPropertyListItemList', None]: + """Returns a list of property list items, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned property list items will have, or None + :type filter: Union[dict, None] + :return: The list of property list items + :rtype: XASystemEventsPropertyListItemList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.propertyListItems(), XASystemEventsPropertyListItemList, filter)
+ +
[docs] def xml_datas(self, filter: dict = None) -> Union['XASystemEventsXMLDataList', None]: + """Returns a list of XML datas, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned XML datas will have, or None + :type filter: Union[dict, None] + :return: The list of XML datas + :rtype: XASystemEventsXMLDataList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.xmlDatas(), XASystemEventsXMLDataList, filter)
+ +
[docs] def xml_files(self, filter: dict = None) -> Union['XASystemEventsXMLFileList', None]: + """Returns a list of XML files, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned XML files will have, or None + :type filter: Union[dict, None] + :return: The list of XML files + :rtype: XASystemEventsXMLFileList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_scel.xmlFiles(), XASystemEventsXMLFileList, filter)
+ +
[docs] def make(self, specifier: str, properties: dict): + """Creates a new element of the given specifier class without adding it to any list. + + Use :func:`XABase.XAList.push` to push the element onto a list. + + :param specifier: The classname of the object to create + :type specifier: str + :param properties: The properties to give the object + :type properties: dict + :return: A PyXA wrapped form of the object + :rtype: XABase.XAObject + + .. versionadded:: 0.1.0 + """ + specifier_map = { + "login item": "login item" + } + specifier = specifier_map.get(specifier) or specifier + + obj = self.xa_scel.classForScriptingClass_(specifier).alloc().initWithProperties_(properties) + + if specifier == "login item": + return self._new_element(obj, XASystemEventsLoginItem) + elif specifier == "file": + return self._new_element(obj, XABase.XAFile) + elif specifier == "folder": + return self._new_element(obj, XABase.XAFolder)
+ + + + +
[docs]class XASystemEventsDocumentList(XABase.XAList): + """A wrapper around lists of documents that employs fast enumeration techniques. + + All properties of documents can be called as methods on the wrapped list, returning a list containing each document's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsDocument, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def modified(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("modified") or [])
+ +
[docs] def file(self) -> 'XABase.XAFileList': + ls = self.xa_elem.arrayByApplyingSelector_("file") or [] + return self._new_element(ls, XABase.XAFileList)
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsDocument', None]: + return self.by_property("name", name)
+ +
[docs] def by_modified(self, modified: bool) -> Union['XASystemEventsDocument', None]: + return self.by_property("modified", modified)
+ +
[docs] def by_file(self, file: 'XABase.XAFile') -> Union['XASystemEventsDocument', None]: + return self.by_property("file", file.xa_elem)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsDocument(XABase.XAObject, XACloseable, XAPrintable): + """A document of System Events.app. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """Its name. + """ + return self.xa_elem.name() + + @property + def modified(self) -> bool: + """Has it been modified since the last save? + """ + return self.xa_elem.modified() + + @property + def file(self) -> 'XABase.XAFile': + """Its location on disk, if it has one. + """ + return self._new_element(self.xa_elem.file(), XABase.XAFile) + +
[docs] def save(self, path: Union[str, XABase.XAPath, None] = None): + """Saves the document at the specified file path. + + :param path: The path to save the document at, defaults to None + :type path: Union[str, XABase.XAPath, None], optional + + .. versionadded:: 0.1.0 + """ + if isinstance(path, str): + path = XABase.XAPath(path) + if path is not None: + self.xa_elem.saveIn_as_(path.xa_elem, XASystemEventsApplication, XABase.OSType("ctxt"))
+ + + + +
[docs]class XASystemEventsWindowList(XABaseScriptable.XASBWindowList): + """A wrapper around a list of windows. + + .. versionadded:: 0.1.2 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + super().__init__(properties, filter, obj_class) + if obj_class is None or issubclass(self.xa_prnt.xa_wcls, obj_class): + self.xa_ocls = self.xa_prnt.xa_wcls + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def collapse(self) -> 'XASystemEventsWindowList': + """Collapses all windows in the list. + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Keychain Access") + >>> app.windows().collapse() + + .. versionadded:: 0.0.5 + """ + for window in self: + window.collapse() + sleep(0.025) + return self
+ +
[docs] def uncollapse(self) -> 'XASystemEventsWindowList': + """Uncollapses all windows in the list. + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Keychain Access") + >>> app.windows().uncollapse() + + .. versionadded:: 0.0.6 + """ + for window in self: + window.uncollapse() + return self
+ +
[docs] def close(self): + """Closes all windows in the list.add() + + :Example: + + >>> import PyXA + >>> app = PyXA.Application("Keychain Access") + >>> app.windows().close() + + .. versionadded:: 0.0.6 + """ + for window in self: + window.close()
+ +
[docs]class XASystemEventsWindow(XABaseScriptable.XASBWindow, XASelectable): + """A window belonging to a process. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def document(self) -> XASystemEventsDocument: + """The document whose contents are displayed in the window. + """ + return self._new_element(self.xa_elem.document(), XASystemEventsDocument) + + @property + def accessibility_description(self) -> Union[str, None]: + """A more complete description of the window and its capabilities. + """ + return self.xa_elem.accessibilityDescription() + + @property + def object_description(self) -> Union[str, None]: + """The accessibility description, if available; otherwise, the role description. + """ + return self.xa_elem.objectDescription() + + @property + def enabled(self) -> Union[bool, None]: + """Is the window enabled? (Does it accept clicks?) + """ + return self.xa_elem.enabled() + + @property + def entire_contents(self) -> list[XABase.XAObject]: + """A list of every UI element contained in this window and its child UI elements, to the limits of the tree. + """ + return self._new_element(self.xa_elem.entireContents(), XASystemEventsUIElementList) + + @property + def focused(self) -> Union[bool, None]: + """Is the focus on this window? + """ + return self.xa_elem.focused() + + @focused.setter + def focused(self, focused: bool): + self.set_property('focused', focused) + + @property + def help(self) -> Union[str, None]: + """An elaborate description of the window and its capabilities. + """ + return self.xa_elem.help() + + @property + def maximum_value(self) -> Union[int, float, None]: + """The maximum value that the UI element can take on. + """ + return self.xa_elem.maximumValue() + + @property + def minimum_value(self) -> Union[int, float, None]: + """The minimum value that the UI element can take on. + """ + return self.xa_elem.minimumValue() + + @property + def name(self) -> str: + """The name of the window, which identifies it within its container. + """ + return self.xa_elem.name() + + @property + def orientation(self) -> Union[str, None]: + """The orientation of the window. + """ + return self.xa_elem.orientation() + + @property + def position(self) -> Union[list[Union[int, float]], None]: + """The position of the window. + """ + return self.xa_elem.position() + + @position.setter + def position(self, position: list[Union[int, float]]): + self.set_property('position', position) + + @property + def role(self) -> str: + """An encoded description of the window and its capabilities. + """ + return self.xa_elem.role() + + @property + def role_description(self) -> str: + """A more complete description of the window's role. + """ + return self.xa_elem.roleDescription() + + @property + def selected(self) -> Union[bool, None]: + """Is the window selected? + """ + return self.xa_elem.selected() + + @selected.setter + def selected(self, selected: bool): + self.set_property('selected', selected) + + @property + def size(self) -> Union[list[Union[int, float]], None]: + """The size of the window. + """ + return self.xa_elem.size() + + @size.setter + def size(self, size: list[Union[int, float]]): + self.set_property('size', size) + + @property + def subrole(self) -> Union[str, None]: + """An encoded description of the window and its capabilities. + """ + return self.xa_elem.subrole() + + @property + def title(self) -> Union[str, None]: + """The title of the window as it appears on the screen. + """ + return self.xa_elem.title() + + @property + def value(self) -> Any: + """The current value of the window. + """ + return self.xa_elem.value() + +
[docs] def close(self) -> 'XASystemEventsWindow': + """Collapses (minimizes) the window. + + :return: A reference to the now-collapsed window object. + :rtype: XASystemEventsWindow + + :Example: + + >>> import PyXA + >>> PyXA.Application("App Store").front_window.close() + + .. versionadded:: 0.0.1 + """ + try: + close_button = self.buttons().by_subrole("AXCloseButton") + close_button.click() + except: + pass + return self
+ +
[docs] def collapse(self) -> 'XASystemEventsWindow': + """Collapses (minimizes) the window. + + :return: A reference to the now-collapsed window object. + :rtype: XASystemEventsWindow + + :Example: + + >>> import PyXA + >>> PyXA.Application("App Store").front_window.collapse() + + .. versionadded:: 0.0.1 + """ + try: + button = self.buttons().by_subrole("AXMinimizeButton") + button.click() + while self.visible: + sleep(0.01) + except: + pass + return self
+ +
[docs] def uncollapse(self) -> 'XASystemEventsWindow': + """Uncollapses (unminimizes/expands) the window. + + :return: A reference to the uncollapsed window object. + :rtype: XASystemEventsWindow + + :Example: + + >>> import PyXA + >>> PyXA.Application("App Store").front_window.uncollapse() + + .. versionadded:: 0.0.1 + """ + dock_process = self.xa_sevt.application_processes().by_name("Dock") + app_icon = dock_process.lists()[0].ui_elements().by_name(self.name) + if app_icon is not None: + app_icon.actions()[0].perform() + while not self.visible: + sleep(0.01) + return self
+ +
[docs] def actions(self, filter: dict = None) -> Union['XASystemEventsActionList', None]: + """Returns a list of action elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of actions + :rtype: XASystemEventsActionList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.actions(), XASystemEventsActionList)
+ +
[docs] def attributes(self, filter: dict = None) -> Union['XASystemEventsAttributeList', None]: + """Returns a list of attribute elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of attributes + :rtype: XASystemEventsAttributeList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.attributes(), XASystemEventsAttributeList)
+ +
[docs] def browsers(self, filter: dict = None) -> Union['XASystemEventsBrowserList', None]: + """Returns a list of browser elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of browsers + :rtype: XASystemEventsBrowserList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.browsers(), XASystemEventsBrowserList)
+ +
[docs] def busy_indicators(self, filter: dict = None) -> Union['XASystemEventsBusyIndicatorList', None]: + """Returns a list of busy indicator elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of busy indicators + :rtype: XASystemEventsBusyIndicatorList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.busyIndicators(), XASystemEventsBusyIndicatorList)
+ +
[docs] def buttons(self, filter: dict = None) -> Union['XASystemEventsButtonList', None]: + """Returns a list of button elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of buttons + :rtype: XASystemEventsButtonList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.buttons(), XASystemEventsButtonList)
+ +
[docs] def checkboxes(self, filter: dict = None) -> Union['XASystemEventsButtonList', None]: + """Returns a list of checkbox elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of checkboxes + :rtype: XASystemEventsCheckboxList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.checkboxes(), XASystemEventsCheckboxList)
+ +
[docs] def color_wells(self, filter: dict = None) -> Union['XASystemEventsColorWellList', None]: + """Returns a list of color well elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of color wells + :rtype: XASystemEventsColorWellList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.colorWells(), XASystemEventsColorWellList)
+ +
[docs] def combo_boxes(self, filter: dict = None) -> Union['XASystemEventsComboBoxList', None]: + """Returns a list of combo box elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of combo boxes + :rtype: XASystemEventsComboBoxList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.comboBoxes(), XASystemEventsComboBoxList)
+ +
[docs] def drawers(self, filter: dict = None) -> Union['XASystemEventsDrawerList', None]: + """Returns a list of drawer elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of drawers + :rtype: XASystemEventsDrawerList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.drawers(), XASystemEventsDrawerList)
+ +
[docs] def groups(self, filter: dict = None) -> Union['XASystemEventsGroupList', None]: + """Returns a list of group elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of groups + :rtype: XASystemEventsGroupList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.groups(), XASystemEventsGroupList)
+ +
[docs] def grow_areas(self, filter: dict = None) -> Union['XASystemEventsGrowAreaList', None]: + """Returns a list of grow area elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of grow areas + :rtype: XASystemEventsGrowAreaList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.growAreas(), XASystemEventsGrowAreaList)
+ +
[docs] def images(self, filter: dict = None) -> Union['XASystemEventsImageList', None]: + """Returns a list of image elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of images + :rtype: XASystemEventsImageList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.images(), XASystemEventsImageList)
+ +
[docs] def incrementors(self, filter: dict = None) -> Union['XASystemEventsIncrementorList', None]: + """Returns a list of incrementor elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of incrementors + :rtype: XASystemEventsIncrementorList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.incrementors(), XASystemEventsIncrementorList)
+ +
[docs] def lists(self, filter: dict = None) -> Union['XASystemEventsListList', None]: + """Returns a list of list elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of lists + :rtype: XASystemEventsListList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.lists(), XASystemEventsListList)
+ +
[docs] def menu_buttons(self, filter: dict = None) -> Union['XASystemEventsMenuButtonList', None]: + """Returns a list of menu button elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of menu buttons + :rtype: XASystemEventsMenuButtonList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.menuButtons(), XASystemEventsMenuButtonList)
+ +
[docs] def outlines(self, filter: dict = None) -> Union['XASystemEventsOutlineList', None]: + """Returns a list of outline elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of outlines + :rtype: XASystemEventsOutlineList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.outlines(), XASystemEventsOutlineList)
+ +
[docs] def pop_overs(self, filter: dict = None) -> Union['XASystemEventsPopOverList', None]: + """Returns a list of pop-over elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of pop-overs + :rtype: XASystemEventsPopOverList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.popOvers(), XASystemEventsPopOverList)
+ +
[docs] def pop_up_buttons(self, filter: dict = None) -> Union['XASystemEventsPopUpButtonList', None]: + """Returns a list of pop-up button elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of pop-up buttons + :rtype: XASystemEventsPopUpButtonList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.popUpButtons(), XASystemEventsPopUpButtonList)
+ +
[docs] def progress_indicators(self, filter: dict = None) -> Union['XASystemEventsProgressIndicatorList', None]: + """Returns a list of progress indicator elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of progress indicators + :rtype: XASystemEventsProgressIndicatorList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.progressIndicators(), XASystemEventsProgressIndicatorList)
+ +
[docs] def radio_buttons(self, filter: dict = None) -> Union['XASystemEventsRadioButtonList', None]: + """Returns a list of radio button elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of radio buttons + :rtype: XASystemEventsRadioButtonList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.radioButtons(), XASystemEventsRadioButtonList)
+ +
[docs] def radio_groups(self, filter: dict = None) -> Union['XASystemEventsRadioGroupList', None]: + """Returns a list of radio group elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of radio groups + :rtype: XASystemEventsRadioGroupList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.radioGroups(), XASystemEventsRadioGroupList)
+ +
[docs] def relevance_indicators(self, filter: dict = None) -> Union['XASystemEventsRelevanceIndicatorList', None]: + """Returns a list of relevance indicator elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of relevance indicators + :rtype: XASystemEventsRelevanceIndicatorList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.relevanceIndicators(), XASystemEventsRelevanceIndicatorList)
+ +
[docs] def scroll_areas(self, filter: dict = None) -> Union['XASystemEventsScrollAreaList', None]: + """Returns a list of scroll area elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of scroll areas + :rtype: XASystemEventsScrollAreaList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.scrollAreas(), XASystemEventsScrollAreaList)
+ +
[docs] def scroll_bars(self, filter: dict = None) -> Union['XASystemEventsScrollBarList', None]: + """Returns a list of scroll bar elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of scroll bars + :rtype: XASystemEventsScrollBarList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.scrollBars(), XASystemEventsScrollBarList)
+ +
[docs] def sheets(self, filter: dict = None) -> Union['XASystemEventsSheetList', None]: + """Returns a list of sheet elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of sheets + :rtype: XASystemEventsSheetList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.sheets(), XASystemEventsSheetList)
+ +
[docs] def sliders(self, filter: dict = None) -> Union['XASystemEventsSliderList', None]: + """Returns a list of slider elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of sliders + :rtype: XASystemEventsSliderList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.sliders(), XASystemEventsSliderList)
+ +
[docs] def splitters(self, filter: dict = None) -> Union['XASystemEventsSplitterList', None]: + """Returns a list of splitter elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of splitters + :rtype: XASystemEventsSplitterList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.splitters(), XASystemEventsSplitterList)
+ +
[docs] def splitter_groups(self, filter: dict = None) -> Union['XASystemEventsSplitterGroupList', None]: + """Returns a list of splitter group elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of splitter groups + :rtype: XASystemEventsSplitterGroupList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.splitterGroups(), XASystemEventsSplitterGroupList)
+ +
[docs] def static_texts(self, filter: dict = None) -> Union['XASystemEventsStaticTextList', None]: + """Returns a list of static text elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of static texts + :rtype: XASystemEventsStaticTextList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.staticTexts(), XASystemEventsStaticTextList)
+ +
[docs] def tab_groups(self, filter: dict = None) -> Union['XASystemEventsTabGroupList', None]: + """Returns a list of tab group elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of tab groups + :rtype: XASystemEventsTabGroupList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.tabGroups(), XASystemEventsTabGroupList)
+ +
[docs] def tables(self, filter: dict = None) -> Union['XASystemEventsTableList', None]: + """Returns a list of table elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of tables + :rtype: XASystemEventsTableList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.tables(), XASystemEventsTableList)
+ +
[docs] def text_areas(self, filter: dict = None) -> Union['XASystemEventsTextAreaList', None]: + """Returns a list of text area elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of text areas + :rtype: XASystemEventsTextAreaList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.textAreas(), XASystemEventsTextAreaList)
+ +
[docs] def text_fields(self, filter: dict = None) -> Union['XASystemEventsTextFieldList', None]: + """Returns a list of text fields elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of text fields + :rtype: XASystemEventsTextFieldList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.textFields(), XASystemEventsTextFieldList)
+ +
[docs] def toolbars(self, filter: dict = None) -> Union['XASystemEventsToolbarList', None]: + """Returns a list of toolbar elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of outlines + :rtype: XASystemEventsToolbarList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.toolbars(), XASystemEventsToolbarList)
+ +
[docs] def ui_elements(self, filter: dict = None) -> Union['XASystemEventsUIElementList', None]: + """Returns a list of UI elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of UI elements + :rtype: XASystemEventsUIElementList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.UIElements(), XASystemEventsUIElementList)
+ +
[docs] def click(self, point: Union[tuple[int, int], None] = None): + """Cause the window. + + :param point: The coordinate location at which to click, defaults to None + :type point: Union[tuple[int, int], None], optional + + .. versionadded:: 0.1.0 + """ + self.xa_elem.clickAt_(point)
+ +
[docs] def increment(self): + """Increments the window, if applicable. + + .. versionadded:: 0.1.0 + """ + self.xa_elem.increment()
+ +
[docs] def decrement(self): + """Decrements the window, if applicable. + + .. versionadded:: 0.1.0 + """ + self.xa_elem.decrement()
+ +
[docs] def confirm(self): + """Confirms the window, if applicable. + + .. versionadded:: 0.1.0 + """ + self.xa_elem.confirm()
+ +
[docs] def pick(self): + """Picks the window, if applicable. + + .. versionadded:: 0.1.0 + """ + self.xa_elem.pick()
+ +
[docs] def cancel(self): + """Cancels the window, if applicable. + + .. versionadded:: 0.1.0 + """ + self.xa_elem.cancel()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XASystemEventsUserList(XABase.XAList): + """A wrapper around lists of users that employs fast enumeration techniques. + + All properties of users can be called as methods on the wrapped list, returning a list containing each user's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsUser, filter) + +
[docs] def full_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("fullName") or [])
+ +
[docs] def home_directory(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("homeDirectory") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def picture_path(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("picturePath") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def by_full_name(self, full_name: str) -> Union['XASystemEventsUser', None]: + return self.by_property("fullName", full_name)
+ +
[docs] def by_home_directory(self, home_directory: Union[XABase.XAPath, str]) -> Union['XASystemEventsUser', None]: + if isinstance(home_directory, str): + home_directory = XABase.XAPath(home_directory) + return self.by_property("homeDirectory", home_directory.xa_elem)
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsUser', None]: + return self.by_property("name", name)
+ +
[docs] def by_picture_path(self, picture_path: Union[XABase.XAPath, str]) -> Union['XASystemEventsUser', None]: + if isinstance(picture_path, str): + picture_path = XABase.XAPath(picture_path) + return self.by_property("picturePath", picture_path.xa_elem)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.full_name()) + ">"
+ +
[docs]class XASystemEventsUser(XABase.XAObject): + """A user of the system. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def full_name(self) -> str: + """The user's full name. + """ + return self.xa_elem.fullName() + + @property + def home_directory(self) -> XABase.XAPath: + """The path to user's home directory. + """ + return XABase.XAPath(self.xa_elem.homeDirectory()) + + @property + def name(self) -> str: + """The user's short name. + """ + return self.xa_elem.name() + + @property + def picture_path(self) -> XABase.XAPath: + """Path to user's picture. Can be set for current user only! + """ + return XABase.XAPath(self.xa_elem.picturePath()) + + @picture_path.setter + def picture_path(self, picture_path: Union[XABase.XAPath, str]): + if isinstance(picture_path, str): + self.set_property('picturePath', picture_path) + else: + self.set_property('picturePath', picture_path.xa_elem)
+ + + + +
[docs]class XASystemEventsAppearancePreferencesObject(XABase.XAObject): + """A collection of appearance preferences. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def appearance(self) -> XASystemEventsApplication.Appearance: + """The overall look of buttons, menus and windows. + """ + return XASystemEventsApplication.Appearance(self.xa_elem.appearance()) + + @appearance.setter + def appearance(self, appearance: XASystemEventsApplication.Appearance): + self.set_property('appearance', appearance.value) + + @property + def font_smoothing(self) -> bool: + """Is font smoothing on? + """ + return self.xa_elem.fontSmoothing() + + @font_smoothing.setter + def font_smoothing(self, font_smoothing: bool): + self.set_property('fontSmoothing', font_smoothing) + + @property + def font_smoothing_style(self) -> XASystemEventsApplication.FontSmoothingStyle: + """The method used for smoothing fonts. + """ + return XASystemEventsApplication.FontSmoothingStyle(self.xa_elem.fontSmoothingStyle()) + + @font_smoothing_style.setter + def font_smoothing_style(self, font_smoothing_style: XASystemEventsApplication.FontSmoothingStyle): + self.set_property('fontSmoothingStyle', font_smoothing_style.value) + + @property + def highlight_color(self) -> XASystemEventsApplication.HighlightColor: + """The color used for hightlighting selected text and lists. + """ + return XASystemEventsApplication.HighlightColor(self.xa_elem.highlightColor()) + + @highlight_color.setter + def highlight_color(self, highlight_color: XASystemEventsApplication.HighlightColor): + self.set_property('highlightColor', highlight_color.value) + + @property + def recent_applications_limit(self) -> int: + """The number of recent applications to track. + """ + return self.xa_elem.recentApplicationsLimit() + + @recent_applications_limit.setter + def recent_applications_limit(self, recent_applications_limit: int): + self.set_property('recentApplicationsLimit', recent_applications_limit) + + @property + def recent_documents_limit(self) -> int: + """The number of recent documents to track. + """ + return self.xa_elem.recentDocumentsLimit() + + @recent_documents_limit.setter + def recent_documents_limit(self, recent_documents_limit: int): + self.set_property('recentDocumentsLimit', recent_documents_limit) + + @property + def recent_servers_limit(self) -> int: + """The number of recent servers to track. + """ + return self.xa_elem.recentServersLimit() + + @recent_servers_limit.setter + def recent_servers_limit(self, recent_servers_limit: int): + self.set_property('recentServersLimit', recent_servers_limit) + + @property + def scroll_bar_action(self) -> XASystemEventsApplication.ScrollPageBehavior: + """The action performed by clicking the scroll bar. + """ + return XASystemEventsApplication.ScrollPageBehavior(self.xa_elem.scrollBarAction()) + + @scroll_bar_action.setter + def scroll_bar_action(self, scroll_bar_action: XASystemEventsApplication.ScrollPageBehavior): + self.set_property('scrollBarAction', scroll_bar_action.value) + + @property + def smooth_scrolling(self) -> bool: + """Is smooth scrolling used? + """ + return self.xa_elem.smoothScrolling() + + @smooth_scrolling.setter + def smooth_scrolling(self, smooth_scrolling: bool): + self.set_property('smoothScrolling', smooth_scrolling) + + @property + def dark_mode(self) -> bool: + """Whether to use dark menu bar and dock. + """ + return self.xa_elem.darkMode() + + @dark_mode.setter + def dark_mode(self, dark_mode: bool): + self.set_property('darkMode', dark_mode)
+ + + + +
[docs]class XASystemEventsCDAndDVDPreferencesObject(XABase.XAObject): + """The user's CD and DVD insertion preferences. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def blank_cd(self) -> 'XASystemEventsInsertionPreference': + """The blank CD insertion preference. + """ + return self._new_element(self.xa_elem.blankCD(), XASystemEventsInsertionPreference) + + @property + def blank_dvd(self) -> 'XASystemEventsInsertionPreference': + """The blank DVD insertion preference. + """ + return self._new_element(self.xa_elem.blankDVD(), XASystemEventsInsertionPreference) + + @property + def blank_bd(self) -> 'XASystemEventsInsertionPreference': + """The blank BD insertion preference. + """ + return self._new_element(self.xa_elem.blankBD(), XASystemEventsInsertionPreference) + + @property + def music_cd(self) -> 'XASystemEventsInsertionPreference': + """The music CD insertion preference. + """ + return self._new_element(self.xa_elem.musicCD(), XASystemEventsInsertionPreference) + + @property + def picture_cd(self) -> 'XASystemEventsInsertionPreference': + """The picture CD insertion preference. + """ + return self._new_element(self.xa_elem.pictureCD(), XASystemEventsInsertionPreference) + + @property + def video_dvd(self) -> 'XASystemEventsInsertionPreference': + """The video DVD insertion preference. + """ + return self._new_element(self.xa_elem.videoDVD(), XASystemEventsInsertionPreference) + + @property + def video_bd(self) -> 'XASystemEventsInsertionPreference': + """The video BD insertion preference. + """ + return self._new_element(self.xa_elem.videoBD(), XASystemEventsInsertionPreference)
+ + + + +
[docs]class XASystemEventsInsertionPreference(XABase.XAObject): + """A specific insertion preference. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def custom_application(self) -> Union[str, None]: + """Application to launch or activate on the insertion of media. + """ + return self.xa_elem.customApplication() + + @custom_application.setter + def custom_application(self, custom_application: Union[str, None]): + self.set_property('customApplication', custom_application) + + @property + def custom_script(self) -> Union[str, None]: + """AppleScript to launch or activate on the insertion of media. + """ + return self.xa_elem.customScript() + + @custom_script.setter + def custom_script(self, custom_script: Union[str, None]): + self.set_property('customScript', custom_script) + + @property + def insertion_action(self) -> XASystemEventsApplication.MediaInsertionAction: + """The action to perform on media insertion. + """ + return XASystemEventsApplication.MediaInsertionAction(self.xa_elem.insertionAction()) + + @insertion_action.setter + def insertion_action(self, insertion_action: XASystemEventsApplication.MediaInsertionAction): + self.set_property('insertionAction', insertion_action.value)
+ + + + +
[docs]class XASystemEventsDesktopList(XABase.XAList): + """A wrapper around lists of desktops that employs fast enumeration techniques. + + All properties of desktops can be called as methods on the wrapped list, returning a list containing each desktop's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsUser, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def id(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def change_interval(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("changeInterval") or [])
+ +
[docs] def display_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("displayName") or [])
+ +
[docs] def picture(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("picture") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def picture_rotation(self) -> list[XASystemEventsApplication.PictureRotation]: + ls = self.xa_elem.arrayByApplyingSelector_("pictureRotation") or [] + return [XASystemEventsApplication.PictureRotation(x) for x in ls]
+ +
[docs] def pictures_folder(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("picturesFolder") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def random_folder(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("randomOrder") or [])
+ +
[docs] def translucent_menu_bar(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("translucentMenuBar") or [])
+ +
[docs] def dynamic_style(self) -> list[XASystemEventsApplication.DynamicStyle]: + ls = self.xa_elem.arrayByApplyingSelector_("dynamicStyle") or [] + return [XASystemEventsApplication.DynamicStyle(x) for x in ls]
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsDesktop', None]: + return self.by_property("name", name)
+ +
[docs] def by_id(self, id: int) -> Union['XASystemEventsDesktop', None]: + return self.by_property("id", id)
+ +
[docs] def by_change_interval(self, change_interval: float) -> Union['XASystemEventsDesktop', None]: + return self.by_property("changeInterval", change_interval)
+ +
[docs] def by_display_name(self, display_name: str) -> Union['XASystemEventsDesktop', None]: + return self.by_property("displayName", display_name)
+ +
[docs] def by_picture(self, picture: Union[XABase.XAPath, str]) -> Union['XASystemEventsDesktop', None]: + if isinstance(picture, str): + picture = XABase.XAPath(picture) + return self.by_property("picture", picture.xa_elem)
+ +
[docs] def by_picture_rotation(self, picture_rotation: XASystemEventsApplication.PictureRotation) -> Union['XASystemEventsDesktop', None]: + return self.by_property("pictureRotation", picture_rotation.value)
+ +
[docs] def by_pictures_folder(self, pictures_folder: Union[XABase.XAPath, str]) -> Union['XASystemEventsDesktop', None]: + if isinstance(pictures_folder, str): + pictures_folder = XABase.XAPath(pictures_folder) + return self.by_property("picturesFolder", pictures_folder.xa_elem)
+ +
[docs] def by_random_order(self, random_order: bool) -> Union['XASystemEventsDesktop', None]: + return self.by_property("randomOrder", random_order)
+ +
[docs] def by_translucent_menu_bar(self, translucent_menu_bar: bool) -> Union['XASystemEventsDesktop', None]: + return self.by_property("translucentMenuBar", translucent_menu_bar)
+ +
[docs] def by_dynamic_style(self, dynamic_style: XASystemEventsApplication.DynamicStyle) -> Union['XASystemEventsDesktop', None]: + return self.by_property("dynamicStyle", dynamic_style.value)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsDesktop(XABase.XAObject): + """Desktop picture settings for desktops belonging to the user. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the desktop. + """ + return self.xa_elem.name() + + @property + def id(self) -> int: + """The unique identifier of the desktop. + """ + return self.xa_elem.id() + + @property + def change_interval(self) -> float: + """The number of seconds to wait between changing the desktop picture. + """ + return self.xa_elem.changeInterval() + + @change_interval.setter + def change_interval(self, change_interval: float): + self.set_property('changeInterval', change_interval) + + @property + def display_name(self) -> str: + """The name of display on which this desktop appears. + """ + return self.xa_elem.displayName() + + @property + def picture(self) -> XABase.XAPath: + """The path to file used as desktop picture. + """ + return XABase.XAPath(self.xa_elem.picture().get()) + + @picture.setter + def picture(self, picture: Union[XABase.XAPath, str]): + if isinstance(picture, str): + picture = XABase.XAPath(picture) + self.set_property('picture', picture.xa_elem) + + @property + def picture_rotation(self) -> XASystemEventsApplication.PictureRotation: + """Never, using interval, using login, after sleep. + """ + return XASystemEventsApplication.PictureRotation(self.xa_elem.pictureRotation()) + + @picture_rotation.setter + def picture_rotation(self, picture_rotation: XASystemEventsApplication.PictureRotation): + self.set_property('pictureRotation', picture_rotation.value) + + @property + def pictures_folder(self) -> XABase.XAPath: + """The path to folder containing pictures for changing desktop background. + """ + return XABase.XAPath(self.xa_elem.picturesFolder()) + + @pictures_folder.setter + def pictures_folder(self, pictures_folder: Union[XABase.XAPath, str]): + if isinstance(pictures_folder, str): + pictures_folder = XABase.XAPath(pictures_folder) + self.set_property('picturesFolder', pictures_folder.xa_elem) + + @property + def random_order(self) -> bool: + """Turn on for random ordering of changing desktop pictures. + """ + return self.xa_elem.randomOrder() + + @random_order.setter + def random_order(self, random_order: bool): + self.set_property('randomOrder', random_order) + + @property + def translucent_menu_bar(self) -> bool: + """Indicates whether the menu bar is translucent. + """ + return self.xa_elem.translucentMenuBar() + + @translucent_menu_bar.setter + def transluscent_menu_bar(self, transluscent_menu_bar: bool): + self.set_property('transluscent_menu_bar', transluscent_menu_bar) + + @property + def dynamic_style(self) -> XASystemEventsApplication.DynamicStyle: + """The desktop picture dynamic style. + """ + # TODO - check + return XASystemEventsApplication.DynamicStyle(XABase.OSType(self.xa_elem.dynamicStyle().stringValue())) + + @dynamic_style.setter + def dynamic_style(self, dynamic_style: XASystemEventsApplication.DynamicStyle): + self.set_property('dynamicStyle', dynamic_style.value)
+ + + + +
[docs]class XASystemEventsDockPreferencesObject(XABase.XAObject): + """The current user's dock preferences. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def animate(self) -> bool: + """Is the animation of opening applications on or off? + """ + return self.xa_elem.animate() + + @animate.setter + def animate(self, animate: bool): + self.set_property('animate', animate) + + @property + def autohide(self) -> bool: + """Is autohiding the dock on or off? + """ + return self.xa_elem.autohide() + + @autohide.setter + def autohide(self, autohide: bool): + self.set_property('autohide', autohide) + + @property + def dock_size(self) -> float: + """Size/height of the items (between 0.0 (minimum) and 1.0 (maximum)). + """ + return self.xa_elem.dockSize() + + @dock_size.setter + def dock_size(self, dock_size: float): + self.set_property('dockSize', dock_size) + + @property + def autohide_menu_bar(self) -> bool: + """Is autohiding the menu bar on or off? + """ + return self.xa_elem.autohideMenuBar() + + @autohide_menu_bar.setter + def autohide_menu_bar(self, autohide_menu_bar: bool): + self.set_property('autohideMenuBar', autohide_menu_bar) + + @property + def double_click_behavior(self) -> XASystemEventsApplication.DoubleClickBehavior: + """Behavior when double clicking window a title bar. + """ + # TODO - check + return XASystemEventsApplication.DoubleClickBehavior(XABase.OSType(self.xa_elem.doubleClickBehavior().stringValue())) + + @double_click_behavior.setter + def double_click_behavior(self, double_click_behavior: XASystemEventsApplication.DoubleClickBehavior): + self.set_property('double_click_behavior', double_click_behavior.value) + + @property + def magnification(self) -> bool: + """Is magnification on or off? + """ + return self.xa_elem.magnification() + + @magnification.setter + def magnification(self, magnification: bool): + self.set_property('magnification', magnification) + + @property + def magnification_size(self) -> float: + """Maximum magnification size when magnification is on (between 0.0 (minimum) and 1.0 (maximum)). + """ + return self.xa_elem.magnificationSize() + + @magnification_size.setter + def magnification_size(self, magnification_size: float): + self.set_property('magnificationSize', magnification_size) + + @property + def minimize_effect(self) -> XASystemEventsApplication.MinimizeEffect: + """Minimization effect. + """ + # TODO - check + return XASystemEventsApplication.MinimizeEffect(XABase.OSType(self.xa_elem.minimizeEffect().stringValue())) + + @minimize_effect.setter + def minimize_effect(self, minimize_effect: XASystemEventsApplication.MinimizeEffect): + self.set_property('minimizeEffect', minimize_effect.value) + + @property + def minimize_into_application(self) -> bool: + """Minimize window into its application? + """ + return self.xa_elem.minimizeIntoApplication() + + @minimize_into_application.setter + def minimize_into_application(self, minimize_into_application: bool): + self.set_property('minimizeIntoApplication', minimize_into_application) + + @property + def screen_edge(self) -> XASystemEventsApplication.ScreenLocation: + """Location on screen. + """ + # TODO - check + return XASystemEventsApplication.ScreenLocation(XABase.OSType(self.xa_elem.screenEdge().stringValue())) + + @screen_edge.setter + def screen_edge(self, screen_edge: XASystemEventsApplication.ScreenLocation): + self.set_property('screenEdge', screen_edge.value) + + @property + def show_indicators(self) -> bool: + """Show indicators for open applications? + """ + return self.xa_elem.showIndicators() + + @show_indicators.setter + def show_indicators(self, show_indicators: bool): + self.set_property('showIndicators', show_indicators) + + @property + def show_recents(self) -> bool: + """Show recent applications? + """ + return self.xa_elem.showRecents() + + @show_recents.setter + def show_recents(self, show_recents: bool): + self.set_property('showRecents', show_recents)
+ + + + +
[docs]class XASystemEventsLoginItemList(XABase.XAList): + """A wrapper around lists of login items that employs fast enumeration techniques. + + All properties of property login items can be called as methods on the wrapped list, returning a list containing each login item's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsLoginItem, filter) + +
[docs] def hidden(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("contents") or [])
+ +
[docs] def kind(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("kind") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def path(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("path") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def by_hidden(self, hidden: bool) -> Union['XASystemEventsLoginItem', None]: + return self.by_property("hidden", hidden)
+ +
[docs] def by_kind(self, kind: str) -> Union['XASystemEventsLoginItem', None]: + return self.by_property("kind", kind)
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsLoginItem', None]: + return self.by_property("name", name)
+ +
[docs] def by_path(self, path: Union[XABase.XAPath, str]) -> Union['XASystemEventsLoginItem', None]: + if isinstance(path, XABase.XAPath): + path = path.path + return self.by_property("path", path)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsLoginItem(XABase.XAObject): + """An item to be launched or opened at login.add() + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def hidden(self) -> bool: + """Is the Login Item hidden when launched? + """ + return self.xa_elem.hidden() + + @hidden.setter + def hidden(self, hidden: bool): + self.set_property('hidden', hidden) + + @property + def kind(self) -> str: + """The file type of the Login Item. + """ + return self.xa_elem.kind() + + @property + def name(self) -> str: + """The name of the Login Item. + """ + return self.xa_elem.name() + + @property + def path(self) -> str: + """The file system path to the Login Item. + """ + return self.xa_elem.path() + +
[docs] def delete(self): + """Deletes the login item. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.delete()
+ + + + +
[docs]class XASystemEventsConfigurationList(XABase.XAList): + """A wrapper around lists of configurations that employs fast enumeration techniques. + + All properties of configurations can be called as methods on the wrapped list, returning a list containing each configuration's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsConfiguration, filter) + +
[docs] def account_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("accountName") or [])
+ +
[docs] def connected(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("connected") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def by_account_name(self, account_name: str) -> Union['XASystemEventsConfiguration', None]: + return self.by_property("accountName", account_name)
+ +
[docs] def by_connected(self, connected: bool) -> Union['XASystemEventsConfiguration', None]: + return self.by_property("connected", connected)
+ +
[docs] def by_id(self, id: str) -> Union['XASystemEventsConfiguration', None]: + return self.by_property("id", id)
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsConfiguration', None]: + return self.by_property("name", name)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsConfiguration(XABase.XAObject): + """A collection of settings for configuring a connection. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def account_name(self) -> str: + """The name used to authenticate. + """ + return self.xa_elem.accountName() + + @account_name.setter + def account_name(self, account_name: str): + self.set_property('accountName', account_name) + + @property + def connected(self) -> bool: + """Is the configuration connected? + """ + return self.xa_elem.connected() + + @property + def id(self) -> str: + """The unique identifier for the configuration. + """ + return self.xa_elem.id() + + @property + def name(self) -> str: + """The name of the configuration. + """ + return self.xa_elem.name() + +
[docs] def connect(self) -> 'XASystemEventsConfiguration': + """Connects the configuration. + + :return: The configuration object + :rtype: XASystemEventsConfiguration + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.connect(), XASystemEventsConfiguration)
+ +
[docs] def disconnect(self) -> 'XASystemEventsConfiguration': + """Disconnects the configuration. + + :return: The configuration object + :rtype: XASystemEventsConfiguration + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.disconnect(), XASystemEventsConfiguration)
+ + + + +
[docs]class XASystemEventsInterfaceList(XABase.XAList): + """A wrapper around lists of network interfaces that employs fast enumeration techniques. + + All properties of interfaces can be called as methods on the wrapped list, returning a list containing each interfaces's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsInterface, filter) + +
[docs] def automatic(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("automatic") or [])
+ +
[docs] def duplex(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("duplex") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def kind(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("kind") or [])
+ +
[docs] def mac_address(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("macAddress") or [])
+ +
[docs] def mtu(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("mtu") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def speed(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("speed") or [])
+ +
[docs] def by_automatic(self, automatic: bool) -> Union['XASystemEventsInterface', None]: + return self.by_property("automatic", automatic)
+ +
[docs] def by_duplex(self, duplex: str) -> Union['XASystemEventsInterface', None]: + return self.by_property("duplex", duplex)
+ +
[docs] def by_id(self, id: str) -> Union['XASystemEventsInterface', None]: + return self.by_property("id", id)
+ +
[docs] def by_kind(self, kind: str) -> Union['XASystemEventsInterface', None]: + return self.by_property("kind", kind)
+ +
[docs] def by_mac_address(self, mac_address: str) -> Union['XASystemEventsInterface', None]: + return self.by_property("macAddress", mac_address)
+ +
[docs] def by_mtu(self, mtu: int) -> Union['XASystemEventsInterface', None]: + return self.by_property("mtu", mtu)
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsInterface', None]: + return self.by_property("name", name)
+ +
[docs] def by_speed(self, speed: int) -> Union['XASystemEventsInterface', None]: + return self.by_property("speed", speed)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsInterface(XABase.XAObject): + """A collection of settings for a network interface. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def automatic(self) -> bool: + """Configure the interface speed, duplex, and mtu automatically? + """ + return self.xa_elem.automatic() + + @automatic.setter + def automatic(self, automatic: bool): + self.set_property('automatic', automatic) + + @property + def duplex(self) -> str: + """The duplex setting half | full | full with flow control. + """ + return self.xa_elem.duplex() + + @duplex.setter + def duplex(self, duplex: str): + self.set_property('duplex', duplex) + + @property + def id(self) -> str: + """The unique identifier for the interface. + """ + return self.xa_elem.id() + + @property + def kind(self) -> str: + """The type of interface. + """ + return self.xa_elem.kind() + + @property + def mac_address(self) -> str: + """The MAC address for the interface. + """ + return self.xa_elem.MACAddress() + + @property + def mtu(self) -> int: + """The packet size. + """ + return self.xa_elem.mtu() + + @mtu.setter + def mtu(self, mtu: int): + self.set_property('mtu', mtu) + + @property + def name(self) -> str: + """The name of the interface. + """ + return self.xa_elem.name() + + @property + def speed(self) -> int: + """Ethernet speed 10 | 100 | 1000. + """ + return self.xa_elem.speed() + + @speed.setter + def speed(self, speed: int): + self.set_property('speed', speed)
+ + + + +
[docs]class XASystemEventsLocationList(XABase.XAList): + """A wrapper around lists of service locations that employs fast enumeration techniques. + + All properties of locations can be called as methods on the wrapped list, returning a list containing each location's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsLocation, filter) + +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def by_id(self, id: str) -> Union['XASystemEventsLocation', None]: + return self.by_property("id", id)
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsLocation', None]: + return self.by_property("name", name)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsLocation(XABase.XAObject): + """A set of services. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """The unique identifier for the location. + """ + return self.xa_elem.id() + + @property + def name(self) -> str: + """The name of the location. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name)
+ + + + +
[docs]class XASystemEventsNetworkPreferencesObject(XABase.XAObject): + """The preferences for the current user's network. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def current_location(self) -> XASystemEventsLocation: + """The current location. + """ + return self._new_element(self.xa_elem.currentLocation(), XASystemEventsLocation) + + @current_location.setter + def current_location(self, current_location: XASystemEventsLocation): + self.set_property('currentLocation', current_location.xa_elem) + +
[docs] def interfaces(self, filter: dict = None) -> Union['XASystemEventsInterfaceList', None]: + """Returns a list of interfaces, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned interfaces will have, or None + :type filter: Union[dict, None] + :return: The list of interfaces + :rtype: XASystemEventsInterfaceList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.interfaces(), XASystemEventsInterfaceList, filter)
+ +
[docs] def locations(self, filter: dict = None) -> Union['XASystemEventsLocationList', None]: + """Returns a list of locations, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned locations will have, or None + :type filter: Union[dict, None] + :return: The list of locations + :rtype: XASystemEventsLocationList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.locations(), XASystemEventsLocationList, filter)
+ +
[docs] def services(self, filter: dict = None) -> Union['XASystemEventsServiceList', None]: + """Returns a list of services, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned services will have, or None + :type filter: Union[dict, None] + :return: The list of services + :rtype: XASystemEventsServiceList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.services(), XASystemEventsServiceList, filter)
+ + + + +
[docs]class XASystemEventsServiceList(XABase.XAList): + """A wrapper around lists of services that employs fast enumeration techniques. + + All properties of services can be called as methods on the wrapped list, returning a list containing each service's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsService, filter) + +
[docs] def active(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("active") or [])
+ +
[docs] def current_configuration(self) -> XASystemEventsConfigurationList: + ls = self.xa_elem.arrayByApplyingSelector_("currentConfiguration") or [] + return self._new_element(ls, XASystemEventsConfigurationList)
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def interface(self) -> XASystemEventsInterfaceList: + ls = self.xa_elem.arrayByApplyingSelector_("interface") or [] + return self._new_element(ls, XASystemEventsInterfaceList)
+ +
[docs] def kind(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("kind") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def by_active(self, active: bool) -> Union['XASystemEventsService', None]: + return self.by_property("active", active)
+ +
[docs] def by_current_configuration(self, current_configuration: XASystemEventsConfiguration) -> Union['XASystemEventsService', None]: + return self.by_property("currentConfiguration", current_configuration.xa_elem)
+ +
[docs] def by_id(self, id: str) -> Union['XASystemEventsService', None]: + return self.by_property("id", id)
+ +
[docs] def by_interface(self, interface: XASystemEventsInterface) -> Union['XASystemEventsService', None]: + return self.by_property("interface", interface.xa_elem)
+ +
[docs] def by_kind(self, kind: str) -> Union['XASystemEventsService', None]: + return self.by_property("kind", kind)
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsService', None]: + return self.by_property("name", name)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsService(XABase.XAObject): + """A collection of settings for a network service. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def active(self) -> bool: + """Is the service active? + """ + return self.xa_elem.active() + + @property + def current_configuration(self) -> XASystemEventsConfiguration: + """The currently selected configuration. + """ + return self._new_element(self.xa_elem.currentConfiguration(), XASystemEventsConfiguration) + + @current_configuration.setter + def current_configuration(self, current_configuration: XASystemEventsConfiguration): + self.set_property('currentConfiguration', current_configuration.xa_elem) + + @property + def id(self) -> str: + """The unique identifier for the service. + """ + return self.xa_elem.id() + + @property + def interface(self) -> XASystemEventsInterface: + """The interface the service is built on. + """ + return self._new_element(self.xa_elem.interface(), XASystemEventsInterface) + + @interface.setter + def interface(self, interface: XASystemEventsInterface): + self.set_property('interface', interface.xa_elem) + + @property + def kind(self) -> int: + """The type of service. + """ + return self.xa_elem.kind() + + @property + def name(self) -> str: + """The name of the service. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + +
[docs] def connect(self) -> XASystemEventsConfiguration: + """Connects the service. + + :return: The service object + :rtype: XASystemEventsConfiguration + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.connect()
+ +
[docs] def disconnect(self) -> XASystemEventsConfiguration: + """Disconnects the service. + + :return: The service object + :rtype: XASystemEventsConfiguration + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.disconnect()
+ + + + +
[docs]class XASystemEventsScreenSaverList(XABase.XAList): + """A wrapper around lists of screen savers that employs fast enumeration techniques. + + All properties of screen savers can be called as methods on the wrapped list, returning a list containing each screen saver's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsScreenSaver, filter) + +
[docs] def displayed_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("displayedName") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def path(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("path") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def picture_display_style(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("pictureDisplayStyle") or [])
+ +
[docs] def by_displayed_name(self, displayed_name: str) -> Union['XASystemEventsScreenSaver', None]: + return self.by_property("displayedName", displayed_name)
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsScreenSaver', None]: + return self.by_property("name", name)
+ +
[docs] def by_path(self, path: Union[XABase.XAPath, str]) -> Union['XASystemEventsScreenSaver', None]: + if isinstance(path, str): + path = XABase.XAPath(path) + return self.by_property("path", path.xa_elem)
+ +
[docs] def by_picture_display_style(self, picture_display_style: str) -> Union['XASystemEventsScreenSaver', None]: + return self.by_property("pictureDisplayStyle", picture_display_style)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsScreenSaver(XABase.XAObject): + """An installed screen saver. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def displayedName(self) -> str: + """Name of the screen saver module as displayed to the user. + """ + return self.xa_elem.displayedName() + + @property + def name(self) -> str: + """Name of the screen saver module to be displayed. + """ + return self.xa_elem.name() + + @property + def path(self) -> 'XABase.XAAlias': + """Path to the screen saver module. + """ + return self._new_element(self.xa_elem.path(), XABase.XAAlias) + + @property + def picture_display_style(self) -> str: + """Effect to use when displaying picture-based screen savers (slideshow, collage, or mosaic). + """ + return self.xa_elem.pictureDisplayStyle() + + @picture_display_style.setter + def picture_display_style(self, picture_display_style: str): + self.set_property('pictureDisplayStyle', picture_display_style) + +
[docs] def start(self): + """Starts the screen saver. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.start()
+ +
[docs] def stop(self): + """Stops the screen saver. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.stop()
+ + + + +
[docs]class XASystemEventsScreenSaverPreferencesObject(XABase.XAObject): + """Screen saver settings. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def delay_interval(self) -> int: + """Number of seconds of idle time before the screen saver starts; zero for never. + """ + return self.xa_elem.delayInterval() + + @delay_interval.setter + def delay_interval(self, delay_interval: int): + self.set_property('delayInterval', delay_interval) + + @property + def main_screen_only(self) -> bool: + """Should the screen saver be shown only on the main screen? + """ + return self.xa_elem.mainScreenOnly() + + @main_screen_only.setter + def main_screen_only(self, main_screen_only: bool): + self.set_property('mainScreenOnly', main_screen_only) + + @property + def running(self) -> bool: + """Is the screen saver running? + """ + return self.xa_elem.running() + + @property + def show_clock(self) -> bool: + """Should a clock appear over the screen saver? + """ + return self.xa_elem.showClock() + + @show_clock.setter + def show_clock(self, show_clock: bool): + self.set_property('showClock', show_clock) + +
[docs] def start(self): + """Starts the current screen saver. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.start()
+ +
[docs] def stop(self): + """Stops the current screen saver. + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.stop()
+ + + + +
[docs]class XASystemEventsSecurityPreferencesObject(XABase.XAObject): + """A collection of security preferences. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def automatic_login(self) -> bool: + """Is automatic login allowed? + """ + return self.xa_elem.automaticLogin() + + @automatic_login.setter + def automatic_login(self, automatic_login: bool): + self.set_property('automaticLogin', automatic_login) + + @property + def log_out_when_inactive(self) -> bool: + """Will the computer log out when inactive? + """ + return self.xa_elem.logOutWhenInactive() + + @log_out_when_inactive.setter + def log_out_when_inactive(self, log_out_when_inactive: bool): + self.set_property('logOutWhenInactive', log_out_when_inactive) + + @property + def log_out_when_inactive_interval(self) -> int: + """The interval of inactivity after which the computer will log out. + """ + return self.xa_elem.logOutWhenInactiveInterval() + + @log_out_when_inactive_interval.setter + def log_out_when_inactive_interval(self, log_out_when_inactive_interval: int): + self.set_property('logOutWhenInactiveInterval', log_out_when_inactive_interval) + + @property + def require_password_to_unlock(self) -> bool: + """Is a password required to unlock secure preferences? + """ + return self.xa_elem.requirePasswordToUnlock() + + @require_password_to_unlock.setter + def require_password_to_unlock(self, require_password_to_unlock: bool): + self.set_property('requirePasswordToUnlock', require_password_to_unlock) + + @property + def require_password_to_wake(self) -> bool: + """Is a password required to wake the computer from sleep or screen saver? + """ + return self.xa_elem.requirePasswordToWake() + + @require_password_to_wake.setter + def require_password_to_wake(self, require_password_to_wake: bool): + self.set_property('requirePasswordToWake', require_password_to_wake) + + @property + def secure_virtual_memory(self) -> bool: + """Is secure virtual memory being used? + """ + return self.xa_elem.secureVirtualMemory() + + @secure_virtual_memory.setter + def secure_virtual_memory(self, secure_virtual_memory: bool): + self.set_property('secureVirtualMemory', secure_virtual_memory)
+ + + + +
[docs]class XASystemEventsFolderActionList(XABase.XAList): + """A wrapper around lists of folder actions that employs fast enumeration techniques. + + All properties of folder actions can be called as methods on the wrapped list, returning a list containing each actions's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XABase.XAFolderAction, filter) + +
[docs] def enabled(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("enabled") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def path(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("path") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def volume(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("volume") or [])
+ +
[docs] def by_enabled(self, enabled: bool) -> Union['XABase.XAFolderAction', None]: + return self.by_property("enabled", enabled)
+ +
[docs] def by_name(self, name: str) -> Union['XABase.XAFolderAction', None]: + return self.by_property("name", name)
+ +
[docs] def by_path(self, path: Union[XABase.XAPath, str]) -> Union['XABase.XAFolderAction', None]: + if isinstance(path, XABase.XAPath): + path = path.path + return self.by_property("path", path)
+ +
[docs] def by_volume(self, volume: str) -> Union['XABase.XAFolderAction', None]: + return self.by_property("volume", volume)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsFolderAction(XABase.XAObject): + """An action attached to a folder in the file system. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def enabled(self) -> bool: + """Is the folder action enabled? + """ + return self.xa_elem.enabled() + + @enabled.setter + def enabled(self, enabled: bool): + self.set_property('enabled', enabled) + + @property + def name(self) -> str: + """The name of the folder action, which is also the name of the folder. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def path(self) -> str: + """The path to the folder to which the folder action applies. + """ + return self.xa_elem.path() + + @property + def volume(self) -> str: + """The volume on which the folder to which the folder action applies resides. + """ + return self.xa_elem.volume() + +
[docs] def enable(self): + """Enables the folder action. + + .. versionadded:: 0.1.0 + """ + self.xa_elem.enable()
+ +
[docs] def scripts(self, filter: dict = None) -> Union['XASystemEventsScriptList', None]: + """Returns a list of scripts, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned scripts will have, or None + :type filter: Union[dict, None] + :return: The list of scripts + :rtype: XASystemEventsScriptList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.scripts(), XASystemEventsScriptList)
+ + + + +
[docs]class XASystemEventsScriptList(XABase.XAList): + """A wrapper around lists of scripts that employs fast enumeration techniques. + + All properties of scripts can be called as methods on the wrapped list, returning a list containing each script's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsScript, filter) + +
[docs] def enabled(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("enabled") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def path(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("path") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def posix_path(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("posixPath") or [])
+ +
[docs] def by_enabled(self, enabled: bool) -> Union['XASystemEventsScript', None]: + return self.by_property("enabled", enabled)
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsScript', None]: + return self.by_property("name", name)
+ +
[docs] def by_path(self, path: Union[XABase.XAPath, str]) -> Union['XASystemEventsScript', None]: + if isinstance(path, XABase.XAPath): + path = path.path + return self.by_property("path", path)
+ +
[docs] def by_posix_path(self, posix_path: str) -> Union['XASystemEventsScript', None]: + return self.by_property("posixPath", posix_path)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsScript(XABase.XAObject): + """A script invoked by a folder action. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def enabled(self) -> bool: + """Is the script enabled? + """ + return self.xa_elem.enabled() + + @enabled.setter + def enabled(self, enabled: bool): + self.set_property('enabled', enabled) + + @property + def name(self) -> str: + """The name of the script. + """ + return self.xa_elem.name() + + @property + def path(self) -> str: + """The file system path of the disk. + """ + return self.xa_elem.path() + + @property + def posix_path(self) -> str: + """The POSIX file system path of the disk. + """ + return self.xa_elem.POSIXPath()
+ + + + +
[docs]class XASystemEventsActionList(XABase.XAList): + """A wrapper around lists of actions that employs fast enumeration techniques. + + All properties of actions can be called as methods on the wrapped list, returning a list containing each action's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsAction, filter) + +
[docs] def object_description(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("objectDescription") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def by_object_description(self, object_description: str) -> Union['XASystemEventsAction', None]: + return self.by_property("objectDescription", object_description)
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsAction', None]: + return self.by_property("name", name)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsAction(XABase.XAObject): + """An action that can be performed on the UI element. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def object_description(self) -> str: + """What the action does. + """ + return self.xa_elem.objectDescription() + + @property + def name(self) -> str: + """The name of the action. + """ + return self.xa_elem.name() + +
[docs] def perform(self): + """Performs the action. + + .. versionadded:: 0.1.0 + """ + self.xa_elem.perform()
+ + + + +
[docs]class XASystemEventsAttributeList(XABase.XAList): + """A wrapper around lists of attributes that employs fast enumeration techniques. + + All properties of attributes can be called as methods on the wrapped list, returning a list containing each attribute's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsAttribute, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def settable(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("settable") or [])
+ +
[docs] def value(self) -> Any: + return list(self.xa_elem.arrayByApplyingSelector_("value") or [])
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsAttribute', None]: + return self.by_property("name", name)
+ +
[docs] def by_settable(self, settable: bool) -> Union['XASystemEventsAttribute', None]: + return self.by_property("settable", settable)
+ +
[docs] def by_value(self, value: Any) -> Union['XASystemEventsAttribute', None]: + return self.by_property("value", value)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsAttribute(XABase.XAObject): + """A named data value associated with the UI element. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the attribute. + """ + return self.xa_elem.name() + + @property + def settable(self) -> bool: + """Can the attribute be set? + """ + return self.xa_elem.settable() + + @property + def value(self) -> Any: + """The current value of the attribute. + """ + return self.xa_elem.value() + + @value.setter + def value(self, value: Any): + self.set_property('value', value)
+ + + + +
[docs]class XASystemEventsUIElementList(XABase.XAList): + """A wrapper around lists of UI elements that employs fast enumeration techniques. + + All properties of UI elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XASystemEventsUIElement + super().__init__(properties, obj_class, filter) + +
[docs] def accessibility_description(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("accessibilityDescription") or [])
+ +
[docs] def object_description(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("objectDescription") or [])
+ +
[docs] def enabled(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("enabled") or [])
+ +
[docs] def entire_contents(self) -> 'XASystemEventsUIElementList': + ls = self.xa_elem.arrayByApplyingSelector_("entireContents") or [] + return self._new_element(ls, XASystemEventsUIElementList)
+ +
[docs] def focused(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("focused") or [])
+ +
[docs] def help(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("help") or [])
+ +
[docs] def maximum_value(self) -> list[Union[int, float]]: + return list(self.xa_elem.arrayByApplyingSelector_("maximumValue") or [])
+ +
[docs] def minimum_value(self) -> list[Union[int, float]]: + return list(self.xa_elem.arrayByApplyingSelector_("minimumValue") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def orientation(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("orientation") or [])
+ +
[docs] def position(self) -> list[tuple[int, int]]: + return list(self.xa_elem.arrayByApplyingSelector_("position") or [])
+ +
[docs] def role(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("role") or [])
+ +
[docs] def role_description(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("roleDescription") or [])
+ +
[docs] def selected(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("selected") or [])
+ +
[docs] def size(self) -> list[tuple[int, int]]: + return list(self.xa_elem.arrayByApplyingSelector_("size") or [])
+ +
[docs] def subrole(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("subrole") or [])
+ +
[docs] def title(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("title") or [])
+ +
[docs] def value(self) -> list[Any]: + return list(self.xa_elem.arrayByApplyingSelector_("value") or [])
+ +
[docs] def by_accessibility_description(self, accessibility_description: str) -> Union['XASystemEventsUIElement', None]: + return self.by_property("accessibilityDescription", accessibility_description)
+ +
[docs] def by_object_description(self, object_description: str) -> Union['XASystemEventsUIElement', None]: + return self.by_property("objectDescription", object_description)
+ +
[docs] def by_enabled(self, enabled: bool) -> Union['XASystemEventsUIElement', None]: + return self.by_property("enabled", enabled)
+ +
[docs] def by_entire_contents(self, entire_contents: 'XASystemEventsUIElementList') -> Union['XASystemEventsUIElement', None]: + return self.by_property("entireContents", entire_contents.xa_elem)
+ +
[docs] def by_focused(self, focused: bool) -> Union['XASystemEventsUIElement', None]: + return self.by_property("focused", focused)
+ +
[docs] def by_help(self, help: str) -> Union['XASystemEventsUIElement', None]: + return self.by_property("help", help)
+ +
[docs] def by_maximum_value(self, maximum_value: Union[int, float]) -> Union['XASystemEventsUIElement', None]: + return self.by_property("maximumValue", maximum_value)
+ +
[docs] def by_minimum_value(self, minimum_value: Union[int, float]) -> Union['XASystemEventsUIElement', None]: + return self.by_property("minimumValue", minimum_value)
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsUIElement', None]: + return self.by_property("name", name)
+ +
[docs] def by_orientation(self, orientation: str) -> Union['XASystemEventsUIElement', None]: + return self.by_property("orientation", orientation)
+ +
[docs] def by_position(self, position: tuple[int, int]) -> Union['XASystemEventsUIElement', None]: + return self.by_property("position", position)
+ +
[docs] def by_role(self, role: str) -> Union['XASystemEventsUIElement', None]: + return self.by_property("role", role)
+ +
[docs] def by_role_description(self, role_description: str) -> Union['XASystemEventsUIElement', None]: + return self.by_property("roleDescription", role_description)
+ +
[docs] def by_selected(self, selected: bool) -> Union['XASystemEventsUIElement', None]: + return self.by_property("selected", selected)
+ +
[docs] def by_size(self, size: tuple[int, int]) -> Union['XASystemEventsUIElement', None]: + return self.by_property("size", size)
+ +
[docs] def by_subrole(self, subrole: str) -> Union['XASystemEventsUIElement', None]: + return self.by_property("subrole", subrole)
+ +
[docs] def by_title(self, title: str) -> Union['XASystemEventsUIElement', None]: + return self.by_property("title", title)
+ +
[docs] def by_value(self, value: Any) -> Union['XASystemEventsUIElement', None]: + return self.by_property("value", value)
+ +
[docs] def actions(self, filter: dict = None) -> 'XASystemEventsActionList': + ls = [x for y in self.xa_elem.arrayByApplyingSelector_("actions") or [] for x in y] + return self._new_element(ls, XASystemEventsActionList)
+ +
[docs] def windows(self, filter: dict = None) -> 'XASystemEventsWindowList': + ls = list(self.xa_elem.arrayByApplyingSelector_("windows") or []) + self.xa_wcls = XASystemEventsWindow + return self._new_element(ls, XASystemEventsWindowList)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.object_description()) + ">"
+ +
[docs]class XASystemEventsUIElement(XABase.XAObject, XASelectable): + """A piece of the user interface of a process. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def accessibility_description(self) -> Union[str, None]: + """A more complete description of the UI element and its capabilities. + """ + return self.xa_elem.accessibilityDescription() + + @property + def object_description(self) -> Union[str, None]: + """The accessibility description, if available; otherwise, the role description. + """ + return self.xa_elem.objectDescription() + + @property + def enabled(self) -> Union[bool, None]: + """Is the UI element enabled? (Does it accept clicks?) + """ + return self.xa_elem.enabled() + + @property + def entire_contents(self) -> XABase.XAList: + """A list of every UI element contained in this UI element and its child UI elements, to the limits of the tree. + """ + return self._new_element(self.xa_elem.entireContents(), XABase.XAList) + + @property + def focused(self) -> Union[bool, None]: + """Is the focus on this UI element? + """ + return self.xa_elem.focused() + + @focused.setter + def focused(self, focused: bool): + self.set_property('focused', focused) + + @property + def help(self) -> Union[str, None]: + """An elaborate description of the UI element and its capabilities. + """ + return self.xa_elem.help() + + @property + def maximum_value(self) -> Union[int, float, None]: + """The maximum value that the UI element can take on. + """ + return self.xa_elem.maximumValue() + + @property + def minimum_value(self) -> Union[int, float, None]: + """The minimum value that the UI element can take on. + """ + return self.xa_elem.minimumValue() + + @property + def name(self) -> str: + """The name of the UI Element, which identifies it within its container. + """ + return self.xa_elem.name() + + @property + def orientation(self) -> Union[str, None]: + """The orientation of the UI element. + """ + return self.xa_elem.orientation() + + @property + def position(self) -> Union[list[Union[int, float]], None]: + """The position of the UI element. + """ + return self.xa_elem.position() + + @position.setter + def position(self, position: tuple[int, int]): + self.set_property('position', position) + + @property + def role(self) -> str: + """An encoded description of the UI element and its capabilities. + """ + return self.xa_elem.role() + + @property + def role_description(self) -> str: + """A more complete description of the UI element's role. + """ + return self.xa_elem.roleDescription() + + @property + def selected(self) -> Union[bool, None]: + """Is the UI element selected? + """ + return self.xa_elem.selected() + + @selected.setter + def selected(self, selected: bool): + self.set_property('selected', selected) + + @property + def size(self) -> Union[list[Union[int, float]], None]: + """The size of the UI element. + """ + return self.xa_elem.size() + + @size.setter + def size(self, size: list[Union[int, float]]): + self.set_property('size', size) + + @property + def subrole(self) -> Union[str, None]: + """An encoded description of the UI element and its capabilities. + """ + return self.xa_elem.subrole() + + @property + def title(self) -> str: + """The title of the UI element as it appears on the screen. + """ + return self.xa_elem.title() + + @property + def value(self) -> Any: + """The current value of the UI element. + """ + return self.xa_elem.value() + + @value.setter + def value(self, value: Any): + self.set_property('value', value) + +
[docs] def click(self, point: Union[tuple[int, int], None] = None): + """Cause the target process to behave as if the UI element were clicked. + + :param point: The coordinate location at which to click, defaults to None + :type point: Union[tuple[int, int], None], optional + + .. versionadded:: 0.1.0 + """ + self.xa_elem.clickAt_(point)
+ +
[docs] def increment(self): + """Increments the UI element, if applicable. + + .. versionadded:: 0.1.0 + """ + self.xa_elem.increment()
+ +
[docs] def decrement(self): + """Decrements the UI element, if applicable. + + .. versionadded:: 0.1.0 + """ + self.xa_elem.decrement()
+ +
[docs] def confirm(self): + """Confirms the UI element, if applicable. + + .. versionadded:: 0.1.0 + """ + self.xa_elem.confirm()
+ +
[docs] def pick(self): + """Picks the UI element, if applicable. + + .. versionadded:: 0.1.0 + """ + self.xa_elem.pick()
+ +
[docs] def cancel(self): + """Cancels the UI element, if applicable. + + .. versionadded:: 0.1.0 + """ + self.xa_elem.cancel()
+ +
[docs] def actions(self, filter: dict = None) -> Union['XASystemEventsActionList', None]: + """Returns a list of action elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of actions + :rtype: XASystemEventsActionList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.actions(), XASystemEventsActionList)
+ +
[docs] def attributes(self, filter: dict = None) -> Union['XASystemEventsAttributeList', None]: + """Returns a list of attribute elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of attributes + :rtype: XASystemEventsAttributeList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.attributes(), XASystemEventsAttributeList)
+ +
[docs] def browsers(self, filter: dict = None) -> Union['XASystemEventsBrowserList', None]: + """Returns a list of browser elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of browsers + :rtype: XASystemEventsBrowserList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.browsers(), XASystemEventsBrowserList)
+ +
[docs] def busy_indicators(self, filter: dict = None) -> Union['XASystemEventsBusyIndicatorList', None]: + """Returns a list of busy indicator elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of busy indicators + :rtype: XASystemEventsBusyIndicatorList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.busyIndicators(), XASystemEventsBusyIndicatorList)
+ +
[docs] def buttons(self, filter: dict = None) -> Union['XASystemEventsButtonList', None]: + """Returns a list of button elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of buttons + :rtype: XASystemEventsButtonList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.buttons(), XASystemEventsButtonList)
+ +
[docs] def checkboxes(self, filter: dict = None) -> Union['XASystemEventsButtonList', None]: + """Returns a list of checkbox elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of checkboxes + :rtype: XASystemEventsCheckboxList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.checkboxes(), XASystemEventsCheckboxList)
+ +
[docs] def color_wells(self, filter: dict = None) -> Union['XASystemEventsColorWellList', None]: + """Returns a list of color well elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of color wells + :rtype: XASystemEventsColorWellList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.colorWells(), XASystemEventsColorWellList)
+ +
[docs] def columns(self, filter: dict = None) -> Union['XASystemEventsColumnList', None]: + """Returns a list of table column elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of columns + :rtype: XASystemEventsColumnList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.columns(), XASystemEventsColumnList)
+ +
[docs] def combo_boxes(self, filter: dict = None) -> Union['XASystemEventsComboBoxList', None]: + """Returns a list of combo box elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of combo boxes + :rtype: XASystemEventsComboBoxList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.comboBoxes(), XASystemEventsComboBoxList)
+ +
[docs] def drawers(self, filter: dict = None) -> Union['XASystemEventsDrawerList', None]: + """Returns a list of drawer elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of drawers + :rtype: XASystemEventsDrawerList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.drawers(), XASystemEventsDrawerList)
+ +
[docs] def groups(self, filter: dict = None) -> Union['XASystemEventsGroupList', None]: + """Returns a list of group elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of groups + :rtype: XASystemEventsGroupList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.groups(), XASystemEventsGroupList)
+ +
[docs] def grow_areas(self, filter: dict = None) -> Union['XASystemEventsGrowAreaList', None]: + """Returns a list of grow area elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of grow areas + :rtype: XASystemEventsGrowAreaList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.growAreas(), XASystemEventsGrowAreaList)
+ +
[docs] def images(self, filter: dict = None) -> Union['XASystemEventsImageList', None]: + """Returns a list of image elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of images + :rtype: XASystemEventsImageList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.images(), XASystemEventsImageList)
+ +
[docs] def incrementors(self, filter: dict = None) -> Union['XASystemEventsIncrementorList', None]: + """Returns a list of incrementor elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of incrementors + :rtype: XASystemEventsIncrementorList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.incrementors(), XASystemEventsIncrementorList)
+ +
[docs] def lists(self, filter: dict = None) -> Union['XASystemEventsListList', None]: + """Returns a list of list elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of lists + :rtype: XASystemEventsListList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.lists(), XASystemEventsListList)
+ +
[docs] def menus(self, filter: dict = None) -> Union['XASystemEventsMenuList', None]: + """Returns a list of menu elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of menus + :rtype: XASystemEventsMenuList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.menus(), XASystemEventsMenuList)
+ +
[docs] def menu_bars(self, filter: dict = None) -> Union['XASystemEventsMenuBarList', None]: + """Returns a list of menu bar elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of menu bars + :rtype: XASystemEventsMenuBarList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.menuBars(), XASystemEventsMenuBarList)
+ +
[docs] def menu_bar_items(self, filter: dict = None) -> Union['XASystemEventsMenuBarItemList', None]: + """Returns a list of menu bar item elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of menu bar items + :rtype: XASystemEventsMenuBarItemList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.menuBarItems(), XASystemEventsMenuBarItemList)
+ +
[docs] def menu_buttons(self, filter: dict = None) -> Union['XASystemEventsMenuButtonList', None]: + """Returns a list of menu button elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of menu buttons + :rtype: XASystemEventsMenuButtonList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.menuButtons(), XASystemEventsMenuButtonList)
+ +
[docs] def menu_items(self, filter: dict = None) -> Union['XASystemEventsMenuItemList', None]: + """Returns a list of menu item elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of menu items + :rtype: XASystemEventsMenuItemList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.menuItems(), XASystemEventsMenuItemList)
+ +
[docs] def outlines(self, filter: dict = None) -> Union['XASystemEventsOutlineList', None]: + """Returns a list of outline elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of outlines + :rtype: XASystemEventsOutlineList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.outlines(), XASystemEventsOutlineList)
+ +
[docs] def pop_overs(self, filter: dict = None) -> Union['XASystemEventsPopOverList', None]: + """Returns a list of pop-over elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of pop-overs + :rtype: XASystemEventsPopOverList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.popOvers(), XASystemEventsPopOverList)
+ +
[docs] def pop_up_buttons(self, filter: dict = None) -> Union['XASystemEventsPopUpButtonList', None]: + """Returns a list of pop-up button elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of pop-up buttons + :rtype: XASystemEventsPopUpButtonList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.popUpButtons(), XASystemEventsPopUpButtonList)
+ +
[docs] def progress_indicators(self, filter: dict = None) -> Union['XASystemEventsProgressIndicatorList', None]: + """Returns a list of progress indicator elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of progress indicators + :rtype: XASystemEventsProgressIndicatorList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.progressIndicators(), XASystemEventsProgressIndicatorList)
+ +
[docs] def radio_buttons(self, filter: dict = None) -> Union['XASystemEventsRadioButtonList', None]: + """Returns a list of radio button elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of radio buttons + :rtype: XASystemEventsRadioButtonList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.radioButtons(), XASystemEventsRadioButtonList)
+ +
[docs] def radio_groups(self, filter: dict = None) -> Union['XASystemEventsRadioGroupList', None]: + """Returns a list of radio group elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of radio groups + :rtype: XASystemEventsRadioGroupList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.radioGroups(), XASystemEventsRadioGroupList)
+ +
[docs] def relevance_indicators(self, filter: dict = None) -> Union['XASystemEventsRelevanceIndicatorList', None]: + """Returns a list of relevance indicator elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of relevance indicators + :rtype: XASystemEventsRelevanceIndicatorList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.relevanceIndicators(), XASystemEventsRelevanceIndicatorList)
+ +
[docs] def rows(self, filter: dict = None) -> Union['XASystemEventsRowList', None]: + """Returns a list of table row elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of rows + :rtype: XASystemEventsRowList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.rows(), XASystemEventsRowList)
+ +
[docs] def scroll_areas(self, filter: dict = None) -> Union['XASystemEventsScrollAreaList', None]: + """Returns a list of scroll area elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of scroll areas + :rtype: XASystemEventsScrollAreaList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.scrollAreas(), XASystemEventsScrollAreaList)
+ +
[docs] def scroll_bars(self, filter: dict = None) -> Union['XASystemEventsScrollBarList', None]: + """Returns a list of scroll bar elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of scroll bars + :rtype: XASystemEventsScrollBarList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.scrollBars(), XASystemEventsScrollBarList)
+ +
[docs] def sheets(self, filter: dict = None) -> Union['XASystemEventsSheetList', None]: + """Returns a list of sheet elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of sheets + :rtype: XASystemEventsSheetList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.sheets(), XASystemEventsSheetList)
+ +
[docs] def sliders(self, filter: dict = None) -> Union['XASystemEventsSliderList', None]: + """Returns a list of slider elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of sliders + :rtype: XASystemEventsSliderList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.sliders(), XASystemEventsSliderList)
+ +
[docs] def splitters(self, filter: dict = None) -> Union['XASystemEventsSplitterList', None]: + """Returns a list of splitter elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of splitters + :rtype: XASystemEventsSplitterList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.splitters(), XASystemEventsSplitterList)
+ +
[docs] def splitter_groups(self, filter: dict = None) -> Union['XASystemEventsSplitterGroupList', None]: + """Returns a list of splitter group elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of splitter groups + :rtype: XASystemEventsSplitterGroupList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.splitterGroups(), XASystemEventsSplitterGroupList)
+ +
[docs] def static_texts(self, filter: dict = None) -> Union['XASystemEventsStaticTextList', None]: + """Returns a list of static text elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of static texts + :rtype: XASystemEventsStaticTextList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.staticTexts(), XASystemEventsStaticTextList)
+ +
[docs] def tab_groups(self, filter: dict = None) -> Union['XASystemEventsTabGroupList', None]: + """Returns a list of tab group elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of tab groups + :rtype: XASystemEventsTabGroupList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.tabGroups(), XASystemEventsTabGroupList)
+ +
[docs] def tables(self, filter: dict = None) -> Union['XASystemEventsTableList', None]: + """Returns a list of table elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of tables + :rtype: XASystemEventsTableList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.tables(), XASystemEventsTableList)
+ +
[docs] def text_areas(self, filter: dict = None) -> Union['XASystemEventsTextAreaList', None]: + """Returns a list of text area elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of text areas + :rtype: XASystemEventsTextAreaList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.textAreas(), XASystemEventsTextAreaList)
+ +
[docs] def text_fields(self, filter: dict = None) -> Union['XASystemEventsTextFieldList', None]: + """Returns a list of text fields elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of text fields + :rtype: XASystemEventsTextFieldList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.textFields(), XASystemEventsTextFieldList)
+ +
[docs] def toolbars(self, filter: dict = None) -> Union['XASystemEventsToolbarList', None]: + """Returns a list of toolbar elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of outlines + :rtype: XASystemEventsToolbarList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.toolbars(), XASystemEventsToolbarList)
+ +
[docs] def ui_elements(self, filter: dict = None) -> Union['XASystemEventsUIElementList', None]: + """Returns a list of UI elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of UI elements + :rtype: XASystemEventsUIElementList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.UIElements(), XASystemEventsUIElementList)
+ +
[docs] def value_indicators(self, filter: dict = None) -> Union['XASystemEventsValueIndicatorList', None]: + """Returns a list of value indicator elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of value indicators + :rtype: XASystemEventsValueIndicatorList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.valueIndicators(), XASystemEventsValueIndicatorList)
+ +
[docs] def windows(self, filter: dict = None) -> Union['XASystemEventsToolbarList', None]: + """Returns a list of window elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned elements will have, or None + :type filter: Union[dict, None] + :return: The list of windows + :rtype: XASystemEventsToolbarList + + .. versionadded:: 0.1.0 + """ + self.xa_wcls = XASystemEventsWindow + return self._new_element(self.xa_elem.windows(), XASystemEventsWindowList)
+ + + + +
[docs]class XASystemEventsBrowserList(XASystemEventsUIElementList): + """A wrapper around lists of browser elements that employs fast enumeration techniques. + + All properties of browser elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsBrowser)
+ +
[docs]class XASystemEventsBrowser(XASystemEventsUIElement): + """A browser belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsBusyIndicatorList(XASystemEventsUIElementList): + """A wrapper around lists of busy indicator elements that employs fast enumeration techniques. + + All properties of busy indicator elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsBusyIndicator)
+ +
[docs]class XASystemEventsBusyIndicator(XASystemEventsUIElement): + """A busy indicator belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsButtonList(XASystemEventsUIElementList): + """A wrapper around lists of button elements that employs fast enumeration techniques. + + All properties of button elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsButton)
+ +
[docs]class XASystemEventsButton(XASystemEventsUIElement): + """A button belonging to a window or scroll bar. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsCheckboxList(XASystemEventsUIElementList): + """A wrapper around lists of checkbox elements that employs fast enumeration techniques. + + All properties of checkbox elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsCheckbox)
+ +
[docs]class XASystemEventsCheckbox(XASystemEventsUIElement): + """A checkbox belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsColorWellList(XASystemEventsUIElementList): + """A wrapper around lists of color well elements that employs fast enumeration techniques. + + All properties of color well elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsColorWell)
+ +
[docs]class XASystemEventsColorWell(XASystemEventsUIElement): + """A color well belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsColumnList(XASystemEventsUIElementList): + """A wrapper around lists of table column elements that employs fast enumeration techniques. + + All properties of table column elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsColumn)
+ +
[docs]class XASystemEventsColumn(XASystemEventsUIElement): + """A column belonging to a table. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsComboBoxList(XASystemEventsUIElementList): + """A wrapper around lists of combo box elements that employs fast enumeration techniques. + + All properties of combo box elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsComboBox)
+ +
[docs]class XASystemEventsComboBox(XASystemEventsUIElement): + """A combo box belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsDrawerList(XASystemEventsUIElementList): + """A wrapper around lists of drawer elements that employs fast enumeration techniques. + + All properties of drawer elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsDrawer)
+ +
[docs]class XASystemEventsDrawer(XASystemEventsUIElement): + """A drawer that may be extended from a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsGroupList(XASystemEventsUIElementList): + """A wrapper around lists of group elements that employs fast enumeration techniques. + + All properties of group elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsGroup)
+ +
[docs]class XASystemEventsGroup(XASystemEventsUIElement): + """A group belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsGrowAreaList(XASystemEventsUIElementList): + """A wrapper around lists of grow area elements that employs fast enumeration techniques. + + All properties of grow area elements can be called as methods on the wrapped list, returning a list containing each button's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsGrowArea)
+ +
[docs]class XASystemEventsGrowArea(XASystemEventsUIElement): + """A grow area belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsImageList(XASystemEventsUIElementList): + """A wrapper around lists of image elements that employs fast enumeration techniques. + + All properties of image elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsImage)
+ +
[docs]class XASystemEventsImage(XASystemEventsUIElement): + """An image belonging to a static text field. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsIncrementorList(XASystemEventsUIElementList): + """A wrapper around lists of incrementor elements that employs fast enumeration techniques. + + All properties of incrementor elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsIncrementor)
+ +
[docs]class XASystemEventsIncrementor(XASystemEventsUIElement): + """A incrementor belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsListList(XASystemEventsUIElementList): + """A wrapper around lists of list UI elements that employs fast enumeration techniques. + + All properties of list elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsList)
+ +
[docs]class XASystemEventsList(XASystemEventsUIElement): + """A list belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsMenuList(XASystemEventsUIElementList): + """A wrapper around lists of menu elements that employs fast enumeration techniques. + + All properties of menu elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsMenu)
+ +
[docs]class XASystemEventsMenu(XASystemEventsUIElement): + """A menu belonging to a menu bar item. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsMenuBarList(XASystemEventsUIElementList): + """A wrapper around lists of menu bar elements that employs fast enumeration techniques. + + All properties of menu bar elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsMenuBar)
+ +
[docs]class XASystemEventsMenuBar(XASystemEventsUIElement): + """A menu bar belonging to a process. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsMenuBarItemList(XASystemEventsUIElementList): + """A wrapper around lists of menu bar item elements that employs fast enumeration techniques. + + All properties of menu bar item elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsMenuBarItem)
+ +
[docs]class XASystemEventsMenuBarItem(XASystemEventsUIElement): + """A menu bar item belonging to a menu bar. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsMenuButtonList(XASystemEventsUIElementList): + """A wrapper around lists of menu button elements that employs fast enumeration techniques. + + All properties of menu button elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsMenuButton)
+ +
[docs]class XASystemEventsMenuButton(XASystemEventsUIElement): + """A menu button belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsMenuItemList(XASystemEventsUIElementList): + """A wrapper around lists of menu item elements that employs fast enumeration techniques. + + All properties of menu item elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsMenuItem)
+ +
[docs]class XASystemEventsMenuItem(XASystemEventsUIElement): + """A menu item belonging to a menu. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsOutlineList(XASystemEventsUIElementList): + """A wrapper around lists of outline elements that employs fast enumeration techniques. + + All properties of outline elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsOutline)
+ +
[docs]class XASystemEventsOutline(XASystemEventsUIElement): + """An outline belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsPopOverList(XASystemEventsUIElementList): + """A wrapper around lists of popover elements that employs fast enumeration techniques. + + All properties of outline popover can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsPopOver)
+ +
[docs]class XASystemEventsPopOver(XASystemEventsUIElement): + """A pop over belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsPopUpButtonList(XASystemEventsUIElementList): + """A wrapper around lists of popup button elements that employs fast enumeration techniques. + + All properties of popup button elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsPopUpButton)
+ +
[docs]class XASystemEventsPopUpButton(XASystemEventsUIElement): + """A pop up button belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsProcessList(XASystemEventsUIElementList): + """A wrapper around lists of processes that employs fast enumeration techniques. + + All properties of processes can be called as methods on the wrapped list, returning a list containing each process' value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XASystemEventsProcess + super().__init__(properties, filter, obj_class) + +
[docs] def accepts_high_level_events(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("acceptsHighLevelEvents") or [])
+ +
[docs] def accepts_remote_events(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("acceptsRemoteEvents") or [])
+ +
[docs] def architecture(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("architecture") or [])
+ +
[docs] def background_only(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("backgroundOnly") or [])
+ +
[docs] def bundle_identifier(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("bundleIdentifier") or [])
+ +
[docs] def classic(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("class") or [])
+ +
[docs] def creator_type(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("creatorType") or [])
+ +
[docs] def displayed_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("displayedName") or [])
+ +
[docs] def file(self) -> XABase.XAFileList: + ls = self.xa_elem.arrayByApplyingSelector_("file") or [] + return self._new_element(ls, XABase.XAFileList)
+ +
[docs] def file_type(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("fileType") or [])
+ +
[docs] def has_scripting_terminology(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("hasScriptingTerminology") or [])
+ +
[docs] def id(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def partition_space_used(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("partitionSpaceUsed") or [])
+ +
[docs] def short_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("shortName") or [])
+ +
[docs] def total_partition_size(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("totalPartitionSize") or [])
+ +
[docs] def unix_id(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("unixId") or [])
+ +
[docs] def visible(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("visible") or [])
+ +
[docs] def by_accepts_high_level_events(self, accepts_high_level_events: bool) -> Union['XASystemEventsProcess', None]: + return self.by_property("acceptsHighLevelEvents", accepts_high_level_events)
+ +
[docs] def by_accepts_remote_events(self, accepts_remote_events: bool) -> Union['XASystemEventsProcess', None]: + return self.by_property("acceptsRemoteEvents", accepts_remote_events)
+ +
[docs] def by_architecture(self, architecture: str) -> Union['XASystemEventsProcess', None]: + return self.by_property("architecture", architecture)
+ +
[docs] def by_background_only(self, background_only: bool) -> Union['XASystemEventsProcess', None]: + return self.by_property("backgroundOnly", background_only)
+ +
[docs] def by_bundle_identifier(self, bundle_identifier: str) -> Union['XASystemEventsProcess', None]: + return self.by_property("bundleIdentifier", bundle_identifier)
+ +
[docs] def by_classic(self, classic: bool) -> Union['XASystemEventsProcess', None]: + return self.by_property("classic", classic)
+ +
[docs] def by_creator_type(self, creator_type: str) -> Union['XASystemEventsProcess', None]: + return self.by_property("creatorType", creator_type)
+ +
[docs] def by_displayed_name(self, displayed_name: str) -> Union['XASystemEventsProcess', None]: + return self.by_property("displayedName", displayed_name)
+ +
[docs] def by_file(self, file: XABase.XAFile) -> Union['XASystemEventsProcess', None]: + return self.by_property("file", file.xa_elem)
+ +
[docs] def by_file_type(self, file_type: str) -> Union['XASystemEventsProcess', None]: + return self.by_property("fileType", file_type)
+ +
[docs] def by_frontmost(self, frontmost: bool) -> Union['XASystemEventsProcess', None]: + return self.by_property("frontmost", frontmost)
+ +
[docs] def by_has_scripting_terminology(self, has_scripting_terminology: str) -> Union['XASystemEventsProcess', None]: + return self.by_property("hasScriptingTerminology", has_scripting_terminology)
+ +
[docs] def by_id(self, id: str) -> Union['XASystemEventsProcess', None]: + return self.by_property("id", id)
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsProcess', None]: + return self.by_property("name", name)
+ +
[docs] def by_partition_space_used(self, partition_space_used: int) -> Union['XASystemEventsProcess', None]: + return self.by_property("partitionSpaceUsed", partition_space_used)
+ +
[docs] def by_short_name(self, short_name: str) -> Union['XASystemEventsProcess', None]: + return self.by_property("shortName", short_name)
+ +
[docs] def by_total_partition_size(self, total_partition_size: int) -> Union['XASystemEventsProcess', None]: + return self.by_property("totalPartitionSize", total_partition_size)
+ +
[docs] def by_unix_id(self, unix_id: str) -> Union['XASystemEventsProcess', None]: + return self.by_property("unixId", unix_id)
+ +
[docs] def by_visible(self, visible: bool) -> Union['XASystemEventsProcess', None]: + return self.by_property("visible", visible)
+ +
[docs]class XASystemEventsProcess(XASystemEventsUIElement): + """A process running on this computer. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def front_window(self) -> 'XABaseScriptable.XASBWindow': + """The front window of the application process. + """ + return self._new_element(self.xa_elem.windows()[0], XASystemEventsWindow) + + @property + def accepts_high_level_events(self) -> bool: + """Is the process high-level event aware (accepts open application, open document, print document, and quit)? + """ + return self.xa_elem.acceptsHighLevelEvents() + + @property + def accepts_remote_events(self) -> bool: + """Does the process accept remote events? + """ + return self.xa_elem.acceptsRemoteEvents() + + @property + def architecture(self) -> str: + """The architecture in which the process is running. + """ + return self.xa_elem.architecture() + + @property + def background_only(self) -> bool: + """Does the process run exclusively in the background? + """ + return self.xa_elem.backgroundOnly() + + @property + def bundle_identifier(self) -> str: + """The bundle identifier of the process' application file. + """ + return self.xa_elem.bundleIdentifier() + + @property + def classic(self) -> bool: + """Is the process running in the Classic environment? + """ + return self.xa_elem.Classic() + + @property + def creator_type(self) -> str: + """The OSType of the creator of the process (the signature). + """ + return self.xa_elem.creatorType() + + @property + def displayed_name(self) -> str: + """The name of the file from which the process was launched, as displayed in the User Interface. + """ + return self.xa_elem.displayedName() + + @property + def file(self) -> XABase.XAFile: + """The file from which the process was launched. + """ + return self._new_element(self.xa_elem.file(), XABase.XAFile) + + @property + def file_type(self) -> str: + """The OSType of the file type of the process. + """ + return self.xa_elem.fileType() + + @property + def frontmost(self) -> bool: + """Is the process the frontmost process? + """ + return self.xa_elem.frontmost() + + @frontmost.setter + def frontmost(self, frontmost: bool): + self.set_property('frontmost', frontmost) + + @property + def has_scripting_terminology(self) -> bool: + """Does the process have a scripting terminology, i.e., can it be scripted? + """ + return self.xa_elem.hasScriptingTerminology() + + @property + def id(self) -> int: + """The unique identifier of the process. + """ + return self.xa_elem.id() + + @property + def name(self) -> str: + """The name of the process. + """ + return self.xa_elem.name() + + @property + def partition_space_used(self) -> int: + """The number of bytes currently used in the process' partition. + """ + return self.xa_elem.partitionSpaceUsed() + + @property + def short_name(self) -> Union[str, None]: + """The short name of the file from which the process was launched. + """ + return self.xa_elem.shortName() + + @property + def total_partition_size(self) -> int: + """The size of the partition with which the process was launched. + """ + return self.xa_elem.totalPartitionSize() + + @property + def unix_id(self) -> int: + """The Unix process identifier of a process running in the native environment, or -1 for a process running in the Classic environment. + """ + return self.xa_elem.unixId() + + @property + def visible(self) -> bool: + """Is the process' layer visible? + """ + return self.xa_elem.visible() + + @visible.setter + def visible(self, visible: bool): + self.set_property('visible', visible)
+ + + + +
[docs]class XASystemEventsApplicationProcessList(XASystemEventsProcessList): + """A wrapper around lists of application processes that employs fast enumeration techniques. + + All properties of application processes can be called as methods on the wrapped list, returning a list containing each process' value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsApplicationProcess) + +
[docs] def application_file(self) -> XABase.XAFileList: + ls = self.xa_elem.arrayByApplyingSelector_("applicationFile") or [] + return self._new_element(ls, XABase.XAFileList)
+ +
[docs] def by_application_file(self, application_file: XABase.XAFile) -> Union['XASystemEventsApplicationProcess', None]: + return self.by_property("applicationFile", application_file.xa_elem)
+ +
[docs]class XASystemEventsApplicationProcess(XASystemEventsProcess): + """A process launched from an application file. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def application_file(self) -> XABase.XAFile: + """A reference to the application file from which this process was launched. + """ + return self._new_element(self.xa_elem.applicationFile(), XABase.XAFile)
+ + + + +
[docs]class XASystemEventsDeskAccessoryProcessList(XASystemEventsProcessList): + """A wrapper around lists of desk accessory processes that employs fast enumeration techniques. + + All properties of desk accessory processes can be called as methods on the wrapped list, returning a list containing each process' value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsDeskAccessoryProcess) + +
[docs] def desk_accessory_file(self) -> XABase.XAFileList: + ls = self.xa_elem.arrayByApplyingSelector_("deskAccessoryFile") or [] + return self._new_element(ls, XABase.XAFileList)
+ +
[docs] def by_desk_accessory_file(self, desk_accessory_file: XABase.XAFile) -> Union['XASystemEventsDeskAccessoryProcess', None]: + return self.by_property("deskAccessoryFile", desk_accessory_file.xa_elem)
+ +
[docs]class XASystemEventsDeskAccessoryProcess(XASystemEventsProcess): + """A process launched from an desk accessory file. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def desk_accessory_file(self) -> XABase.XAAlias: + """A reference to the desk accessory file from which this process was launched. + """ + return self._new_element(self.xa_elem.deskAccessoryFile(), XABase.XAAlias)
+ + + + +
[docs]class XASystemEventsProgressIndicatorList(XASystemEventsUIElementList): + """A wrapper around lists of progress indicator elements that employs fast enumeration techniques. + + All properties of progress indicator elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsProgressIndicator)
+ +
[docs]class XASystemEventsProgressIndicator(XASystemEventsUIElement): + """A progress indicator belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsRadioButtonList(XASystemEventsUIElementList): + """A wrapper around lists of radio button elements that employs fast enumeration techniques. + + All properties of radio button elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsRadioButton)
+ +
[docs]class XASystemEventsRadioButton(XASystemEventsUIElement): + """A radio button belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsRadioGroupList(XASystemEventsUIElementList): + """A wrapper around lists of radio button group elements that employs fast enumeration techniques. + + All properties of radio button group elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsRadioGroup)
+ +
[docs]class XASystemEventsRadioGroup(XASystemEventsUIElement): + """A radio button group belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsRelevanceIndicatorList(XASystemEventsUIElementList): + """A wrapper around lists of relevance indicator elements that employs fast enumeration techniques. + + All properties of relevance indicator elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsRelevanceIndicator)
+ +
[docs]class XASystemEventsRelevanceIndicator(XASystemEventsUIElement): + """A relevance indicator belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsRowList(XASystemEventsUIElementList): + """A wrapper around lists of table row elements that employs fast enumeration techniques. + + All properties of table row elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsRow)
+ +
[docs]class XASystemEventsRow(XASystemEventsUIElement): + """A row belonging to a table. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsScrollAreaList(XASystemEventsUIElementList): + """A wrapper around lists of scroll area elements that employs fast enumeration techniques. + + All properties of scroll area elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsScrollArea)
+ +
[docs]class XASystemEventsScrollArea(XASystemEventsUIElement): + """A scroll area belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsScrollBarList(XASystemEventsUIElementList): + """A wrapper around lists of scroll bar elements that employs fast enumeration techniques. + + All properties of scroll bar elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsScrollBar)
+ +
[docs]class XASystemEventsScrollBar(XASystemEventsUIElement): + """A scroll bar belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsSheetList(XASystemEventsUIElementList): + """A wrapper around lists of sheet elements that employs fast enumeration techniques. + + All properties of sheet elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsSheet)
+ +
[docs]class XASystemEventsSheet(XASystemEventsUIElement): + """A sheet displayed over a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsSliderList(XASystemEventsUIElementList): + """A wrapper around lists of slider elements that employs fast enumeration techniques. + + All properties of slider elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsSlider)
+ +
[docs]class XASystemEventsSlider(XASystemEventsUIElement): + """A slider belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsSplitterList(XASystemEventsUIElementList): + """A wrapper around lists of splitter elements that employs fast enumeration techniques. + + All properties of splitter elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsSplitter)
+ +
[docs]class XASystemEventsSplitter(XASystemEventsUIElement): + """A splitter belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsSplitterGroupList(XASystemEventsUIElementList): + """A wrapper around lists of splitter group elements that employs fast enumeration techniques. + + All properties of splitter group elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsSplitterGroup)
+ +
[docs]class XASystemEventsSplitterGroup(XASystemEventsUIElement): + """A splitter group belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsStaticTextList(XASystemEventsUIElementList): + """A wrapper around lists of static text elements that employs fast enumeration techniques. + + All properties of static text elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsStaticText)
+ +
[docs]class XASystemEventsStaticText(XASystemEventsUIElement): + """A static text field belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsTabGroupList(XASystemEventsUIElementList): + """A wrapper around lists of tab group elements that employs fast enumeration techniques. + + All properties of tab group elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsTabGroup)
+ +
[docs]class XASystemEventsTabGroup(XASystemEventsUIElement): + """A tab group belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsTableList(XASystemEventsUIElementList): + """A wrapper around lists of table elements that employs fast enumeration techniques. + + All properties of table elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsTable)
+ +
[docs]class XASystemEventsTable(XASystemEventsUIElement): + """A table belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsTextAreaList(XASystemEventsUIElementList): + """A wrapper around lists of text area elements that employs fast enumeration techniques. + + All properties of text area elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsTextArea)
+ +
[docs]class XASystemEventsTextArea(XASystemEventsUIElement): + """A text area belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsTextFieldList(XASystemEventsUIElementList): + """A wrapper around lists of text field elements that employs fast enumeration techniques. + + All properties of text field elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsTextField)
+ +
[docs]class XASystemEventsTextField(XASystemEventsUIElement): + """A text field belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsToolbarList(XASystemEventsUIElementList): + """A wrapper around lists of toolbar elements that employs fast enumeration techniques. + + All properties of toolbar elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsToolbar)
+ +
[docs]class XASystemEventsToolbar(XASystemEventsUIElement): + """A toolbar belonging to a window. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsValueIndicatorList(XASystemEventsUIElementList): + """A wrapper around lists of value indicator elements that employs fast enumeration techniques. + + All properties of value indicator elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsValueIndicator)
+ +
[docs]class XASystemEventsValueIndicator(XASystemEventsUIElement): + """A value indicator ( thumb or slider ) belonging to a scroll bar. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsPropertyListFileList(XABase.XAList): + """A wrapper around lists of property list files that employs fast enumeration techniques. + + All properties of property list files can be called as methods on the wrapped list, returning a list containing each file's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsPropertyListFile, filter) + +
[docs] def contents(self) -> 'XASystemEventsPropertyListItemList': + ls = self.xa_elem.arrayByApplyingSelector_("contents") or [] + return self._new_element(ls, XASystemEventsPropertyListItemList)
+ +
[docs] def by_content(self, contents: 'XASystemEventsPropertyListItemList') -> Union['XASystemEventsPropertyListFile', None]: + return self.by_property("contents", contents.xa_elem)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.contents()) + ">"
+ +
[docs]class XASystemEventsPropertyListFile(XABase.XAObject): + """A file containing data in Property List format. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def contents(self) -> 'XASystemEventsPropertyListItem': + """The contents of the property list file; elements and properties of the property list item may be accessed as if they were elements and properties of the property list file. + """ + return self._new_element(self.xa_elem.contents(), XASystemEventsPropertyListItem) + + @contents.setter + def contents(self, contents: 'XASystemEventsPropertyListItem'): + self.set_property('contents', contents.xa_elem)
+ + + + +
[docs]class XASystemEventsPropertyListItemList(XABase.XAList): + """A wrapper around lists of property list items that employs fast enumeration techniques. + + All properties of property list items can be called as methods on the wrapped list, returning a list containing each item's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsPropertyListItem, filter) + +
[docs] def kind(self) -> list[str]: + # TODO + return list(self.xa_elem.arrayByApplyingSelector_("kind") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def text(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("text") or [])
+ +
[docs] def value(self) -> list[Union[int, bool, datetime, 'XASystemEventsList', dict, str, bytes]]: + # TODO: SPECIALIZE TYPE + return list(self.xa_elem.arrayByApplyingSelector_("value") or [])
+ +
[docs] def by_kind(self, kind: str) -> Union['XASystemEventsPropertyListItem', None]: + # TODO + return self.by_property("kind", kind)
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsPropertyListItem', None]: + return self.by_property("name", name)
+ +
[docs] def by_text(self, text: str) -> Union['XASystemEventsPropertyListItem', None]: + return self.by_property("text", text)
+ +
[docs] def by_value(self, value: Any) -> Union['XASystemEventsPropertyListItem', None]: + # TODO + return self.by_property("value", value)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsPropertyListItem(XABase.XAObject): + """A unit of data in Property List format. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def kind(self) -> str: + """The kind of data stored in the property list item: boolean/data/date/list/number/record/string. + """ + return self.xa_elem.kind() + + @property + def name(self) -> str: + """The name of the property list item (if any). + """ + return self.xa_elem.name() + + @property + def text(self) -> str: + """The text representation of the property list data. + """ + return self.xa_elem.text() + + @text.setter + def text(self, text: str): + self.set_property('text', text) + + # TODO: Specialize to exact type + @property + def value(self) -> Any: + """The value of the property list item. + """ + return self.xa_elem.value() + + @value.setter + def value(self, value: Any): + self.set_property('value', value) + +
[docs] def property_list_items(self, filter: dict = None) -> Union['XASystemEventsPropertyListItemList', None]: + """Returns a list of property list items, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned property list items will have, or None + :type filter: Union[dict, None] + :return: The list of property list items + :rtype: XASystemEventsPropertyListItemList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.propertyListItems(), XASystemEventsPropertyListItemList)
+ + + + +
[docs]class XASystemEventsXMLAttributeList(XABase.XAList): + """A wrapper around lists of XML attributes that employs fast enumeration techniques. + + All properties of XML attributes can be called as methods on the wrapped list, returning a list containing each attribute's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsXMLAttribute, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def value(self) -> list[Any]: + return list(self.xa_elem.arrayByApplyingSelector_("value") or [])
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsXMLAttribute', None]: + return self.by_property("name", name)
+ +
[docs] def by_value(self, value: Any) -> Union['XASystemEventsXMLAttribute', None]: + return self.by_property("value", value)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsXMLAttribute(XABase.XAObject): + """A named value associated with a unit of data in XML format. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the XML attribute. + """ + return self.xa_elem.name() + + @property + def value(self) -> Any: + """The value of the XML attribute. + """ + return self.xa_elem.value() + + @value.setter + def value(self, value: Any): + self.set_property('value', value)
+ + + + +
[docs]class XASystemEventsXMLDataList(XABase.XAList): + """A wrapper around lists of XML data that employs fast enumeration techniques. + + All properties of XML datas can be called as methods on the wrapped list, returning a list containing each XML data's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsXMLData, filter) + +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def text(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("text") or [])
+ +
[docs] def by_id(self, id: str) -> Union['XASystemEventsXMLData', None]: + return self.by_property("id", id)
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsXMLData', None]: + return self.by_property("name", name)
+ +
[docs] def by_text(self, text: str) -> Union['XASystemEventsXMLData', None]: + return self.by_property("text", text)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsXMLData(XABase.XAObject): + """Data in XML format. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """The unique identifier of the XML data. + """ + return self.xa_elem.id() + + @property + def name(self) -> str: + """The name of the XML data. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def text(self) -> str: + """The text representation of the XML data. + """ + return self.xa_elem.text() + + @text.setter + def text(self, text: str): + self.set_property('text', text) + +
[docs] def xml_elements(self, filter: dict = None) -> Union['XASystemEventsXMLElementList', None]: + """Returns a list of XML elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned XML elements will have, or None + :type filter: Union[dict, None] + :return: The list of XML elements + :rtype: XASystemEventsXMLElementList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.xmlElements(), XASystemEventsXMLElementList)
+ + + + +
[docs]class XASystemEventsXMLElementList(XABase.XAList): + """A wrapper around lists of XML elements that employs fast enumeration techniques. + + All properties of XML elements can be called as methods on the wrapped list, returning a list containing each elements's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsXMLElement, filter) + +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def value(self) -> list[Any]: + return list(self.xa_elem.arrayByApplyingSelector_("value") or [])
+ +
[docs] def by_id(self, id: str) -> Union['XASystemEventsXMLElement', None]: + return self.by_property("id", id)
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsXMLElement', None]: + return self.by_property("name", name)
+ +
[docs] def by_value(self, value: Any) -> Union['XASystemEventsXMLElement', None]: + return self.by_property("value", value)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsXMLElement(XABase.XAObject): + """A unit of data in XML format. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """The unique identifier of the XML element. + """ + return self.xa_elem.id() + + @property + def name(self) -> str: + """The name of the XML element. + """ + return self.xa_elem.name() + + @property + def value(self) -> Any: + """The value of the XML element. + """ + return self.xa_elem.value() + + @value.setter + def value(self, value: Any): + self.set_property('value', value) + +
[docs] def xml_attributes(self, filter: dict = None) -> Union['XASystemEventsXMLAttributeList', None]: + """Returns a list of XML attributes, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned XML attributes will have, or None + :type filter: Union[dict, None] + :return: The list of XML attributes + :rtype: XASystemEventsXMLAttributeList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.xmlAttributes(), XASystemEventsXMLAttributeList)
+ +
[docs] def xml_elements(self, filter: dict = None) -> Union['XASystemEventsXMLElementList', None]: + """Returns a list of XML elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned XML elements will have, or None + :type filter: Union[dict, None] + :return: The list of XML elements + :rtype: XASystemEventsXMLElementList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.xmlElements(), XASystemEventsXMLElementList)
+ + + + +
[docs]class XASystemEventsXMLFileList(XABase.XAFileList): + """A wrapper around lists of XML files that employs fast enumeration techniques. + + All properties of XML files can be called as methods on the wrapped list, returning a list containing each file's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsXMLFile) + +
[docs] def contents(self) -> XASystemEventsXMLDataList: + ls = self.xa_elem.arrayByApplyingSelector_("contents") or [] + return self._new_element(ls, XASystemEventsXMLDataList)
+ +
[docs] def by_contents(self, contents: XASystemEventsXMLData) -> Union['XASystemEventsXMLFile', None]: + return self.by_property("contents", contents.xa_elem)
+ +
[docs]class XASystemEventsXMLFile(XABase.XAObject): + """A file containing data in XML format. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def contents(self) -> XASystemEventsXMLData: + """The contents of the XML file; elements and properties of the XML data may be accessed as if they were elements and properties of the XML file. + """ + return self._new_element(self.xa_elem.contents(), XASystemEventsXMLData) + + @contents.setter + def contents(self, contents: XASystemEventsXMLData): + self.set_property('contents', contents.xa_elem)
+ + + + +
[docs]class XASystemEventsPrintSettings(XABase.XAObject): + """Settings for printing. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def copies(self) -> int: + """The number of copies of a document to be printed. + """ + return self.xa_elem.copies() + + @copies.setter + def copies(self, copies: int): + self.set_property('copies', copies) + + @property + def collating(self) -> bool: + """Should printed copies be collated? + """ + return self.xa_elem.collating() + + @collating.setter + def collating(self, collating: bool): + self.set_property('collating', collating) + + @property + def starting_page(self) -> int: + """The first page of the document to be printed. + """ + return self.xa_elem.startingPage() + + @starting_page.setter + def starting_page(self, starting_page: int): + self.set_property('startingPage', starting_page) + + @property + def ending_page(self) -> int: + """The last page of the document to be printed. + """ + return self.xa_elem.endingPage() + + @ending_page.setter + def ending_page(self, ending_page: int): + self.set_property('endingPage', ending_page) + + @property + def pages_across(self) -> int: + """The number of logical pages laid across a physical page. + """ + return self.xa_elem.pagesAcross() + + @pages_across.setter + def pages_across(self, pages_across: int): + self.set_property('pagesAcross', pages_across) + + @property + def pages_down(self) -> int: + """The number of logical pages laid out down a physical page. + """ + return self.xa_elem.pagesDown() + + @pages_down.setter + def pages_down(self, pages_down: int): + self.set_property('pagesDown', pages_down) + + @property + def requested_print_time(self) -> datetime: + """The time at which the desktop printer should print the document. + """ + return self.xa_elem.requestedPrintTime() + + @requested_print_time.setter + def requested_print_time(self, requested_print_time: datetime): + self.set_property('requestedPrintTime', requested_print_time) + + @property + def error_handling(self) -> XASystemEventsApplication.PrintErrorHandling: + """How should errors be handled? + """ + return XASystemEventsApplication.PrintErrorHandling(self.xa_elem.errorHandling()) + + @error_handling.setter + def error_handling(self, error_handling: XASystemEventsApplication.PrintErrorHandling): + self.set_property('error_handling', error_handling.value) + + @property + def fax_number(self) -> str: + """The target fax number. + """ + return self.xa_elem.faxNumber() + + @fax_number.setter + def fax_number(self, fax_number: str): + self.set_property('faxNumber', fax_number) + + @property + def target_printer(self) -> str: + """The target printer. + """ + return self.xa_elem.targetPrinter() + + @target_printer.setter + def target_printer(self, target_printer: str): + self.set_property('targetPrinter', target_printer)
+ + + + +
[docs]class XASystemEventsScriptingClassList(XABase.XAList): + """A wrapper around lists of scripting classes that employs fast enumeration techniques. + + All properties of scripting classes can be called as methods on the wrapped list, returning a list containing each class' value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsScriptingClass, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def object_description(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("objectDescription") or [])
+ +
[docs] def hidden(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("hidden") or [])
+ +
[docs] def plural_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("pluralName") or [])
+ +
[docs] def suite_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("suiteName") or [])
+ +
[docs] def superclass(self) -> 'XASystemEventsScriptingClassList': + ls = self.xa_elem.arrayByApplyingSelector_("superclass") or [] + return self._new_element(ls, XASystemEventsScriptingClassList)
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsScriptingClass', None]: + return self.by_property("name", name)
+ +
[docs] def by_id(self, id: str) -> Union['XASystemEventsScriptingClass', None]: + return self.by_property("id", id)
+ +
[docs] def by_object_description(self, object_description: str) -> Union['XASystemEventsScriptingClass', None]: + return self.by_property("objectDescription", object_description)
+ +
[docs] def by_hidden(self, hidden: bool) -> Union['XASystemEventsScriptingClass', None]: + return self.by_property("hidden", hidden)
+ +
[docs] def by_plural_name(self, plural_name: str) -> Union['XASystemEventsScriptingClass', None]: + return self.by_property("pluralName", plural_name)
+ +
[docs] def by_suite_name(self, suite_name: str) -> Union['XASystemEventsScriptingClass', None]: + return self.by_property("suiteName", suite_name)
+ +
[docs] def by_superclass(self, superclass: 'XASystemEventsScriptingClass') -> Union['XASystemEventsScriptingClass', None]: + return self.by_property("superclass", superclass.xa_elem)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsScriptingClass(XABase.XAObject): + """A class within a suite within a scripting definition. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the class. + """ + return self.xa_elem.name() + + @property + def id(self) -> str: + """The unique identifier of the class. + """ + return self.xa_elem.id() + + @property + def object_description(self) -> str: + """The description of the class. + """ + return self.xa_elem.objectDescription() + + @property + def hidden(self) -> bool: + """Is the class hidden? + """ + return self.xa_elem.hidden() + + @property + def plural_name(self) -> str: + """The plural name of the class. + """ + return self.xa_elem.pluralName() + + @property + def suite_name(self) -> str: + """The name of the suite to which this class belongs. + """ + return self.xa_elem.suiteName() + + @property + def superclass(self) -> 'XASystemEventsScriptingClass': + """The class from which this class inherits. + """ + return self._new_element(self.xa_elem.superclass(), XASystemEventsScriptingClass) + +
[docs] def scripting_elements(self, filter: dict = None) -> Union['XASystemEventsScriptingElementList', None]: + """Returns a list of scripting elements, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned scripting elements will have, or None + :type filter: Union[dict, None] + :return: The list of scripting elements + :rtype: XASystemEventsScriptingElementList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.scriptingElements(), XASystemEventsScriptingElementList)
+ +
[docs] def scripting_properties(self, filter: dict = None) -> Union['XASystemEventsScriptingPropertyList', None]: + """Returns a list of scripting properties, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned scripting properties will have, or None + :type filter: Union[dict, None] + :return: The list of scripting properties + :rtype: XASystemEventsScriptingPropertyList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.scriptingProperties(), XASystemEventsScriptingPropertyList)
+ + + + +
[docs]class XASystemEventsScriptingCommandList(XABase.XAList): + """A wrapper around lists of scripting commands that employs fast enumeration techniques. + + All properties of scripting commands can be called as methods on the wrapped list, returning a list containing each command's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsScriptingCommand, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def object_description(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("objectDescription") or [])
+ +
[docs] def direct_parameter(self) -> 'XASystemEventsScriptingParameterList': + ls = self.xa_elem.arrayByApplyingSelector_("directParameter") or [] + return self._new_element(ls, XASystemEventsScriptingParameterList)
+ +
[docs] def hidden(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("hidden") or [])
+ +
[docs] def scripting_result(self) -> 'XASystemEventsScriptingResultObjectList': + ls = self.xa_elem.arrayByApplyingSelector_("scriptingResult") or [] + return self._new_element(ls, XASystemEventsScriptingResultObjectList)
+ +
[docs] def suite_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("suiteName") or [])
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsScriptingCommand', None]: + return self.by_property("name", name)
+ +
[docs] def by_id(self, id: str) -> Union['XASystemEventsScriptingCommand', None]: + return self.by_property("id", id)
+ +
[docs] def by_object_description(self, object_description: str) -> Union['XASystemEventsScriptingCommand', None]: + return self.by_property("objectDescription", object_description)
+ +
[docs] def by_direct_parameter(self, direct_parameter: 'XASystemEventsScriptingParameter') -> Union['XASystemEventsScriptingCommand', None]: + return self.by_property("directParameter", direct_parameter.xa_elem)
+ +
[docs] def by_hidden(self, hidden: bool) -> Union['XASystemEventsScriptingCommand', None]: + return self.by_property("hidden", hidden)
+ +
[docs] def by_scripting_result(self, scripting_result: 'XASystemEventsScriptingResultObject') -> Union['XASystemEventsScriptingCommand', None]: + return self.by_property("scriptingResult", scripting_result.xa_elem)
+ +
[docs] def by_suite_name(self, suite_name: str) -> Union['XASystemEventsScriptingCommand', None]: + return self.by_property("suiteName", suite_name)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsScriptingCommand(XABase.XAObject): + """A command within a suite within a scripting definition. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the command. + """ + return self.xa_elem.name() + + @property + def id(self) -> str: + """The unique identifier of the command. + """ + return self.xa_elem.id() + + @property + def object_description(self) -> str: + """The description of the command. + """ + return self.xa_elem.objectDescription() + + @property + def direct_parameter(self) -> 'XASystemEventsScriptingParameter': + """The direct parameter of the command. + """ + return self._new_element(self.xa_elem.directParameter(), XASystemEventsScriptingParameter) + + @property + def hidden(self) -> bool: + """Is the command hidden? + """ + return self.xa_elem.hidden() + + @property + def scripting_result(self) -> 'XASystemEventsScriptingResultObject': + """The object or data returned by this command. + """ + return self._new_element(self.xa_elem.scriptingResult(), XASystemEventsScriptingResultObject) + + @property + def suite_name(self) -> str: + """The name of the suite to which this command belongs. + """ + return self.xa_elem.suiteName() + +
[docs] def scripting_parameters(self, filter: dict = None) -> Union['XASystemEventsScriptingParameterList', None]: + """Returns a list of scripting parameters, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned scripting parameters will have, or None + :type filter: Union[dict, None] + :return: The list of scripting parameters + :rtype: XASystemEventsScriptingParameterList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.scriptingParameters(), XASystemEventsScriptingParameterList)
+ + + + +
[docs]class XASystemEventsScriptingDefinitionObject(XABase.XAObject): + """The scripting definition of the System Events application. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + +
[docs] def scripting_suites(self, filter: dict = None) -> Union['XASystemEventsScriptingSuiteList', None]: + """Returns a list of scripting suites, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned scripting suites will have, or None + :type filter: Union[dict, None] + :return: The list of scripting suites + :rtype: XASystemEventsScriptingSuiteList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.scriptingSuites(), XASystemEventsScriptingSuiteList, filter)
+ + + + +
[docs]class XASystemEventsScriptingElementList(XABase.XAList): + """A wrapper around lists of scripting elements that employs fast enumeration techniques. + + All properties of scripting elements can be called as methods on the wrapped list, returning a list containing each element's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XASystemEventsScriptingElement)
+ +
[docs]class XASystemEventsScriptingElement(XASystemEventsScriptingClass): + """An element within a class within a suite within a scripting definition. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XASystemEventsScriptingEnumerationList(XABase.XAList): + """A wrapper around lists of scripting enumerations that employs fast enumeration techniques. + + All properties of scripting enumerations can be called as methods on the wrapped list, returning a list containing each enumerations's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsScriptingEnumeration, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def hidden(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("hidden") or [])
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsScriptingEnumeration', None]: + return self.by_property("name", name)
+ +
[docs] def by_id(self, id: str) -> Union['XASystemEventsScriptingEnumeration', None]: + return self.by_property("id", id)
+ +
[docs] def by_hidden(self, hidden: bool) -> Union['XASystemEventsScriptingEnumeration', None]: + return self.by_property("hidden", hidden)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsScriptingEnumeration(XABase.XAObject): + """An enumeration within a suite within a scripting definition. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the enumeration. + """ + return self.xa_elem.name() + + @property + def id(self) -> str: + """The unique identifier of the enumeration. + """ + return self.xa_elem.id() + + @property + def hidden(self) -> bool: + """Is the enumeration hidden? + """ + return self.xa_elem.hidden() + +
[docs] def scripting_enumerators(self, filter: dict = None) -> Union['XASystemEventsScriptingEnumeratorList', None]: + """Returns a list of scripting enumerators, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned scripting enumerators will have, or None + :type filter: Union[dict, None] + :return: The list of scripting enumerators + :rtype: XASystemEventsScriptingEnumeratorList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.scriptingEnumerators(), XASystemEventsScriptingEnumeratorList)
+ + + + +
[docs]class XASystemEventsScriptingEnumeratorList(XABase.XAList): + """A wrapper around lists of scripting enumerators that employs fast enumeration techniques. + + All properties of scripting enumerators can be called as methods on the wrapped list, returning a list containing each enumerator's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsScriptingEnumerator, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def object_description(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("objectDescription") or [])
+ +
[docs] def hidden(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("hidden") or [])
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsScriptingEnumerator', None]: + return self.by_property("name", name)
+ +
[docs] def by_id(self, id: str) -> Union['XASystemEventsScriptingEnumerator', None]: + return self.by_property("id", id)
+ +
[docs] def by_object_description(self, object_description: str) -> Union['XASystemEventsScriptingEnumerator', None]: + return self.by_property("objectDescription", object_description)
+ +
[docs] def by_hidden(self, hidden: bool) -> Union['XASystemEventsScriptingEnumerator', None]: + return self.by_property("hidden", hidden)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsScriptingEnumerator(XABase.XAObject): + """An enumerator within an enumeration within a suite within a scripting definition. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the enumerator. + """ + return self.xa_elem.name() + + @property + def id(self) -> str: + """The unique identifier of the enumerator. + """ + return self.xa_elem.id() + + @property + def object_description(self) -> str: + """The description of the enumerator. + """ + return self.xa_elem.objectDescription() + + @property + def hidden(self) -> bool: + """Is the enumerator hidden? + """ + return self.xa_elem.hidden()
+ + + + +
[docs]class XASystemEventsScriptingParameterList(XABase.XAList): + """A wrapper around lists of scripting parameters that employs fast enumeration techniques. + + All properties of scripting parameters can be called as methods on the wrapped list, returning a list containing each parameter's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsScriptingParameter, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def object_description(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("objectDescription") or [])
+ +
[docs] def hidden(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("hidden") or [])
+ +
[docs] def kind(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("kind") or [])
+ +
[docs] def optional(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("optional") or [])
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsScriptingParameter', None]: + return self.by_property("name", name)
+ +
[docs] def by_id(self, id: str) -> Union['XASystemEventsScriptingParameter', None]: + return self.by_property("id", id)
+ +
[docs] def by_object_description(self, object_description: str) -> Union['XASystemEventsScriptingParameter', None]: + return self.by_property("objectDescription", object_description)
+ +
[docs] def by_hidden(self, hidden: bool) -> Union['XASystemEventsScriptingParameter', None]: + return self.by_property("hidden", hidden)
+ +
[docs] def by_kind(self, kind: str) -> Union['XASystemEventsScriptingParameter', None]: + return self.by_property("kind", kind)
+ +
[docs] def by_optional(self, optional: bool) -> Union['XASystemEventsScriptingParameter', None]: + return self.by_property("optional", optional)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsScriptingParameter(XABase.XAObject): + """A parameter within a command within a suite within a scripting definition. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the parameter. + """ + return self.xa_elem.name() + + @property + def id(self) -> str: + """The unique identifier of the parameter. + """ + return self.xa_elem.id() + + @property + def object_description(self) -> str: + """The description of the parameter. + """ + return self.xa_elem.objectDescription() + + @property + def hidden(self) -> bool: + """Is the parameter hidden? + """ + return self.xa_elem.hidden() + + @property + def kind(self) -> str: + """The kind of object or data specified by this parameter. + """ + return self.xa_elem.kind() + + @property + def optional(self) -> bool: + """Is the parameter optional? + """ + return self.xa_elem.optional()
+ + + + +
[docs]class XASystemEventsScriptingPropertyList(XABase.XAList): + """A wrapper around lists of scripting properties that employs fast enumeration techniques. + + All properties of scripting properties can be called as methods on the wrapped list, returning a list containing each scripting property's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsScriptingProperty, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def access(self) -> list[XASystemEventsApplication.AccessRight]: + ls = self.xa_elem.arrayByApplyingSelector_("access") or [] + return [XASystemEventsApplication.AccessRight(x) for x in ls]
+ +
[docs] def object_description(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("objectDescription") or [])
+ +
[docs] def enumerated(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("enumerated") or [])
+ +
[docs] def hidden(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("hidden") or [])
+ +
[docs] def kind(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("kind") or [])
+ +
[docs] def listed(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("listed") or [])
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsScriptingProperty', None]: + return self.by_property("name", name)
+ +
[docs] def by_id(self, id: str) -> Union['XASystemEventsScriptingProperty', None]: + return self.by_property("id", id)
+ +
[docs] def by_access(self, access: XASystemEventsApplication.AccessRight) -> Union['XASystemEventsScriptingProperty', None]: + return self.by_property("access", access.value)
+ +
[docs] def by_object_description(self, object_description: str) -> Union['XASystemEventsScriptingProperty', None]: + return self.by_property("objectDescription", object_description)
+ +
[docs] def by_enumerated(self, enumerated: bool) -> Union['XASystemEventsScriptingProperty', None]: + return self.by_property("enumerated", enumerated)
+ +
[docs] def by_hidden(self, hidden: bool) -> Union['XASystemEventsScriptingProperty', None]: + return self.by_property("hidden", hidden)
+ +
[docs] def by_kind(self, kind: str) -> Union['XASystemEventsScriptingProperty', None]: + return self.by_property("kind", kind)
+ +
[docs] def by_listed(self, listed: bool) -> Union['XASystemEventsScriptingProperty', None]: + return self.by_property("listed", listed)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsScriptingProperty(XABase.XAObject): + """A property within a class within a suite within a scripting definition. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the property. + """ + return self.xa_elem.name() + + @property + def id(self) -> str: + """The unique identifier of the property. + """ + return self.xa_elem.id() + + @property + def access(self) -> XASystemEventsApplication.AccessRight: + """The type of access to this property. + """ + return XASystemEventsApplication.AccessRight(self.xa_elem.access()) + + @property + def object_description(self) -> str: + """The description of the property. + """ + return self.xa_elem.objectDescription() + + @property + def enumerated(self) -> bool: + """Is the property's value an enumerator? + """ + return self.xa_elem.enumerated() + + @property + def hidden(self) -> bool: + """Is the property hidden? + """ + return self.xa_elem.hidden() + + @property + def kind(self) -> str: + """The kind of object or data returned by this property. + """ + return self.xa_elem.kind() + + @property + def listed(self) -> bool: + """Is the property's value a list? + """ + return self.xa_elem.listed()
+ + + + +
[docs]class XASystemEventsScriptingResultObjectList(XABase.XAList): + """A wrapper around lists of scripting result objects that employs fast enumeration techniques. + + All properties of scripting result objects can be called as methods on the wrapped list, returning a list containing each result's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsScriptingResultObject, filter) + +
[docs] def object_description(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("objectDescription") or [])
+ +
[docs] def enumerated(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("enumerated") or [])
+ +
[docs] def kind(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("kind") or [])
+ +
[docs] def listed(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("listed") or [])
+ +
[docs] def by_object_description(self, object_description: str) -> Union['XASystemEventsScriptingResultObject', None]: + return self.by_property("objectDescription", object_description)
+ +
[docs] def by_enumerated(self, enumerated: bool) -> Union['XASystemEventsScriptingResultObject', None]: + return self.by_property("enumerated", enumerated)
+ +
[docs] def by_kind(self, kind: str) -> Union['XASystemEventsScriptingResultObject', None]: + return self.by_property("kind", kind)
+ +
[docs] def by_listed(self, listed: bool) -> Union['XASystemEventsScriptingResultObject', None]: + return self.by_property("listed", listed)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.kind()) + ">"
+ +
[docs]class XASystemEventsScriptingResultObject(XABase.XAObject): + """The result of a command within a suite within a scripting definition. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def object_description(self) -> str: + """The description of the property. + """ + return self.xa_elem.objectDescription() + + @property + def enumerated(self) -> bool: + """Is the scripting result's value an enumerator? + """ + return self.xa_elem.enumerated() + + @property + def kind(self) -> str: + """The kind of object or data returned by this property. + """ + return self.xa_elem.kind() + + @property + def listed(self) -> bool: + """Is the scripting result's value a list? + """ + return self.xa_elem.listed()
+ + + + +
[docs]class XASystemEventsScriptingSuiteList(XABase.XAList): + """A wrapper around lists of scripting suites that employs fast enumeration techniques. + + All properties of scripting suites can be called as methods on the wrapped list, returning a list containing each suite's value for the property. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XASystemEventsScriptingSuite, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def object_description(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("objectDescription") or [])
+ +
[docs] def hidden(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("hidden") or [])
+ +
[docs] def by_name(self, name: str) -> Union['XASystemEventsScriptingSuite', None]: + return self.by_property("name", name)
+ +
[docs] def by_id(self, id: str) -> Union['XASystemEventsScriptingSuite', None]: + return self.by_property("id", id)
+ +
[docs] def by_object_description(self, object_description: str) -> Union['XASystemEventsScriptingSuite', None]: + return self.by_property("objectDescription", object_description)
+ +
[docs] def by_hidden(self, hidden: bool) -> Union['XASystemEventsScriptingSuite', None]: + return self.by_property("hidden", hidden)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XASystemEventsScriptingSuite(XABase.XAObject): + """A suite within a scripting definition. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the suite. + """ + return self.xa_elem.name() + + @property + def id(self) -> str: + """The unique identifier of the suite. + """ + return self.xa_elem.id() + + @property + def object_description(self) -> str: + """The description of the suite. + """ + return self.xa_elem.objectDescription() + + @property + def hidden(self) -> bool: + """Is the suite hidden? + """ + return self.xa_elem.hidden() + +
[docs] def scripting_commands(self, filter: dict = None) -> Union['XASystemEventsScriptingCommandList', None]: + """Returns a list of scripting commands, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned scripting commands will have, or None + :type filter: Union[dict, None] + :return: The list of scripting commands + :rtype: XASystemEventsScriptingCommandList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.scriptingCommands(), XASystemEventsScriptingCommandList)
+ +
[docs] def scripting_classes(self, filter: dict = None) -> Union['XASystemEventsScriptingClassList', None]: + """Returns a list of scripting classes, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned scripting classes will have, or None + :type filter: Union[dict, None] + :return: The list of scripting classes + :rtype: XASystemEventsScriptingClassList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.scriptingClasses(), XASystemEventsScriptingClassList)
+ +
[docs] def scripting_enumerations(self, filter: dict = None) -> Union['XASystemEventsScriptingEnumerationList', None]: + """Returns a list of scripting enumerations, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned scripting enumerations will have, or None + :type filter: Union[dict, None] + :return: The list of scripting enumerations + :rtype: XASystemEventsScriptingEnumerationList + + .. versionadded:: 0.1.0 + """ + return self._new_element(self.xa_elem.scriptingEnumerations(), XASystemEventsScriptingEnumerationList)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/SystemPreferences.html b/docs/_modules/PyXA/apps/SystemPreferences.html new file mode 100644 index 0000000..67d8faf --- /dev/null +++ b/docs/_modules/PyXA/apps/SystemPreferences.html @@ -0,0 +1,398 @@ + + + + + + PyXA.apps.SystemPreferences — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.SystemPreferences

+""".. versionadded:: 0.0.2
+
+Control the macOS System Preferences application using JXA-like syntax.
+"""
+
+from typing import Union
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+
+
[docs]class XASystemPreferencesApplication(XABaseScriptable.XASBApplication): + """A class for interacting with System Preferences.app. + + .. seealso:: :class:`XAPreferencePane`, :class:`XAPreferenceAnchor` + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether System Preferences is the active application. + """ + return self.xa_scel.frontmost() + + @frontmost.setter + def frontmost(self, frontmost: bool): + self.set_property("frontmost", frontmost) + + @property + def version(self) -> str: + """The version of System Preferences.app. + """ + return self.xa_scel.version() + + @property + def show_all(self) -> bool: + """Whether the system preferences is in show all view. + """ + return self.xa_scel.showAll() + + @show_all.setter + def show_all(self, show_all: bool): + self.set_property("showAll", show_all) + + @property + def current_pane(self) -> 'XAPreferencePane': + """The currently selected preference pane. + """ + return self._new_element(self.xa_scel.currentPane(), XAPreferencePane) + + @current_pane.setter + def current_pane(self, current_pane: 'XAPreferencePane'): + self.set_property("currentPane", current_pane.xa_elem) + + @property + def preferences_window(self) -> XABaseScriptable.XASBWindow: + """The main preferences window. + """ + return self._new_element(self.xa_scel.preferencesWindow(), XABaseScriptable.XASBWindow) + +
[docs] def panes(self, filter: Union[dict, None] = None) -> 'XAPreferencePaneList': + """Returns a list of preference panes, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned preference panes will have, or None + :type filter: Union[dict, None] + :return: The list of preference panes + :rtype: list[XAPreferencePane] + + :Example 1: List all preference panes + + >>> import PyXA + >>> app = PyXA.Application("System Preferences") + >>> print(app.panes()) + <<class 'PyXA.apps.SystemPreferences.XAPreferencePaneList'>['Accessibility', 'Apple ID', 'Battery', ...]> + + :Example 2: List preference panes after applying a filter + + >>> import PyXA + >>> app = PyXA.Application("System Preferences") + >>> print(app.panes({"name": "Battery"})) + <<class 'PyXA.apps.SystemPreferences.XAPreferencePaneList'>['Battery']> + + .. versionchanged:: 0.0.4 + + Now returns an object of :class:`XAPreferencePaneList` instead of a default list. + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_scel.panes(), XAPreferencePaneList, filter)
+ + +
[docs]class XAPreferencePaneList(XABase.XAList): + """A wrapper around lists of preference panes that employs fast enumeration techniques. + + All properties of panes can be called as methods on the wrapped list, returning a list containing each pane's value for the property. + + :Example 1: List the name of each preference pane + + >>> import PyXA + >>> app = PyXA.Application("System Preferences") + >>> print(app.panes().name()) + ['Accessibility', 'Apple ID', 'Battery', 'Bluetooth', ...] + + :Example 2: Get a preference pane by name (two ways) + + >>> import PyXA + >>> app = PyXA.Application("System Preferences") + >>> pane1 = app.panes().by_name("Battery") + >>> pane2 = app.panes({"name": "Battery"})[0] + >>> print(pane1 == pane2) + True + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAPreferencePane, filter) + +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def localized_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("localizedName") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def by_id(self, id: str) -> 'XAPreferencePane': + return self.by_property("id", id)
+ +
[docs] def by_localized_name(self, localized_name: str) -> 'XAPreferencePane': + return self.by_property("localizedName", localized_name)
+ +
[docs] def by_name(self, name: str) -> 'XAPreferencePane': + return self.by_property("name", name)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAPreferencePane(XABase.XAObject): + """A class for managing and interacting with preference panes in System Preferences. + + .. seealso:: :class:`XAPreferenceAnchor` + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """A unique identifier for the preference pane independent of locale. + """ + return self.xa_elem.id() + + @property + def localized_name(self) -> str: + """The locale-dependant name of the preference pane. + """ + return self.xa_elem.localizedName() + + @property + def name(self) -> str: + """The name of the preference pane as it appears in the title bar. + """ + return self.xa_elem.name() + +
[docs] def anchors(self, filter: Union[dict, None] = None) -> 'XAPreferenceAnchorList': + """Returns a list of anchors, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned anchors will have, or None + :type filter: Union[dict, None] + :return: The list of anchors + :rtype: list[XAPreferenceAnchor] + + :Example 1: Listing all anchors + + >>> import PyXA + >>> app = PyXA.Application("System Preferences") + >>> pane = app.panes()[0] + >>> print(pane.anchors()) + <<class 'PyXA.apps.SystemPreferences.XAPreferenceAnchorList'>['Accessibility_Shortcut', 'Seeing_Cursor', ...]> + + .. versionchanged:: 0.0.4 + + Now returns an object of :class:`XAPreferenceAnchorList` instead of a default list. + + .. versionadded:: 0.0.2 + """ + return self._new_element(self.xa_elem.anchors(), XAPreferenceAnchorList, filter)
+ +
[docs] def reveal(self) -> 'XAPreferencePane': + """Reveals the preference pane in the System Preferences window. + + :return: A reference to the pane object. + :rtype: XAPreferencePane + + :Example 1: Reveal the `Displays` preference pane + + >>> import PyXA + >>> app = PyXA.Application("System Preferences") + >>> app.activate() + >>> app.panes().by_name("Displays").reveal() + + .. versionadded:: 0.0.4 + """ + self.xa_elem.reveal() + return self
+ +
[docs] def authorize(self) -> 'XAPreferencePane': + """Prompts for authorization for the preference pane. + + :return: A reference to the pane object. + :rtype: XAPreferencePane + + :Example 1: Prompt for authorization for the `Date & Time` pane + + >>> import PyXA + >>> from time import sleep + >>> app = PyXA.Application("System Preferences") + >>> app.activate() + >>> pane = app.panes().by_name("Date & Time") + >>> pane.reveal() + >>> sleep(0.5) # Wait for animation to finish + >>> pane.authorize() + + .. versionadded:: 0.0.2 + """ + self.xa_elem.authorize() + return self
+ + def __repr__(self): + return "<" + str(type(self)) + self.name + ", id=" + str(self.id) + ">"
+ + +
[docs]class XAPreferenceAnchorList(XABase.XAList): + """A wrapper around lists of preference anchors that employs fast enumeration techniques. + + All properties of anchors can be called as methods on the wrapped list, returning a list containing each anchor's value for the property. + + .. versionadded:: 0.0.4 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAPreferenceAnchor, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def by_name(self, name: str) -> 'XAPreferenceAnchor': + return self.by_property("name", name)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAPreferenceAnchor(XABase.XAObject): + """A class for managing and interacting with anchors in System Preferences. + + .. versionadded:: 0.0.2 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the anchor. + """ + return self.xa_elem.name() + +
[docs] def reveal(self) -> 'XAPreferenceAnchor': + """Reveals the anchor in the System Preferences window. + + :return: A reference to the anchor object. + :rtype: XAPreferenceAnchor + + :Example 1: Reveal the `Siri` anchor in the `Accessibility` pane + + >>> import PyXA + >>> app = PyXA.Application("System Preferences") + >>> pane = app.panes().by_name("Accessibility") + >>> anchor = pane.anchors().by_name("Siri") + >>> anchor.reveal() + + .. versionadded:: 0.0.4 + """ + self.xa_elem.reveal() + return self
+ + def __repr__(self): + return "<" + str(type(self)) + self.name + ">"
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/TV.html b/docs/_modules/PyXA/apps/TV.html new file mode 100644 index 0000000..52cc27b --- /dev/null +++ b/docs/_modules/PyXA/apps/TV.html @@ -0,0 +1,187 @@ + + + + + + PyXA.apps.TV — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.TV

+""".. versionadded:: 0.0.1
+
+Control the macOS TV application using JXA-like syntax.
+"""
+
+from typing import Union
+
+from PyXA import XABase, XABaseScriptable
+
+from . import MediaApplicationBase
+
+
+
[docs]class XATVApplication(MediaApplicationBase.XAMediaApplication, XABaseScriptable.XASBApplication): + """A class for managing and interacting with TV.app. + + .. seealso:: :class:`XATVWindow`, class:`XATVSource`, :class:`XATVPlaylist`, :class:`XATVTrack` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XATVWindow
+ + + + +
[docs]class XATVTrackList(MediaApplicationBase.XAMediaItemList): + """A wrapper around lists of TV tracks that employs fast enumeration techniques. + + All properties of TV tracks can be called as methods on the wrapped list, returning a list containing each track's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XATVTrack + super().__init__(properties, filter, obj_class) + +
[docs] def sort_director(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("sortDirector") or [])
+ +
[docs] def by_sort_director(self, sort_director: str) -> Union['XATVTrack', None]: + return self.by_property("sortDirector", sort_director)
+ +
[docs]class XATVTrack(MediaApplicationBase.XAMediaItem): + """A class for managing and interacting with tracks in TV.app. + + .. seealso:: :class:`XATVSharedTrack`, :class:`XATVFileTrack`, :class:`XATVRemoteURLTrack` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def sort_director(self) -> str: + """The string used for this track when sorting by director. + """ + return self.xa_elem.sortDirector() + + @sort_director.setter + def sort_director(self, sort_director: str): + self.set_property('sortDirector', sort_director)
+ + + + +
[docs]class XATVWindow(MediaApplicationBase.XAMediaWindow, XABaseScriptable.XASBWindow): + """A windows of TV.app. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + obj_class = self.xa_elem.objectClass().data() + if not hasattr(self, "xa_specialized"): + if obj_class == b'WrBc': + self.__class__ = MediaApplicationBase.XAMediaBrowserWindow + elif obj_class == b'WlPc': + self.__class__ = MediaApplicationBase.XAMediaPlaylistWindow + elif obj_class == b'niwc': + self.__class__ = MediaApplicationBase.XAMediaVideoWindow + self.xa_specialized = True + self.__init__(properties)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/Terminal.html b/docs/_modules/PyXA/apps/Terminal.html new file mode 100644 index 0000000..468455f --- /dev/null +++ b/docs/_modules/PyXA/apps/Terminal.html @@ -0,0 +1,825 @@ + + + + + + PyXA.apps.Terminal — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.Terminal

+""".. versionadded:: 0.0.1
+
+Control the macOS Terminal application using JXA-like syntax.
+"""
+
+import subprocess
+from typing import Dict, Union
+
+import AppKit
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+from ..XAProtocols import XACanOpenPath, XAClipboardCodable
+
+
[docs]class XATerminalApplication(XABaseScriptable.XASBApplication, XACanOpenPath): + """A class for managing and interacting with Messages.app + + .. seealso:: :class:`XATerminalWindow`, :class:`XATerminalTab`, :class:`XATerminalSettingsSet` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XATerminalWindow + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether Terminal is the active application. + """ + return self.xa_scel.frontmost() + + @property + def version(self) -> str: + """The version of Terminal.app. + """ + return self.xa_scel.version() + + @property + def default_settings(self) -> 'XATerminalSettingsSet': + """The settings set used for new windows. + """ + return self._new_element(self.xa_scel.defaultSettings(), XATerminalSettingsSet) + + @default_settings.setter + def default_settings(self, default_settings: 'XATerminalSettingsSet'): + self.set_property("defaultSettings", default_settings.xa_elem) + + @property + def startup_settings(self) -> 'XATerminalSettingsSet': + """The settings set used for the window created on application startup. + """ + return self._new_element(self.xa_scel.startupSettings(), XATerminalSettingsSet) + + @startup_settings.setter + def startup_settings(self, startup_settings: 'XATerminalSettingsSet'): + self.set_property("startupSettings", startup_settings.xa_elem) + + @property + def current_tab(self) -> 'XATerminalTab': + """The currently active Terminal tab. + """ + return self.front_window.selected_tab + + @current_tab.setter + def current_tab(self, current_tab: 'XATerminalTab'): + self.front_window.selected_tab = current_tab + +
[docs] def do_script(self, script: str, window_tab: Union['XATerminalWindow', 'XATerminalTab'] = None, return_result: bool = False) -> Union['XATerminalApplication', Dict[str, str]]: + """Executes a Terminal script in the specified window or tab. + + If no window or tab is provided, the script will run in a new tab of the frontmost window. If return_result is True, the script will be run in a new tab no regardless of the value of window_tab. + + :param script: The script to execute. + :type script: str + :param window_tab: The window or tab to execute the script in, defaults to None + :type window_tab: Union[XATerminalWindow, XATerminalTab], optional + :param return_result: Whether to return the result of script execution, defaults to False + :type return_result: bool, optional + :return: A reference to the Terminal application object, or the result of script execution. + :rtype: Union[XATerminalApplication, Dict[str, str]] + + .. versionchanged:: 0.0.9 + + Now optionally returns the script execution result. + + .. versionadded:: 0.0.1 + """ + if window_tab is None: + window_tab = self.front_window + + if return_result: + value = subprocess.Popen([script], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) + return { + "stdout": value.stdout.read().decode(), + "stderr": value.stderr.read().decode(), + } + else: + self.xa_scel.doScript_in_(script, window_tab.xa_elem) + return self
+ +
[docs] def settings_sets(self, filter: dict = None) -> Union['XATerminalSettingsSetList', None]: + """Returns a list of settings sets, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned settings sets will have, or None + :type filter: Union[dict, None] + :return: The list of settings sets + :rtype: XATerminalSettingsSetList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_scel.settingsSets(), XATerminalSettingsSetList, filter)
+ + + + +
[docs]class XATerminalWindow(XABaseScriptable.XASBWindow, XABaseScriptable.XASBPrintable, XABase.XAObject): + """A class for managing and interacting with windows in Terminal.app. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def frontmost(self) -> bool: + """Whether the window is currently the frontmost Terminal window. + """ + return self.xa_elem.frontmost() + + @frontmost.setter + def frontmost(self, frontmost: bool): + self.set_property("frontmost", frontmost) + + @property + def selected_tab(self) -> 'XATerminalTab': + """The Terminal tab currently displayed in the window. + """ + return self._new_element(self.xa_elem.selectedTab(), XATerminalTab) + + @selected_tab.setter + def selected_tab(self, selected_tab: 'XATerminalTab'): + self.set_property("selectedTab", selected_tab.xa_elem) + + @property + def position(self) -> tuple[int, int]: + return self.xa_elem.position() + + @position.setter + def position(self, position: tuple[int, int]): + """The position of the top-left corner of the window. + """ + self.set_property("position", position) + +
[docs] def tabs(self, filter: dict = None) -> Union['XATerminalTabList', None]: + """Returns a list of tabs, as PyXA-wrapped objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned tabs will have, or None + :type filter: Union[dict, None] + :return: The list of tabs + :rtype: XATerminalTabList + + .. versionadded:: 0.0.7 + """ + return self._new_element(self.xa_elem.tabs(), XATerminalTabList, filter)
+ + + + +
[docs]class XATerminalTabList(XABase.XAList, XAClipboardCodable): + """A wrapper around lists of Terminal tabs that employs fast enumeration techniques. + + All properties of tabs can be called as methods on the wrapped list, returning a list containing each tab's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XATerminalTab, filter) + +
[docs] def number_of_rows(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("numberOfRows") or [])
+ +
[docs] def number_of_columns(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("numberOfColumns") or [])
+ +
[docs] def contents(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("contents") or [])
+ +
[docs] def history(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("history") or [])
+ +
[docs] def busy(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("busy") or [])
+ +
[docs] def processes(self) -> list[list[str]]: + return list(self.xa_elem.arrayByApplyingSelector_("processes") or [])
+ +
[docs] def selected(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("selected") or [])
+ +
[docs] def title_displays_custom_title(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("titleDisplaysCustomTitle") or [])
+ +
[docs] def custom_title(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("customTitle") or [])
+ +
[docs] def tty(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("tty") or [])
+ +
[docs] def current_settings(self) -> 'XATerminalSettingsSetList': + ls = self.xa_elem.arrayByApplyingSelector_("currentSettings") or [] + return self._new_element(ls, XATerminalSettingsSetList)
+ +
[docs] def by_number_of_rows(self, number_of_rows: int) -> Union['XATerminalTab', None]: + return self.by_property("numberOfRows", number_of_rows)
+ +
[docs] def by_number_of_columns(self, number_of_columns: int) -> Union['XATerminalTab', None]: + return self.by_property("numberOfColumns", number_of_columns)
+ +
[docs] def by_contents(self, contents: str) -> Union['XATerminalTab', None]: + return self.by_property("contents", contents)
+ +
[docs] def by_history(self, history: str) -> Union['XATerminalTab', None]: + return self.by_property("history", history)
+ +
[docs] def by_busy(self, busy: bool) -> Union['XATerminalTab', None]: + return self.by_property("busy", busy)
+ +
[docs] def by_processes(self, processes: list[str]) -> Union['XATerminalTab', None]: + return self.by_property("processes", processes)
+ +
[docs] def by_selected(self, selected: bool) -> Union['XATerminalTab', None]: + return self.by_property("selected", selected)
+ +
[docs] def by_title_displays_custom_title(self, title_displays_custom_title: bool) -> Union['XATerminalTab', None]: + return self.by_property("titleDisplaysCustomTitle", title_displays_custom_title)
+ +
[docs] def by_custom_title(self, custom_title: str) -> Union['XATerminalTab', None]: + return self.by_property("customTitle", custom_title)
+ +
[docs] def by_tty(self, tty: str) -> Union['XATerminalTab', None]: + return self.by_property("tty", tty)
+ +
[docs] def by_current_settings(self, current_settings: 'XATerminalSettingsSet') -> Union['XATerminalTab', None]: + return self.by_property("currentSettings", current_settings.xa_elem)
+ +
[docs] def get_clipboard_representation(self) -> list[str]: + """Gets a clipboard-codable representation of each tab in the list. + + When the clipboard content is set to a list of Terminal tabs, each tab's custom title and history are added to the clipboard. + + :return: The list of each tab's custom title and history + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + items = [] + titles = self.custom_title() + histories = self.history() + for index, title in enumerate(titles): + items.append(title) + items.append(histories[index]) + return items
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.custom_title()) + ">"
+ +
[docs]class XATerminalTab(XABase.XAObject, XAClipboardCodable): + """A class for managing and interacting with tabs in Terminal.app. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def number_of_rows(self) -> int: + """The number of rows displayed in the tab. + """ + return self.xa_elem.numberOfRows() + + @number_of_rows.setter + def number_of_rows(self, number_of_rows: int): + self.set_property("numberOfRows", number_of_rows) + + @property + def number_of_columns(self) -> int: + """The number of columns displayed in the tab. + """ + return self.xa_elem.numberOfColumns() + + @number_of_columns.setter + def number_of_columns(self, number_of_columns: int): + self.set_property("numberOfColumns", number_of_columns) + + @property + def contents(self) -> str: + """The currently visible contents of the tab. + """ + return self.xa_elem.contents() + + @property + def history(self) -> str: + """The contents of the entire scrolling buffer of the tab. + """ + return self.xa_elem.history() + + @property + def busy(self) -> bool: + """Whether the tab is currently busy running a process. + """ + return self.xa_elem.busy() + + @property + def processes(self) -> list[str]: + """The processes currently running in the tab. + """ + return self.xa_elem.processes() + + @property + def selected(self) -> bool: + """Whether the tab is currently selected. + """ + return self.xa_elem.selected() + + @selected.setter + def selected(self, selected: bool): + self.set_property("selected", selected) + + @property + def title_displays_custom_title(self) -> bool: + """Whether the tab's title contains a custom title. + """ + return self.xa_elem.titleDisplaysCustomTitle() + + @title_displays_custom_title.setter + def title_displays_custom_title(self, title_displays_custom_title: bool): + self.set_property("titleDisplaysCustomTitle", title_displays_custom_title) + + @property + def custom_title(self) -> str: + """The tab's custom title. + """ + return self.xa_elem.customTitle() + + @custom_title.setter + def custom_title(self, custom_title: str): + self.set_property("customTitle", custom_title) + + @property + def tty(self) -> str: + """The tab's TTY device. + """ + return self.xa_elem.tty() + + @property + def current_settings(self) -> 'XATerminalSettingsSet': + """The set of settings which control the tab's behavior and appearance. + """ + return self._new_element(self.xa_elem.currentSettings(), XATerminalSettingsSet) + + @current_settings.setter + def current_settings(self, current_settings: 'XATerminalSettingsSet'): + self.set_property("currentSettings", current_settings.xa_elem) + +
[docs] def get_clipboard_representation(self) -> list[str]: + """Gets a clipboard-codable representation of the tab. + + When the clipboard content is set to a Terminal tab, the tab's custom title and its history are added to the clipboard. + + :return: The tab's custom title and history + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + return [self.custom_title, self.history]
+ + def __repr__(self): + return "<" + str(type(self)) + self.custom_title + ">"
+ + + + +
[docs]class XATerminalSettingsSetList(XABase.XAList, XAClipboardCodable): + """A wrapper around lists of Terminal settings sets that employs fast enumeration techniques. + + All properties of settings sets can be called as methods on the wrapped list, returning a list containing each settings set's value for the property. + + .. versionadded:: 0.0.7 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XATerminalSettingsSet, filter) + +
[docs] def id(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def number_of_rows(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("numberOfRows") or [])
+ +
[docs] def number_of_columns(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("numberOfColumns") or [])
+ +
[docs] def cursor_color(self) -> list[XABase.XAColor]: + ls = self.xa_elem.arrayByApplyingSelector_("cursorColor") or [] + return [XABase.XAColor(x) for x in ls]
+ +
[docs] def background_color(self) -> list[XABase.XAColor]: + ls = self.xa_elem.arrayByApplyingSelector_("backgroundColor") or [] + return [XABase.XAColor(x) for x in ls]
+ +
[docs] def normal_text_color(self) -> list[XABase.XAColor]: + ls = self.xa_elem.arrayByApplyingSelector_("normalTextColor") or [] + return [XABase.XAColor(x) for x in ls]
+ +
[docs] def bold_text_color(self) -> list[XABase.XAColor]: + ls = self.xa_elem.arrayByApplyingSelector_("boldTextColor") or [] + return [XABase.XAColor(x) for x in ls]
+ +
[docs] def font_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("fontName") or [])
+ +
[docs] def font_size(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("fontSize") or [])
+ +
[docs] def font_antialiasing(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("fontAntialiasing") or [])
+ +
[docs] def clean_commands(self) -> list[list[str]]: + return list(self.xa_elem.arrayByApplyingSelector_("cleanCommands") or [])
+ +
[docs] def title_displays_device_name(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("titleDisplaysDeviceName") or [])
+ +
[docs] def title_displays_shell_path(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("titleDisplaysShellPath") or [])
+ +
[docs] def title_displays_window_size(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("titleDisplaysWindowSize") or [])
+ +
[docs] def title_displays_settings_name(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("titleDisplaysSettingsName") or [])
+ +
[docs] def title_displays_custom_title(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("titleDisplaysCustomTitle") or [])
+ +
[docs] def custom_title(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("customTitle") or [])
+ +
[docs] def by_id(self, id: int) -> Union['XATerminalSettingsSet', None]: + return self.by_property("id", id)
+ +
[docs] def by_name(self, name: str) -> Union['XATerminalSettingsSet', None]: + return self.by_property("name", name)
+ +
[docs] def by_number_of_rows(self, number_of_rows: int) -> Union['XATerminalSettingsSet', None]: + return self.by_property("numberOfRows", number_of_rows)
+ +
[docs] def by_number_of_columns(self, number_of_columns: int) -> Union['XATerminalSettingsSet', None]: + return self.by_property("numberOfColumns", number_of_columns)
+ +
[docs] def by_cursor_color(self, cursor_color: XABase.XAColor) -> Union['XATerminalSettingsSet', None]: + return self.by_property("cursorColor", cursor_color.xa_elem)
+ +
[docs] def by_background_color(self, background_color: XABase.XAColor) -> Union['XATerminalSettingsSet', None]: + return self.by_property("backgroundColor", background_color.xa_elem)
+ +
[docs] def by_normal_text_color(self, normal_text_color: XABase.XAColor) -> Union['XATerminalSettingsSet', None]: + return self.by_property("normalTextColor", normal_text_color.xa_elem)
+ +
[docs] def by_bold_text_color(self, bold_text_color: XABase.XAColor) -> Union['XATerminalSettingsSet', None]: + return self.by_property("boldTextColor", bold_text_color.xa_elem)
+ +
[docs] def by_font_name(self, font_name: str) -> Union['XATerminalSettingsSet', None]: + return self.by_property("fontName", font_name)
+ +
[docs] def by_font_size(self, font_size: int) -> Union['XATerminalSettingsSet', None]: + return self.by_property("fontSize", font_size)
+ +
[docs] def by_font_antialiasing(self, font_antialiasing: bool) -> Union['XATerminalSettingsSet', None]: + return self.by_property("fontAntialiasing", font_antialiasing)
+ +
[docs] def by_clean_commands(self, clean_commands: list[str]) -> Union['XATerminalSettingsSet', None]: + return self.by_property("cleanCommands", clean_commands)
+ +
[docs] def by_title_displays_device_name(self, title_displays_device_name: bool) -> Union['XATerminalSettingsSet', None]: + return self.by_property("titleDisplaysDeviceName", title_displays_device_name)
+ +
[docs] def by_title_displays_shell_path(self, title_displays_shell_path: bool) -> Union['XATerminalSettingsSet', None]: + return self.by_property("titleDisplaysShellPath", title_displays_shell_path)
+ +
[docs] def by_title_displays_windows_size(self, title_displays_windows_size: bool) -> Union['XATerminalSettingsSet', None]: + return self.by_property("titleDisplaysWindowSize", title_displays_windows_size)
+ +
[docs] def by_title_displays_settings_name(self, title_displays_settings_name: bool) -> Union['XATerminalSettingsSet', None]: + return self.by_property("titleDisplaysSettingsName", title_displays_settings_name)
+ +
[docs] def by_title_displays_custom_title(self, title_displays_custom_title: bool) -> Union['XATerminalSettingsSet', None]: + return self.by_property("titleDisplaysCustomTitle", title_displays_custom_title)
+ +
[docs] def by_custom_title(self, custom_title: str) -> Union['XATerminalSettingsSet', None]: + return self.by_property("customTitle", custom_title)
+ +
[docs] def get_clipboard_representation(self) -> list[str]: + """Gets a clipboard-codable representation of each settings set in the list. + + When the clipboard content is set to a list of settings sets, each setting set's name is added to the clipboard. + + :return: The list of setting set names + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + return self.name()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XATerminalSettingsSet(XABase.XAObject, XAClipboardCodable): + """A class for managing and interacting with settings sets in Terminal.app. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> int: + """The unique identifier of the settings set. + """ + return self.xa_elem.id() + + @property + def name(self) -> str: + """The name of the settings set. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property("name", name) + + @property + def number_of_rows(self) -> int: + """The number of rows displayed in the tab. + """ + return self.xa_elem.numberOfRows() + + @number_of_rows.setter + def number_of_rows(self, number_of_rows: int): + self.set_property("numberOfRows", number_of_rows) + + @property + def number_of_columns(self) -> int: + """The number of columns displayed in the tab. + """ + return self.xa_elem.numberOfColumns() + + @number_of_columns.setter + def number_of_columns(self, number_of_columns: int): + self.set_property("numberOfColumns", number_of_columns) + + @property + def cursor_color(self) -> XABase.XAColor: + """The cursor color for the tab. + """ + return XABase.XAColor(self.xa_elem.cursorColor()) + + @cursor_color.setter + def cursor_color(self, cursor_color: XABase.XAColor): + self.set_property("cursorColor", cursor_color.xa_elem) + + @property + def background_color(self) -> XABase.XAColor: + """The background color for the tab. + """ + return XABase.XAColor(self.xa_elem.backgroundColor()) + + @background_color.setter + def background_color(self, background_color: XABase.XAColor): + self.set_property("backgroundColor", background_color.xa_elem) + + @property + def normal_text_color(self) -> XABase.XAColor: + """The normal text color for the tab. + """ + return XABase.XAColor(self.xa_elem.normalTextColor()) + + @normal_text_color.setter + def normal_text_color(self, normal_text_color: XABase.XAColor): + self.set_property("normalTextColor", normal_text_color.xa_elem) + + @property + def bold_text_color(self) -> XABase.XAColor: + """The bold text color for the tab. + """ + return XABase.XAColor(self.xa_elem.boldTextColor()) + + @bold_text_color.setter + def bold_text_color(self, bold_text_color: XABase.XAColor): + self.set_property("boldTextColor", bold_text_color.xa_elem) + + @property + def font_name(self) -> str: + """The name of the font used to display the tab's contents. + """ + return self.xa_elem.fontName() + + @font_name.setter + def font_name(self, font_name: str): + self.set_property("fontName", font_name) + + @property + def font_size(self) -> int: + """The size of the font used to display the tab's contents. + """ + return self.xa_elem.fontSize() + + @font_size.setter + def font_size(self, font_size: int): + self.set_property("fontSize", font_size) + + @property + def font_antialiasing(self) -> bool: + """Whether the font used to display the tab's contents is antialiased. + """ + return self.xa_elem.fontAntialiasing() + + @font_antialiasing.setter + def font_antialiasing(self, font_antialiasing: bool): + self.set_property("fontAntialiasing", font_antialiasing) + + @property + def clean_commands(self) -> list[str]: + """The processes which will be ignored when checking whether a tab can be closed without showing a prompt. + """ + return self.xa_elem.cleanCommands() + + @clean_commands.setter + def clean_commands(self, clean_commands: list[str]): + self.set_property("cleanCommands", clean_commands) + + @property + def title_displays_device_name(self) -> bool: + """Whether the title contains the device name. + """ + return self.xa_elem.titleDisplaysDeviceName() + + @title_displays_device_name.setter + def title_displays_device_name(self, title_displays_device_name: bool): + self.set_property("titleDisplaysDeviceName", title_displays_device_name) + + @property + def title_displays_shell_path(self) -> bool: + """Whether the title contains the shell path. + """ + return self.xa_elem.titleDisplaysShellPath() + + @title_displays_shell_path.setter + def title_displays_shell_path(self, title_displays_shell_path: bool): + self.set_property("titleDisplaysShellPath", title_displays_shell_path) + + @property + def title_displays_window_size(self) -> bool: + """Whether the title contains the tab's size, in rows and columns. + """ + return self.xa_elem.titleDisplaysWindowSize() + + @title_displays_window_size.setter + def title_displays_window_size(self, title_displays_window_size: bool): + self.set_property("titleDisplaysWindowSize", title_displays_window_size) + + @property + def title_displays_settings_name(self) -> bool: + """Whether the title contains the settings set name. + """ + return self.xa_elem.titleDisplaysSettingsName() + + @title_displays_settings_name.setter + def title_displays_settings_name(self, title_displays_settings_name: bool): + self.set_property("titleDisplaysSettingsName", title_displays_settings_name) + + @property + def title_displays_custom_title(self) -> bool: + """Whether the title contains a custom title. + """ + return self.xa_elem.titleDisplaysCustomTitle() + + @title_displays_custom_title.setter + def title_displays_custom_title(self, title_displays_custom_title: bool): + self.set_property("titleDisplaysCustomTitle", title_displays_custom_title) + + @property + def custom_title(self) -> str: + """The tab's custom title. + """ + return self.xa_elem.customTitle() + + @custom_title.setter + def custom_title(self, custom_title: str): + self.set_property("customTitle", custom_title) + +
[docs] def get_clipboard_representation(self) -> str: + """Gets a clipboard-codable representation of the settings set. + + When the clipboard content is set to a settings set, the setting set's name is added to the clipboard. + + :return: The setting set's name + :rtype: str + + .. versionadded:: 0.0.8 + """ + return self.name
+ + def __repr__(self): + return "<" + str(type(self)) + self.name + ">"
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/TextEdit.html b/docs/_modules/PyXA/apps/TextEdit.html new file mode 100644 index 0000000..6b9101d --- /dev/null +++ b/docs/_modules/PyXA/apps/TextEdit.html @@ -0,0 +1,651 @@ + + + + + + PyXA.apps.TextEdit — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.TextEdit

+""".. versionadded:: 0.0.1
+
+Control the macOS TextEdit application using JXA-like syntax.
+"""
+
+from time import sleep
+from typing import Any, Union, Self
+
+import AppKit
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+from ..XAProtocols import XACanOpenPath, XACanPrintPath, XAClipboardCodable, XACloseable, XAPrintable
+
+
[docs]class XATextEditApplication(XABaseScriptable.XASBApplication, XACanOpenPath, XACanPrintPath): + """A class for managing and interacting with TextEdit.app. + + .. versionadded:: 0.0.1 + """ + + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XATextEditWindow + + @property + def frontmost(self) -> bool: + """Whether TextEdit is the active application. + """ + return self.xa_scel.frontmost() + + @frontmost.setter + def frontmost(self, frontmost: bool): + self.set_property("frontmost", frontmost) + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def version(self) -> str: + """The version of the TextEdit application. + """ + return self.xa_scel.version() + +
[docs] def open(self, path: str) -> 'XATextEditDocument': + super().open(path) + return self.front_window.document
+ +
[docs] def print(self, file: Union[str, AppKit.NSURL, 'XATextEditDocument'], print_properties: dict = None, show_prompt: bool = True): + """Prints a TextEdit document. + + :param file: The document or path to a document to print + :type file: Union[str, AppKit.NSURL, XATextEditDocument] + :param print_properties: Settings to print with or to preset in the print dialog, defaults to None + :type print_properties: dict, optional + :param show_prompt: Whether to show the print dialog, defaults to True + :type show_prompt: bool, optional + + :Example 1: Printing a document with print properties + + >>> import PyXA + >>> from datetime import datetime, timedelta + >>> app = PyXA.Application("TextEdit") + >>> doc = app.documents()[0] + >>> print_time = datetime.now() + timedelta(minutes=1) + >>> properties = { + >>> "copies": 3, + >>> "collating": False, + >>> "startingPage": 1, + >>> "endingPage": 10, + >>> "pagesAcross": 3, + >>> "pagesDown": 3, + >>> "requestedPrintTime": print_time, + >>> "errorHandling": app.PrintErrorHandling.DETAILED.value, + >>> "faxNumber": "", + >>> "targetPrinter": "" + >>> } + >>> app.print(doc, print_properties=properties) + + .. versionadded:: 0.0.3 + """ + if isinstance(file, str): + file = AppKit.NSURL.alloc().initFileURLWithPath_(file) + elif isinstance(file, XATextEditDocument): + file = file.path.xa_elem + self.xa_scel.print_printDialog_withProperties_(file, show_prompt, print_properties)
+ +
[docs] def documents(self, filter: dict = None) -> 'XATextEditDocumentList': + """Returns a list of documents matching the filter. + + :param filter: A dictionary specifying property-value pairs that all returned documents will have + :type filter: dict + :return: The list of documents + :rtype: list[XATextEditDocument] + + :Example 1: Listing all documents + + >>> import PyXA + >>> app = PyXA.Application("TextEdit") + >>> print(list(app.documents())) + [<<class 'PyXA.apps.TextEdit.XATextEditDocument'>Current Document.txt>, <<class 'PyXA.apps.TextEdit.XATextEditDocument'>Another Document.txt>, ...] + + :Example 2: List documents after applying a filter + + >>> import PyXA + >>> app = PyXA.Application("TextEdit") + >>> print(list(app.documents({"name": "Another Document.txt"}))) + [<<class 'PyXA.apps.TextEdit.XATextEditDocument'>Another Document.txt>] + + :Example 3: List all paragraphs, words, and characters in all currently open documents + + >>> import PyXA + >>> app = PyXA.Application("TextEdit") + >>> documents = app.documents() + >>> print("Paragraphs:", documents.paragraphs()) + >>> print("Words:", documents.words()) + >>> print("Characters:", documents.characters()) + Paragraphs: [This is note 1 + , This is note 2 + , This is note 3 + ] + Words: [This, is, note, 1, This, is, note, 2, This, is, note, 3] + Characters: [T, h, i, s, , i, s, , n, o, t, e, , 1, + , T, h, i, s, , i, s, , n, o, t, e, , 2, + , T, h, i, s, , i, s, , n, o, t, e, , 3, + ] + + .. versionchanged:: 0.0.4 + + Now returns an object of :class:`XATextEditDocumentList` instead of a default list. + + .. versionadded:: 0.0.1 + """ + return self._new_element(self.xa_scel.documents(), XATextEditDocumentList, filter)
+ +
[docs] def new_document(self, name: Union[str, None] = "Untitled.txt", text: Union[str, None] = "", location: Union[str, None] = None) -> 'XATextEditDocument': + """Creates a new document with the given name and initializes it with the supplied text. If no location is provided, the document file is created in the user's Documents folder. + + :param name: The name (including file extension) of the document, defaults to "Untitled.txt" + :type name: Union[str, None], optional + :param text: The initial text of the document, defaults to "" + :type text: Union[str, None], optional + :param location: The containing folder of the new document, defaults to None. + :type location: Union[str, None] + :return: A reference to the newly created document. + :rtype: XATextEditDocument + + :Example 1: Create a new document with a name and initial body content + + >>> import PyXA + >>> app = PyXA.Application("TextEdit") + >>> doc = app.new_document("New.txt", "Example text") + >>> print(doc.properties) + { + modified = 0; + name = "New.txt"; + objectClass = "<NSAppleEventDescriptor: 'docu'>"; + path = "/Users/exampleuser/Documents/New.txt"; + text = "Example text"; + } + + .. seealso:: :class:`XATextEditDocument` + + .. versionadded:: 0.0.1 + """ + if location is None: + location = AppKit.NSFileManager.alloc().homeDirectoryForCurrentUser().relativePath() + "/Documents/" + name + else: + if not location.endswith("/"): + location = location + "/" + location = location + name + new_doc = self.make("document", {"name": name, "text": text, "path": location}) + doc = self.documents().push(new_doc) + return doc
+ +
[docs] def make(self, specifier: str, properties: dict): + """Creates a new element of the given specifier class without adding it to any list. + + Use :func:`XABase.XAList.push` to push the element onto a list. + + :param specifier: The classname of the object to create + :type specifier: str + :param properties: The properties to give the object + :type properties: dict + :return: A PyXA wrapped form of the object + :rtype: XABase.XAObject + + :Example 1: Make a new document and push it onto the list of documents + + >>> import PyXA + >>> app = PyXA.Application("TextEdit") + >>> properties = { + >>> "name": "Example.txt", + >>> "path": "/Users/exampleuser/Downloads/Example.txt", + >>> "text": "Some example text" + >>> } + >>> new_doc = app.make("document", properties) + >>> app.documents().push(new_doc) + + .. versionadded:: 0.0.3 + """ + obj = self.xa_scel.classForScriptingClass_(specifier).alloc().initWithProperties_(properties) + + if specifier == "document": + return self._new_element(obj, XATextEditDocument)
+ + + + +
[docs]class XATextEditWindow(XABaseScriptable.XASBWindow, XABaseScriptable.XASBPrintable): + """A class for managing and interacting with TextEdit windows. + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def document(self) -> 'XATextEditDocument': + """The active document. + """ + doc_obj = self.xa_elem.document() + return self._new_element(doc_obj, XATextEditDocument) + + @document.setter + def document(self, document: 'XATextEditDocument'): + self.set_property("document", document.xa_elem) + + @property + def floating(self) -> bool: + """Whether the window floats. + """ + return self.xa_elem.floating() + + @property + def modal(self) -> bool: + """Whether the window is a modal window. + """ + return self.xa_elem.modal() + + @property + def titled(self) -> bool: + """Whether the window has a title bar. + """ + return self.xa_elem.titled()
+ + + +
[docs]class XATextEditDocumentList(XABase.XATextDocumentList, XAClipboardCodable): + """A wrapper around lists of documents that employs fast enumeration techniques. + + All properties of documents can be called as methods on the wrapped list, returning a list containing each document's value for the property. + + .. versionadded:: 0.0.3 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XATextEditDocument) + +
[docs] def properties(self) -> list[dict]: + raw_dicts = list(self.xa_elem.arrayByApplyingSelector_("properties") or []) + return [{ + "modified": raw_dict["modified"], + "name": raw_dict["name"], + "class": "document", + "path": XABase.XAPath(raw_dict["path"]) if raw_dict["path"] is not None else None, + "text": raw_dict["text"] + } for raw_dict in raw_dicts]
+ +
[docs] def path(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("path") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def modified(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("modified") or [])
+ +
[docs] def by_properties(self, properties: dict) -> Union['XABase.XATextDocument', None]: + for document in self.xa_elem: + doc_props = document.properties() + conditions = [ + doc_props["modified"] == properties["modified"], + doc_props["name"] == properties["name"], + doc_props["path"] == (properties["path"].path if isinstance(properties["path"], XABase.XAPath) else properties["path"]), + doc_props["text"] == properties["text"] + ] + if all(conditions): + return self._new_element(document, self.xa_ocls)
+ +
[docs] def by_path(self, path: Union[str, XABase.XAPath]) -> Union['XATextEditDocument', None]: + if isinstance(path, XABase.XAPath): + path = path.path + return self.by_property("path", path)
+ +
[docs] def by_name(self, name: str) -> Union['XATextEditDocument', None]: + return self.by_property("name", name)
+ +
[docs] def by_modified(self, modified: bool) -> Union['XATextEditDocument', None]: + return self.by_property("modified", modified)
+ +
[docs] def prepend(self, text: str) -> 'XATextEditDocumentList': + """Inserts the provided text at the beginning of every document in the list. + + :param text: The text to insert. + :type text: str + :return: A reference to the document object. + :rtype: XATextDocument + + :Example 1: Prepend a string at the beginning of every open document + + >>> import PyXA + >>> app = PyXA.Application("TextEdit") + >>> documents = app.documents() + >>> documents.prepend("-- PyXA Notes --\\n\\n") + + .. seealso:: :func:`append` + + .. versionadded:: 0.0.4 + """ + for doc in self.xa_elem: + old_text = doc.text().get() + doc.setValue_forKey_(text + old_text, "text") + return self
+ +
[docs] def append(self, text: str) -> 'XATextEditDocumentList': + """Appends the provided text to the end of every document in the list. + + :param text: The text to append. + :type text: str + :return: A reference to the document object. + :rtype: XATextDocument + + :Example 1: Append a string at the end of every open document + + >>> import PyXA + >>> app = PyXA.Application("TextEdit") + >>> documents = app.documents() + >>> documents.append("\\n\\n-- End Of Notes --") + + .. seealso:: :func:`prepend` + + .. versionadded:: 0.0.4 + """ + for doc in self.xa_elem: + old_text = doc.text().get() + doc.setValue_forKey_(old_text + text, "text") + return self
+ +
[docs] def reverse(self) -> 'XATextEditDocumentList': + """Reverses the text of every document in the list. + + :return: A reference to the document object. + :rtype: XATextDocument + + :Example 1: Reverse the text of every open document + + >>> import PyXA + >>> app = PyXA.Application("TextEdit") + >>> documents = app.documents() + >>> documents.reverse() + + .. versionadded:: 0.0.4 + """ + for doc in self.xa_elem: + doc.setValue_forKey_(doc.text().get()[::-1], "text") + return self
+ +
[docs] def get_clipboard_representation(self) -> list[Union[str, AppKit.NSURL]]: + """Gets a clipboard-codable representation of each document in the list. + + When the clipboard content is set to a list of documents, each documents's file URL and name are added to the clipboard. + + :return: A list of each document's file URL and name + :rtype: list[Union[str, AppKit.NSURL]] + + .. versionadded:: 0.0.8 + """ + items = [] + texts = self.text() + paths = self.path() + for index, text in enumerate(texts): + items.append(str(text)) + items.append(paths[index].xa_elem) + return items
+ +
[docs] def push(self, *documents: list['XATextEditDocument']) -> Union['XATextEditDocument', list['XATextEditDocument'], None]: + """Appends the document to the list. + + .. versionadded:: 0.1.1 + """ + objects = [] + num_added = 0 + + for document in documents: + len_before = len(self.xa_elem) + self.xa_elem.addObject_(document.xa_elem) + len_after = len(self.xa_elem) + + if len_after == len_before: + # Document wasn't added -- try force-getting the list before adding + self.xa_elem.get().addObject_(document.xa_elem) + + if len_after > len_before: + num_added += 1 + objects.append(self._new_element(self.xa_elem.objectAtIndex_(0).get(), self.xa_ocls)) + + if num_added == 1: + return objects[0] + + if num_added == 0: + return None + + return objects
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XATextEditDocument(XABase.XATextDocument, XAPrintable, XAClipboardCodable, XACloseable): + """A class for managing and interacting with TextEdit documents. + + .. versionchanged:: 0.0.2 + + Added :func:`close`, :func:`save`, and :func:`copy` + + .. versionadded:: 0.0.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the document. + """ + raw_dict = self.xa_elem.properties() + return { + "path": XABase.XAPath(raw_dict["path"]), + "name": raw_dict["name"], + "modified": raw_dict["modified"], + "text": self._new_element(raw_dict["text"], XABase.XAText) + } + + @properties.setter + def properties(self, properties: dict[str, Any]): + if "path" in properties: + path = properties["path"] + if isinstance(path, str): + path = XABase.XAPath(path) + self.set_property("path", path.xa_elem) + + if "name" in properties: + self.set_property("name", properties["name"]) + + if "text" in properties: + # Assume provided text is a string + text = properties["text"] + if isinstance(properties["text"], XABase.XAText): + # Provided text is actually an XAObject + text = text.xa_elem + self.set_property("text", text) + + @property + def path(self) -> XABase.XAPath: + """The path at which the document is stored. + """ + return XABase.XAPath(self.xa_elem.path()) + + @path.setter + def path(self, path: XABase.XAPath): + self.set_property("path", path.xa_elem) + + @property + def name(self) -> str: + """The name of the document, including the file extension. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property("name", name) + + @property + def modified(self) -> bool: + """Whether the document has been modified since the last save. + """ + return self.xa_elem.modified() + +
[docs] def print(self, print_properties: Union[dict, None] = None, show_dialog: bool = True) -> Self: + """Prints the document. + + :param print_properties: Properties to set for printing, defaults to None + :type print_properties: Union[dict, None], optional + :param show_dialog: Whether to show the print dialog, defaults to True + :type show_dialog: bool, optional + :return: The document object + :rtype: Self + + .. versionadded:: 0.0.8 + """ + if print_properties is None: + print_properties = {} + self.xa_elem.print_printDialog_withProperties_(self.xa_elem, show_dialog, print_properties) + return self
+ +
[docs] def save(self, file_path: Union[str, XABase.XAPath, None] = None): + """Saves the document. + + If a file path is provided, TextEdit will attempt to create a new file at the target location and of the specified file extension. If no file path is provided, and the document does not have a current path on the disk, a save dialog for the document will open. + + :param file_path: The path to save the document at, defaults to None + :type file_path: str, optional + + :Example 1: Save all currently open documents + + >>> import PyXA + >>> app = PyXA.Application("TextEdit") + >>> for doc in app.documents(): + >>> doc.save() + + .. versionadded:: 0.0.2 + """ + if file_path is not None: + if isinstance(file_path, str): + file_path = XABase.XAPath(file_path) + self.xa_elem.saveAs_in_(None, file_path.xa_elem) + else: + url = self.path.xa_elem + print(url) + self.xa_elem.saveAs_in_(None, url)
+ +
[docs] def get_clipboard_representation(self) -> list[Union[str, AppKit.NSURL]]: + """Gets a clipboard-codable representation of the document. + + When the clipboard content is set to a document, the documents's file URL and body text are added to the clipboard. + + :return: The document's file URL and body text + :rtype: list[Union[str, AppKit.NSURL]] + + .. versionadded:: 0.0.8 + """ + return [str(self.text), self.path.xa_elem]
+ + def __repr__(self): + try: + return "<" + str(type(self)) + self.name + ">" + except AttributeError: + return "<" + str(type(self)) + str(self.xa_elem) + ">"
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/VLC.html b/docs/_modules/PyXA/apps/VLC.html new file mode 100644 index 0000000..b07dc30 --- /dev/null +++ b/docs/_modules/PyXA/apps/VLC.html @@ -0,0 +1,525 @@ + + + + + + PyXA.apps.VLC — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.VLC

+
+from time import sleep
+from typing import Union
+
+import AppKit
+
+from PyXA import XABase
+from PyXA import XABaseScriptable
+from ..XAProtocols import XACanOpenPath, XACanPrintPath, XAClipboardCodable, XACloseable
+
+
[docs]class XAVLCApplication(XABaseScriptable.XASBApplication, XACanOpenPath, XACanPrintPath): + """VLC's top level scripting object. + + .. versionadded:: 0.0.8 + """ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XAVLCWindow + + # TODO: Update properties to new format + @property + def properties(self) -> dict: + """All properties of the VLC application. + """ + return self.xa_elem.properties() + + @property + def frontmost(self) -> bool: + """Whether VLC is the active application. + """ + return self.xa_scel.frontmost() + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def version(self) -> str: + """The version of VLC.app. + """ + return self.xa_scel.version() + + @property + def audio_desync(self) -> int: + """The audio desynchronization preference from -2147483648 to 2147483647, where 0 is default. + """ + return self.xa_scel.audioDesync() + + @audio_desync.setter + def audio_desync(self, audio_desync: int): + self.set_property("audioDesync", audio_desync) + + @property + def audio_volume(self) -> int: + """The volume of the current playlist item from 0 to 512, where 256 is 100%. + """ + return self.xa_scel.audioVolume() + + @audio_volume.setter + def audio_volume(self, audio_volume: int): + self.set_property("audioVolume", audio_volume) + + @property + def current_time(self) -> int: + """The current time of the current playlist item in seconds. + """ + return self.xa_scel.currentTime() + + @current_time.setter + def current_time(self, current_time: int): + self.set_property("currentTime", current_time) + + @property + def duration_of_current_item(self) -> int: + """The duration of the current playlist item in seconds. + """ + return self.xa_scel.durationOfCurrentItem() + + @property + def fullscreen_mode(self) -> bool: + """Indicates whether fullscreen is enabled or not. + """ + return self.xa_scel.fullscreenMode() + + @fullscreen_mode.setter + def fullscreen_mode(self, fullscreen_mode: bool): + self.set_property("fullscreenMode", fullscreen_mode) + + @property + def muted(self) -> bool: + """Is VLC currently muted? + """ + return self.xa_scel.muted() + + @property + def name_of_current_item(self) -> str: + """Name of the current playlist item. + """ + return self.xa_scel.nameOfCurrentItem() + + @property + def path_of_current_item(self) -> XABase.XAPath: + """Path to the current playlist item. + """ + return XABase.XAPath(self.xa_scel.pathOfCurrentItem()) + + @property + def playback_shows_menu(self) -> bool: + """Indicates whether a DVD menu is currently being shown. + """ + return self.xa_scel.playbackShowsMenu() + + @property + def playing(self) -> bool: + """Is VLC playing an item? + """ + return self.xa_scel.playing() + +
[docs] def open(self, target: Union[XABase.XAURL, XABase.XAPath, str]) -> None: + """Opens the file/website at the given filepath/URL. + + :param target: The path to a file or the URL to a website to open. + :type target: Union[XABase.XAURL, XABase.XAPath, str] + + :Example 1: Open files from file paths + + >>> import PyXA + >>> app = PyXA.Application("VLC") + >>> app.open("/Users/exampleUser/Downloads/Example.avi") + >>> + >>> path = PyXA.XAPath("/Users/exampleUser/Documents/Example.m4v") + >>> app.open(path) + + :Example 2: Open URLs + + >>> import PyXA + >>> app = PyXA.Application("VLC") + >>> app.open("https://upload.wikimedia.org/wikipedia/commons/transcoded/0/0f/Baby_pelican.ogg/Baby_pelican.ogg.mp3") + >>> + >>> url = PyXA.XAURL("https://www.youtube.com/watch?v=e9B3E_DnnWw") + >>> app.open(url) + + .. versionadded:: 0.0.8 + """ + if isinstance(target, str): + if target.startswith("/"): + target = XABase.XAPath(target) + else: + target = XABase.XAURL(target) + self.xa_wksp.openURLs_withAppBundleIdentifier_options_additionalEventParamDescriptor_launchIdentifiers_([target.xa_elem], self.xa_elem.bundleIdentifier(), 0, None, None)
+ +
[docs] def activate_menu_item(self): + """Activates the currently focused menu item. + + .. versionadded:: 0.0.8 + """ + return self.xa_scel.activateMenuItem()
+ +
[docs] def fullscreen(self): + """Toggle between fullscreen and windowed mode. + + .. versionadded:: 0.0.8 + """ + return self.xa_scel.fullscreen()
+ +
[docs] def get_url(self, url: Union[XABase.XAURL, XABase.XAPath, str]): + """Get a URL without playing it. + + .. versionadded:: 0.0.8 + """ + self.open(url) + sleep(0.01) + self.stop()
+ +
[docs] def move_menu_focus_down(self): + """Moves the menu focus down. + + .. versionadded:: 0.0.8 + """ + return self.xa_scel.moveMenuFocusDown()
+ +
[docs] def move_menu_focus_left(self): + """Moves the menu focus to the left. + + .. versionadded:: 0.0.8 + """ + return self.xa_scel.moveMenuFocusLeft()
+ +
[docs] def move_menu_focus_right(self): + """Moves the menu focus to the right. + + .. versionadded:: 0.0.8 + """ + return self.xa_scel.moveMenuFocusRight()
+ +
[docs] def move_menu_focus_up(self): + """Moves the menu focus up. + + .. versionadded:: 0.0.8 + """ + return self.xa_scel.moveMenuFocusUp()
+ +
[docs] def mute(self): + """Mute the audio of the item or unmute it if it was muted. + + .. versionadded:: 0.0.8 + """ + return self.xa_scel.mute()
+ +
[docs] def next(self): + """Go to the next item in the playlist or the next chapter in the DVD/VCD. + + .. versionadded:: 0.0.8 + """ + return self.xa_scel.next()
+ +
[docs] def open_url(self, url: Union[XABase.XAURL, XABase.XAPath, str]): + """Open a media URL. + + .. versionadded:: 0.0.8 + """ + self.open(url)
+ +
[docs] def play(self): + """Start playing the current playlistitem or pause it when it is already playing. + + .. versionadded:: 0.0.8 + """ + return self.xa_scel.play()
+ +
[docs] def previous(self): + """Go to the previous item in the playlist or the previous chapter in the DVD/VCD. + + .. versionadded:: 0.0.8 + """ + return self.xa_scel.previous()
+ +
[docs] def step_backward(self): + """Step the current playlist item backward the specified step width (default is 2) (1=extraShort, 2=short, 3=medium, 4=long). + + .. versionadded:: 0.0.8 + """ + return self.xa_scel.stepBackward()
+ +
[docs] def step_forward(self): + """Step the current playlist item forward the specified step width (default is 2) (1=extraShort, 2=short, 3=medium, 4=long). + + .. versionadded:: 0.0.8 + """ + return self.xa_scel.stepForward()
+ +
[docs] def stop(self): + """Stop playing the current playlist item. + + .. versionadded:: 0.0.8 + """ + return self.xa_scel.stop()
+ +
[docs] def volume_down(self): + """Bring the volume down by one step. There are 32 steps from 0 to 400% volume. + + .. versionadded:: 0.0.8 + """ + return self.xa_scel.volumeDown()
+ +
[docs] def volume_up(self): + """Bring the volume up by one step. There are 32 steps from 0 to 400% volume. + + .. versionadded:: 0.0.8 + """ + return self.xa_scel.volumeUp()
+ +
[docs] def documents(self, filter: Union[dict, None] = None) -> 'XAVLCDocumentList': + """Returns a list of documents, as PyXA objects, matching the given filter. + + :param filter: Keys and values to filter documents by, defaults to None + :type filter: dict, optional + :return: A PyXA list object wrapping a list of documents + :rtype: XAVLCDocumentList + + .. versionadded:: 0.0.8 + """ + return self._new_element(self.xa_scel.documents(), XAVLCDocumentList, filter)
+ +
[docs] def make(self, specifier: str, properties: dict): + """Creates a new element of the given specifier class without adding it to any list. + + .. versionadded:: 0.0.9 + """ + obj = self.xa_scel.classForScriptingClass_(specifier).alloc().initWithProperties_(properties) + + if specifier == "document": + return self._new_element(obj, XAVLCDocument)
+ + + +
[docs]class XAVLCDocumentList(XABase.XAList, XACloseable, XAClipboardCodable): + """A wrapper around a list of documents. + + .. versionadded:: 0.0.8 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, XAVLCDocument, filter) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def modified(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("modified") or [])
+ +
[docs] def path(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("path") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def by_name(self, name: str) -> Union['XAVLCDocument', None]: + return self.by_property("name", name)
+ +
[docs] def by_modified(self, modified: bool) -> Union['XAVLCDocument', None]: + return self.by_property("modified", modified)
+ +
[docs] def by_path(self, path: Union[str, XABase.XAPath]) -> Union['XAVLCDocument', None]: + if isinstance(path, str): + path = XABase.XAPath(path) + return self.by_property("path", path.xa_elem)
+ +
[docs] def get_clipboard_representation(self) -> list[str]: + """Gets a clipboard-codable representation of each document in the list. + + When the clipboard content is set to a list of documents, the name of each document is added to the clipboard. + + :return: A list of document names + :rtype: list[str] + + .. versionadded:: 0.0.8 + """ + return self.name()
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAVLCDocument(XABase.XAObject): + """A document open in VLC.app. + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the document. + """ + return self.xa_elem.properties() + + @property + def modified(self) -> bool: + """Has the document been modified since the last save? + """ + return self.xa_elem.modified() + + @property + def name(self) -> str: + """The document's name. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property("name", name) + + @property + def path(self) -> XABase.XAPath: + """The document's path. + """ + return XABase.XAPath(self.xa_elem.path()) + + @path.setter + def path(self, path: Union[str, XABase.XAPath]): + if isinstance(path, str): + path = XABase.XAPath(path) + self.set_property("path", path.xa_elem) + + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAVLCWindow(XABaseScriptable.XASBWindow): + """A window of VLC.app. + + .. versionadded:: 0.0.8 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def document(self) -> XAVLCDocument: + """The document whose contents are being displayed in the window. + """ + return self.xa_elem.document() + + @document.setter + def document(self, document: XAVLCDocument): + self.set_property("document", document.xa_elem) + + @property + def floating(self) -> bool: + """Whether the window floats. + """ + return self.xa_elem.floating() + + @property + def modal(self) -> bool: + """Whether the window is the application's current modal window. + """ + return self.xa_elem.modal() + + @property + def titled(self) -> bool: + """Whether the window has a title bar. + """ + return self.xa_elem.titled()
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/iTerm.html b/docs/_modules/PyXA/apps/iTerm.html new file mode 100644 index 0000000..bda6475 --- /dev/null +++ b/docs/_modules/PyXA/apps/iTerm.html @@ -0,0 +1,835 @@ + + + + + + PyXA.apps.iTerm — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for PyXA.apps.iTerm

+""".. versionadded:: 0.1.0
+
+Control iTerm using JXA-like syntax.
+"""
+
+from typing import Union
+
+import AppKit
+from PyXA import XABaseScriptable, XABase
+from PyXA.XAProtocols import XACloseable, XADeletable, XAPrintable, XASelectable
+
+
[docs]class XAiTermApplication(XABaseScriptable.XASBApplication): + """A class for managing and interacting with iTerm.app. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XAiTermWindow + + @property + def current_window(self) -> 'XAiTermWindow': + """The frontmost window. + """ + return self._new_element(self.xa_scel.current_window(), XAiTermWindow) + + @current_window.setter + def current_window(self, current_window: 'XAiTermWindow'): + self.set_property('currentWindow', current_window.xa_elem) + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether iTerm is the active application. + """ + return self.xa_scel.frontmost() + + @property + def version(self) -> str: + """The version of iTerm.app. + """ + return self.xa_scel.version() + +
[docs] def create_window(self, profile: Union[str, None] = None, command: Union[str, None] = None) -> 'XAiTermWindow': + """Creates a new window with the given profile, executing the specified command upon the window's creation. + + :param profile: The profile to initialize the window with, defaults to None (default profile) + :type profile: Union[str, None], optional + :param command: The command to execute, defaults to None + :type command: Union[str, None], optional + :return: The newly created window object + :rtype: XAiTermWindow + + .. versionadded:: 0.1.0 + """ + if profile is None: + window = self.xa_scel.createWindowWithDefaultProfileCommand_(command) + else: + window = self.xa_scel.createWindowWithProfile_command_(profile, command) + return self._new_element(window, XAiTermWindow)
+ +
[docs] def create_hotkey_window(self, profile: Union[str, None] = None) -> 'XAiTermHotkeyWindow': + """Creates a new hotkey window with the given profile. + + :param profile: The profile to initialize the window with, defaults to None + :type profile: Union[str, None], optional + :return: The newly created hotkey window object + :rtype: XAiTermHotkeyWindow + + .. versionadded:: 0.1.0 + """ + window = self.xa_scel.createHotkeyWindowWithProfile_(profile) + return self._new_element(window, XAiTermHotkeyWindow)
+ + + +
[docs] def launch_api_script(self, script_name: str, arguments: Union[list[str], None] = None): + """Launches an API script by name, providing it with the given arguments. + + :param script_name: The name of the script to launch + :type script_name: str + :param arguments: The arguments to pass to the script, defaults to None + :type arguments: Union[list[str], None], optional + + .. versionadded:: 0.1.0 + """ + if arguments is None: + arguments = [] + self.xa_scel.launchAPIScriptNamed_arguments_(script_name, arguments)
+ +
[docs] def invoke_api_expression(self, expression: str): + """Invokes an expression, such as a registered function. + + :param expression: The expression to invoke + :type expression: str + + .. versionadded:: 0.1.0 + """ + self.xa_scel.invokeAPIExpression_(expression)
+ + + + +
[docs]class XAiTermWindow(XABaseScriptable.XASBWindow, XABase.XAObject, XASelectable, XACloseable): + """A window of iTerm.app. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + if self.is_hotkey_window: + self.__class__ = XAiTermHotkeyWindow + + @property + def alternate_identifier(self) -> str: + """The alternate unique identifier of the session. + """ + return self.xa_elem.alternateIdentifier() + + @property + def frontmost(self) -> bool: + """Whether the window is currently the frontmost iTerm window. + """ + return self.xa_elem.frontmost() + + @frontmost.setter + def frontmost(self, frontmost: bool): + self.set_property('frontmost', frontmost) + + @property + def current_tab(self) -> 'XAiTermTab': + """The currently selected tab. + """ + return self._new_element(self.xa_elem.currentTab(), XAiTermTab) + + @current_tab.setter + def current_tab(self, current_tab: 'XAiTermTab'): + self.set_property('currentTab', current_tab.xa_elem) + + @property + def current_session(self) -> 'XAiTermSession': + """The current session in a window. + """ + return self._new_element(self.xa_elem.currentSession(), XAiTermSession) + + @current_session.setter + def current_session(self, current_session: 'XAiTermSession'): + self.set_property('currentSession', current_session.xa_elem) + + @property + def is_hotkey_window(self) -> bool: + """Whether the window is a hotkey window. + """ + return self.xa_elem.isHotkeyWindow() + + @is_hotkey_window.setter + def is_hotkey_window(self, is_hotkey_window: bool): + self.set_property('isHotkeyWindow', is_hotkey_window) + + @property + def hotkey_window_profile(self) -> str: + """If the window is a hotkey window, this gives the name of the profile that created the window. + """ + return self.xa_elem.hotkeyWindowProfile() + + @hotkey_window_profile.setter + def hotkey_window_profile(self, hotkey_window_profile: str): + self.set_property('hotkeyWindowProfile', hotkey_window_profile) + + @property + def position(self) -> tuple[int, int]: + """The position of the window, relative to the upper left corner of the screen. + """ + return self.xa_elem.position() + + @position.setter + def position(self, position: tuple[int, int]): + self.set_property('position', position) + +
[docs] def create_tab(self, profile: Union[str, None] = None, command: Union[str, None] = None): + """Creates a new tab with the given profile, executing the specified command upon the tab's creation. + + :param profile: The name of the profile to assign to the tab, if any, defaults to None (default profile) + :type profile: Union[str, None], optional + :param command: The command to run in the tab, if any, defaults to None + :type command: Union[str, None], optional + """ + if profile is None: + self.xa_elem.createTabWithDefaultProfileCommand_(command) + else: + self.xa_elem.createTabWithProfile_command_(profile, command)
+ +
[docs] def close(self): + """Closes the window. + + .. versionadded:: 0.1.0 + """ + self.xa_elem.close()
+ + + + +
[docs]class XAiTermHotkeyWindow(XAiTermWindow): + """A hotkey window of iTerm.app. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + +
[docs] def reveal_hotkey_window(self): + """Reveals the hotkey window. + + .. versionadded:: 0.1.0 + """ + self.xa_elem.revealHotkeyWindow()
+ +
[docs] def hide_hotkey_window(self): + """Hides the hotkey window. + + .. versionadded:: 0.1.0 + """ + self.xa_elem.hideHotkeyWindow()
+ +
[docs] def toggle_hotkey_window(self): + """Toggles the hotkey window. + + .. versionadded:: 0.1.0 + """ + self.xa_elem.toggleHotkeyWindow()
+ + + + +
[docs]class XAiTermTab(XABase.XAObject, XACloseable, XASelectable): + """A tab of iTerm.app. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def current_session(self) -> 'XAiTermSession': + """The current session in a tab. + """ + return self._new_element(self.xa_elem.currentSession(), XAiTermSession) + + @current_session.setter + def current_session(self, current_session: 'XAiTermSession'): + self.set_property('currentSession', current_session.xa_elem) + + @property + def index(self) -> int: + """Index of tab in parent tab view control. + """ + return self.xa_elem.index() + + @index.setter + def index(self, index: int): + self.set_property('index', index) + +
[docs] def close(self): + """Closes the tab. + + .. versionadded:: 0.1.0 + """ + self.xa_elem.close()
+ +
[docs] def move_to(self, window: XAiTermWindow): + self.xa_elem.moveTo_(window.xa_elem)
+ + + + +
[docs]class XAiTermSession(XABase.XAObject, XACloseable, XASelectable): + """A session of iTerm.app. + + .. versionadded:: 0.1.0 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def id(self) -> str: + """The unique identifier of the session. + """ + return self.xa_elem.id() + + @property + def is_processing(self) -> bool: + """Whether the session is currently processing. + """ + return self.xa_elem.isProcessing() + + @is_processing.setter + def is_processing(self, is_processing: bool): + self.set_property('isProcessing', is_processing) + + @property + def is_at_shell_prompt(self) -> bool: + """Whether the terminal is at the shell prompt. + """ + return self.xa_elem.isAtShellPrompt() + + @is_at_shell_prompt.setter + def is_at_shell_prompt(self, is_at_shell_prompt: bool): + self.set_property('isAtShellPrompt', is_at_shell_prompt) + + @property + def columns(self) -> int: + """The number of columns in the terminal window. + """ + return self.xa_elem.columns() + + @columns.setter + def columns(self, columns: int): + self.set_property('columns', columns) + + @property + def rows(self) -> int: + """The number of rows in the terminal window. + """ + return self.xa_elem.rows() + + @rows.setter + def rows(self, rows: int): + self.set_property('rows', rows) + + @property + def tty(self) -> str: + """The current TTY. + """ + return self.xa_elem.tty() + + @property + def contents(self) -> str: + """The currently visible contents of the session. + """ + return self.xa_elem.contents() + + @contents.setter + def contents(self, contents: str): + self.set_property('contents', contents) + + @property + def text(self) -> str: + """The currently visible contents of the session. + """ + return self.xa_elem.text() + + @property + def color_preset(self) -> str: + """The color preset of the session. + """ + return self.xa_elem.colorPreset() + + @color_preset.setter + def color_preset(self, color_preset: str): + self.set_property('colorPreset', color_preset) + + @property + def background_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.backgroundColor()) + + @background_color.setter + def background_color(self, background_color: XABase.XAColor): + self.set_property('backgroundColor', background_color.xa_elem) + + @property + def bold_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.boldColor()) + + @bold_color.setter + def bold_color(self, bold_color: XABase.XAColor): + self.set_property('boldColor', bold_color.xa_elem) + + @property + def cursor_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.cursorColor()) + + @cursor_color.setter + def cursor_color(self, cursor_color: XABase.XAColor): + self.set_property('cursorColor', cursor_color.xa_elem) + + @property + def cursor_text_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.cursorTextColor()) + + @cursor_text_color.setter + def cursor_text_color(self, cursor_text_color: XABase.XAColor): + self.set_property('cursorTextColor', cursor_text_color.xa_elem) + + @property + def foreground_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.foregroundColor()) + + @foreground_color.setter + def foreground_color(self, foreground_color: XABase.XAColor): + self.set_property('foregroundColor', foreground_color.xa_elem) + + @property + def selected_text_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.selectedTextColor()) + + @selected_text_color.setter + def selected_text_color(self, selected_text_color: XABase.XAColor): + self.set_property('selectedTextColor', selected_text_color.xa_elem) + + @property + def selection_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.selectionColor()) + + @selection_color.setter + def selection_color(self, selection_color: XABase.XAColor): + self.set_property('selectionColor', selection_color.xa_elem) + + @property + def ansi_black_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.ANSIBlackColor()) + + @ansi_black_color.setter + def ansi_black_color(self, ansi_black_color: XABase.XAColor): + self.set_property('ANSIBlackColor', ansi_black_color.xa_elem) + + @property + def ansi_red_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.ANSIRedColor()) + + @ansi_red_color.setter + def ansi_black_color(self, ansi_red_color: XABase.XAColor): + self.set_property('ANSIRedColor', ansi_red_color.xa_elem) + + @property + def ansi_green_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.ANSIGreenColor()) + + @ansi_green_color.setter + def ansi_green_color(self, ansi_green_color: XABase.XAColor): + self.set_property('ANSIGreenColor', ansi_green_color.xa_elem) + + @property + def ansi_yellow_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.ANSIYellowColor()) + + @ansi_yellow_color.setter + def ansi_yellow_color(self, ansi_yellow_color: XABase.XAColor): + self.set_property('ANSIYellowColor', ansi_yellow_color.xa_elem) + + @property + def ansi_blue_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.ANSIBlueColor()) + + @ansi_blue_color.setter + def ansi_blue_color(self, ansi_blue_color: XABase.XAColor): + self.set_property('ANSIBlueColor', ansi_blue_color.xa_elem) + + @property + def ansi_magenta_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.ANSIMagentaColor()) + + @ansi_magenta_color.setter + def ansi_magenta_color(self, ansi_magenta_color: XABase.XAColor): + self.set_property('ANSIMagentaColor', ansi_magenta_color.xa_elem) + + @property + def ansi_cyan_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.ANSICyanColor()) + + @ansi_cyan_color.setter + def ansi_cyan_color(self, ansi_cyan_color: XABase.XAColor): + self.set_property('ANSICyanColor', ansi_cyan_color.xa_elem) + + @property + def ansi_white_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.ANSIWhiteColor()) + + @ansi_white_color.setter + def ansi_white_color(self, ansi_white_color: XABase.XAColor): + self.set_property('ANSIWhiteColor', ansi_white_color.xa_elem) + + @property + def ansi_bright_black_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.ANSIBrightBlackColor()) + + @ansi_bright_black_color.setter + def ansi_bright_black_color(self, ansi_bright_black_color: XABase.XAColor): + self.set_property('ANSIBrightBlackColor', ansi_bright_black_color.xa_elem) + + @property + def ansi_bright_red_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.ANSIBrightRedColor()) + + @ansi_bright_red_color.setter + def ansi_bright_red_color(self, ansi_bright_red_color: XABase.XAColor): + self.set_property('ANSIBrightRedColor', ansi_bright_red_color.xa_elem) + + @property + def ansi_bright_green_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.ANSIBrightGreenColor()) + + @ansi_bright_green_color.setter + def ansi_bright_green_color(self, ansi_bright_green_color: XABase.XAColor): + self.set_property('ANSIBrightGreenColor', ansi_bright_green_color.xa_elem) + + @property + def ansi_bright_yellow_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.ANSIBrightYellowColor()) + + @ansi_bright_yellow_color.setter + def ansi_bright_yellow_color(self, ansi_bright_yellow_color: XABase.XAColor): + self.set_property('ANSIBrightYellowColor', ansi_bright_yellow_color.xa_elem) + + @property + def ansi_bright_blue_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.ANSIBrightBlueColor()) + + @ansi_bright_blue_color.setter + def ansi_bright_blue_color(self, ansi_bright_blue_color: XABase.XAColor): + self.set_property('ANSIBrightBlueColor', ansi_bright_blue_color.xa_elem) + + @property + def ansi_bright_magenta_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.ANSIBrightMagentaColor()) + + @ansi_bright_magenta_color.setter + def ansi_bright_magenta_color(self, ansi_bright_magenta_color: XABase.XAColor): + self.set_property('ANSIBrightMagentaColor', ansi_bright_magenta_color.xa_elem) + + @property + def ansi_bright_cyan_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.ANSIBrightCyanColor()) + + @ansi_bright_cyan_color.setter + def ansi_bright_cyan_color(self, ansi_bright_cyan_color: XABase.XAColor): + self.set_property('ANSIBrightCyanColor', ansi_bright_cyan_color.xa_elem) + + @property + def ansi_bright_white_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.ANSIBrightWhiteColor()) + + @ansi_bright_white_color.setter + def ansi_bright_white_color(self, ansi_bright_white_color: XABase.XAColor): + self.set_property('ANSIBrightWhiteColor', ansi_bright_white_color.xa_elem) + + @property + def underline_color(self) -> XABase.XAColor: + return XABase.XAColor(self.xa_elem.underlineColor()) + + @underline_color.setter + def underline_color(self, underline_color: XABase.XAColor): + self.set_property('underlineColor', underline_color.xa_elem) + + @property + def use_underline_color(self) -> bool: + """Whether to use a dedicated color for underlining. + """ + return self.xa_elem.useUnderlineColor() + + @use_underline_color.setter + def use_underline_color(self, use_underline_color: bool): + self.set_property('useUnderlineColor', use_underline_color) + + @property + def background_image(self) -> str: + """The path of the background image file. + """ + return self.xa_elem.backgroundImage() + + @background_image.setter + def background_image(self, background_image: str): + self.set_property('backgroundImage', background_image) + + @property + def name(self) -> str: + """The name of the session. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def transparency(self) -> float: + """The transparency of the session window. + """ + return self.xa_elem.transparency() + + @transparency.setter + def transparency(self, transparency: float): + self.set_property('transparency', transparency) + + @property + def unique_id(self) -> str: + """The unique identifier of the session. + """ + return self.xa_elem.uniqueID() + + @property + def profile_name(self) -> str: + """The session's profile name. + """ + return self.xa_elem.profileName() + + @property + def answerback_string(self) -> str: + """ENQ Answerback string. + """ + return self.xa_elem.answerbackString() + + @answerback_string.setter + def answerback_string(self, answerback_string: str): + self.set_property('answerbackString', answerback_string) + +
[docs] def split_vertically(self, profile: Union[str, None] = None, command: Union[str, None] = None): + """Splits the session vertically, instantiating a new session with the specified profile. + + :param profile: The profile to instantiate the new session with, defaults to None (current profile) + :type profile: Union[str, None], optional + :param command: The command to run in the newly created session upon its creation, defaults to None + :type command: Union[str, None], optional + + .. versionadded:: 0.1.0 + """ + if profile is None: + self.xa_elem.splitVerticallyWithSameProfileCommand_(command) + else: + self.xa_elem.splitVerticallyWithProfile_command_(profile, command)
+ +
[docs] def split_vertically_with_default_profile(self, command: Union[str, None]): + """Splits the session vertically, instantiating a new session with the default profile. + + :param command: The command to run in the newly created session upon its creation, defaults to None + :type command: Union[str, None] + + .. versionadded:: 0.1.0 + """ + self.xa_elem.splitVerticallyWithDefaultProfileCommand_(command)
+ +
[docs] def split_horizontally(self, profile: Union[str, None] = None, command: Union[str, None] = None): + """Splits the session horizontally, instantiating a new session with the specified profile. + + :param profile: The profile to instantiate the new session with, defaults to None (current profile) + :type profile: Union[str, None], optional + :param command: The command to run in the newly created session upon its creation, defaults to None + :type command: Union[str, None], optional + + .. versionadded:: 0.1.0 + """ + if profile is None: + self.xa_elem.splitHorizontallyWithSameProfileCommand_(command) + else: + self.xa_elem.splitHorizontallyWithProfile_command_(profile, command)
+ +
[docs] def split_horizontally_with_default_profile(self, command: Union[str, None] = None): + """Splits the session horizontally, instantiating a new session with the default profile. + + :param command: The command to run in the newly created session upon its creation, defaults to None + :type command: Union[str, None] + + .. versionadded:: 0.1.0 + """ + self.xa_elem.splitHorizontallyWithDefaultProfileCommand_(command)
+ +
[docs] def variable(self, variable_name: str) -> str: + """Returns the value of a session variable with the given name. + + :param variable_name: The name of the variable to retrieve the value on + :type variable_name: str + :return: The value of the variable + :rtype: str + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.variableNamed_(variable_name)
+ +
[docs] def set_variable(self, variable_name: str, value: str) -> str: + """Sets the value of a session variable. + + :param variable_name: The name of the variable to set + :type variable_name: str + :param value: The value to give the variable + :type value: str + :return: The new value of the variable + :rtype: str + + .. versionadded:: 0.1.0 + """ + return self.xa_elem.setVariableNamed_to_(variable_name, value)
+ +
[docs] def write(self, text: Union[str, None] = None, file: Union[XABase.XAPath, str, None] = None, add_newline: bool = True): + """Writes a string or file contents to the session. + + :param text: The text to input into the session, defaults to None + :type text: Union[str, None], optional + :param file: The file whose contents to input into the session, defaults to None + :type file: Union[XABase.XAPath, str, None], optional + :param add_newline: Whether to add a new line after inputting the specified content, defaults to True + :type add_newline: bool, optional + + .. versionadded:: 0.1.0 + """ + if isinstance(file, str): + file = XABase.XAPath(str) + + if file is None: + self.xa_elem.writeContentsOfFile_text_newline_(None, text, add_newline) + else: + self.xa_elem.writeContentsOfFile_text_newline_(file.xa_elem, text, add_newline)
+ +
[docs] def close(self): + """Closes the session. + + .. versionadded:: 0.1.0 + """ + self.xa_elem.close()
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/PyXA/apps/iWorkApplicationBase.html b/docs/_modules/PyXA/apps/iWorkApplicationBase.html new file mode 100644 index 0000000..95b4514 --- /dev/null +++ b/docs/_modules/PyXA/apps/iWorkApplicationBase.html @@ -0,0 +1,2909 @@ + + + + + + PyXA.apps.iWorkApplicationBase — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for PyXA.apps.iWorkApplicationBase

+""".. versionadded:: 0.1.1
+
+Control iWork applications using JXA-like syntax.
+"""
+from datetime import datetime
+from enum import Enum
+from pprint import pprint
+from time import sleep
+from typing import Any, Union, Self
+
+import AppKit, ScriptingBridge
+
+from PyXA import XABase
+from PyXA import XAEvents
+from PyXA.XABase import OSType
+from PyXA import XABaseScriptable
+from ..XAProtocols import XACanOpenPath, XACloseable
+
+
[docs]class XAiWorkApplication(XABaseScriptable.XASBApplication, XACanOpenPath): + """A class for managing and interacting with iWork applications. + + .. versionadded:: 0.1.1 + """ +
[docs] class ImageQuality(Enum): + """Options for the quality of exported images. + """ + GOOD = OSType('KnP0') #: Good quality + BETTER = OSType('KnP1') #: Better quality + BEST = OSType('KnP2') #: Best quality
+ +
[docs] class Alignment(Enum): + """Options for the horizontal and vertical alignment of content within table containers. + """ + BOTTOM = OSType('avbt') #: Bottom-align content. + CENTER_VERTICAL = OSType('actr') #: Center-align content. + TOP = OSType('avtp') #: Top-align content. + AUTO = OSType('aaut') #: Auto-align based on content type. + CENTER_HORIZONTAL = OSType('actr') #: Center-align content. + JUSTIFY = OSType('ajst') #: Fully justify (left and right) content. + LEFT = OSType('alft') #: Left-align content. + RIGHT = OSType('arit') #: Right-align content.
+ +
[docs] class SortDirection(Enum): + """Options for the direction of sorting when sorting table cells. + """ + ASCENDING = OSType('ascn') #: Sort in increasing value order + DESCENDING = OSType('dscn') #: Sort in decreasing value order
+ +
[docs] class CellFormat(Enum): + """Options for the format to use when formatting table cells. + """ + AUTO = OSType('faut') #: Automatic format + CHECKBOX = OSType('fcch') #: Checkbox control format (Numbers only) + CURRENCY = OSType('fcur') #: Currency number format + DATE_AND_TIME = OSType('fdtm') #: Date and time format + FRACTION = OSType('ffra') #: Fraction number format + DECIMAL_NUMBER = OSType('nmbr') #: Decimal number format + PERCENT = OSType('fper') #: Percentage number format + POPUP_MENU = OSType('fcpp') #: Pop-up menu control format (Numbers only) + SCIENTIFIC = OSType('fsci') #: Scientific notation format + SLIDER = OSType('fcsl') #: Slider control format (Numbers only) + STEPPER = OSType('fcst') #: Stepper control format (Numbers only) + TEXT = OSType('ctxt') #: Text format + DURATION = OSType('fdur') #: Duration format + RATING = OSType('frat') #: Rating format. (Numbers only) + NUMERAL_SYSTEM = OSType('fcns') #: Numeral System
+ +
[docs] class ChartType(Enum): + """Options for available chart types. + """ + PIE_2D = OSType('pie2') #: Two-dimensional pie chart + VERTICAL_BAR_2D = OSType('vbr2') #: Two-dimensional vertical bar chart + STACKED_VERTICAL_BAR_2D = OSType('svb2') #: Two-dimensional stacked vertical bar chart + HORIZONTAL_BAR_2D = OSType('hbr2') #: Two-dimensional horizontal bar chart + STACKED_HORIZONTAL_BAR_2D = OSType('shb2') #: Two-dimensional stacked horizontal bar chart + PIE_3D = OSType('pie3') #: Three-dimensional pie chart. + VERTICAL_BAR_3D = OSType('vbr3') #: Three-dimensional vertical bar chart + STACKED_VERTICAL_BAR_3D = OSType('svb3') #: Three-dimensional stacked bar chart + HORIZONTAL_BAR_3D = OSType('hbr3') #: Three-dimensional horizontal bar chart + STACKED_HORIZONTAL_BAR_3D = OSType('shb3') #: Three-dimensional stacked horizontal bar chart + AREA_2D = OSType('are2') #: Two-dimensional area chart. + STACKED_AREA_2D = OSType('sar2') #: Two-dimensional stacked area chart + LINE_2D = OSType('lin2') #: Two-dimensional line chart. + LINE_3D = OSType('lin3') #: Three-dimensional line chart + AREA_3D = OSType('are3') #: Three-dimensional area chart + STACKED_AREA_3D = OSType('sar3') #: Three-dimensional stacked area chart + SCATTERPLOT_2D = OSType('scp2') #: Two-dimensional scatterplot chart
+ +
[docs] class ChartGrouping(Enum): + """Options for how data is grouped within a chart. + """ + ROW = OSType('KCgr') #: Group by row + COLUMN = OSType('KCgc') #: Group by column
+ +
[docs] class FillOption(Enum): + """Options for the type of fill to use. + """ + NO_FILL = OSType('fino') + COLOR_FILL = OSType('fico') + GRADIENT_FILL = OSType('figr') + ADVANCED_GRADIENT_FILL = OSType('fiag') + IMAGE_FILL = OSType('fiim') + ADVANCED_IMAGE_FILL = OSType('fiai')
+ +
[docs] class RepetitionMethod(Enum): + """Options for whether and how a clip will repeat. + """ + NONE = OSType('mvrn') #: Clip does not repeat + LOOP = OSType('mvlp') #: Clip repeats sequentially + LOOP_BACK_AND_FORTH = OSType('mvbf') #: Clip boomerangs back and forth repeatedly
+ +
[docs] class KeyAction(Enum): + """Options for key states and interactions. + """ + COMMAND_DOWN = OSType('Kcmd') + CONTROL_DOWN = OSType('Kctl') + OPTION_DOWN = OSType('Kopt') + SHIFT_DOWN = OSType('Ksft')
+ + def __init__(self, properties): + super().__init__(properties) + self.xa_wcls = XAiWorkWindow + + @property + def properties(self) -> dict: + """All properties of the Keynote application. + """ + raw_dict = self.xa_scel.properties() + return { + "frontmost": self.frontmost, + "version": self.version, + "name": self.name, + } + + @property + def name(self) -> str: + """The name of the application. + """ + return self.xa_scel.name() + + @property + def frontmost(self) -> bool: + """Whether this application is the active application. + """ + return self.xa_scel.frontmost() + + @property + def version(self) -> str: + """The application version number. + """ + return self.xa_scel.version() + + @property + def current_document(self) -> 'XAiWorkDocument': + """The current document of the front window. + """ + return self.front_window.document + +
[docs] def print(self, item: Union['XAiWorkDocument', XABaseScriptable.XASBWindow], print_properties: dict = None, show_dialog: bool = True) -> Self: + """Prints a document or window. + + :param item: The document or window to print + :type item: Union[XAiWorkDocument, XABaseScriptable.XASBWindow] + :param print_properties: The settings to pre-populate the print dialog with, defaults to None + :type print_properties: dict, optional + :param show_dialog: Whether to show the print dialog or skip right to printing, defaults to True + :type show_dialog: bool, optional + :return: A reference to the PyXA application object + :rtype: Self + + .. versionadded:: 0.1.1 + """ + if print_properties is None: + print_properties = {} + self.xa_scel.print_withProperties_printDialog_(item.xa_elem, print_properties, show_dialog) + return self
+ +
[docs] def open(self, path: Union[str, XABase.XAPath]) -> 'XAiWorkDocument': + """Opens the file at the given filepath. + + :param target: The path of the file to open. + :type target: Union[str, XABase.XAPath] + :return: A reference to newly created document object + :rtype: XAiWorkDocument + + .. versionadded:: 0.1.1 + """ + if isinstance(path, str): + path = XABase.XAPath(path) + self.xa_wksp.openURLs_withAppBundleIdentifier_options_additionalEventParamDescriptor_launchIdentifiers_([path.xa_elem], self.xa_elem.bundleIdentifier(), 0, None, None) + return self.documents()[0]
+ +
[docs] def set_password(self, document: 'XAiWorkDocument', password: str, hint: str, save_in_keychain: bool = True) -> Self: + """Sets the password of an unencrypted document, optionally storing the password in the user's keychain. + + :param document: The document to set the password for + :type document: XAiWorkDocument + :param password: The password + :type password: str + :param hint: A hint for the password + :type hint: str + :param save_in_keychain: Whether to save the password in the user's keychain, defaults to True + :type save_in_keychain: bool, optional + :return: A reference to the PyXA application object + :rtype: Self + + .. versionadded:: 0.1.1 + """ + self.xa_scel.setPassword_to_hint_savingInKeychain_(password, document.xa_elem, hint, save_in_keychain) + return self
+ +
[docs] def remove_password(self, document: 'XAiWorkDocument', password: str) -> Self: + """Removes the password from a document. + + :param document: The document to remove the password to + :type document: XAiWorkDocument + :param password: The current password + :type password: str + :return: A reference to the PyXA application object + :rtype: Self + + .. versionadded:: 0.1.1 + """ + self.xa_scel.removePassword_from_(password, document.xa_elem) + return self
+ + + + +
[docs]class XAiWorkWindow(XABaseScriptable.XASBWindow, XABaseScriptable.XASBPrintable, XABase.XAObject): + """A window of an iWork application. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAiWorkDocumentList(XABase.XAList): + """A wrapper around lists of themes that employs fast enumeration techniques. + + All properties of themes can be called as methods on the wrapped list, returning a list containing each theme's value for the property. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAiWorkDocumentList + super().__init__(properties, obj_class, filter) + +
[docs] def properties(self) -> list[dict]: + pyxa_dicts = [None] * len(self.xa_elem) + for index, document in enumerate(self.xa_elem): + pyxa_dicts[index] = { + "name": document.name(), + "modified": document.modified(), + "file": XABase.XAPath(document.file()), + "id": document.id(), + } + return pyxa_dicts
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def modified(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("modified") or [])
+ +
[docs] def file(self) -> list[XABase.XAPath]: + ls = self.xa_elem.arrayByApplyingSelector_("file") or [] + return [XABase.XAPath(x) for x in ls]
+ +
[docs] def id(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("id") or [])
+ +
[docs] def selection(self) -> 'XAiWorkiWorkItemList': + ls = self.xa_elem.arrayByApplyingSelector_("selection") or [] + ls = [x for t in ls for x in t] + return self._new_element(ls, XAiWorkiWorkItemList)
+ +
[docs] def password_protected(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("passwordProtected") or [])
+ +
[docs] def by_properties(self, properties: dict) -> Union['XAiWorkDocument', None]: + raw_dict = {} + + if "name" in properties: + raw_dict["name"] = properties["name"] + + if "file" in properties: + if isinstance(properties["file"], str): + raw_dict["file"] = properties["file"] + else: + raw_dict["file"] = properties["file"].xa_elem + + if "slide_numbers_showing" in properties: + raw_dict["slideNumbersShowing"] = properties["slide_numbers_showing"] + + if "document_theme" in properties: + raw_dict["documentTheme"] = properties["document_theme"].xa_elem + + if "auto_loop" in properties: + raw_dict["autoLoop"] = properties["auto_loop"] + + if "auto_play" in properties: + raw_dict["autoPlay"] = properties["auto_play"] + + if "auto_restart" in properties: + raw_dict["autoRestart"] = properties["auto_restart"] + + if "maximum_idle_duration" in properties: + raw_dict["maximumIdleDuration"] = properties["maximum_idle_duration"] + + if "height" in properties: + raw_dict["height"] = properties["height"] + + if "width" in properties: + raw_dict["width"] = properties["width"] + + for document in self.xa_elem: + if all(raw_dict[x] == document.properties()[x] for x in raw_dict): + return self._new_element(document, XAiWorkDocument)
+ +
[docs] def by_name(self, name: str) -> Union['XAiWorkDocument', None]: + return self.by_property("name", name)
+ +
[docs] def by_modified(self, modified: bool) -> Union['XAiWorkDocument', None]: + return self.by_property("modified", modified)
+ +
[docs] def by_file(self, file: Union[str, XABase.XAPath]) -> Union['XAiWorkDocument', None]: + if isinstance(file, XABase.XAPath): + file = file.url + return self.by_property("file", file)
+ +
[docs] def by_id(self, id: str) -> Union['XAiWorkDocument', None]: + return self.by_property("id", id)
+ +
[docs] def by_selection(self, selection: Union['XAiWorkiWorkItemList', list['XAiWorkiWorkItem']]) -> Union['XAiWorkDocument', None]: + if isinstance(selection, list): + selection = [x.xa_elem for x in selection] + elif isinstance(selection, XAiWorkiWorkItemList): + selection = selection.xa_elem + return self.by_property("selection", selection)
+ +
[docs] def by_password_protected(self, password_protected: bool) -> Union['XAiWorkDocument', None]: + return self.by_property("passwordProtected", password_protected)
+ + def __repr__(self): + return f"<{str(type(self))}{self.name()}>"
+ +
[docs]class XAiWorkDocument(XABaseScriptable.XASBPrintable, XACloseable): + """A class for managing and interacting with TextEdit documents. + + .. seealso:: :class:`XAiWorkApplication` + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the document. + """ + pyxa_dict = { + "name": self.xa_elem.name(), + "modified": self.xa_elem.modified(), + "file": XABase.XAPath(self.xa_elem.file()), + "id": self.xa_elem.id(), + } + return pyxa_dict + + @property + def name(self) -> str: + """The name of the document. + """ + return self.xa_elem.name() + + @property + def modified(self) -> bool: + """Whether the document has been modified since its last save. + """ + return self.xa_elem.modified() + + @property + def file(self) -> XABase.XAPath: + """The location of the document on the disk, if one exists. + """ + file = self.xa_elem.file() + if file is not None: + return XABase.XAPath(file) + + @property + def id(self) -> str: + """The unique identifier for the document. + """ + return self.xa_elem.id() + + @property + def selection(self) -> 'XAiWorkiWorkItemList': + """A list of the currently selected items. + """ + return self._new_element(self.xa_elem.selection(), XAiWorkiWorkItemList) + + @selection.setter + def selection(self, selection: Union['XAiWorkiWorkItemList', 'XAiWorkiWorkItem']): + if isinstance(selection, list): + selection = [x.xa_elem for x in selection] + self.set_property('selection', selection) + else: + self.set_property('selection', selection.xa_elem) + + @property + def password_protected(self) -> bool: + """Whether the document is password protected. + """ + return self.xa_elem.passwordProtected() + + def __repr__(self): + return f"<{str(type(self))}{self.name}>"
+ + + + +
[docs]class XAiWorkContainerList(XABase.XAList): + """A wrapper around lists of containers that employs fast enumeration techniques. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAiWorkContainer + super().__init__(properties, obj_class, filter) + + # Specialize to group or specific container type + if self.__class__ == XAiWorkContainerList: + if all([x.parent().get() == None for x in self.xa_elem]): + if hasattr(self, "_xa_ccls"): + new_self = self._new_element(self.xa_elem, self._xa_ccls) + self.__class__ = new_self.__class__ + self.__dict__.update(new_self.__dict__) + + elif all([x.parent().get() != None for x in self.xa_elem]): + new_self = self._new_element(self.xa_elem, XAiWorkGroupList) + self.__class__ = new_self.__class__ + self.__dict__.update(new_self.__dict__) + +
[docs] def charts(self, filter: Union[dict, None] = None) -> 'XAiWorkChartList': + ls = self.xa_elem.arrayByApplyingSelector_("charts") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, XAiWorkChartList, filter)
+ +
[docs] def groups(self, filter: Union[dict, None] = None) -> 'XAiWorkGroupList': + ls = self.xa_elem.arrayByApplyingSelector_("groups") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, XAiWorkGroupList, filter)
+ +
[docs] def images(self, filter: Union[dict, None] = None) -> 'XAiWorkImageList': + ls = self.xa_elem.arrayByApplyingSelector_("images") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, XAiWorkImageList, filter)
+ +
[docs] def iwork_items(self, filter: Union[dict, None] = None) -> 'XAiWorkiWorkItemList': + ls = self.xa_elem.arrayByApplyingSelector_("iWorkItems") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, XAiWorkiWorkItemList, filter)
+ +
[docs] def lines(self, filter: Union[dict, None] = None) -> 'XAiWorkLineList': + ls = self.xa_elem.arrayByApplyingSelector_("lines") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, XAiWorkLineList, filter)
+ +
[docs] def movies(self, filter: Union[dict, None] = None) -> 'XAiWorkMovieList': + ls = self.xa_elem.arrayByApplyingSelector_("movies") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, XAiWorkMovieList, filter)
+ +
[docs] def shapes(self, filter: Union[dict, None] = None) -> 'XAiWorkShapeList': + ls = self.xa_elem.arrayByApplyingSelector_("shapes") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, XAiWorkShapeList, filter)
+ +
[docs] def tables(self, filter: Union[dict, None] = None) -> 'XAiWorkTableList': + ls = self.xa_elem.arrayByApplyingSelector_("tables") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, XAiWorkTableList, filter)
+ +
[docs] def text_items(self, filter: Union[dict, None] = None) -> 'XAiWorkTextItemList': + ls = self.xa_elem.arrayByApplyingSelector_("textItems") or [] + if isinstance(ls[0], ScriptingBridge.SBElementArray): + ls = [x for sublist in ls for x in sublist] + else: + ls = [x for x in ls] + return self._new_element(ls, XAiWorkTableList, filter)
+ + def __repr__(self): + return "<" + str(type(self)) + "length: " + str(len(self.xa_elem)) + ">"
+ +
[docs]class XAiWorkContainer(XABase.XAObject): + """A class for managing and interacting with containers in Keynote. + + .. seealso:: :class:`XAiWorkApplication`, :class:`XAiWorkiWorkItem` + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties): + super().__init__(properties) + + # Specialize to group or specific container type + if self.__class__ == XAiWorkContainer: + if self.xa_elem.baseLayout().get() is not None: + if hasattr(self, "_xa_ccls"): + new_self = self._new_element(self.xa_elem, self._xa_ccls) + self.__class__ = new_self.__class__ + self.__dict__.update(new_self.__dict__) + + elif self.xa_elem.parent().get() is not None: + new_self = self._new_element(self.xa_elem, XAiWorkGroup) + self.__class__ = new_self.__class__ + self.__dict__.update(new_self.__dict__) + +
[docs] def iwork_items(self, filter: Union[dict, None] = None) -> 'XAiWorkiWorkItemList': + """Returns a list of iWork items, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned iWork items will have, or None + :type filter: Union[dict, None] + :return: The list of iWork items + :rtype: XAiWorkiWorkItemList + + .. versionadded:: 0.1.1 + """ + return self._new_element(self.xa_elem.iWorkItems(), XAiWorkiWorkItemList, filter)
+ +
[docs] def audio_clips(self, filter: Union[dict, None] = None) -> 'XAiWorkAudioClipList': + """Returns a list of audio clips, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned audio clips will have, or None + :type filter: Union[dict, None] + :return: The list of audio clips + :rtype: XAiWorkAudioClipList + + .. versionadded:: 0.1.1 + """ + return self._new_element(self.xa_elem.audioClips(), XAiWorkAudioClipList, filter)
+ +
[docs] def charts(self, filter: Union[dict, None] = None) -> 'XAiWorkChartList': + """Returns a list of charts, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned charts will have, or None + :type filter: Union[dict, None] + :return: The list of charts + :rtype: XAiWorkChartList + + .. versionadded:: 0.1.1 + """ + return self._new_element(self.xa_elem.charts(), XAiWorkChartList, filter)
+ +
[docs] def images(self, filter: Union[dict, None] = None) -> 'XAiWorkImageList': + """Returns a list of images, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned images will have, or None + :type filter: Union[dict, None] + :return: The list of images + :rtype: XAiWorkImageList + + .. versionadded:: 0.1.1 + """ + return self._new_element(self.xa_elem.images(), XAiWorkImageList, filter)
+ +
[docs] def groups(self, filter: Union[dict, None] = None) -> 'XAiWorkGroupList': + """Returns a list of groups, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned groups will have, or None + :type filter: Union[dict, None] + :return: The list of groups + :rtype: XAiWorkGroupList + + .. versionadded:: 0.1.1 + """ + return self._new_element(self.xa_elem.groups(), XAiWorkGroupList, filter)
+ +
[docs] def lines(self, filter: Union[dict, None] = None) -> 'XAiWorkLineList': + """Returns a list of lines, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned lines will have, or None + :type filter: Union[dict, None] + :return: The list of lines + :rtype: XAiWorkLineList + + .. versionadded:: 0.1.1 + """ + return self._new_element(self.xa_elem.lines(), XAiWorkLineList, filter)
+ +
[docs] def movies(self, filter: Union[dict, None] = None) -> 'XAiWorkMovieList': + """Returns a list of movies, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned movies will have, or None + :type filter: Union[dict, None] + :return: The list of movies + :rtype: XAiWorkMovieList + + .. versionadded:: 0.1.1 + """ + return self._new_element(self.xa_elem.movies(), XAiWorkMovieList, filter)
+ +
[docs] def shapes(self, filter: Union[dict, None] = None) -> 'XAiWorkShapeList': + """Returns a list of shapes, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned shapes will have, or None + :type filter: Union[dict, None] + :return: The list of shapes + :rtype: XAiWorkShapeList + + .. versionadded:: 0.1.1 + """ + return self._new_element(self.xa_elem.shapes(), XAiWorkShapeList, filter)
+ +
[docs] def tables(self, filter: Union[dict, None] = None) -> 'XAiWorkTableList': + """Returns a list of tables, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned tables will have, or None + :type filter: Union[dict, None] + :return: The list of tables + :rtype: XAiWorkTableList + + .. versionadded:: 0.1.1 + """ + return self._new_element(self.xa_elem.tables(), XAiWorkTableList, filter)
+ +
[docs] def text_items(self, filter: Union[dict, None] = None) -> 'XAiWorkTextItemList': + """Returns a list of text_items, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned text_items will have, or None + :type filter: Union[dict, None] + :return: The list of text_items + :rtype: XAiWorkTextItemList + + .. versionadded:: 0.1.1 + """ + return self._new_element(self.xa_elem.textItems(), XAiWorkTextItemList, filter)
+ + + + +
[docs]class XAiWorkiWorkItemList(XABase.XAList): + """A wrapper around a list of documents. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAiWorkiWorkItem + super().__init__(properties, obj_class, filter) + +
[docs] def properties(self) -> list[dict]: + pyxa_dicts = [None] * len(self.xa_elem) + for index, item in enumerate(self.xa_elem): + pyxa_dicts[index] = { + "parent": self._new_element(item.parent(), XAiWorkiWorkItem), + "locked": item.locked(), + "height": item.height(), + "position": tuple(item.position()), + "width": item.width(), + } + return pyxa_dicts
+ +
[docs] def height(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("height") or [])
+ +
[docs] def locked(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("locked") or [])
+ +
[docs] def width(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("width") or [])
+ +
[docs] def parent(self) -> XAiWorkContainerList: + ls = self.xa_elem.arrayByApplyingSelector_("parent") or [] + return self._new_element(ls, XAiWorkContainerList)
+ +
[docs] def position(self) -> list[tuple[int, int]]: + ls = self.xa_elem.arrayByApplyingSelector_("position") or [] + return [tuple(x.pointValue()) for x in ls]
+ +
[docs] def by_properties(self, properties: dict) -> Union['XAiWorkiWorkItem', None]: + raw_dict = {} + + if "parent" in properties: + raw_dict["parent"] = properties["parent"].xa_elem + + if "locked" in properties: + raw_dict["locked"] = properties["locked"] + + if "height" in properties: + raw_dict["height"] = properties["height"] + + if "position" in properties: + raw_dict["position"] = properties["position"] + + if "width" in properties: + raw_dict["width"] = properties["width"] + + for item in self.xa_elem: + item_properties = item.properties() + if all(item_properties[x] == raw_dict[x] for x in raw_dict): + return self._new_element(item, XAiWorkiWorkItem)
+ +
[docs] def by_height(self, height: int) -> Union['XAiWorkiWorkItem', None]: + return self.by_property("height", height)
+ +
[docs] def by_locked(self, locked: bool) -> Union['XAiWorkiWorkItem', None]: + return self.by_property("locked", locked)
+ +
[docs] def by_width(self, width: int) -> Union['XAiWorkiWorkItem', None]: + return self.by_property("width", width)
+ +
[docs] def by_parent(self, parent: XAiWorkContainer) -> Union['XAiWorkiWorkItem', None]: + return self.by_property("parent", parent.xa_elem)
+ +
[docs] def by_position(self, position: tuple[int, int]) -> Union['XAiWorkiWorkItem', None]: + return self.by_property("position", position)
+ + def __repr__(self): + return "<" + str(type(self)) + "length:" + str(len(self.xa_elem)) + ">"
+ +
[docs]class XAiWorkiWorkItem(XABase.XAObject): + """A class for managing and interacting with text, shapes, images, and other elements in Keynote. + + .. seealso:: :class:`XAiWorkApplication` + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties): + super().__init__(properties) + + if self.__class__ == XAiWorkiWorkItem: + description = self.xa_elem.get().description() + + # Specialize to some iWork Item type + new_self = None + if ": defaultTitleItem" in description or ": defaultBodyItem" in description or ": <class 'sshp'>" in description: + new_self = self._new_element(self.xa_elem, XAiWorkShape) + elif ": <class 'imag'>" in description: + new_self = self._new_element(self.xa_elem, XAiWorkImage) + elif ": <class 'igrp'>" in description: + new_self = self._new_element(self.xa_elem, XAiWorkGroup) + elif ": <class 'shtx'>" in description: + new_self = self._new_element(self.xa_elem, XAiWorkTextItem) + elif ": <class 'NmTb'>" in description: + new_self = self._new_element(self.xa_elem, XAiWorkTable) + elif ": <class 'iWln'>" in description: + new_self = self._new_element(self.xa_elem, XAiWorkLine) + elif ": <class 'shmv'>" in description: + new_self = self._new_element(self.xa_elem, XAiWorkMovie) + elif ": <class 'shau'>" in description: + new_self = self._new_element(self.xa_elem, XAiWorkAudioClip) + elif ": <class 'shct'>" in description: + new_self = self._new_element(self.xa_elem, XAiWorkChart) + + if new_self is not None: + new_self.xa_prnt = self.xa_prnt + self.__class__ = new_self.__class__ + self.__dict__.update(new_self.__dict__) + else: + print(description) + + @property + def height(self) -> int: + """The height of the iWork item. + """ + return self.xa_elem.height() + + @height.setter + def height(self, height: int): + self.set_property('height', height) + + @property + def locked(self) -> bool: + """Whether the object is locked. + """ + return self.xa_elem.locked() + + @locked.setter + def locked(self, locked: bool): + self.set_property('locked', locked) + + @property + def width(self) -> int: + """The width of the iWork item. + """ + return self.xa_elem.width() + + @width.setter + def width(self, width: int): + self.set_property('width', width) + + @property + def parent(self) -> XAiWorkContainer: + """The iWork container that contains the iWork item. + """ + return self._new_element(self.xa_elem.parent(), XAiWorkContainer) + + @property + def position(self) -> tuple[int, int]: + """The horizontal and vertical coordinates of the top left point of the iWork item. + """ + return tuple(self.xa_elem.position()) + + @position.setter + def position(self, position: tuple[int, int]): + self.set_property('position', position) + +
[docs] def delete(self): + """Deletes the item. + + .. versionadded:: 0.1.1 + """ + self.xa_elem.delete()
+ +
[docs] def duplicate(self) -> 'XAiWorkiWorkItem': + """Duplicates the item. + + :return: A reference to the PyXA object that called this method. + :rtype: XAiWorkiWorkItem + + .. versionadded:: 0.1.1 + """ + if isinstance(self.xa_prnt, XAiWorkiWorkItemList): + self.xa_elem.duplicateTo_withProperties_(self.xa_elem.positionAfter(), {}) + else: + self.xa_elem.duplicateTo_withProperties_(self.xa_prnt.xa_elem.iWorkItems(), {}) + return self
+ +
[docs] def resize(self, width: int, height: int) -> 'XAiWorkiWorkItem': + """Sets the width and height of the item. + + :param width: The desired width, in pixels + :type width: int + :param height: The desired height, in pixels + :type height: int + :return: The iWork item + :rtype: XAiWorkiWorkItem + + .. versionadded:: 0.1.1 + """ + self.set_properties({ + "width": width, + "height": height, + }) + return self
+ +
[docs] def lock(self) -> 'XAiWorkiWorkItem': + """Locks the properties of the item, preventing changes. + + :return: The iWork item + :rtype: XAiWorkiWorkItem + + .. versionadded:: 0.1.1 + """ + self.set_property("locked", True) + return self
+ +
[docs] def unlock(self) -> 'XAiWorkiWorkItem': + """Unlocks the properties of the item, allowing changes. + + :return: The iWork item + :rtype: XAiWorkiWorkItem + + .. versionadded:: 0.1.1 + """ + self.set_property("locked", False) + return self
+ +
[docs] def set_position(self, x: int, y: int) -> 'XAiWorkiWorkItem': + position = AppKit.NSValue.valueWithPoint_(AppKit.NSPoint(x, y)) + self.xa_elem.setValue_forKey_(position, "position")
+ + def __repr__(self): + return "<" + str(type(self)) + "position: " + str(self.position) + ">"
+ + + + + +
[docs]class XAiWorkGroupList(XAiWorkContainerList): + """A wrapper around lists of themes that employs fast enumeration techniques. + + All properties of themes can be called as methods on the wrapped list, returning a list containing each theme's value for the property. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAiWorkGroup) + +
[docs] def height(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("height") or [])
+ +
[docs] def position(self) -> list[tuple[int, int]]: + ls = self.xa_elem.arrayByApplyingSelector_("position") or [] + return [tuple(point.pointValue()) for point in ls]
+ +
[docs] def width(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("width") or [])
+ +
[docs] def rotation(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("rotation") or [])
+ +
[docs] def parent(self) -> XAiWorkContainerList: + ls = self.xa_elem.arrayByApplyingSelector_("parent") or [] + return self._new_element(ls, XAiWorkContainerList)
+ +
[docs] def by_height(self, height: int) -> 'XAiWorkGroup': + return self.by_property("height", height)
+ +
[docs] def by_position(self, position: tuple[int, int]) -> 'XAiWorkGroup': + return self.by_property("position", position)
+ +
[docs] def by_width(self, width: int) -> 'XAiWorkGroup': + return self.by_property("width", width)
+ +
[docs] def by_rotation(self, rotation: int) -> 'XAiWorkGroup': + return self.by_property("rotation", rotation)
+ +
[docs] def by_parent(self, parent: XAiWorkContainer) -> 'XAiWorkGroup': + return self.by_property("parent", parent.xa_elem)
+ +
[docs]class XAiWorkGroup(XAiWorkContainer): + """A class for managing and interacting with iWork item groups in Keynote. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def height(self) -> int: + """The height of the group. + """ + return self.xa_elem.height() + + @height.setter + def height(self, height: int): + self.set_property('height', height) + + @property + def position(self) -> tuple[int, int]: + """The horizontal and vertical coordinates of the top left point of the group. + """ + return self.xa_elem.position() + + @position.setter + def position(self, position: tuple[int, int]): + self.set_property('position', position) + + @property + def width(self) -> int: + """The width of the group. + """ + return self.xa_elem.width() + + @width.setter + def width(self, width: int): + self.set_property('width', width) + + @property + def rotation(self) -> int: + """The rotation of the group, in degrees from 0 to 359. + """ + return self.xa_elem.rotation() + + @rotation.setter + def rotation(self, rotation: int): + self.set_property('rotation', rotation) + + @property + def parent(self) -> XAiWorkContainer: + """The container which contains the group. + """ + return self._new_element(self.xa_elem.parent(), XAiWorkContainer)
+ + + + +
[docs]class XAiWorkImageList(XAiWorkiWorkItemList): + """A wrapper around lists of images that employs fast enumeration techniques. + + All properties of images can be called as methods on the wrapped list, returning a list containing each image's value for the property. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAiWorkImage) + +
[docs] def description(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("objectDescription") or [])
+ +
[docs] def file(self) -> list[str]: + return [x.file() for x in self.xa_elem]
+ +
[docs] def file_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("fileName") or [])
+ +
[docs] def opacity(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("opacity") or [])
+ +
[docs] def reflection_showing(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("reflectionShowing") or [])
+ +
[docs] def reflection_value(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("reflectionValue") or [])
+ +
[docs] def rotation(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("rotation") or [])
+ +
[docs] def by_description(self, description: str) -> 'XAiWorkImage': + return self.by_property("objectDescription", description)
+ +
[docs] def by_file(self, file: str) -> 'XAiWorkImage': + return self.by_property("file", file)
+ +
[docs] def by_file_name(self, file_name: str) -> 'XAiWorkImage': + return self.by_property("fileName", file_name)
+ +
[docs] def by_opacity(self, opacity: int) -> 'XAiWorkImage': + return self.by_property("opacity", opacity)
+ +
[docs] def by_reflection_showing(self, reflection_showing: bool) -> 'XAiWorkImage': + return self.by_property("reflectionShowing", reflection_showing)
+ +
[docs] def by_reflection_value(self, reflection_value: int) -> 'XAiWorkImage': + return self.by_property("reflectionValue", reflection_value)
+ +
[docs] def by_rotation(self, rotation: int) -> 'XAiWorkImage': + return self.by_property("rotation", rotation)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.file_name()) + ">"
+ +
[docs]class XAiWorkImage(XAiWorkiWorkItem): + """A class for managing and interacting with images in Keynote. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def description(self) -> str: + """Text associated with the image, read aloud by VoiceOVer. + """ + return self.xa_elem.object_description() + + @description.setter + def description(self, description: str): + self.set_property('description', description) + + @property + def file(self) -> str: + """The image file. + """ + return self.xa_elem.file() + + @property + def file_name(self) -> str: + """The name of the image file. + """ + return self.xa_elem.fileName().get() + + @file_name.setter + def file_name(self, file_name: str): + self.set_property('fileName', file_name) + + @property + def opacity(self) -> int: + """The opacity of the image, in percent from 0 to 100. + """ + return self.xa_elem.opacity() + + @opacity.setter + def opacity(self, opacity: int): + self.set_property('opacity', opacity) + + @property + def reflection_showing(self) -> bool: + """Whether the image displays a reflection. + """ + return self.xa_elem.reflectionShowing() + + @reflection_showing.setter + def reflection_showing(self, reflection_showing: bool): + self.set_property('reflectionShowing', reflection_showing) + + @property + def reflection_value(self) -> int: + """The percentage of reflection of the image, from 0 to 100. + """ + return self.xa_elem.reflectionValue() + + @reflection_value.setter + def reflection_value(self, reflection_value: int): + self.set_property('reflectionValue', reflection_value) + + @property + def rotation(self) -> int: + """The rotation of the image, in degrees from 0 to 359. + """ + return self.xa_elem.rotation() + + @rotation.setter + def rotation(self, rotation: int): + self.set_property('rotation', rotation) + +
[docs] def rotate(self, degrees: int) -> 'XAiWorkImage': + """Rotates the image by the specified number of degrees. + + :param degrees: The amount to rotate the image, in degrees, from -359 to 359 + :type degrees: int + :return: The image. + :rtype: XAiWorkImage + + .. deprecated:: 0.1.1 + + Set the :attr:`rotation` attribute directly instead. + + .. versionadded:: 0.1.1 + """ + self.set_property("rotation", self.rotation + degrees) + return self
+ +
[docs] def replace_with(self, img_path: Union[str, XABase.XAPath, XABase.XAURL]) -> 'XAiWorkImage': + """Removes the image and inserts another in its place with the same width and height. + + :param img_path: The path to the new image file. + :type img_path: Union[str, XABase.XAPath, XABase.XAURL] + :return: A reference to the new PyXA image object. + :rtype: XAiWorkImage + + .. versionadded:: 0.1.1 + """ + self.delete() + if isinstance(img_path, str): + if "://" in img_path: + img_path = XABase.XAURL(img_path) + else: + img_path = XABase.XAPath(img_path) + + parent = self.xa_prnt + while not hasattr(parent, "add_image"): + parent = parent.xa_prnt + + return parent.add_image(img_path)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.file_name) + ">"
+ + + + +
[docs]class XAiWorkAudioClipList(XAiWorkiWorkItemList): + """A wrapper around lists of audio clips that employs fast enumeration techniques. + + All properties of audio clips can be called as methods on the wrapped list, returning a list containing each audio clips's value for the property. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAiWorkAudioClip) + +
[docs] def file_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("fileName") or [])
+ +
[docs] def clip_volume(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("clipVolume") or [])
+ +
[docs] def repetition_method(self) -> list[XAiWorkApplication.RepetitionMethod]: + ls = self.xa_elem.arrayByApplyingSelector_("repetitionMethod") or [] + return [XAiWorkApplication.RepetitionMethod(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def by_file_name(self, file_name: str) -> 'XAiWorkAudioClip': + return self.by_property("fileName", file_name)
+ +
[docs] def by_clip_volume(self, clip_volume: int) -> 'XAiWorkAudioClip': + return self.by_property("clipVolume", clip_volume)
+ +
[docs] def by_repetition_method(self, repetition_method: XAiWorkApplication.RepetitionMethod) -> 'XAiWorkAudioClip': + for audio_clip in self.xa_elem: + if audio_clip.repetitionMethod() == repetition_method.value: + return self._new_element(audio_clip, XAiWorkAudioClip)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.file_name()) + ">"
+ +
[docs]class XAiWorkAudioClip(XAiWorkiWorkItem): + """A class for managing and interacting with audio clips in Keynote. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def file_name(self) -> str: + """The name of the audio file. + """ + return self.xa_elem.fileName().get() + + @file_name.setter + def file_name(self, file_name: str): + self.set_property('fileName', file_name) + + @property + def clip_volume(self) -> int: + """The volume setting for the audio clip, from 0 to 100. + """ + return self.xa_elem.clipVolume() + + @clip_volume.setter + def clip_volume(self, clip_volume: int): + self.set_property('clipVolume', clip_volume) + + @property + def repetition_method(self) -> XAiWorkApplication.RepetitionMethod: + """Whether or how the audio clip repeats. + """ + return XAiWorkApplication.RepetitionMethod(self.xa_elem.repetitionMethod()) + + @repetition_method.setter + def repetition_method(self, repetition_method: XAiWorkApplication.RepetitionMethod): + self.set_property('repetitionMethod', repetition_method.value) + + def __repr__(self): + return "<" + str(type(self)) + str(self.file_name) + ">"
+ + + + +
[docs]class XAiWorkShapeList(XAiWorkiWorkItemList): + """A wrapper around lists of shapes that employs fast enumeration techniques. + + All properties of shapes can be called as methods on the wrapped list, returning a list containing each shape's value for the property. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAiWorkShape) + +
[docs] def properties(self) -> list[dict]: + return [{ + "reflection_showing": shape.reflectionShowing(), + "rotation": shape.rotation(), + "position": tuple(shape.position()), + "parent": self._new_element(shape.parent(), XAiWorkContainer), + "width": shape.width(), + "opacity": shape.opacity(), + "locked": shape.locked(), + "height": shape.height(), + "background_fill_type": XAiWorkApplication.FillOption(shape.backgroundFillType()), + "reflection_value": shape.reflectionValue(), + "object_text": shape.objectText().get() + } for shape in self.xa_elem]
+ +
[docs] def background_fill_type(self) -> list[XAiWorkApplication.FillOption]: + ls = self.xa_elem.arrayByApplyingSelector_("backgroundFillType") or [] + return [XAiWorkApplication.FillOption(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def object_text(self) -> XABase.XATextList: + ls = self.xa_elem.arrayByApplyingSelector_("objectText") or [] + return self._new_element(ls, XABase.XATextList)
+ +
[docs] def opacity(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("opacity") or [])
+ +
[docs] def reflection_showing(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("reflectionShowing") or [])
+ +
[docs] def reflection_value(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("reflectionValue") or [])
+ +
[docs] def rotation(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("rotation") or [])
+ +
[docs] def by_properties(self, properties: dict) -> Union['XAiWorkShape', None]: + raw_dict = {} + + if "reflection_show" in properties: + raw_dict["reflectionShowing"] = properties["reflection_showing"] + + if "rotation" in properties: + raw_dict["rotation"] = properties["rotation"] + + if "position" in properties: + raw_dict["position"] = properties["position"] + + if "parent" in properties: + raw_dict["parent"] = properties["parent"].xa_elem + + if "width" in properties: + raw_dict["width"] = properties["width"] + + if "opacity" in properties: + raw_dict["opacity"] = properties["opacity"] + + if "locked" in properties: + raw_dict["locked"] = properties["lockedv"] + + if "height" in properties: + raw_dict["height"] = properties["height"] + + if "background_fill_type" in properties: + raw_dict["backgroundFillType"] = properties["background_fill_type"] + + if "reflection_value" in properties: + raw_dict["reflectionValue"] = properties["reflection_value"] + + if "object_text" in properties: + raw_dict["objectText"] = properties["object_text"] + + for shape in self.xa_elem: + if all([raw_dict[x] == shape.properties()[x] for x in raw_dict]): + return self._new_element(shape, XAiWorkShape)
+ +
[docs] def by_background_fill_type(self, background_fill_type: XAiWorkApplication.FillOption) -> Union['XAiWorkShape', None]: + for shape in self.xa_elem: + if shape.backgroundFillType() == background_fill_type.value: + return self._new_element(shape, XAiWorkShape)
+ +
[docs] def by_object_text(self, object_text: Union[str, XABase.XAText]) -> Union['XAiWorkShape', None]: + if isinstance(object_text, str): + return self.by_property('objectText', object_text) + else: + return self.by_property('objectText', object_text.xa_elem)
+ +
[docs] def by_opacity(self, opacity: int) -> Union['XAiWorkShape', None]: + return self.by_property("opacity", opacity)
+ +
[docs] def by_reflection_showing(self, reflection_showing: bool) -> Union['XAiWorkShape', None]: + return self.by_property("reflectionShowing", reflection_showing)
+ +
[docs] def by_reflection_value(self, reflection_value: int) -> Union['XAiWorkShape', None]: + return self.by_property("reflectionValue", reflection_value)
+ +
[docs] def by_rotation(self, rotation: int) -> Union['XAiWorkShape', None]: + return self.by_property("rotation", rotation)
+ +
[docs]class XAiWorkShape(XAiWorkiWorkItem): + """A class for managing and interacting with shapes in Keynote. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the shape. + """ + return self.xa_elem.properties() + + @property + def background_fill_type(self) -> XAiWorkApplication.FillOption: + """The background, if any, for the shape. + """ + return XAiWorkApplication.FillOption(self.xa_elem.backgroundFillType()) + + @property + def object_text(self) -> XABase.XAText: + """The text contained within the shape. + """ + return self._new_element(self.xa_elem.objectText(), XABase.XAText) + + @object_text.setter + def object_text(self, object_text: Union[str, XABase.XAText]): + if isinstance(object_text, str): + self.set_property('objectText', object_text) + else: + self.set_property('objectText', object_text.xa_elem) + + @property + def opacity(self) -> int: + """The percent opacity of the object. + """ + return self.xa_elem.opacity() + + @opacity.setter + def opacity(self, opacity: int): + self.set_property('opacity', opacity) + + @property + def reflection_showing(self) -> bool: + """Whether the iWork item displays a reflection. + """ + return self.xa_elem.reflectionShowing() + + @reflection_showing.setter + def reflection_showing(self, reflection_showing: bool): + self.set_property('reflectionShowing', reflection_showing) + + @property + def reflection_value(self) -> int: + """The percentage of relfection that the iWork item displays, from 0 to 100. + """ + return self.xa_elem.reflectionValue() + + @reflection_value.setter + def reflection_value(self, reflection_value: int): + self.set_property('reflectionValue', reflection_value) + + @property + def rotation(self) -> int: + """The rotation of the iWork item, in degrees, from 0 to 359. + """ + return self.xa_elem.rotation() + + @rotation.setter + def rotation(self, rotation: int): + self.set_property('rotation', rotation) + +
[docs] def rotate(self, degrees: int) -> 'XAiWorkShape': + """Rotates the shape by the specified number of degrees. + + :param degrees: The amount to rotate the shape, in degrees, from -359 to 359 + :type degrees: int + :return: The shape. + :rtype: XAiWorkShape + + .. deprecated:: 0.1.1 + + Set the :attr:`rotation` attribute directly instead. + + .. versionadded:: 0.1.1 + """ + self.set_property("rotation", self.rotation + degrees) + return self
+ +
[docs] def set_property(self, property_name: str, value: Any): + if isinstance(value, tuple): + if isinstance(value[0], int): + # Value is a position + value = AppKit.NSValue.valueWithPoint_(AppKit.NSPoint(value[0], value[1])) + super().set_property(property_name, value)
+ + + + +
[docs]class XAiWorkChartList(XAiWorkiWorkItemList): + """A wrapper around lists of themes that employs fast enumeration techniques. + + All properties of themes can be called as methods on the wrapped list, returning a list containing each theme's value for the property. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAiWorkChart)
+ +
[docs]class XAiWorkChart(XAiWorkiWorkItem): + """A class for managing and interacting with charts in Keynote. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties): + super().__init__(properties)
+ + + + +
[docs]class XAiWorkLineList(XAiWorkiWorkItemList): + """A wrapper around lists of shapes that employs fast enumeration techniques. + + All properties of shapes can be called as methods on the wrapped list, returning a list containing each shape's value for the property. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAiWorkLine) + +
[docs] def end_point(self) -> list[tuple[int, int]]: + return list(self.xa_elem.arrayByApplyingSelector_("end_point") or [])
+ +
[docs] def reflection_showing(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("reflectionShowing") or [])
+ +
[docs] def reflection_value(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("reflectionValue") or [])
+ +
[docs] def rotation(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("rotation") or [])
+ +
[docs] def start_point(self) -> list[tuple[int, int]]: + return list(self.xa_elem.arrayByApplyingSelector_("start_point") or [])
+ +
[docs] def by_end_point(self, end_point: tuple[int, int]) -> 'XAiWorkLine': + return self.by_property("endPoint", end_point)
+ +
[docs] def by_reflection_showing(self, reflection_showing: bool) -> 'XAiWorkLine': + return self.by_property("reflectionShowing", reflection_showing)
+ +
[docs] def by_reflection_value(self, reflection_value: int) -> 'XAiWorkLine': + return self.by_property("reflectionValue", reflection_value)
+ +
[docs] def by_rotation(self, rotation: int) -> 'XAiWorkLine': + return self.by_property("rotation", rotation)
+ +
[docs] def by_start_point(self, start_point: tuple[int, int]) -> 'XAiWorkLine': + return self.by_property("startPoint", start_point)
+ +
[docs]class XAiWorkLine(XAiWorkiWorkItem): + """A class for managing and interacting with lines in Keynote. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def end_point(self) -> tuple[int, int]: + """A list of two numbers indicating the horizontal and vertical position of the line ending point. + """ + return self.xa_elem.endPoint() + + @end_point.setter + def end_point(self, end_point: tuple[int, int]): + self.set_property('endPoint', end_point) + + @property + def reflection_showing(self) -> bool: + """Whether the line displays a reflection. + """ + return self.xa_elem.reflectionShowing() + + @reflection_showing.setter + def reflection_showing(self, reflection_showing: bool): + self.set_property('reflectionShowing', reflection_showing) + + @property + def reflection_value(self) -> int: + """The percent of reflection of the line, from 0 to 100. + """ + return self.xa_elem.reflectionValue() + + @reflection_value.setter + def reflection_value(self, reflection_value: int): + self.set_property('reflectionValue', reflection_value) + + @property + def rotation(self) -> int: + """The rotation of the line, in degrees from 0 to 359. + """ + return self.xa_elem.rotation() + + @rotation.setter + def rotation(self, rotation: int): + self.set_property('rotation', rotation) + + @property + def start_point(self) -> tuple[int, int]: + """A list of two numbers indicating the horizontal and vertical position of the line starting point. + """ + return self.xa_elem.startPoint() + + @start_point.setter + def start_point(self, start_point: tuple[int, int]): + self.set_property('startPoint', start_point)
+ + + + +
[docs]class XAiWorkMovieList(XAiWorkiWorkItemList): + """A wrapper around lists of movies that employs fast enumeration techniques. + + All properties of movies can be called as methods on the wrapped list, returning a list containing each movie's value for the property. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAiWorkMovie) + +
[docs] def file_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("fileName") or [])
+ +
[docs] def movie_volume(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("movieVolume") or [])
+ +
[docs] def opacity(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("opacity") or [])
+ +
[docs] def reflection_showing(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("reflectionShowing") or [])
+ + def reflection_value(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("reflectionValue") or []) + +
[docs] def reflection_value(self) -> list[XAiWorkApplication.RepetitionMethod]: + ls = self.xa_elem.arrayByApplyingSelector_("repetitionMethod") or [] + return [XAiWorkApplication.RepetitionMethod(x) for x in ls]
+ +
[docs] def rotation(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("rotation") or [])
+ +
[docs] def by_file_name(self, file_name: str) -> 'XAiWorkMovie': + return self.by_property("fileName", file_name)
+ +
[docs] def by_movie_volume(self, movie_volume: int) -> 'XAiWorkMovie': + return self.by_property("movieVolume", movie_volume)
+ +
[docs] def by_opacity(self, opacity: int) -> 'XAiWorkMovie': + return self.by_property("opacity", opacity)
+ +
[docs] def by_reflection_showing(self, reflection_showing: bool) -> 'XAiWorkMovie': + return self.by_property("reflectionShowing", reflection_showing)
+ +
[docs] def by_reflection_value(self, reflection_value: int) -> 'XAiWorkMovie': + return self.by_property("reflectionValue", reflection_value)
+ +
[docs] def by_repetition_method(self, repetition_method: XAiWorkApplication.RepetitionMethod) -> 'XAiWorkMovie': + return self.by_property("repetitionMethod", repetition_method.value)
+ +
[docs] def by_rotation(self, rotation: int) -> 'XAiWorkMovie': + return self.by_property("rotation", rotation)
+ +
[docs]class XAiWorkMovie(XAiWorkiWorkItem): + """A class for managing and interacting with movie containers in Keynote. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def file_name(self) -> str: + """The name of the movie file. + """ + return self.xa_elem.fileName() + + @file_name.setter + def file_name(self, file_name: str): + self.set_property('fileName', file_name) + + @property + def movie_volume(self) -> int: + """The volume setting for the movie, from 0 to 100. + """ + return self.xa_elem.movieVolume() + + @movie_volume.setter + def movie_volume(self, movie_volume: int): + self.set_property('movieVolume', movie_volume) + + @property + def opacity(self) -> int: + """The percent opacity of the object. + """ + return self.xa_elem.opacity() + + @opacity.setter + def opacity(self, opacity: int): + self.set_property('opacity', opacity) + + @property + def reflection_showing(self) -> bool: + """Whether the movie displays a reflection. + """ + return self.xa_elem.reflectionShowing() + + @reflection_showing.setter + def reflection_showing(self, reflection_showing: bool): + self.set_property('reflectionShowing', reflection_showing) + + @property + def reflection_value(self) -> int: + """The percentage of reflection of the movie, from 0 to 100. + """ + return self.xa_elem.reflectionValue() + + @reflection_value.setter + def reflection_value(self, reflection_value: int): + self.set_property('reflection_value', reflection_value) + + @property + def repetition_method(self) -> XAiWorkApplication.RepetitionMethod: + """Whether or how the movie repeats. + """ + return XAiWorkApplication.RepetitionMethod(self.xa_elem.repetitionMethod()) + + @repetition_method.setter + def repetition_method(self, repetition_method: XAiWorkApplication.RepetitionMethod): + self.set_property('repetitionMethod', repetition_method.value) + + @property + def rotation(self) -> int: + """The rotation of the movie, in degrees from 0 to 359. + """ + return self.xa_elem.rotation() + + @rotation.setter + def rotation(self, rotation: int): + self.set_property('rotation', rotation)
+ + + + +
[docs]class XAiWorkTextItemList(XAiWorkiWorkItemList): + """A wrapper around lists of text items that employs fast enumeration techniques. + + All properties of text items can be called as methods on the wrapped list, returning a list containing each text item's value for the property. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAiWorkTextItem) + +
[docs] def background_fill_type(self) -> list[XAiWorkApplication.FillOption]: + ls = self.xa_elem.arrayByApplyingSelector_("fileName") or [] + return [XAiWorkApplication.FillOption(x) for x in ls]
+ +
[docs] def text(self) -> XABase.XATextList: + ls = self.xa_elem.arrayByApplyingSelector_("text") or [] + return self._new_element(ls, XABase.XATextList)
+ +
[docs] def opacity(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("opacity") or [])
+ +
[docs] def reflection_showing(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("reflectionShowing") or [])
+ +
[docs] def reflection_value(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("reflectionValue") or [])
+ +
[docs] def rotation(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("rotation") or [])
+ +
[docs] def by_background_fill_type(self, background_fill_type: XAiWorkApplication.FillOption) -> 'XAiWorkTextItem': + return self.by_property("backgroundFillType", background_fill_type.value)
+ +
[docs] def by_text(self, text: Union[str, XABase.XAText]) -> 'XAiWorkTextItem': + if isinstance(text, str): + self.by_property('text', text) + else: + self.by_property('text', text.xa_elem)
+ +
[docs] def by_opacity(self, opacity: int) -> 'XAiWorkTextItem': + return self.by_property("opacity", opacity)
+ +
[docs] def by_reflection_showing(self, reflection_showing: bool) -> 'XAiWorkTextItem': + return self.by_property("reflectionShowing", reflection_showing)
+ +
[docs] def by_reflection_value(self, reflection_value: int) -> 'XAiWorkTextItem': + return self.by_property("reflectionValue", reflection_value)
+ +
[docs] def by_rotation(self, rotation: int) -> 'XAiWorkTextItem': + return self.by_property("rotation", rotation)
+ +
[docs]class XAiWorkTextItem(XAiWorkiWorkItem): + """A class for managing and interacting with text items in Keynote. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def background_fill_type(self) -> XAiWorkApplication.FillOption: + """The background of the text item. + """ + return XAiWorkApplication.FillOption(self.xa_elem.backgroundFillType()) + + @property + def text(self) -> XABase.XAText: + """The text contained within the text item. + """ + return self._new_element(self.xa_elem.text(), XABase.XAText) + + @text.setter + def text(self, text: Union[str, XABase.XAText]): + if isinstance(text, str): + self.set_property('text', text) + else: + self.set_property('text', text.xa_elem) + + @property + def opacity(self) -> int: + """The opacity of the text item. + """ + return self.xa_elem.opacity() + + @opacity.setter + def opacity(self, opacity: int): + self.set_property('opacity', opacity) + + @property + def reflection_showing(self) -> bool: + """Whether the text item displays a reflection. + """ + return self.xa_elem.reflectionShowing() + + @reflection_showing.setter + def reflection_showing(self, reflection_showing: bool): + self.set_property('reflectionShowing', reflection_showing) + + @property + def reflection_value(self) -> int: + """The percentage of reflection of the text item, from 0 to 100. + """ + return self.xa_elem.reflectionValue() + + @reflection_value.setter + def reflection_value(self, reflection_value: int): + self.set_property('reflectionValue', reflection_value) + + @property + def rotation(self) -> int: + """The rotation of the text item, in degrees from 0 to 359. + """ + return self.xa_elem.rotation() + + @rotation.setter + def rotation(self, rotation: int): + self.set_property('rotation', rotation)
+ + + + +
[docs]class XAiWorkTableList(XAiWorkiWorkItemList): + """A wrapper around lists of shapes that employs fast enumeration techniques. + + All properties of shapes can be called as methods on the wrapped list, returning a list containing each shape's value for the property. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAiWorkTable) + +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def row_count(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("rowCount") or [])
+ +
[docs] def column_count(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("columnCount") or [])
+ +
[docs] def header_row_count(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("headerRowCount") or [])
+ +
[docs] def header_column_count(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("headerColumnCount") or [])
+ +
[docs] def footer_row_count(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("footerRowCount") or [])
+ +
[docs] def cell_range(self) -> 'XAiWorkRangeList': + ls = self.xa_elem.arrayByApplyingSelector_("cellRange") or [] + return self._new_element(ls, XAiWorkRangeList)
+ +
[docs] def selection_range(self) -> 'XAiWorkRangeList': + ls = self.xa_elem.arrayByApplyingSelector_("selectionRange") or [] + return self._new_element(ls, XAiWorkRangeList)
+ +
[docs] def by_name(self, name: str) -> Union['XAiWorkTable', None]: + return self.by_property("name", name)
+ +
[docs] def by_row_count(self, row_count: int) -> Union['XAiWorkTable', None]: + return self.by_property("rowCount", row_count)
+ +
[docs] def by_column_count(self, column_count: int) -> Union['XAiWorkTable', None]: + return self.by_property("columnCount", column_count)
+ +
[docs] def by_header_row_count(self, header_row_count: int) -> Union['XAiWorkTable', None]: + return self.by_property("headerRowCount", header_row_count)
+ +
[docs] def by_header_column_count(self, header_column_count: int) -> Union['XAiWorkTable', None]: + return self.by_property("headerColumnCount", header_column_count)
+ + + +
[docs] def by_cell_range(self, cell_range: 'XAiWorkRange') -> Union['XAiWorkTable', None]: + return self.by_property("cellRange", cell_range.xa_elem)
+ +
[docs] def by_selection_range(self, selection_range: 'XAiWorkRange') -> Union['XAiWorkTable', None]: + return self.by_property("selectionRange", selection_range.xa_elem)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAiWorkTable(XAiWorkiWorkItem): + """A class for managing and interacting with tables in Keynote. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def name(self) -> str: + """The name of the table. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property('name', name) + + @property + def row_count(self) -> int: + """The number of rows in the table. + """ + return self.xa_elem.rowCount() + + @row_count.setter + def row_count(self, row_count: int): + self.set_property('rowCount', row_count) + + @property + def column_count(self) -> int: + """The number of columns in the table. + """ + return self.xa_elem.columnCount() + + @column_count.setter + def column_count(self, column_count: int): + self.set_property('columnCount', column_count) + + @property + def header_row_count(self) -> int: + """The number of header rows in the table. + """ + return self.xa_elem.headerRowCount() + + @header_row_count.setter + def header_row_count(self, header_row_count: int): + self.set_property('headerRowCount', header_row_count) + + @property + def header_column_count(self) -> int: + """The number of header columns in the table. + """ + return self.xa_elem.headerColumnCount() + + @header_column_count.setter + def header_column_count(self, header_column_count: int): + self.set_property('headerColumnCount', header_column_count) + + @property + def footer_row_count(self) -> int: + """The number of footer rows in the table. + """ + return self.xa_elem.footerRowCount() + + @footer_row_count.setter + def footer_row_count(self, footer_row_count: int): + self.set_property('footerRowCount', footer_row_count) + + @property + def cell_range(self) -> 'XAiWorkRange': + """The range of all cells in the table. + """ + return self._new_element(self.xa_elem.cellRange(), XAiWorkRange) + + @property + def selection_range(self) -> 'XAiWorkRange': + """The currently selected cells. + """ + return self._new_element(self.xa_elem.selectionRange(), XAiWorkRange) + + @selection_range.setter + def selection_range(self, selection_range: 'XAiWorkRange'): + self.set_property('selectionRange', selection_range.xa_elem) + +
[docs] def sort(self, by_column: 'XAiWorkColumn', in_rows: Union[list['XAiWorkRow'], 'XAiWorkRowList', None] = None, direction: XAiWorkApplication.SortDirection = XAiWorkApplication.SortDirection.ASCENDING) -> Self: + """Sorts the table according to the specified column, in the specified sorting direction. + + :param by_column: The column to sort by + :type by_column: XAiWorkColumn + :param in_rows: The rows to sort, or None to sort the whole table, defaults to None + :type in_rows: Union[list[XAiWorkRow], XAiWorkRowList, None], optional + :param direction: The direction to sort in, defaults to XAiWorkApplication.SortDirection.ASCENDING + :type direction: XAiWorkApplication.SortDirection, optional + :return: The table object + :rtype: Self + + .. versionadded:: 0.1.1 + """ + if isinstance(in_rows, list): + in_rows = [row.xa_elem for row in in_rows] + elif isinstance(in_rows, XABase.XAList): + in_rows = in_rows.xa_elem + + self.xa_elem.sortBy_direction_inRows_(by_column.xa_elem, direction.value, in_rows) + return self
+ +
[docs] def cells(self, filter: Union[dict, None] = None) -> 'XAiWorkCellList': + """Returns a list of cells, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned cells will have, or None + :type filter: Union[dict, None] + :return: The list of cells + :rtype: XAiWorkCellList + + .. versionadded:: 0.1.1 + """ + return self._new_element(self.xa_elem.cells(), XAiWorkCellList, filter)
+ +
[docs] def columns(self, filter: Union[dict, None] = None) -> 'XAiWorkColumnList': + """Returns a list of columns, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned columns will have, or None + :type filter: Union[dict, None] + :return: The list of columns + :rtype: XAiWorkColumnList + + .. versionadded:: 0.1.1 + """ + return self._new_element(self.xa_elem.columns(), XAiWorkColumnList, filter)
+ +
[docs] def rows(self, filter: Union[dict, None] = None) -> 'XAiWorkRowList': + """Returns a list of rows, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned rows will have, or None + :type filter: Union[dict, None] + :return: The list of rows + :rtype: XAiWorkRowList + + .. versionadded:: 0.1.1 + """ + return self._new_element(self.xa_elem.rows(), XAiWorkRowList, filter)
+ +
[docs] def ranges(self, filter: Union[dict, None] = None) -> 'XAiWorkRangeList': + """Returns a list of ranges, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned ranges will have, or None + :type filter: Union[dict, None] + :return: The list of ranges + :rtype: XAiWorkRangeList + + .. versionadded:: 0.1.1 + """ + return self._new_element(self.xa_elem.ranges(), XAiWorkRangeList, filter)
+ + def __repr__(self): + try: + return "<" + str(type(self)) + str(self.name) + ">" + except AttributeError: + # Probably dealing with a proxy object created via make() + return "<" + str(type(self)) + str(self.xa_elem) + ">"
+ + + + +
[docs]class XAiWorkRangeList(XABase.XAList): + """A wrapper around lists of themes that employs fast enumeration techniques. + + All properties of themes can be called as methods on the wrapped list, returning a list containing each theme's value for the property. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None, obj_class = None): + if obj_class is None: + obj_class = XAiWorkRange + super().__init__(properties, obj_class, filter) + +
[docs] def properties(self) -> list[dict]: + raw_dicts = self.xa_elem.arrayByApplyingSelector_("properties") or [] + pyxa_dicts = [None] * len(self.xa_elem) + for index, raw_dict in enumerate(raw_dicts): + pyxa_dicts[index] = { + "background_color": XABase.XAColor(raw_dict["backgroundColor"]) if raw_dict["backgroundColor"] is not None else None, + "font_size": raw_dict["fontSize"], + "name": raw_dict["name"], + "format": XAiWorkApplication.CellFormat(XABase.OSType(raw_dict["format"].stringValue())), + "vertical_alignment": XAiWorkApplication.Alignment(XABase.OSType(raw_dict["verticalAlignment"].stringValue())), + "font_name": raw_dict["fontName"], + "alignment": XAiWorkApplication.Alignment(XABase.OSType(raw_dict["alignment"].stringValue())), + "text_wrap": raw_dict["textWrap"], + "text_color": XABase.XAColor(raw_dict["textColor"]), + } + return pyxa_dicts
+ +
[docs] def font_name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("fontName") or [])
+ +
[docs] def font_size(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("fontSize") or [])
+ +
[docs] def format(self) -> list[XAiWorkApplication.CellFormat]: + ls = self.xa_elem.arrayByApplyingSelector_("format") or [] + return [XAiWorkApplication.CellFormat(x) for x in ls]
+ +
[docs] def alignment(self) -> list[XAiWorkApplication.Alignment]: + ls = self.xa_elem.arrayByApplyingSelector_("alignment") or [] + return [XAiWorkApplication.Alignment(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def name(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("name") or [])
+ +
[docs] def text_color(self) -> list[XABase.XAColor]: + ls = self.xa_elem.arrayByApplyingSelector_("textColor") or [] + return [XABase.XAColor(x) for x in ls]
+ +
[docs] def text_wrap(self) -> list[bool]: + return list(self.xa_elem.arrayByApplyingSelector_("textWrap") or [])
+ +
[docs] def background_color(self) -> list[XABase.XAColor]: + ls = self.xa_elem.arrayByApplyingSelector_("backgroundColor") or [] + return [XABase.XAColor(x) for x in ls]
+ +
[docs] def vertical_alignment(self) -> list[XAiWorkApplication.Alignment]: + ls = self.xa_elem.arrayByApplyingSelector_("verticalAlignment") or [] + return [XAiWorkApplication.Alignment(XABase.OSType(x.stringValue())) for x in ls]
+ +
[docs] def by_properties(self, properties: dict) -> Union['XAiWorkRange', None]: + raw_dict = {} + + if "background_color" in properties: + raw_dict["backgroundColor"] = properties["background_color"].xa_elem + + if "font_size" in properties: + raw_dict["fontSize"] = properties["font_size"] + + if "name" in properties: + raw_dict["name"] = properties["name"] + + if "format" in properties: + raw_dict["format"] = properties["format"].value + + if "vertical_alignment" in properties: + raw_dict["verticalAlignment"] = XAEvents.event_from_type_code(properties["vertical_alignment"].value) + + if "font_name" in properties: + raw_dict["fontName"] = properties["font_name"] + + if "alignment" in properties: + raw_dict["alignment"] = XAEvents.event_from_type_code(properties["alignment"].value) + + if "text_wrap" in properties: + raw_dict["textWrap"] = properties["text_wrap"] + + if "text_color" in properties: + raw_dict["textColor"] = properties["text_color"].xa_elem + + for page_range in self.xa_elem: + if all([raw_dict[x] == page_range.properties()[x] for x in raw_dict]): + return self._new_element(page_range, XAiWorkRange)
+ +
[docs] def by_font_name(self, font_name: str) -> Union['XAiWorkRange', None]: + return self.by_property("fontName", font_name)
+ +
[docs] def by_font_size(self, font_size: float) -> Union['XAiWorkRange', None]: + return self.by_property("fontSize", font_size)
+ +
[docs] def by_format(self, format: XAiWorkApplication.CellFormat) -> Union['XAiWorkRange', None]: + return self.by_property("format", format.value)
+ +
[docs] def by_alignment(self, alignment: XAiWorkApplication.Alignment) -> Union['XAiWorkRange', None]: + for page_range in self.xa_elem: + if page_range.alignment() == alignment.value: + return self._new_element(page_range, XAiWorkRange)
+ +
[docs] def by_name(self, name: str) -> Union['XAiWorkRange', None]: + return self.by_property("name", name)
+ +
[docs] def by_text_color(self, text_color: XABase.XAColor) -> Union['XAiWorkRange', None]: + return self.by_property("textColor", text_color.xa_elem)
+ +
[docs] def by_text_wrap(self, text_wrap: bool) -> Union['XAiWorkRange', None]: + return self.by_property("textWrap", text_wrap)
+ +
[docs] def by_background_color(self, background_color: XABase.XAColor) -> Union['XAiWorkRange', None]: + return self.by_property("backgroundColor", background_color.xa_elem)
+ +
[docs] def by_vertical_alignment(self, vertical_alignment: XAiWorkApplication.Alignment) -> Union['XAiWorkRange', None]: + for page_range in self.xa_elem: + if page_range.verticalAlignment() == vertical_alignment.value: + return self._new_element(page_range, XAiWorkRange)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name()) + ">"
+ +
[docs]class XAiWorkRange(XABase.XAObject): + """A class for managing and interacting with ranges of table cells in Keynote. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the range. + """ + raw_dict = self.xa_elem.properties() + return { + "background_color": XABase.XAColor(raw_dict["backgroundColor"]), + "font_size": raw_dict["fontSize"], + "name": raw_dict["name"], + "format": XAiWorkApplication.CellFormat(XABase.OSType(raw_dict["format"].stringValue())), + "vertical_alignment": XAiWorkApplication.Alignment(XABase.OSType(raw_dict["verticalAlignment"].stringValue())), + "font_name": raw_dict["fontName"], + "alignment": XAiWorkApplication.Alignment(XABase.OSType(raw_dict["alignment"].stringValue())), + "text_wrap": raw_dict["textWrap"], + "text_color": XABase.XAColor(raw_dict["textColor"]) + } + + @property + def font_name(self) -> str: + """The font of the range's cells. + """ + return self.xa_elem.fontName() + + @font_name.setter + def font_name(self, font_name: str): + self.set_property('fontName', font_name) + + @property + def font_size(self) -> float: + """The font size of the range's cells. + """ + return self.xa_elem.fontSize() + + @font_size.setter + def font_size(self, font_size: float): + self.set_property('fontSize', font_size) + + @property + def format(self) -> XAiWorkApplication.CellFormat: + """The format of the range's cells. + """ + return XAiWorkApplication.CellFormat(self.xa_elem.format()) + + @format.setter + def format(self, format: XAiWorkApplication.CellFormat): + self.set_property('format', format.value) + + @property + def alignment(self) -> XAiWorkApplication.Alignment: + """The horizontal alignment of content within the range's cells. + """ + return XAiWorkApplication.Alignment(self.xa_elem.alignment()) + + @alignment.setter + def alignment(self, alignment: XAiWorkApplication.Alignment): + self.set_property('alignment', alignment.value) + + @property + def name(self) -> str: + """The range's coordinates. + """ + return self.xa_elem.name() + + @name.setter + def name(self, name: str): + self.set_property("name", name) + + @property + def text_color(self) -> XABase.XAColor: + """The text color of the range's cells. + """ + return XABase.XAColor(self.xa_elem.textColor()) + + @text_color.setter + def text_color(self, text_color: XABase.XAColor): + self.set_property('textColor', text_color.xa_elem) + + @property + def text_wrap(self) -> bool: + """Whether text within the range's cell should wrap. + """ + return self.xa_elem.textWrap() + + @text_wrap.setter + def text_wrap(self, text_wrap: bool): + self.set_property('textWrap', text_wrap) + + @property + def background_color(self) -> XABase.XAColor: + """The background color of the range's cells. + """ + return XABase.XAColor(self.xa_elem.backgroundColor()) + + @background_color.setter + def background_color(self, background_color: XABase.XAColor): + self.set_property('backgroundColor', background_color.xa_elem) + + @property + def vertical_alignment(self) -> XAiWorkApplication.Alignment: + """The vertical alignment of content in the range's cells. + """ + return XAiWorkApplication.Alignment(self.xa_elem.verticalAlignment()) + + @vertical_alignment.setter + def vertical_alignment(self, vertical_alignment: XAiWorkApplication.Alignment): + self.set_property('verticalAlignment', vertical_alignment.value) + +
[docs] def clear(self) -> Self: + """Clears the content of every cell in the range. + + :return: The range object + :rtype: Self + + :Example 1: Clear all cells in a table + + >>> import PyXA + >>> app = PyXA.Application("Keynote") + >>> range = app.documents()[0].slides()[0].tables()[0].cell_range + >>> range.clear() + + :Example 2: Clear all cells whose value is 3 + + >>> import PyXA + >>> app = PyXA.Application("Keynote") + >>> cells = app.documents()[0].slides()[0].tables()[0].cells() + >>> for cell in cells: + >>> if cell.value == 3: + >>> cell.clear() + + .. versionadded:: 0.1.1 + """ + self.xa_elem.clear() + return self
+ +
[docs] def merge(self) -> Self: + """Merges all cells in the range. + + :return: The range object + :rtype: Self + + :Example 1: Merge all cells in the first row of a table + + >>> import PyXA + >>> app = PyXA.Application("Keynote") + >>> table = app.documents()[0].slides()[0].tables()[0] + >>> row = table.rows()[0] + >>> row.merge() + + :Example 2: Merge all cells in the first column of a table + + >>> import PyXA + >>> app = PyXA.Application("Keynote") + >>> table = app.documents()[0].slides()[0].tables()[0] + >>> col = table.columns()[0] + >>> col.merge() + + .. note:: + + If you merge an entire row, then merge an entire column, all cells in the table will be merged. The same is true if the row and column operations are flipped. + + .. versionadded:: 0.1.1 + """ + self.xa_elem.merge() + return self
+ +
[docs] def unmerge(self) -> Self: + """Unmerges all cells in the range. + + :return: The range object + :rtype: Self + + :Example 1: Unmerge all merged cells + + >>> import PyXA + >>> app = PyXA.Application("Keynote") + >>> range = app.documents()[0].slides()[0].tables()[0].cell_range + >>> range.unmerge() + + .. versionadded:: 0.1.1 + """ + self.xa_elem.unmerge() + return self
+ +
[docs] def cells(self, filter: Union[dict, None] = None) -> 'XAiWorkCellList': + """Returns a list of cells, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned cells will have, or None + :type filter: Union[dict, None] + :return: The list of cells + :rtype: XAiWorkCellList + + .. versionadded:: 0.1.1 + """ + return self._new_element(self.xa_elem.cells(), XAiWorkCellList, filter)
+ +
[docs] def columns(self, filter: Union[dict, None] = None) -> 'XAiWorkColumnList': + """Returns a list of columns, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned columns will have, or None + :type filter: Union[dict, None] + :return: The list of columns + :rtype: XAiWorkColumnList + + .. versionadded:: 0.1.1 + """ + return self._new_element(self.xa_elem.columns(), XAiWorkColumnList, filter)
+ +
[docs] def rows(self, filter: Union[dict, None] = None) -> 'XAiWorkRowList': + """Returns a list of rows, as PyXA objects, matching the given filter. + + :param filter: A dictionary specifying property-value pairs that all returned rows will have, or None + :type filter: Union[dict, None] + :return: The list of rows + :rtype: XAiWorkRowList + + .. versionadded:: 0.1.1 + """ + return self._new_element(self.xa_elem.rows(), XAiWorkRowList, filter)
+ + def __repr__(self): + return "<" + str(type(self)) + str(self.name) + ">"
+ + + + +
[docs]class XAiWorkRowList(XAiWorkRangeList): + """A wrapper around lists of rows that employs fast enumeration techniques. + + All properties of rows can be called as methods on the wrapped list, returning a list containing each row's value for the property. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAiWorkRow) + +
[docs] def properties(self) -> list[dict]: + raw_dicts = self.xa_elem.arrayByApplyingSelector_("properties") or [] + pyxa_dicts = super().properties() + for index, raw_dict in enumerate(raw_dicts): + properties = pyxa_dicts[index] + properties["address"] = raw_dict["address"] + properties["height"] = raw_dict["height"] + return pyxa_dicts
+ +
[docs] def address(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("address") or [])
+ +
[docs] def height(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("height") or [])
+ +
[docs] def by_properties(self, properties: dict) -> Union['XAiWorkRow', None]: + raw_dict = {} + + if "background_color" in properties: + raw_dict["backgroundColor"] = properties["background_color"].xa_elem + + if "font_size" in properties: + raw_dict["fontSize"] = properties["font_size"] + + if "name" in properties: + raw_dict["name"] = properties["name"] + + if "format" in properties: + raw_dict["format"] = properties["format"].value + + if "vertical_alignment" in properties: + raw_dict["verticalAlignment"] = XAEvents.event_from_type_code(properties["vertical_alignment"].value) + + if "font_name" in properties: + raw_dict["fontName"] = properties["font_name"] + + if "alignment" in properties: + raw_dict["alignment"] = XAEvents.event_from_type_code(properties["alignment"].value) + + if "text_wrap" in properties: + raw_dict["textWrap"] = properties["text_wrap"] + + if "text_color" in properties: + raw_dict["textColor"] = properties["text_color"].xa_elem + + if "address" in properties: + raw_dict["address"] = properties["address"] + + if "height" in properties: + raw_dict["height"] = properties["height"] + + for page_range in self.xa_elem: + if all([raw_dict[x] == page_range.properties()[x] for x in raw_dict]): + return self._new_element(page_range, XAiWorkRow)
+ +
[docs] def by_address(self, address: float) -> Union['XAiWorkRow', None]: + return self.by_property("address", address)
+ +
[docs] def by_height(self, height: int) -> Union['XAiWorkRow', None]: + return self.by_property("height", height)
+ +
[docs]class XAiWorkRow(XAiWorkRange): + """A class for managing and interacting with table rows in Keynote. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the row. + """ + raw_dict = self.xa_elem.properties() + properties = super().properties + properties["address"] = raw_dict["address"] + properties["height"] = raw_dict["height"] + return properties + + @property + def address(self) -> int: + """The index of the row in the table. + """ + return self.xa_elem.address() + + @property + def height(self) -> float: + """The height of the row in pixels. + """ + return self.xa_elem.height() + + @height.setter + def height(self, height: float): + self.set_property('height', height)
+ + + + +
[docs]class XAiWorkColumnList(XAiWorkRangeList): + """A wrapper around lists of columns that employs fast enumeration techniques. + + All properties of columns can be called as methods on the wrapped list, returning a list containing each column's value for the property. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAiWorkColumn) + +
[docs] def properties(self) -> list[dict]: + raw_dicts = self.xa_elem.arrayByApplyingSelector_("properties") or [] + pyxa_dicts = super().properties() + for index, raw_dict in enumerate(raw_dicts): + properties = pyxa_dicts[index] + properties["address"] = raw_dict["address"] + properties["width"] = raw_dict["width"] + return pyxa_dicts
+ +
[docs] def address(self) -> list[float]: + return list(self.xa_elem.arrayByApplyingSelector_("address") or [])
+ +
[docs] def width(self) -> list[int]: + return list(self.xa_elem.arrayByApplyingSelector_("width") or [])
+ +
[docs] def by_properties(self, properties: dict) -> Union['XAiWorkColumn', None]: + raw_dict = {} + + if "background_color" in properties: + raw_dict["backgroundColor"] = properties["background_color"].xa_elem + + if "font_size" in properties: + raw_dict["fontSize"] = properties["font_size"] + + if "name" in properties: + raw_dict["name"] = properties["name"] + + if "format" in properties: + raw_dict["format"] = properties["format"].value + + if "vertical_alignment" in properties: + raw_dict["verticalAlignment"] = XAEvents.event_from_type_code(properties["vertical_alignment"].value) + + if "font_name" in properties: + raw_dict["fontName"] = properties["font_name"] + + if "alignment" in properties: + raw_dict["alignment"] = XAEvents.event_from_type_code(properties["alignment"].value) + + if "text_wrap" in properties: + raw_dict["textWrap"] = properties["text_wrap"] + + if "text_color" in properties: + raw_dict["textColor"] = properties["text_color"].xa_elem + + if "address" in properties: + raw_dict["address"] = properties["address"] + + if "width" in properties: + raw_dict["width"] = properties["width"] + + for page_range in self.xa_elem: + if all([raw_dict[x] == page_range.properties()[x] for x in raw_dict]): + return self._new_element(page_range, XAiWorkColumn)
+ +
[docs] def by_address(self, address: float) -> Union['XAiWorkColumn', None]: + return self.by_property("address", address)
+ +
[docs] def by_width(self, width: int) -> Union['XAiWorkColumn', None]: + return self.by_property("width", width)
+ +
[docs]class XAiWorkColumn(XAiWorkRange): + """A class for managing and interacting with table columns in Keynote. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the column. + """ + raw_dict = self.xa_elem.properties() + properties = super().properties + properties["address"] = raw_dict["address"] + properties["width"] = raw_dict["width"] + return properties + + @property + def address(self) -> int: + """The index of the column in the table. + """ + return self.xa_elem.address() + + @property + def width(self) -> float: + """The width of the column in pixels. + """ + return self.xa_elem.width() + + @width.setter + def width(self, width: float): + self.set_property('width', width)
+ + + + +
[docs]class XAiWorkCellList(XAiWorkRangeList): + """A wrapper around lists of cells that employs fast enumeration techniques. + + All properties of cells can be called as methods on the wrapped list, returning a list containing each cell's value for the property. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties: dict, filter: Union[dict, None] = None): + super().__init__(properties, filter, XAiWorkCell) + +
[docs] def properties(self) -> list[dict]: + raw_dicts = self.xa_elem.arrayByApplyingSelector_("properties") or [] + pyxa_dicts = super().properties() + for index, raw_dict in enumerate(raw_dicts): + properties = pyxa_dicts[index] + properties["formatted_value"] = raw_dict["formattedValue"] + properties["formula"] = raw_dict["formula"] + properties["value"] = raw_dict["value"] + properties["column"] = self._new_element(raw_dict["column"], XAiWorkColumn) + properties["row"] = self._new_element(raw_dict["row"], XAiWorkRow) + return pyxa_dicts
+ +
[docs] def formatted_value(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("formattedValue") or [])
+ +
[docs] def formula(self) -> list[str]: + return list(self.xa_elem.arrayByApplyingSelector_("formula") or [])
+ +
[docs] def value(self) -> list[Any]: + return list(self.xa_elem.arrayByApplyingSelector_("value") or [])
+ +
[docs] def column(self) -> XAiWorkColumnList: + ls = self.xa_elem.arrayByApplyingSelector_("column") or [] + return self._new_element(ls, XAiWorkColumnList)
+ +
[docs] def row(self) -> XAiWorkRowList: + ls = self.xa_elem.arrayByApplyingSelector_("row") or [] + return self._new_element(ls, XAiWorkRowList)
+ +
[docs] def by_properties(self, properties: dict) -> Union['XAiWorkCell', None]: + raw_dict = {} + + if "background_color" in properties: + raw_dict["backgroundColor"] = properties["background_color"].xa_elem + + if "font_size" in properties: + raw_dict["fontSize"] = properties["font_size"] + + if "name" in properties: + raw_dict["name"] = properties["name"] + + if "format" in properties: + raw_dict["format"] = properties["format"].value + + if "vertical_alignment" in properties: + raw_dict["verticalAlignment"] = XAEvents.event_from_type_code(properties["vertical_alignment"].value) + + if "font_name" in properties: + raw_dict["fontName"] = properties["font_name"] + + if "alignment" in properties: + raw_dict["alignment"] = XAEvents.event_from_type_code(properties["alignment"].value) + + if "text_wrap" in properties: + raw_dict["textWrap"] = properties["text_wrap"] + + if "text_color" in properties: + raw_dict["textColor"] = properties["text_color"].xa_elem + + if "formatted_value" in properties: + raw_dict["formattedValue"] = properties["formatted_value"] + + if "formula" in properties: + raw_dict["formula"] = properties["formula"] + + if "value" in properties: + raw_dict["value"] = properties["value"] + + if "column" in properties: + raw_dict["column"] = properties["column"].xa_elem + + if "row" in properties: + raw_dict["row"] = properties["row"].xa_elem + + for page_range in self.xa_elem: + if all([raw_dict[x] == page_range.properties()[x] for x in raw_dict]): + return self._new_element(page_range, XAiWorkCell)
+ +
[docs] def by_formatted_value(self, formatted_value: str) -> Union['XAiWorkCell', None]: + return self.by_property("formattedValue", formatted_value)
+ +
[docs] def by_formula(self, formula: str) -> Union['XAiWorkCell', None]: + return self.by_property("formula", formula)
+ +
[docs] def by_value(self, value: Any) -> Union['XAiWorkCell', None]: + return self.by_property("value", value)
+ +
[docs] def by_column(self, column: XAiWorkColumn) -> Union['XAiWorkCell', None]: + return self.by_property("column", column.xa_elem)
+ +
[docs] def by_row(self, row: XAiWorkRow) -> Union['XAiWorkCell', None]: + return self.by_property("row", row.xa_elem)
+ +
[docs]class XAiWorkCell(XAiWorkRange): + """A class for managing and interacting with table cells in Keynote. + + .. versionadded:: 0.1.1 + """ + def __init__(self, properties): + super().__init__(properties) + + @property + def properties(self) -> dict: + """All properties of the cell. + """ + raw_dict = self.xa_elem.properties() + properties = super().properties + properties["formatted_value"] = raw_dict["formattedValue"] + properties["formula"] = raw_dict["formula"] + properties["value"] = raw_dict["value"] + properties["column"] = self._new_element(raw_dict["column"], XAiWorkColumn) + properties["row"] = self._new_element(raw_dict["row"], XAiWorkRow) + return properties + + @property + def formatted_value(self) -> str: + """The formatted form of the value stored in the cell. + """ + return self.xa_elem.formattedValue() + + @property + def formula(self) -> str: + """The formula in the cell as text. + """ + return self.xa_elem.formula() + + @property + def value(self) -> Union[int, float, datetime, str, bool, None]: + """The value stored in the cell. + """ + return self.xa_elem.value().get() + + @value.setter + def value(self, value: Union[int, float, datetime, str, bool, None]): + self.set_property('value', value) + + @property + def column(self) -> XAiWorkColumn: + """The cell's column. + """ + return self._new_element(self.xa_elem.column(), XAiWorkColumn) + + @property + def row(self) -> XAiWorkRow: + """The cell's row. + """ + return self._new_element(self.xa_elem.row(), XAiWorkRow)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/index.html b/docs/_modules/index.html new file mode 100644 index 0000000..32963a7 --- /dev/null +++ b/docs/_modules/index.html @@ -0,0 +1,153 @@ + + + + + + Overview: module code — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ + + + \ No newline at end of file diff --git a/docs/source/about/index.rst b/docs/_sources/about/index.rst.txt similarity index 100% rename from docs/source/about/index.rst rename to docs/_sources/about/index.rst.txt diff --git a/docs/source/bugs.rst b/docs/_sources/bugs.rst.txt similarity index 100% rename from docs/source/bugs.rst rename to docs/_sources/bugs.rst.txt diff --git a/docs/source/index.rst b/docs/_sources/index.rst.txt similarity index 100% rename from docs/source/index.rst rename to docs/_sources/index.rst.txt diff --git a/docs/source/reference/additions/learn.rst b/docs/_sources/reference/additions/learn.rst.txt similarity index 100% rename from docs/source/reference/additions/learn.rst rename to docs/_sources/reference/additions/learn.rst.txt diff --git a/docs/source/reference/additions/speech.rst b/docs/_sources/reference/additions/speech.rst.txt similarity index 100% rename from docs/source/reference/additions/speech.rst rename to docs/_sources/reference/additions/speech.rst.txt diff --git a/docs/source/reference/additions/ui.rst b/docs/_sources/reference/additions/ui.rst.txt similarity index 100% rename from docs/source/reference/additions/ui.rst rename to docs/_sources/reference/additions/ui.rst.txt diff --git a/docs/source/reference/additions/utils.rst b/docs/_sources/reference/additions/utils.rst.txt similarity index 100% rename from docs/source/reference/additions/utils.rst rename to docs/_sources/reference/additions/utils.rst.txt diff --git a/docs/source/reference/additions/web.rst b/docs/_sources/reference/additions/web.rst.txt similarity index 100% rename from docs/source/reference/additions/web.rst rename to docs/_sources/reference/additions/web.rst.txt diff --git a/docs/source/reference/apps/automator.rst b/docs/_sources/reference/apps/automator.rst.txt similarity index 100% rename from docs/source/reference/apps/automator.rst rename to docs/_sources/reference/apps/automator.rst.txt diff --git a/docs/source/reference/apps/bike.rst b/docs/_sources/reference/apps/bike.rst.txt similarity index 100% rename from docs/source/reference/apps/bike.rst rename to docs/_sources/reference/apps/bike.rst.txt diff --git a/docs/source/reference/apps/calculator.rst b/docs/_sources/reference/apps/calculator.rst.txt similarity index 100% rename from docs/source/reference/apps/calculator.rst rename to docs/_sources/reference/apps/calculator.rst.txt diff --git a/docs/source/reference/apps/calendar.rst b/docs/_sources/reference/apps/calendar.rst.txt similarity index 100% rename from docs/source/reference/apps/calendar.rst rename to docs/_sources/reference/apps/calendar.rst.txt diff --git a/docs/source/reference/apps/cardhop.rst b/docs/_sources/reference/apps/cardhop.rst.txt similarity index 100% rename from docs/source/reference/apps/cardhop.rst rename to docs/_sources/reference/apps/cardhop.rst.txt diff --git a/docs/source/reference/apps/chromium.rst b/docs/_sources/reference/apps/chromium.rst.txt similarity index 100% rename from docs/source/reference/apps/chromium.rst rename to docs/_sources/reference/apps/chromium.rst.txt diff --git a/docs/source/reference/apps/console.rst b/docs/_sources/reference/apps/console.rst.txt similarity index 100% rename from docs/source/reference/apps/console.rst rename to docs/_sources/reference/apps/console.rst.txt diff --git a/docs/source/reference/apps/contacts.rst b/docs/_sources/reference/apps/contacts.rst.txt similarity index 100% rename from docs/source/reference/apps/contacts.rst rename to docs/_sources/reference/apps/contacts.rst.txt diff --git a/docs/source/reference/apps/dictionary.rst b/docs/_sources/reference/apps/dictionary.rst.txt similarity index 100% rename from docs/source/reference/apps/dictionary.rst rename to docs/_sources/reference/apps/dictionary.rst.txt diff --git a/docs/source/reference/apps/drafts.rst b/docs/_sources/reference/apps/drafts.rst.txt similarity index 100% rename from docs/source/reference/apps/drafts.rst rename to docs/_sources/reference/apps/drafts.rst.txt diff --git a/docs/source/reference/apps/fantastical.rst b/docs/_sources/reference/apps/fantastical.rst.txt similarity index 100% rename from docs/source/reference/apps/fantastical.rst rename to docs/_sources/reference/apps/fantastical.rst.txt diff --git a/docs/source/reference/apps/finder.rst b/docs/_sources/reference/apps/finder.rst.txt similarity index 100% rename from docs/source/reference/apps/finder.rst rename to docs/_sources/reference/apps/finder.rst.txt diff --git a/docs/source/reference/apps/flow.rst b/docs/_sources/reference/apps/flow.rst.txt similarity index 100% rename from docs/source/reference/apps/flow.rst rename to docs/_sources/reference/apps/flow.rst.txt diff --git a/docs/source/reference/apps/fontbook.rst b/docs/_sources/reference/apps/fontbook.rst.txt similarity index 100% rename from docs/source/reference/apps/fontbook.rst rename to docs/_sources/reference/apps/fontbook.rst.txt diff --git a/docs/source/reference/apps/hammerspoon.rst b/docs/_sources/reference/apps/hammerspoon.rst.txt similarity index 100% rename from docs/source/reference/apps/hammerspoon.rst rename to docs/_sources/reference/apps/hammerspoon.rst.txt diff --git a/docs/source/reference/apps/imageevents.rst b/docs/_sources/reference/apps/imageevents.rst.txt similarity index 100% rename from docs/source/reference/apps/imageevents.rst rename to docs/_sources/reference/apps/imageevents.rst.txt diff --git a/docs/source/reference/apps/iterm.rst b/docs/_sources/reference/apps/iterm.rst.txt similarity index 100% rename from docs/source/reference/apps/iterm.rst rename to docs/_sources/reference/apps/iterm.rst.txt diff --git a/docs/source/reference/apps/iwork.rst b/docs/_sources/reference/apps/iwork.rst.txt similarity index 100% rename from docs/source/reference/apps/iwork.rst rename to docs/_sources/reference/apps/iwork.rst.txt diff --git a/docs/source/reference/apps/keynote.rst b/docs/_sources/reference/apps/keynote.rst.txt similarity index 100% rename from docs/source/reference/apps/keynote.rst rename to docs/_sources/reference/apps/keynote.rst.txt diff --git a/docs/source/reference/apps/mail.rst b/docs/_sources/reference/apps/mail.rst.txt similarity index 100% rename from docs/source/reference/apps/mail.rst rename to docs/_sources/reference/apps/mail.rst.txt diff --git a/docs/source/reference/apps/maps.rst b/docs/_sources/reference/apps/maps.rst.txt similarity index 100% rename from docs/source/reference/apps/maps.rst rename to docs/_sources/reference/apps/maps.rst.txt diff --git a/docs/source/reference/apps/media.rst b/docs/_sources/reference/apps/media.rst.txt similarity index 100% rename from docs/source/reference/apps/media.rst rename to docs/_sources/reference/apps/media.rst.txt diff --git a/docs/source/reference/apps/messages.rst b/docs/_sources/reference/apps/messages.rst.txt similarity index 100% rename from docs/source/reference/apps/messages.rst rename to docs/_sources/reference/apps/messages.rst.txt diff --git a/docs/source/reference/apps/music.rst b/docs/_sources/reference/apps/music.rst.txt similarity index 100% rename from docs/source/reference/apps/music.rst rename to docs/_sources/reference/apps/music.rst.txt diff --git a/docs/source/reference/apps/notes.rst b/docs/_sources/reference/apps/notes.rst.txt similarity index 100% rename from docs/source/reference/apps/notes.rst rename to docs/_sources/reference/apps/notes.rst.txt diff --git a/docs/source/reference/apps/numbers.rst b/docs/_sources/reference/apps/numbers.rst.txt similarity index 100% rename from docs/source/reference/apps/numbers.rst rename to docs/_sources/reference/apps/numbers.rst.txt diff --git a/docs/source/reference/apps/omnioutliner.rst b/docs/_sources/reference/apps/omnioutliner.rst.txt similarity index 100% rename from docs/source/reference/apps/omnioutliner.rst rename to docs/_sources/reference/apps/omnioutliner.rst.txt diff --git a/docs/source/reference/apps/pages.rst b/docs/_sources/reference/apps/pages.rst.txt similarity index 100% rename from docs/source/reference/apps/pages.rst rename to docs/_sources/reference/apps/pages.rst.txt diff --git a/docs/source/reference/apps/photos.rst b/docs/_sources/reference/apps/photos.rst.txt similarity index 100% rename from docs/source/reference/apps/photos.rst rename to docs/_sources/reference/apps/photos.rst.txt diff --git a/docs/source/reference/apps/preview.rst b/docs/_sources/reference/apps/preview.rst.txt similarity index 100% rename from docs/source/reference/apps/preview.rst rename to docs/_sources/reference/apps/preview.rst.txt diff --git a/docs/source/reference/apps/quicktimeplayer.rst b/docs/_sources/reference/apps/quicktimeplayer.rst.txt similarity index 100% rename from docs/source/reference/apps/quicktimeplayer.rst rename to docs/_sources/reference/apps/quicktimeplayer.rst.txt diff --git a/docs/source/reference/apps/reminders.rst b/docs/_sources/reference/apps/reminders.rst.txt similarity index 100% rename from docs/source/reference/apps/reminders.rst rename to docs/_sources/reference/apps/reminders.rst.txt diff --git a/docs/source/reference/apps/rstudio.rst b/docs/_sources/reference/apps/rstudio.rst.txt similarity index 100% rename from docs/source/reference/apps/rstudio.rst rename to docs/_sources/reference/apps/rstudio.rst.txt diff --git a/docs/source/reference/apps/safari.rst b/docs/_sources/reference/apps/safari.rst.txt similarity index 100% rename from docs/source/reference/apps/safari.rst rename to docs/_sources/reference/apps/safari.rst.txt diff --git a/docs/source/reference/apps/shortcuts.rst b/docs/_sources/reference/apps/shortcuts.rst.txt similarity index 100% rename from docs/source/reference/apps/shortcuts.rst rename to docs/_sources/reference/apps/shortcuts.rst.txt diff --git a/docs/source/reference/apps/spotify.rst b/docs/_sources/reference/apps/spotify.rst.txt similarity index 100% rename from docs/source/reference/apps/spotify.rst rename to docs/_sources/reference/apps/spotify.rst.txt diff --git a/docs/source/reference/apps/stocks.rst b/docs/_sources/reference/apps/stocks.rst.txt similarity index 100% rename from docs/source/reference/apps/stocks.rst rename to docs/_sources/reference/apps/stocks.rst.txt diff --git a/docs/source/reference/apps/systemevents.rst b/docs/_sources/reference/apps/systemevents.rst.txt similarity index 100% rename from docs/source/reference/apps/systemevents.rst rename to docs/_sources/reference/apps/systemevents.rst.txt diff --git a/docs/source/reference/apps/systempreferences.rst b/docs/_sources/reference/apps/systempreferences.rst.txt similarity index 100% rename from docs/source/reference/apps/systempreferences.rst rename to docs/_sources/reference/apps/systempreferences.rst.txt diff --git a/docs/source/reference/apps/terminal.rst b/docs/_sources/reference/apps/terminal.rst.txt similarity index 100% rename from docs/source/reference/apps/terminal.rst rename to docs/_sources/reference/apps/terminal.rst.txt diff --git a/docs/source/reference/apps/textedit.rst b/docs/_sources/reference/apps/textedit.rst.txt similarity index 100% rename from docs/source/reference/apps/textedit.rst rename to docs/_sources/reference/apps/textedit.rst.txt diff --git a/docs/source/reference/apps/tv.rst b/docs/_sources/reference/apps/tv.rst.txt similarity index 100% rename from docs/source/reference/apps/tv.rst rename to docs/_sources/reference/apps/tv.rst.txt diff --git a/docs/source/reference/apps/vlc.rst b/docs/_sources/reference/apps/vlc.rst.txt similarity index 100% rename from docs/source/reference/apps/vlc.rst rename to docs/_sources/reference/apps/vlc.rst.txt diff --git a/docs/source/reference/index.rst b/docs/_sources/reference/index.rst.txt similarity index 100% rename from docs/source/reference/index.rst rename to docs/_sources/reference/index.rst.txt diff --git a/docs/source/reference/pyxa.rst b/docs/_sources/reference/pyxa.rst.txt similarity index 100% rename from docs/source/reference/pyxa.rst rename to docs/_sources/reference/pyxa.rst.txt diff --git a/docs/source/reference/xabase.rst b/docs/_sources/reference/xabase.rst.txt similarity index 100% rename from docs/source/reference/xabase.rst rename to docs/_sources/reference/xabase.rst.txt diff --git a/docs/source/reference/xabasescriptable.rst b/docs/_sources/reference/xabasescriptable.rst.txt similarity index 100% rename from docs/source/reference/xabasescriptable.rst rename to docs/_sources/reference/xabasescriptable.rst.txt diff --git a/docs/source/reference/xaerrors.rst b/docs/_sources/reference/xaerrors.rst.txt similarity index 100% rename from docs/source/reference/xaerrors.rst rename to docs/_sources/reference/xaerrors.rst.txt diff --git a/docs/source/reference/xaprotocols.rst b/docs/_sources/reference/xaprotocols.rst.txt similarity index 100% rename from docs/source/reference/xaprotocols.rst rename to docs/_sources/reference/xaprotocols.rst.txt diff --git a/docs/source/reference/xatypes.rst b/docs/_sources/reference/xatypes.rst.txt similarity index 100% rename from docs/source/reference/xatypes.rst rename to docs/_sources/reference/xatypes.rst.txt diff --git a/docs/source/tutorial/applescript.rst b/docs/_sources/tutorial/applescript.rst.txt similarity index 100% rename from docs/source/tutorial/applescript.rst rename to docs/_sources/tutorial/applescript.rst.txt diff --git a/docs/source/tutorial/apps/automator/index.rst b/docs/_sources/tutorial/apps/automator/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/automator/index.rst rename to docs/_sources/tutorial/apps/automator/index.rst.txt diff --git a/docs/source/tutorial/apps/automator/tutorial1.rst b/docs/_sources/tutorial/apps/automator/tutorial1.rst.txt similarity index 100% rename from docs/source/tutorial/apps/automator/tutorial1.rst rename to docs/_sources/tutorial/apps/automator/tutorial1.rst.txt diff --git a/docs/source/tutorial/apps/bike/index.rst b/docs/_sources/tutorial/apps/bike/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/bike/index.rst rename to docs/_sources/tutorial/apps/bike/index.rst.txt diff --git a/docs/source/tutorial/apps/calculator/index.rst b/docs/_sources/tutorial/apps/calculator/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/calculator/index.rst rename to docs/_sources/tutorial/apps/calculator/index.rst.txt diff --git a/docs/source/tutorial/apps/calendar/index.rst b/docs/_sources/tutorial/apps/calendar/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/calendar/index.rst rename to docs/_sources/tutorial/apps/calendar/index.rst.txt diff --git a/docs/source/tutorial/apps/cardhop/index.rst b/docs/_sources/tutorial/apps/cardhop/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/cardhop/index.rst rename to docs/_sources/tutorial/apps/cardhop/index.rst.txt diff --git a/docs/source/tutorial/apps/chromium/index.rst b/docs/_sources/tutorial/apps/chromium/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/chromium/index.rst rename to docs/_sources/tutorial/apps/chromium/index.rst.txt diff --git a/docs/source/tutorial/apps/console/index.rst b/docs/_sources/tutorial/apps/console/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/console/index.rst rename to docs/_sources/tutorial/apps/console/index.rst.txt diff --git a/docs/source/tutorial/apps/contacts/index.rst b/docs/_sources/tutorial/apps/contacts/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/contacts/index.rst rename to docs/_sources/tutorial/apps/contacts/index.rst.txt diff --git a/docs/source/tutorial/apps/dictionary/index.rst b/docs/_sources/tutorial/apps/dictionary/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/dictionary/index.rst rename to docs/_sources/tutorial/apps/dictionary/index.rst.txt diff --git a/docs/source/tutorial/apps/drafts/index.rst b/docs/_sources/tutorial/apps/drafts/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/drafts/index.rst rename to docs/_sources/tutorial/apps/drafts/index.rst.txt diff --git a/docs/source/tutorial/apps/fantastical/index.rst b/docs/_sources/tutorial/apps/fantastical/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/fantastical/index.rst rename to docs/_sources/tutorial/apps/fantastical/index.rst.txt diff --git a/docs/source/tutorial/apps/finder/index.rst b/docs/_sources/tutorial/apps/finder/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/finder/index.rst rename to docs/_sources/tutorial/apps/finder/index.rst.txt diff --git a/docs/source/tutorial/apps/flow/index.rst b/docs/_sources/tutorial/apps/flow/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/flow/index.rst rename to docs/_sources/tutorial/apps/flow/index.rst.txt diff --git a/docs/source/tutorial/apps/fontbook/index.rst b/docs/_sources/tutorial/apps/fontbook/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/fontbook/index.rst rename to docs/_sources/tutorial/apps/fontbook/index.rst.txt diff --git a/docs/source/tutorial/apps/hammerspoon/index.rst b/docs/_sources/tutorial/apps/hammerspoon/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/hammerspoon/index.rst rename to docs/_sources/tutorial/apps/hammerspoon/index.rst.txt diff --git a/docs/source/tutorial/apps/imageevents/index.rst b/docs/_sources/tutorial/apps/imageevents/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/imageevents/index.rst rename to docs/_sources/tutorial/apps/imageevents/index.rst.txt diff --git a/docs/source/tutorial/apps/index.rst b/docs/_sources/tutorial/apps/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/index.rst rename to docs/_sources/tutorial/apps/index.rst.txt diff --git a/docs/source/tutorial/apps/iterm/index.rst b/docs/_sources/tutorial/apps/iterm/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/iterm/index.rst rename to docs/_sources/tutorial/apps/iterm/index.rst.txt diff --git a/docs/source/tutorial/apps/keynote/index.rst b/docs/_sources/tutorial/apps/keynote/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/keynote/index.rst rename to docs/_sources/tutorial/apps/keynote/index.rst.txt diff --git a/docs/source/tutorial/apps/mail/index.rst b/docs/_sources/tutorial/apps/mail/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/mail/index.rst rename to docs/_sources/tutorial/apps/mail/index.rst.txt diff --git a/docs/source/tutorial/apps/maps/index.rst b/docs/_sources/tutorial/apps/maps/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/maps/index.rst rename to docs/_sources/tutorial/apps/maps/index.rst.txt diff --git a/docs/source/tutorial/apps/messages/index.rst b/docs/_sources/tutorial/apps/messages/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/messages/index.rst rename to docs/_sources/tutorial/apps/messages/index.rst.txt diff --git a/docs/source/tutorial/apps/music/index.rst b/docs/_sources/tutorial/apps/music/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/music/index.rst rename to docs/_sources/tutorial/apps/music/index.rst.txt diff --git a/docs/source/tutorial/apps/notes/index.rst b/docs/_sources/tutorial/apps/notes/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/notes/index.rst rename to docs/_sources/tutorial/apps/notes/index.rst.txt diff --git a/docs/source/tutorial/apps/numbers/index.rst b/docs/_sources/tutorial/apps/numbers/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/numbers/index.rst rename to docs/_sources/tutorial/apps/numbers/index.rst.txt diff --git a/docs/source/tutorial/apps/omnioutliner/index.rst b/docs/_sources/tutorial/apps/omnioutliner/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/omnioutliner/index.rst rename to docs/_sources/tutorial/apps/omnioutliner/index.rst.txt diff --git a/docs/source/tutorial/apps/pages/index.rst b/docs/_sources/tutorial/apps/pages/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/pages/index.rst rename to docs/_sources/tutorial/apps/pages/index.rst.txt diff --git a/docs/source/tutorial/apps/photos/index.rst b/docs/_sources/tutorial/apps/photos/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/photos/index.rst rename to docs/_sources/tutorial/apps/photos/index.rst.txt diff --git a/docs/source/tutorial/apps/preview/index.rst b/docs/_sources/tutorial/apps/preview/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/preview/index.rst rename to docs/_sources/tutorial/apps/preview/index.rst.txt diff --git a/docs/source/tutorial/apps/quicktimeplayer/index.rst b/docs/_sources/tutorial/apps/quicktimeplayer/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/quicktimeplayer/index.rst rename to docs/_sources/tutorial/apps/quicktimeplayer/index.rst.txt diff --git a/docs/source/tutorial/apps/reminders/index.rst b/docs/_sources/tutorial/apps/reminders/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/reminders/index.rst rename to docs/_sources/tutorial/apps/reminders/index.rst.txt diff --git a/docs/source/tutorial/apps/rstudio/index.rst b/docs/_sources/tutorial/apps/rstudio/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/rstudio/index.rst rename to docs/_sources/tutorial/apps/rstudio/index.rst.txt diff --git a/docs/source/tutorial/apps/safari/index.rst b/docs/_sources/tutorial/apps/safari/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/safari/index.rst rename to docs/_sources/tutorial/apps/safari/index.rst.txt diff --git a/docs/source/tutorial/apps/shortcuts/index.rst b/docs/_sources/tutorial/apps/shortcuts/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/shortcuts/index.rst rename to docs/_sources/tutorial/apps/shortcuts/index.rst.txt diff --git a/docs/source/tutorial/apps/spotify/index.rst b/docs/_sources/tutorial/apps/spotify/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/spotify/index.rst rename to docs/_sources/tutorial/apps/spotify/index.rst.txt diff --git a/docs/source/tutorial/apps/stocks/index.rst b/docs/_sources/tutorial/apps/stocks/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/stocks/index.rst rename to docs/_sources/tutorial/apps/stocks/index.rst.txt diff --git a/docs/source/tutorial/apps/systemevents/index.rst b/docs/_sources/tutorial/apps/systemevents/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/systemevents/index.rst rename to docs/_sources/tutorial/apps/systemevents/index.rst.txt diff --git a/docs/source/tutorial/apps/systempreferences/index.rst b/docs/_sources/tutorial/apps/systempreferences/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/systempreferences/index.rst rename to docs/_sources/tutorial/apps/systempreferences/index.rst.txt diff --git a/docs/source/tutorial/apps/terminal/index.rst b/docs/_sources/tutorial/apps/terminal/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/terminal/index.rst rename to docs/_sources/tutorial/apps/terminal/index.rst.txt diff --git a/docs/source/tutorial/apps/textedit/index.rst b/docs/_sources/tutorial/apps/textedit/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/textedit/index.rst rename to docs/_sources/tutorial/apps/textedit/index.rst.txt diff --git a/docs/source/tutorial/apps/tv/index.rst b/docs/_sources/tutorial/apps/tv/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/tv/index.rst rename to docs/_sources/tutorial/apps/tv/index.rst.txt diff --git a/docs/source/tutorial/apps/vlc/index.rst b/docs/_sources/tutorial/apps/vlc/index.rst.txt similarity index 100% rename from docs/source/tutorial/apps/vlc/index.rst rename to docs/_sources/tutorial/apps/vlc/index.rst.txt diff --git a/docs/source/tutorial/appscript.rst b/docs/_sources/tutorial/appscript.rst.txt similarity index 100% rename from docs/source/tutorial/appscript.rst rename to docs/_sources/tutorial/appscript.rst.txt diff --git a/docs/source/tutorial/clipboard.rst b/docs/_sources/tutorial/clipboard.rst.txt similarity index 100% rename from docs/source/tutorial/clipboard.rst rename to docs/_sources/tutorial/clipboard.rst.txt diff --git a/docs/source/tutorial/extensions/web/rssfeed.rst b/docs/_sources/tutorial/extensions/web/rssfeed.rst.txt similarity index 100% rename from docs/source/tutorial/extensions/web/rssfeed.rst rename to docs/_sources/tutorial/extensions/web/rssfeed.rst.txt diff --git a/docs/source/tutorial/images.rst b/docs/_sources/tutorial/images.rst.txt similarity index 100% rename from docs/source/tutorial/images.rst rename to docs/_sources/tutorial/images.rst.txt diff --git a/docs/source/tutorial/index.rst b/docs/_sources/tutorial/index.rst.txt similarity index 100% rename from docs/source/tutorial/index.rst rename to docs/_sources/tutorial/index.rst.txt diff --git a/docs/source/tutorial/lists.rst b/docs/_sources/tutorial/lists.rst.txt similarity index 100% rename from docs/source/tutorial/lists.rst rename to docs/_sources/tutorial/lists.rst.txt diff --git a/docs/source/tutorial/menubar.rst b/docs/_sources/tutorial/menubar.rst.txt similarity index 100% rename from docs/source/tutorial/menubar.rst rename to docs/_sources/tutorial/menubar.rst.txt diff --git a/docs/source/tutorial/spotlight.rst b/docs/_sources/tutorial/spotlight.rst.txt similarity index 100% rename from docs/source/tutorial/spotlight.rst rename to docs/_sources/tutorial/spotlight.rst.txt diff --git a/docs/source/tutorial/tips_tricks.rst b/docs/_sources/tutorial/tips_tricks.rst.txt similarity index 100% rename from docs/source/tutorial/tips_tricks.rst rename to docs/_sources/tutorial/tips_tricks.rst.txt diff --git a/docs/source/tutorial/ui_scripting.rst b/docs/_sources/tutorial/ui_scripting.rst.txt similarity index 100% rename from docs/source/tutorial/ui_scripting.rst rename to docs/_sources/tutorial/ui_scripting.rst.txt diff --git a/docs/source/tutorial/user_input.rst b/docs/_sources/tutorial/user_input.rst.txt similarity index 100% rename from docs/source/tutorial/user_input.rst rename to docs/_sources/tutorial/user_input.rst.txt diff --git a/docs/_static/_sphinx_javascript_frameworks_compat.js b/docs/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 0000000..8549469 --- /dev/null +++ b/docs/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,134 @@ +/* + * _sphinx_javascript_frameworks_compat.js + * ~~~~~~~~~~ + * + * Compatability shim for jQuery and underscores.js. + * + * WILL BE REMOVED IN Sphinx 6.0 + * xref RemovedInSphinx60Warning + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/docs/_static/assets/CPUMonitor.png b/docs/_static/assets/CPUMonitor.png new file mode 100644 index 0000000..3ab75c4 Binary files /dev/null and b/docs/_static/assets/CPUMonitor.png differ diff --git a/docs/source/_static/assets/Example3_Notes.png b/docs/_static/assets/Example3_Notes.png similarity index 100% rename from docs/source/_static/assets/Example3_Notes.png rename to docs/_static/assets/Example3_Notes.png diff --git a/docs/_static/assets/HelloMenu.png b/docs/_static/assets/HelloMenu.png new file mode 100644 index 0000000..f79fec5 Binary files /dev/null and b/docs/_static/assets/HelloMenu.png differ diff --git a/docs/_static/assets/JWSTMenuBar.png b/docs/_static/assets/JWSTMenuBar.png new file mode 100644 index 0000000..2f596d8 Binary files /dev/null and b/docs/_static/assets/JWSTMenuBar.png differ diff --git a/docs/_static/assets/MenuItemImages.png b/docs/_static/assets/MenuItemImages.png new file mode 100644 index 0000000..45171d8 Binary files /dev/null and b/docs/_static/assets/MenuItemImages.png differ diff --git a/docs/_static/assets/PrintHi.png b/docs/_static/assets/PrintHi.png new file mode 100644 index 0000000..0c84b2a Binary files /dev/null and b/docs/_static/assets/PrintHi.png differ diff --git a/docs/_static/assets/PrintHiImage.png b/docs/_static/assets/PrintHiImage.png new file mode 100644 index 0000000..09bf391 Binary files /dev/null and b/docs/_static/assets/PrintHiImage.png differ diff --git a/docs/source/_static/assets/PyXALogoLight.png b/docs/_static/assets/PyXALogoLight.png similarity index 100% rename from docs/source/_static/assets/PyXALogoLight.png rename to docs/_static/assets/PyXALogoLight.png diff --git a/docs/_static/assets/PyXALogoTransparent.png b/docs/_static/assets/PyXALogoTransparent.png new file mode 100644 index 0000000..6d8a9aa Binary files /dev/null and b/docs/_static/assets/PyXALogoTransparent.png differ diff --git a/docs/_static/basic.css b/docs/_static/basic.css new file mode 100644 index 0000000..4e9a9f1 --- /dev/null +++ b/docs/_static/basic.css @@ -0,0 +1,900 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs/_static/css/badge_only.css b/docs/_static/css/badge_only.css new file mode 100644 index 0000000..c718cee --- /dev/null +++ b/docs/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/docs/_static/css/fonts/Roboto-Slab-Bold.woff b/docs/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 0000000..6cb6000 Binary files /dev/null and b/docs/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 b/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 0000000..7059e23 Binary files /dev/null and b/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/docs/_static/css/fonts/Roboto-Slab-Regular.woff b/docs/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 0000000..f815f63 Binary files /dev/null and b/docs/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 b/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 0000000..f2c76e5 Binary files /dev/null and b/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.eot b/docs/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..e9f60ca Binary files /dev/null and b/docs/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.svg b/docs/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..855c845 --- /dev/null +++ b/docs/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_static/css/fonts/fontawesome-webfont.ttf b/docs/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..35acda2 Binary files /dev/null and b/docs/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.woff b/docs/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..400014a Binary files /dev/null and b/docs/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.woff2 b/docs/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..4d13fc6 Binary files /dev/null and b/docs/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/docs/_static/css/fonts/lato-bold-italic.woff b/docs/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 0000000..88ad05b Binary files /dev/null and b/docs/_static/css/fonts/lato-bold-italic.woff differ diff --git a/docs/_static/css/fonts/lato-bold-italic.woff2 b/docs/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 0000000..c4e3d80 Binary files /dev/null and b/docs/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/docs/_static/css/fonts/lato-bold.woff b/docs/_static/css/fonts/lato-bold.woff new file mode 100644 index 0000000..c6dff51 Binary files /dev/null and b/docs/_static/css/fonts/lato-bold.woff differ diff --git a/docs/_static/css/fonts/lato-bold.woff2 b/docs/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 0000000..bb19504 Binary files /dev/null and b/docs/_static/css/fonts/lato-bold.woff2 differ diff --git a/docs/_static/css/fonts/lato-normal-italic.woff b/docs/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 0000000..76114bc Binary files /dev/null and b/docs/_static/css/fonts/lato-normal-italic.woff differ diff --git a/docs/_static/css/fonts/lato-normal-italic.woff2 b/docs/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 0000000..3404f37 Binary files /dev/null and b/docs/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/docs/_static/css/fonts/lato-normal.woff b/docs/_static/css/fonts/lato-normal.woff new file mode 100644 index 0000000..ae1307f Binary files /dev/null and b/docs/_static/css/fonts/lato-normal.woff differ diff --git a/docs/_static/css/fonts/lato-normal.woff2 b/docs/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 0000000..3bf9843 Binary files /dev/null and b/docs/_static/css/fonts/lato-normal.woff2 differ diff --git a/docs/_static/css/theme.css b/docs/_static/css/theme.css new file mode 100644 index 0000000..09a1af8 --- /dev/null +++ b/docs/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dt:after,html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets,html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content dl.citation,.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content dl.citation code,.rst-content dl.citation tt,.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/docs/_static/doctools.js b/docs/_static/doctools.js new file mode 100644 index 0000000..527b876 --- /dev/null +++ b/docs/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js new file mode 100644 index 0000000..c99fee7 --- /dev/null +++ b/docs/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '0.1.2', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/docs/_static/file.png b/docs/_static/file.png new file mode 100644 index 0000000..a858a41 Binary files /dev/null and b/docs/_static/file.png differ diff --git a/docs/_static/graphviz.css b/docs/_static/graphviz.css new file mode 100644 index 0000000..19e7afd --- /dev/null +++ b/docs/_static/graphviz.css @@ -0,0 +1,19 @@ +/* + * graphviz.css + * ~~~~~~~~~~~~ + * + * Sphinx stylesheet -- graphviz extension. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +img.graphviz { + border: 0; + max-width: 100%; +} + +object.graphviz { + max-width: 100%; +} diff --git a/docs/_static/jquery-3.6.0.js b/docs/_static/jquery-3.6.0.js new file mode 100644 index 0000000..fc6c299 --- /dev/null +++ b/docs/_static/jquery-3.6.0.js @@ -0,0 +1,10881 @@ +/*! + * jQuery JavaScript Library v3.6.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2021-03-02T17:08Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.6.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.6 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2021-02-16 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + // Suppress native focus or blur as it's already being fired + // in leverageNative. + _default: function() { + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Project Overview

+
+

What is PyXA?

+

Python for Automation, or PyXA for short, is a wrapper around several macOS frameworks that enables AppleScript- and JXA-like control over macOS applications from within Python. PyXA’s objects and methods are based on applications’ scripting dictionaries and coupled with additional automation features supported by Apple’s macOS APIs.

+

PyXA was created with the goals of:

+
+
    +
  1. Simplifying the way automation tasks can be accomplished via Python

  2. +
  3. Introducing new features to macOS application scripting by simplifying complex procedures into simple, declarative methods

  4. +
  5. Disambiguating the capabilities of application scripting on macOS by providing easy-to-follow documentation throughout the entire project

  6. +
+
+

PyXA fills a gap where currently available frameworks ultimately fall short: it aims to be easy to learn for users accustomed to Python (or users who _must_ use Python). To that end, the package’s documentation contains numerous examples of how to use just about every method, and additional examples are provided covering specific use cases. PyXA’s code also serves as a source of examples for how to use PyObjC to interact with various macOS frameworks.

+
+
+

Is PyXA for Me?

+

PyXA is not intended to replace AppleScript or even to cover 100% of AppleScript’s capabilities. Instead, PyXA is meant to provide general convenience in accomplishing AppleScript and other automation tasks via Python, for the most commonly used applications. If you need a complete Apple Event bridge, or if you find that PyXA cannot handle your particular use case, consider using appscript or one of its derivatives. If you just need something that works in most circumstances, that has abundant examples for you to reference, and supports some additional automation features (such as opening Maps to a specific address), then PyXA might be a good fit for you.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/bugs.html b/docs/bugs.html new file mode 100644 index 0000000..fa3e246 --- /dev/null +++ b/docs/bugs.html @@ -0,0 +1,120 @@ + + + + + + + Bugs — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Bugs

+
+

Bugs in PyXA

+

If you find a bug within any of the code in PyXA’s GitHub Repository, please create a new issue on GitHub that describes the bug, the circumstances that cause the bug to occur, a description of your configuration, and any potential solutions that you might have thought of. After creating an issue, if you have the time and expertise to implement the fix, you can create a new pull request containing your changes. Make sure to follow the Guidelines for Contributing to PyXA’s Code.

+
+
+

Documentation Bugs

+

If you find a bug in this documentation, please create a new issue on PyXA’s GitHub Repository. If you have an idea for a potential fix, please include a description of the fix within the issue. After creating an issue, if you have the time and expertise to implement the fix, you can create a new pull request containing your changes. Make sure to follow the Guidelines for Contributing to PyXA’s Documentation.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/genindex.html b/docs/genindex.html new file mode 100644 index 0000000..8a59fb9 --- /dev/null +++ b/docs/genindex.html @@ -0,0 +1,17583 @@ + + + + + + Index — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Index

+ +
+ _ + | A + | B + | C + | D + | E + | F + | G + | H + | I + | J + | K + | L + | M + | N + | O + | P + | Q + | R + | S + | T + | U + | V + | W + | X + | Y + | Z + +
+

_

+ + + +
+ +

A

+ + + +
+ +

B

+ + + +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + + +
+ +

F

+ + + +
+ +

G

+ + + +
+ +

H

+ + + +
+ +

I

+ + + +
+ +

J

+ + + +
+ +

K

+ + + +
+ +

L

+ + + +
+ +

M

+ + + +
+ +

N

+ + + +
+ +

O

+ + + +
+ +

P

+ + + +
+ +

Q

+ + + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

U

+ + + +
+ +

V

+ + + +
+ +

W

+ + + +
+ +

X

+ + + +
+ +

Y

+ + + +
+ +

Z

+ + + +
+ + + +
+
+
+ +
+ +
+

© Copyright 2022, Stephen Kaplan.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..cf9bd8c --- /dev/null +++ b/docs/index.html @@ -0,0 +1,224 @@ + + + + + + + PyXA Documentation — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ + PyXA Logo +
+

PyXA Documentation

+

Python for Automation is a wrapper around Apple’s Scripting Bridge framework that enables AppleScript- and JXA-like control over macOS applications from within Python.

+
+

Contents:

+ +
+
+
+

Indices and tables

+ +
+

Note

+

This project is under active development.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/objects.inv b/docs/objects.inv new file mode 100644 index 0000000..ba4bec1 Binary files /dev/null and b/docs/objects.inv differ diff --git a/docs/py-modindex.html b/docs/py-modindex.html new file mode 100644 index 0000000..c30a8ad --- /dev/null +++ b/docs/py-modindex.html @@ -0,0 +1,386 @@ + + + + + + Python Module Index — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Python Module Index

+ +
+ p +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ p
+ PyXA +
    + PyXA.Additions.Learn +
    + PyXA.Additions.Speech +
    + PyXA.Additions.UI +
    + PyXA.Additions.Utils +
    + PyXA.Additions.Web +
    + PyXA.apps.Automator +
    + PyXA.apps.Bike +
    + PyXA.apps.Calculator +
    + PyXA.apps.Calendar +
    + PyXA.apps.Cardhop +
    + PyXA.apps.Chromium +
    + PyXA.apps.Console +
    + PyXA.apps.Contacts +
    + PyXA.apps.Dictionary +
    + PyXA.apps.Drafts +
    + PyXA.apps.Fantastical +
    + PyXA.apps.Finder +
    + PyXA.apps.Flow +
    + PyXA.apps.FontBook +
    + PyXA.apps.Hammerspoon +
    + PyXA.apps.ImageEvents +
    + PyXA.apps.iTerm +
    + PyXA.apps.iWorkApplicationBase +
    + PyXA.apps.Keynote +
    + PyXA.apps.Mail +
    + PyXA.apps.Maps +
    + PyXA.apps.MediaApplicationBase +
    + PyXA.apps.Messages +
    + PyXA.apps.Music +
    + PyXA.apps.Notes +
    + PyXA.apps.OmniOutliner +
    + PyXA.apps.Pages +
    + PyXA.apps.PhotosApp +
    + PyXA.apps.Preview +
    + PyXA.apps.QuickTimePlayer +
    + PyXA.apps.Reminders +
    + PyXA.apps.RStudio +
    + PyXA.apps.Safari +
    + PyXA.apps.Shortcuts +
    + PyXA.apps.Spotify +
    + PyXA.apps.Stocks +
    + PyXA.apps.SystemEvents +
    + PyXA.apps.SystemPreferences +
    + PyXA.apps.Terminal +
    + PyXA.apps.TextEdit +
    + PyXA.apps.TV +
    + PyXA.apps.VLC +
    + PyXA.PyXA +
    + PyXA.XABase +
    + PyXA.XABaseScriptable +
    + PyXA.XAErrors +
    + PyXA.XAProtocols +
    + PyXA.XATypes +
+ + +
+
+
+ +
+ +
+

© Copyright 2022, Stephen Kaplan.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/additions/learn.html b/docs/reference/additions/learn.html new file mode 100644 index 0000000..fffa7e3 --- /dev/null +++ b/docs/reference/additions/learn.html @@ -0,0 +1,388 @@ + + + + + + + Learn Module — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Learn Module

+
+

New in version 0.1.1.

+
+

A collection of classes for interfacing with built-in ML/AI features in macOS.

+

Classes:

+ + + + + + +

XALSM([dataset, from_file])

+
+
+class PyXA.Additions.Learn.XALSM(dataset: Optional[dict[str, list[str]]] = None, from_file: bool = False)[source]
+

Bases: object

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

add_category(name[, initial_data])

Adds a new category to the map, optionally filling the category with initial text data.

add_data(data)

Adds the provided data, organized by category, to the active map.

add_text(text, category[, weight])

Adds the given text to the specified category, applying an optional weight.

categorize_query(query[, num_results])

Categorizes the query based on the current weights in the map.

load()

Loads a map from an external file.

save(file_path)

Saves the map to an external file.

+
+
+add_category(name: str, initial_data: Optional[list[str]] = None) int[source]
+

Adds a new category to the map, optionally filling the category with initial text data.

+
+
Parameters:
+
    +
  • name (str) – The name of the category

  • +
  • initial_data (list[str]) – _description_

  • +
+
+
Returns:
+

The ID of the new category

+
+
Return type:
+

int

+
+
Example:
+

Add a category for cleaning-related Reddit posts to the previous example

+
+
+
>>> import PyXA
+>>> lsm = PyXA.XALSM.load("/Users/steven/Downloads/gaming-productivity.map")
+>>> lsm.add_category("cleaning", ["Curtains stained from eyelet reaction at dry cleaner", "How do I get these stains out of my pink denim overalls? from a black denim jacket that was drying next to them", "Cleaned my depression room after months 🥵", "Tip: 30 minute soak in Vinegar", "Regular floor squeegee pulled a surprising amount of pet hair out of my carpet!", "Before and after…", "It actually WORKS", "CLR is actually magic. (With some elbow grease)", "It was 100% worth it to scrape out my old moldy caulk and replace it. $5 dollars and a bit of time to make my shower look so much cleaner!", "Thanks to the person who recommended the Clorox Foamer. Before and after pics", "TIL you can dissolve inkstains with milk.", "Fixing cat scratch marks to couch using felting needle: Before and After", "Turns out BKF isn't a meme! Really satisfied with this stuff"])
+>>> print(lsm.categorize_query("Hidden survival base on our server"))
+>>> print(lsm.categorize_query("Your memory is FAR more powerful than you think… school just never taught us to use it properly."))
+>>> print(lsm.categorize_query("A carpet rake will change your life."))
+[(1, 0.7474805116653442)]
+[(2, 0.7167008519172668)]
+[(3, 0.797333300113678)]
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+add_data(data: dict[Union[int, str], list[str]]) list[int][source]
+

Adds the provided data, organized by category, to the active map.

+
+
Parameters:
+

data (dict[Union[int, str], list[str]]) – A dictionary specifying new or existing categories along with data to input into them

+
+
Returns:
+

A list of newly created category IDs

+
+
Return type:
+

int

+
+
Example:
+

Classify text by language

+
+
+
>>> import PyXA
+>>> lsm = PyXA.XALSM({})
+>>> lsm.add_data({
+>>>     # 1
+>>>     "english": ["brilliance outer jacket artist flat mosquito recover restrict official gas ratio publish domestic realize pure offset obstacle thigh favorite demonstration revive nest reader slide pudding symptom ballot auction characteristic complete Mars ridge student explosion dive emphasis the buy perfect motif penny a errand to fur far spirit random integration of with"],
+>>> 
+>>>     # 2
+>>>     "italian": ["da piazza proposta di legge legare nazionale a volte la salute bar farti farmi il pane aggiunta valore artista chiamata settentrionale scuro buio classe signori investitore in grado di fidanzato tagliare arriva successo altrimenti speciale esattamente definizione sorriso chiamo madre pulire esperto rurale vedo malattia era amici libertà l'account immaginare lingua soldi più perché"],
+>>> })
+>>> print(lsm.categorize_query("Here's to the crazy ones"))
+>>> print(lsm.categorize_query("Potete parlarmi in italiano"))
+[(1, 1.0)]
+[(2, 1.0)]
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+add_text(text: str, category: Union[int, str], weight: float = 1)[source]
+

Adds the given text to the specified category, applying an optional weight.

+
+
Parameters:
+
    +
  • text (str) – The text to add to the dataset

  • +
  • category (Union[int, str]) – The category to add the text to

  • +
  • weight (float, optional) – The weight to assign to the text entry, defaults to 1

  • +
+
+
Raises:
+

ValueError – The specified category must be a valid category name or ID

+
+
Example:
+

+
+
>>> import PyXA
+>>> lsm = PyXA.XALSM({"colors": [], "numbers": ["One", "Two", "Three"]})
+>>> lsm.add_text("red orange yellow green blue purple", "colors")
+>>> lsm.add_text("white black grey gray brown pink", 1)
+>>> print(lsm.categorize_query("pink"))
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+categorize_query(query: str, num_results: int = 1) list[tuple[int, float]][source]
+

Categorizes the query based on the current weights in the map.

+
+
Parameters:
+
    +
  • query (str) – The query to categorize

  • +
  • num_results (int, optional) – The number of categorizations to show, defaults to 1

  • +
+
+
Returns:
+

A list of tuples identifying categories and their associated score. A higher score indicates better fit. If not matching categorization is found, the list will be empty.

+
+
Return type:
+

list[tuple[int, float]]

+
+
Example:
+

+
+
>>> import PyXA
+>>> dataset = {
+>>>     # 1
+>>>     "color": ["red", "orange", "yellow", "green", "emerald", "blue", "purple", "white", "black", "brown", "pink", "grey", "gray"],
+>>> 
+>>>     # 2
+>>>     "number": ["One Two Three Four Five Six Seven Eight Nine Ten"]
+>>> }
+>>> lsm = PyXA.XALSM(dataset)
+>>> queries = ["emerald green three", "one hundred five", "One o' clock", "sky blue", "ninety nine", "purple pink"]
+>>> 
+>>> for query in queries:
+>>>     category = "Unknown"
+>>>     categorization_tuple = lsm.categorize_query(query)
+>>>     if len(categorization_tuple) > 0:
+>>>         category = list(dataset.keys())[categorization_tuple[0][0] - 1]
+>>>     print(query, "is a", category)
+emerald green three is a color
+one hundred five is a number
+One o' clock is a number
+sky blue is a color
+ninety nine is a number
+purple pink is a color
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+load() XALSM[source]
+

Loads a map from an external file.

+
+
Parameters:
+

file_path (Union[XABase.XAPath, str]) – The file path for load the map from

+
+
Returns:
+

The populated LSM object

+
+
Return type:
+

XALSM

+
+
Example:
+

Using the gaming vs. productivity Reddit post map

+
+
+
>>> import PyXA
+>>> lsm = PyXA.XALSM.load("/Users/steven/Downloads/gaming-productivity.map")
+>>> print(lsm.categorize_query("Hidden survival base on our server"))
+>>> print(lsm.categorize_query("Your memory is FAR more powerful than you think… school just never taught us to use it properly."))
+[(1, 0.7313863635063171)]
+[(2, 0.9422407150268555)]
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+save(file_path: Union[XAPath, str]) bool[source]
+

Saves the map to an external file.

+
+
Parameters:
+

file_path (Union[XABase.XAPath, str]) – The path to save the map at

+
+
Returns:
+

True if the map was saved successfully

+
+
Return type:
+

bool

+
+
Example:
+

Create a Reddit post classifier for gaming vs. productivity posts

+
+
+
>>> import PyXA
+>>> lsm = PyXA.XALSM({
+>>>     # 1
+>>>     "gaming": ["If you could vote on the 2017 Mob Vote again, which mob would you choose this time and why?", "Take your time, you got this", "My parents (late 70s) got me a ps5 controller for Christmas. I do not own a playstation 5...", "I got off the horse by accident right before a cutscene in red dead", "boy gamer", "Minesweeper 99 x 99, 1500 mines. Took me about 2.5 hours to finish, nerve-wracking. No one might care, but just wanted to share this.", "The perfect cosplay doesn’t ex...", "'Play until we lose'", "Can we please boycott Star Wars battlefront 2", "EA removed the refund button on their webpage, and now you have to call them and wait to get a refund.", "Train Simulator is so immersive!", "Been gaming with this dude for 15 years. Since Rainbow Six Vegas on 360. I have some good gaming memories with him. He tried but couldn’t get one. Little did he know I was able to get him one. Looking forward to playing another generation with him.", "EA will no longer have exclusive rights of the Star Wars games", "A ziplining contraption I created with 1000+ command blocks", "The steepest walkable staircase possible in 1.16", "I made a texture pack that gives mobs different facial expressions. Should I keep going?"],
+>>> 
+>>>     # 2
+>>>     "productivity": ["Looking for an alarm app that plays a really small alarm, doesn’t need to be switched off and doesn’t repeat.", "I want to build a second brain but I'm lost and don't know where to start.", "noise cancelling earplugs", "I have so much to do but I don't know where to start", "How to handle stressful work calls", "time tracking app/platform", "We just need to find ways to cope and keep moving forward.", "Ikigai - A Reason for Being", "Minimalist Productivity Tip: create two users on your computer ➞ One for normal use and leisure ➞ One for business/work only. I have nothing except the essentials logged in on my work user. Not even Messages or YouTube. It completely revolutionized my productivity 💸", "Trick yourself into productivity the same way you trick yourself into procrastination", "I spent 40 hours sifting through research papers to fix my mental clarity, focus, and productivity - I ended up going down a rabbit hole and figuring out it was all tied to sleep, even though I felt I sleep well - here's what I found.", "The Cycle of Procrastination. Always a good reminder", "'Most people underestimate what they can do in a year, and overestimate what they can do in a day' - When you work on getting 1% better each day you won't even recognize yourself in a year."],
+>>> })
+>>> lsm.save("/Users/steven/Downloads/gaming-productivity.map")
+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/additions/speech.html b/docs/reference/additions/speech.html new file mode 100644 index 0000000..0ea14cf --- /dev/null +++ b/docs/reference/additions/speech.html @@ -0,0 +1,467 @@ + + + + + + + Speech Module — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Speech Module

+
+

New in version 0.1.1.

+
+

A collection of classes for handling speak input and output.

+

Classes:

+ + + + + + + + + + + + +

XACommandDetector([command_function_map])

A command-based query detector.

XASpeech([message, voice, volume, rate])

XASpeechRecognizer([finish_conditions])

A rule-based query detector.

+
+
+class PyXA.Additions.Speech.XACommandDetector(command_function_map: Optional[dict[str, Callable[[], Any]]] = None)[source]
+

Bases: object

+

A command-based query detector.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + +

command_function_map

The dictionary of commands and corresponding functions to run upon detection

+

Methods:

+ + + + + + + + + +

listen()

Begins listening for the specified commands.

on_detect(command, function)

Adds or replaces a command to listen for upon calling listen(), and associates the given function with that command.

+
+
+command_function_map
+

The dictionary of commands and corresponding functions to run upon detection

+
+ +
+
+listen() Any[source]
+

Begins listening for the specified commands.

+
+
Returns:
+

The execution return value of the corresponding command function

+
+
Return type:
+

Any

+
+
Example:
+

+
+
>>> import PyXA
+>>> PyXA.speak("What app do you want to open?")
+>>> PyXA.XACommandDetector({
+>>>     "safari": PyXA.Application("Safari").activate,
+>>>     "messages": PyXA.Application("Messages").activate,
+>>>     "shortcuts": PyXA.Application("Shortcuts").activate,
+>>>     "mail": PyXA.Application("Mail").activate,
+>>>     "calendar": PyXA.Application("Calendar").activate,
+>>>     "notes": PyXA.Application("Notes").activate,
+>>>     "music": PyXA.Application("Music").activate,
+>>>     "tv": PyXA.Application("TV").activate,
+>>>     "pages": PyXA.Application("Pages").activate,
+>>>     "numbers": PyXA.Application("Numbers").activate,
+>>>     "keynote": PyXA.Application("Keynote").activate,
+>>> }).listen()
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+on_detect(command: str, function: Callable[[], Any])[source]
+

Adds or replaces a command to listen for upon calling listen(), and associates the given function with that command.

+
+
Parameters:
+
    +
  • command (str) – The command to listen for

  • +
  • function (Callable[[], Any]) – The function to call when the command is heard

  • +
+
+
Example:
+

+
+
>>> detector = PyXA.XACommandDetector()
+>>> detector.on_detect("go to google", PyXA.XAURL("http://google.com").open)
+>>> detector.listen()
+
+
+
+

New in version 0.0.9.

+
+
+ +
+ +
+
+class PyXA.Additions.Speech.XASpeech(message: str = '', voice: Optional[str] = None, volume: float = 0.5, rate: int = 200)[source]
+

Bases: object

+

Attributes:

+ + + + + + + + + + + + + + + +

message

The message to speak

rate

The speaking rate

voice

The voice that the message is spoken in

volume

The speaking volume

+

Methods:

+ + + + + + + + + +

speak([path])

Speaks the provided message using the desired voice, volume, and speaking rate.

voices()

Gets the list of voice names available on the system.

+
+
+message: str
+

The message to speak

+
+ +
+
+rate: int
+

The speaking rate

+
+ +
+
+speak(path: Optional[Union[str, XAPath]] = None)[source]
+

Speaks the provided message using the desired voice, volume, and speaking rate.

+
+
Parameters:
+

path (Union[str, XAPath, None], optional) – The path to a .AIFF file to output sound to, defaults to None

+
+
Example 1:
+

Speak a message aloud

+
+
+
>>> import PyXA
+>>> PyXA.XASpeech("This is a test").speak()
+
+
+
+
Example 2:
+

Output spoken message to an AIFF file

+
+
+
>>> import PyXA
+>>> speaker = PyXA.XASpeech("Hello, world!")
+>>> speaker.speak("/Users/steven/Downloads/Hello.AIFF")
+
+
+
+
Example 3:
+

Control the voice, volume, and speaking rate

+
+
+
>>> import PyXA
+>>> speaker = PyXA.XASpeech(
+>>>     message = "Hello, world!",
+>>>     voice = "Alex",
+>>>     volume = 1,
+>>>     rate = 500
+>>> )
+>>> speaker.speak()
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+voice: Optional[str]
+

The voice that the message is spoken in

+
+ +
+
+voices() list[str][source]
+

Gets the list of voice names available on the system.

+
+
Returns:
+

The list of voice names

+
+
Return type:
+

list[str]

+
+
Example:
+

+
+
>>> import PyXA
+>>> speaker = PyXA.XASpeech()
+>>> print(speaker.voices())
+['Agnes', 'Alex', 'Alice', 'Allison',
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+volume: float
+

The speaking volume

+
+ +
+ +
+
+class PyXA.Additions.Speech.XASpeechRecognizer(finish_conditions: Union[None, dict[Callable[[str], bool], Callable[[str], bool]]] = None)[source]
+

Bases: object

+

A rule-based query detector.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

finish_conditions

A dictionary of rules and associated methods to call when a rule evaluates to true

spoken_query

The recognized spoken input

start_time

The time that the Speech Recognizer begins listening

time_elapsed

The amount of time passed since the start time

+

Methods:

+ + + + + + + + + +

listen()

Begins listening for a query until a rule returns True.

on_detect(rule, method)

Sets the given rule to call the specified method if a spoken query passes the rule.

+
+
+finish_conditions: Callable[[str], bool]
+

A dictionary of rules and associated methods to call when a rule evaluates to true

+
+ +
+
+listen() Any[source]
+

Begins listening for a query until a rule returns True.

+
+
Returns:
+

The value returned by the method invoked upon matching some rule

+
+
Return type:
+

Any

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+on_detect(rule: Callable[[str], bool], method: Callable[[str], bool])[source]
+

Sets the given rule to call the specified method if a spoken query passes the rule.

+
+
Parameters:
+
    +
  • rule (Callable[[str], bool]) – A function that takes the spoken query as a parameter and returns a boolean value depending on whether the query passes a desired rule

  • +
  • method (Callable[[str], bool]) – A function that takes the spoken query as a parameter and acts on it

  • +
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+spoken_query: str
+

The recognized spoken input

+
+ +
+
+start_time: datetime
+

The time that the Speech Recognizer begins listening

+
+ +
+
+time_elapsed: timedelta
+

The amount of time passed since the start time

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/additions/ui.html b/docs/reference/additions/ui.html new file mode 100644 index 0000000..8df1c16 --- /dev/null +++ b/docs/reference/additions/ui.html @@ -0,0 +1,1768 @@ + + + + + + + UI Module — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

UI Module

+
+

New in version 0.1.2.

+
+

Classes for creating and displaying various UI elements.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XAAlert([title, message, style, buttons, icon])

A class for creating and interacting with an alert dialog window.

XAAlertStyle(value[, names, module, ...])

Options for which alert style an alert should display with.

XAHUD(message[, font_size, duration, ...])

A momentary HUD window that displays a message to the user.

XAImageMenuItem(parent, image[, tooltip])

A menu item containing an image.

XAMenuBar()

XAMenuBarMenu(content[, icon, tooltip, ...])

XAMenuBarMenuItem(parent, content[, icon, ...])

XANotification(text[, title, subtitle, ...])

A class for managing and interacting with notifications.

XASegmentedControl(segments[, action, args, ...])

A segmented control UI element.

XASegmentedControlMenuItem(parent, segments)

A menu item containing a segmented control.

XASeparatorMenuItem(parent)

A menu item containing a separator.

XASlider([action, args, value, min_value, ...])

A slider UI element.

XASliderMenuItem(parent[, tooltip, action, ...])

A menu item containing a slider.

XASwitch([action, args])

A switch UI element.

XASwitchMenuItem(parent[, label, tooltip, ...])

A menu item containing a labelled switch.

XATextMenuItem(parent, text[, icon, ...])

A menu item containing text.

XAURLMenuItem(parent, url[, label, icon, ...])

A menu item containing a URL or path.

+
+
+class PyXA.Additions.UI.XAAlert(title: str = 'Alert!', message: str = '', style: XAAlertStyle = XAAlertStyle.INFORMATIONAL, buttons=['Ok', 'Cancel'], icon: Optional[XAImage] = None)[source]
+

Bases: object

+

A class for creating and interacting with an alert dialog window.

+
+

New in version 0.0.5.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + +

buttons

A list specifying the buttons available for the user to click

icon

The icon displayed in the alert window

message

The detail message text of the alert

style

The style of the alert.

title

The title text of the alert

+

Methods:

+ + + + + + +

display()

Displays the alert.

+
+
+buttons: list[str]
+

A list specifying the buttons available for the user to click

+
+ +
+
+display() int[source]
+

Displays the alert.

+
+
Returns:
+

A number representing the button that the user selected, if any

+
+
Return type:
+

int

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+icon
+

The icon displayed in the alert window

+
+ +
+
+message: str
+

The detail message text of the alert

+
+ +
+
+style: XAAlertStyle
+

The style of the alert.

+
+

Deprecated since version 0.1.2: To customize the icon, set the icon attribute instead.

+
+
+ +
+
+title: str
+

The title text of the alert

+
+ +
+ +
+
+class PyXA.Additions.UI.XAAlertStyle(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for which alert style an alert should display with.

+

Attributes:

+ + + + + + + + + + + + +

CRITICAL

INFORMATIONAL

WARNING

+
+
+CRITICAL = 2
+
+ +
+
+INFORMATIONAL = 1
+
+ +
+
+WARNING = 0
+
+ +
+ +
+
+class PyXA.Additions.UI.XAHUD(message: str, font_size: int = 20, duration: float = 3.0, background_color: Optional[XAColor] = None, text_color: Optional[XAColor] = None)[source]
+

Bases: object

+

A momentary HUD window that displays a message to the user.

+
+

New in version 0.1.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + +

background_color

The background color of the HUD window

duration

The amount of time to display the HUD for, in seconds

font_size

The font size of the HUD's message text

message

The HUD's message text

text_color

The text color of the HUD's message text

+

Methods:

+ + + + + + +

display()

Displays the HUD in the center of the screen.

+
+
+background_color: XAColor
+

The background color of the HUD window

+
+ +
+
+display()[source]
+

Displays the HUD in the center of the screen.

+
+

New in version 0.1.2.

+
+
+ +
+
+duration: float
+

The amount of time to display the HUD for, in seconds

+
+ +
+
+font_size
+

The font size of the HUD’s message text

+
+ +
+
+message
+

The HUD’s message text

+
+ +
+
+text_color: XAColor
+

The text color of the HUD’s message text

+
+ +
+ +
+
+class PyXA.Additions.UI.XAImageMenuItem(parent: XAMenuBarMenu, image: Union[str, int, float, XAImage, XAURL, XAPath], tooltip: Optional[str] = None)[source]
+

Bases: XAMenuBarMenuItem

+

A menu item containing an image.

+
+

New in version 0.1.2.

+
+
+ +
+
+class PyXA.Additions.UI.XAMenuBar[source]
+

Bases: object

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + +

add_item(menu, item_name[, action, image, ...])

Adds an item to a menu, creating the menu if necessary.

add_menu(title[, image, tool_tip, ...])

Adds a new menu to be displayed in the system menu bar.

display()

Displays the custom menus on the menu bar.

new_menu([content, icon, tooltip, ...])

Adds a new menu to be displayed in the system menu bar.

remove_menu(id)

Removes a menu from the status bar.

set_image(item_name, image[, img_width, ...])

Sets the image displayed for a menu or menu item.

set_text(item_name, text)

Sets the text displayed for a menu or menu item.

+

Attributes:

+ + + + + + +

menus

The menus to be displayed in the status bar, keyed by ID

+
+
+add_item(menu: str, item_name: str, action: Optional[Callable[[], None]] = None, image: Optional[XAImage] = None, img_width: int = 20, img_height: int = 20)[source]
+

Adds an item to a menu, creating the menu if necessary.

+
+
Parameters:
+
    +
  • menu (str) – The name of the menu to add an item to, or the name of the menu to create

  • +
  • item_name (str) – The name of the item

  • +
  • action (Callable[[], None]) – The method to associate with the item (the method called when the item is clicked)

  • +
  • image (Union[XABase.XAImage, None], optional) – The image for the item, defaults to None

  • +
  • img_width (int, optional) – The width of image, in pixels, defaults to 30

  • +
  • img_height (int, optional) – The height of the image, in pixels, defaults to 30

  • +
+
+
Example:
+

+
+
>>> import PyXA
+>>> menu_bar = PyXA.XAMenuBar()
+>>> 
+>>> menu_bar.add_menu("Menu 1")
+>>> menu_bar.add_item(menu="Menu 1", item_name="Item 1", method=lambda : print("Action 1"))
+>>> menu_bar.add_item(menu="Menu 1", item_name="Item 2", method=lambda : print("Action 2"))
+>>> 
+>>> menu_bar.add_item(menu="Menu 2", item_name="Item 1", method=lambda : print("Action 1"))
+>>> img = PyXA.XAImage("/Users/exampleUser/Downloads/example.jpg")
+>>> menu_bar.add_item("Menu 2", "Item 1", lambda : print("Action 1"), image=img, img_width=100)
+>>> menu_bar.display()
+
+
+
+

Deprecated since version 0.1.1: Use XAMenuBarMenu.new_item() instead.

+
+
+

New in version 0.0.9.

+
+
+ +
+
+add_menu(title: str, image: Optional[XAImage] = None, tool_tip: Optional[str] = None, img_width: int = 30, img_height: int = 30)[source]
+

Adds a new menu to be displayed in the system menu bar.

+
+
Parameters:
+
    +
  • title (str) – The name of the menu

  • +
  • image (Union[XABase.XAImage, None], optional) – The image to display for the menu, defaults to None

  • +
  • tool_tip (Union[str, None], optional) – The tooltip to display on hovering over the menu, defaults to None

  • +
  • img_width (int, optional) – The width of the image, in pixels, defaults to 30

  • +
  • img_height (int, optional) – The height of the image, in pixels, defaults to 30

  • +
+
+
Example:
+

+
+
>>> import PyXA
+>>> menu_bar = PyXA.XAMenuBar()
+>>> img = PyXA.XAImage("/Users/steven/Downloads/Blackness.jpg")
+>>> menu_bar.add_menu("Menu 1", image=img, img_width=100, img_height=100)
+>>> menu_bar.display()
+
+
+
+

Deprecated since version 0.1.1: Use new_menu() instead.

+
+
+

New in version 0.0.9.

+
+
+ +
+
+display()[source]
+

Displays the custom menus on the menu bar.

+
+
Example:
+

+
+
>>> import PyXA
+>>> menu_bar = PyXA.XAMenuBar()
+>>> menu_bar.new_menu("🔥", tooltip="Fire")
+>>> menu_bar.new_menu("💧", tooltip="Water")
+>>> menu_bar.display()
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+menus
+

The menus to be displayed in the status bar, keyed by ID

+
+ +
+
+new_menu(content: Optional[Union[str, int, float, XAImage, XAURL, XAPath]] = None, icon: Optional[XAImage] = None, tooltip: Optional[str] = None, icon_dimensions: tuple[int, int] = (30, 30), action: Callable[[XAMenuBarMenu, None], None] = None, id: Optional[str] = None, index: int = -1) XAMenuBarMenu[source]
+

Adds a new menu to be displayed in the system menu bar.

+
+
Parameters:
+
    +
  • content (Union[str, int, float, XABase.XAImage, XABase.XAURL, XABase.XAPath, None], optional) – The content of the menu (the string or icon shown in the menubar), defaults to None

  • +
  • icon (Union[XABase.XAImage, None], optional) – The icon for the menu, defaults to None

  • +
  • tooltip (Union[str, None], optional) – The tooltip to display on hovering over the menu, defaults to None

  • +
  • icon_dimensions (tuple[int, int], optional) – The width and height of the image, in pixels, defaults to (30, 30)

  • +
  • action (Callable[[XAMenuBarMenu, None], None], optional) – The method, if any, to associate with the menu (the method called when the menu is opened), defaults to None

  • +
  • id (Union[str, None], optional) – A unique identifier for the menu, or None to use the title, defaults to None

  • +
  • index (int, optional) – The position to insert the menu in the list of menus, defaults to -1

  • +
  • label – The label for the menu item, defaults to None

  • +
+
+
Return type:
+

XAMenuBarMenu

+
+
Example:
+

+
+
>>> import random
+>>> import threading
+>>> import time
+>>> 
+>>> emojis = ["😀", "😍", "🙂", "😎", "🤩", "🤯", "😭", "😱", "😴", "🤒", "😈", "🤠"]
+>>> 
+>>> menu_bar = PyXA.XAMenuBar()
+>>> emoji_bar = menu_bar.new_menu()
+>>> 
+>>> def update_display():
+>>>     while True:
+>>>         new_emoji = random.choice(emojis)
+>>>         emoji_bar.title = new_emoji
+>>>         time.sleep(0.25)
+>>> 
+>>> threading.Thread(target=update_display).start()
+>>> menu_bar.display()
+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+remove_menu(id)[source]
+

Removes a menu from the status bar.

+
+
Parameters:
+

id (str) – The ID of the menu to remove

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+set_image(item_name: str, image: XAImage, img_width: int = 30, img_height: int = 30)[source]
+

Sets the image displayed for a menu or menu item.

+
+
Parameters:
+
    +
  • item_name (str) – The name of the item to update

  • +
  • image (XAImage) – The image to display

  • +
  • img_width (int, optional) – The width of the image, in pixels, defaults to 30

  • +
  • img_height (int, optional) – The height of the image, in pixels, defaults to 30

  • +
+
+
Example:
+

Set Image on State Change

+
+
+
>>> import PyXA
+>>> current_state = True # On
+>>> img_on = PyXA.XAImage("/Users/exampleUser/Documents/on.jpg")
+>>> img_off = PyXA.XAImage("/Users/exampleUser/Documents/off.jpg")
+>>> menu_bar = PyXA.XAMenuBar()
+>>> menu_bar.add_menu("Status", image=img_on)
+>>> 
+>>> def update_state():
+>>>     global current_state
+>>>     if current_state is True:
+>>>         # ... (Actions for turning off)
+>>>         menu_bar.set_text("Turn off", "Turn on")
+>>>         menu_bar.set_image("Status", img_off)
+>>>         current_state = False
+>>>     else:
+>>>         # ... (Actions for turning on)
+>>>         menu_bar.set_text("Turn off", "Turn off")
+>>>         menu_bar.set_image("Status", img_on)
+>>>         current_state = True
+
+
+

menu_bar.add_item(“Status”, “Turn off”, update_state) +menu_bar.display()

+
+

Deprecated since version 0.1.1: Set the XAMenuBarMenu.image and XAMenuBarMenuItem.image attributes directly instead.

+
+
+

New in version 0.0.9.

+
+
+ +
+
+set_text(item_name: str, text: str)[source]
+

Sets the text displayed for a menu or menu item.

+
+
Parameters:
+
    +
  • item_name (str) – The name of the item to update

  • +
  • text (str) – The new text to display

  • +
+
+
+
+

Deprecated since version 0.1.1: Set the XAMenuBarMenu.title and XAMenuBarMenuItem.title attributes directly instead.

+
+
+

New in version 0.0.9.

+
+
+ +
+ +
+
+class PyXA.Additions.UI.XAMenuBarMenu(content: Union[str, int, float, XAObject], icon: Optional[XAImage] = None, tooltip: Optional[str] = None, icon_dimensions: tuple[int, int] = (30, 30), action: Callable[[XAMenuBarMenu, None], None] = None, id: Optional[str] = None, index: int = -1)[source]
+

Bases: object

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

action

The method to call when the menu is opened

content

The content of the menu.

icon

The image associated with the menu.

icon_dimensions

The width and height of the menu's image, in pixels.

id

The unique identifier for the menu

items

The menu items, keyed by their IDs

tooltip

The tooltip that appears when hovering over the menu.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

add_separator([id])

Adds a separator to the menu at the current insertion point.

delete()

Deletes the menu.

new_image_item(image[, tooltip, index])

Creates a new image menu item at the specified index or the current insertion point.

new_item([content, icon, action, args, ...])

Creates a new menu item and adds it to this menu at the current insertion point.

new_segmented_control_item(segments[, ...])

Creates a new segmented control menu item at the specified index or the current insertion point.

new_separator([id, index])

Adds a separator to the menu at the current insertion point.

new_slider_item([tooltip, action, args, index])

Creates a new slider menu item at the specified index or the current insertion point.

new_switch_item([label, tooltip, action, ...])

Creates a new switch menu item at the specified index or the current insertion point.

new_url_item(url[, label, icon, ...])

Creates a new URL menu item at the specified index or the current insertion point.

remove_item(id)

Removes an item from this menu.

+
+
+action
+

The method to call when the menu is opened

+
+ +
+
+add_separator(id: Optional[str] = None) XAMenuBarMenuItem[source]
+

Adds a separator to the menu at the current insertion point.

+
+
Parameters:
+

id (Union[str, None], optional) – A unique identifier for the separator, defaults to None

+
+
Returns:
+

The newly created separator menu item object

+
+
Return type:
+

XAMenuBarMenuItem

+
+
+
+

Deprecated since version 0.1.2: Use new_separator() instead.

+
+
+

New in version 0.1.1.

+
+
+ +
+
+property content: str
+

The content of the menu.

+
+ +
+
+delete()[source]
+

Deletes the menu.

+
+

New in version 0.1.2.

+
+
+ +
+
+property icon: XAImage
+

The image associated with the menu.

+
+ +
+
+property icon_dimensions: tuple[int, int]
+

The width and height of the menu’s image, in pixels.

+
+ +
+
+id
+

The unique identifier for the menu

+
+ +
+
+items
+

The menu items, keyed by their IDs

+
+ +
+
+new_image_item(image: Union[str, XAImage], tooltip: Optional[str] = None, index: int = -1) XAImageMenuItem[source]
+

Creates a new image menu item at the specified index or the current insertion point.

+
+
Parameters:
+
    +
  • image (Union[str, XABase.XAImage]) – An image object or the path to an image file to display in the menu

  • +
  • tooltip (Union[str, None], optional) – The tooltip text to display when the cursor hovers over the image, defaults to None

  • +
  • index (int, optional) – The position to insert the separator in the list of menu items, defaults to -1

  • +
+
+
Returns:
+

The newly created image menu item

+
+
Return type:
+

XAImageMenuItem

+
+
+
+

New in version 0.1.2.

+
+
+ +
+
+new_item(content: Optional[str] = None, icon: Optional[XAImage] = None, action: Optional[Callable[[], None]] = None, args: Optional[list[Any]] = None, icon_dimensions: tuple[int, int] = (20, 20), id: Optional[str] = None, index: int = -1, label: Optional[str] = None, tooltip: Optional[str] = None, multiselect: bool = False) XAMenuBarMenuItem[source]
+

Creates a new menu item and adds it to this menu at the current insertion point.

+
+
Parameters:
+
    +
  • content (Union[str, None], optional) – The title text of the item, defaults to None

  • +
  • icon (Union[XABase.XAImage, None], optional) – The image for the item, defaults to None

  • +
  • action (Union[Callable[[], None], None], optional) – The method to call when the item is clicked, defaults to None

  • +
  • args (Union[list[Any], None], optional) – The arguments to pass to the action method upon execution, defaults to None

  • +
  • icon_dimensions (tuple[int, int], optional) – The width and height of the image, in pixels, defaults to (20, 20)

  • +
  • id (Union[str, None], optional) – A unique identifier for the item, defaults to None

  • +
  • index (int, optional) – The position to insert the item in the list of menu items, defaults to -1

  • +
  • label (Union[str, None], optional) – The label to the left of the item’s content

  • +
  • tooltip (Union[str, None], optional) – The tooltip text for the menu item, defaults to None

  • +
  • multiselect (bool, optional) – Whether multiple options in a segmented control item can be selected at once, defaults to False

  • +
+
+
Returns:
+

The newly created menu item object

+
+
Return type:
+

XAMenuBarMenuItem

+
+
Example:
+

+
+
>>> import PyXA
+>>> menu_bar = PyXA.XAMenuBar()
+>>> 
+>>> img1 = PyXA.XAColor.red().make_swatch(10, 10)
+>>> img2 = PyXA.XAImage("https://avatars.githubusercontent.com/u/7865925?v=4")
+>>> img3 = PyXA.XAImage.symbol("flame.circle")
+>>> 
+>>> m1 = menu_bar.new_menu("Menu 1")
+>>> m1.new_item("Item 1", lambda _: print("Action 1"), [], img1, (100, 100))
+>>> m1.new_item("Item 2", lambda _: print("Action 2"), [], img2, (100, 100))
+>>> 
+>>> m2 = menu_bar.new_menu("Menu 2")
+>>> m2.new_item("Item 1", lambda _: print("Action 3"), image=img3, icon_dimensions=(50, 50))
+>>> 
+>>> menu_bar.display()
+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+new_segmented_control_item(segments: Union[list[str], list[PyXA.XABase.XAImage]], tooltip: Optional[str] = None, action: Optional[Callable[[XASlider], None]] = None, args: Optional[list[Any]] = None, multiselect: bool = False, index: int = -1) XASegmentedControlMenuItem[source]
+

Creates a new segmented control menu item at the specified index or the current insertion point.

+
+
Parameters:
+
    +
  • segments (Union[list[str], list[XABase.XAImage]]) – The strings or images to display as button options

  • +
  • tooltip (Union[str, None], optional) – The tooltip to display when the cursor hovers over the segmented control, defaults to None

  • +
  • action (Union[Callable[[XASlider], None], None], optional) – The method to call when the user changes the state of the segmented control (when the user activates/deactivates a button), defaults to None

  • +
  • args (Union[list[Any], None], optional) – The arguments to pass to the action method upon execution, defaults to None

  • +
  • multiselect (bool optional) – Whether multiple options can be selected at a time, defaults to False

  • +
  • index (int, optional) – The position to insert the separator in the list of menu items, defaults to -1

  • +
+
+
Returns:
+

The newly created segmented control menu item

+
+
Return type:
+

XASegmentedControlMenuItem

+
+
+
+

New in version 0.1.2.

+
+
+ +
+
+new_separator(id: Optional[str] = None, index: int = -1) XAMenuBarMenuItem[source]
+

Adds a separator to the menu at the current insertion point.

+
+
Parameters:
+
    +
  • id (Union[str, None], optional) – A unique identifier for the separator, defaults to None

  • +
  • index (int, optional) – The position to insert the separator in the list of menu items, defaults to -1

  • +
+
+
Returns:
+

The newly created separator menu item object

+
+
Return type:
+

XAMenuBarMenuItem

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+new_slider_item(tooltip: Optional[str] = None, action: Optional[Callable[[XASlider], None]] = None, args: Optional[list[Any]] = None, index: int = -1) XASliderMenuItem[source]
+

Creates a new slider menu item at the specified index or the current insertion point.

+
+
Parameters:
+
    +
  • tooltip (Union[str, None], optional) – The tooltip text to display when the cursor hovers over the item, defaults to None

  • +
  • action (Union[Callable[[XASlider], None], None], optional) – The method to call when the user changes the slider’s value, defaults to None

  • +
  • args (Union[list[Any], None], optional) – The arguments to pass to the action method upon execution, defaults to None

  • +
  • index (int, optional) – The position to insert the separator in the list of menu items, defaults to -1

  • +
+
+
Returns:
+

The newly created slider menu item

+
+
Return type:
+

XASliderMenuItem

+
+
+
+

New in version 0.1.2.

+
+
+ +
+
+new_switch_item(label: Optional[str] = None, tooltip: Optional[str] = None, action: Optional[Callable[[XASlider], None]] = None, args: Optional[list[Any]] = None, index: int = -1) XASwitchMenuItem[source]
+

Creates a new switch menu item at the specified index or the current insertion point.

+
+
Parameters:
+
    +
  • label (Union[str, None], optional) – The label text to display left of the switch, defaults to None

  • +
  • tooltip (Union[str, None], optional) – The tooltip text to display when the cursor hovers over the switch, defaults to None

  • +
  • action (Union[Callable[[XASlider], None], None], optional) – The method to call when the user changes the switch’s state, defaults to None

  • +
  • args (Union[list[Any], None], optional) – The arguments to pass to the action method upon execution, defaults to None

  • +
  • index (int, optional) – The position to insert the separator in the list of menu items, defaults to -1

  • +
+
+
Returns:
+

The newly created switch menu item

+
+
Return type:
+

XASwitchMenuItem

+
+
+
+

New in version 0.1.2.

+
+
+ +
+
+new_url_item(url: Union[str, XAURL, XAPath], label: Optional[str] = None, icon: Optional[XAImage] = None, icon_dimensions: tuple[int, int] = (20, 20), tooltip: Optional[str] = None, action: Optional[Callable[[XAURLMenuItem], None]] = None, args: Optional[list[Any]] = None, index: int = -1) XAURLMenuItem[source]
+

Creates a new URL menu item at the specified index or the current insertion point.

+
+
Parameters:
+
    +
  • url (Union[str, XABase.XAURL, XABase.XAPath]) – The URL or file path that the item will link to

  • +
  • label (Union[str, None]) – The label for the item, or None to use the full URL as the label

  • +
  • icon (Union[XABase.XAImage, None], optional) – The icon to display to the left of the label, defaults to None

  • +
  • icon_dimensions (tuple[int, int], optional) – The dimensions of the icon, defaults to (20, 20)

  • +
  • tooltip (Union[str, None], optional) – The tooltip text to display when the cursor hovers over this item, defaults to None

  • +
  • action (Union[Callable[[XAURLMenuItem], None], None], optional) – The method to call when the user clicks this item, or None to open the URL using standard methods, defaults to None

  • +
  • args (Union[list[Any], None], optional) – The arguments to pass to the action method upon execution, defaults to None

  • +
  • index (int, optional) – The position to insert the separator in the list of menu items, defaults to -1

  • +
+
+
Returns:
+

The newly created URL menu item

+
+
Return type:
+

XAURLMenuItem

+
+
+
+

New in version 0.1.2.

+
+
+ +
+
+remove_item(id)[source]
+

Removes an item from this menu.

+
+
Parameters:
+

id (str) – The ID of the item to remove

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+property tooltip: str
+

The tooltip that appears when hovering over the menu.

+
+ +
+ +
+
+class PyXA.Additions.UI.XAMenuBarMenuItem(parent: XAMenuBarMenu, content: Union[str, int, float, XAImage, XAURL, XAPath], icon: Optional[XAImage] = None, action: Optional[Callable[[XAMenuBarMenuItem, Any], None]] = None, args: Optional[list[Any]] = None, tooltip: Optional[str] = None)[source]
+

Bases: XAMenuBarMenu

+

Attributes:

+ + + + + + + + + + + + + + + +

action

The method to call when this menu item is clicked

args

The arguments to pass to the action method upon execution

parent

The parent menu or menu item of this item

tooltip

The tooltip text displayed when the cursor hovers over the menu item.

+

Methods:

+ + + + + + + + + + + + + + + + + + +

delete()

Deletes the item.

new_item([content, icon, action, args, ...])

Creates a new menu item and places it in a submenu of this item.

new_subitem([content, icon, action, args, ...])

Creates a new menu item and places it in a submenu of this item.

remove_item(id)

Removes a subitem from this item's submenu.

remove_subitem(id)

Removes a subitem from this item's submenu.

+
+
+action
+

The method to call when this menu item is clicked

+
+ +
+
+args
+

The arguments to pass to the action method upon execution

+
+ +
+
+delete()[source]
+

Deletes the item.

+
+

New in version 0.1.2.

+
+
+ +
+
+new_item(content: Optional[str] = None, icon: Optional[XAImage] = None, action: Optional[Callable[[], None]] = None, args: Optional[list[Any]] = None, icon_dimensions: tuple[int, int] = (20, 20), id: Optional[str] = None, index: int = -1, label: Optional[str] = None, tooltip: Optional[str] = None, multiselect: bool = False) XAMenuBarMenuItem[source]
+

Creates a new menu item and places it in a submenu of this item.

+

This will create a new submenu as needed, or will append to the existing submenu if one is already available on this item.

+
+
Parameters:
+
    +
  • content (Union[str, None], optional) – The title text of the item, defaults to None

  • +
  • icon (Union[XABase.XAImage, None], optional) – The image for the item, defaults to None

  • +
  • action (Union[Callable[[], None], None], optional) – The method to call when the item is clicked, defaults to None

  • +
  • args (Union[list[Any], None], optional) – The arguments to pass to the action method upon execution, defaults to None

  • +
  • icon_dimensions (tuple[int, int], optional) – The width and height of the image, in pixels, defaults to (20, 20)

  • +
  • id (Union[str, None], optional) – A unique identifier for the item, defaults to None

  • +
  • index (int, optional) – The position to insert the item in the list of menu items, defaults to -1

  • +
  • label (Union[str, None], optional) – The label to the left of the item’s content

  • +
  • tooltip (Union[str, None], optional) – The tooltip text for the menu item, defaults to None

  • +
  • multiselect (bool, optional) – Controls whether one or multiple options can be selected in a segmented control menu item, defaults to False

  • +
+
+
Returns:
+

The newly created menu item object

+
+
Return type:
+

XAMenuBarMenuItem

+
+
Example:
+

+
+
>>> import PyXA
+>>> menu_bar = PyXA.XAMenuBar()
+>>> m1 = menu_bar.new_menu("Menu 1")
+>>> i1 = m1.new_item("Item 1")
+>>> i2 = i1.new_subitem("Item 1.1")
+>>> i3 = i2.new_subitem("Item 1.1.1")
+>>> i4 = i3.new_subitem("Item 1.1.1.1")
+>>> menu_bar.display()
+
+
+
+

New in version 0.1.2.

+
+
+ +
+
+new_subitem(content: Optional[str] = None, icon: Optional[XAImage] = None, action: Optional[Callable[[], None]] = None, args: Optional[list[Any]] = None, icon_dimensions: tuple[int, int] = (20, 20), id: Optional[str] = None, index: int = -1, label: Optional[str] = None, tooltip: Optional[str] = None, multiselect: bool = False) XAMenuBarMenuItem[source]
+

Creates a new menu item and places it in a submenu of this item.

+
+

Deprecated since version 0.1.2: Use new_item() instead.

+
+
+

New in version 0.1.2.

+
+
+ +
+
+parent
+

The parent menu or menu item of this item

+
+ +
+
+remove_item(id: str)[source]
+

Removes a subitem from this item’s submenu.

+
+
Parameters:
+

id (str) – The ID of the subitem to remove

+
+
+
+

Deprecated since version 0.1.2: Use remove_item() instead.

+
+
+

New in version 0.1.1.

+
+
+ +
+
+remove_subitem(id: str)[source]
+

Removes a subitem from this item’s submenu.

+
+
Parameters:
+

id (str) – The ID of the subitem to remove

+
+
+
+

Deprecated since version 0.1.2: Use remove_item() instead.

+
+
+

New in version 0.1.1.

+
+
+ +
+
+property tooltip: str
+

The tooltip text displayed when the cursor hovers over the menu item.

+
+ +
+ +
+
+class PyXA.Additions.UI.XANotification(text: str, title: Optional[str] = None, subtitle: Optional[str] = None, image: Optional[XAImage] = None, sound_name: Optional[str] = None, primary_button_title: Optional[str] = None, show_reply_button: bool = False, click_action: Optional[Callable[[], None]] = None, primary_action: Optional[Callable[[], None]] = None, reply_action: Optional[Callable[[], None]] = None, timeout: float = -1)[source]
+

Bases: object

+

A class for managing and interacting with notifications.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

click_action

The method to run when the user clicks the notification

image

The content image of the notification

primary_action

The method to run when the user clicks the primary action button

primary_button_title

The name of the primary action button

reply_action

The method to run when the user replies to the notification.

sound_name

The sound to play when the notification is displayed

subtitle

The subtitle of the notification

text

The main text of the notification

timeout

The number of seconds to wait for the user to act on the notification, or -1 to wait infinitely

title

The title of the notification

+

Methods:

+ + + + + + +

display()

Displays the notification.

+
+
+click_action: Optional[Callable[[XANotification], None]]
+

The method to run when the user clicks the notification

+
+ +
+
+display()[source]
+

Displays the notification.

+
+

New in version 0.0.9.

+
+
+ +
+
+image: XAImage
+

The content image of the notification

+
+ +
+
+primary_action: Optional[Callable[[XANotification], None]]
+

The method to run when the user clicks the primary action button

+
+ +
+
+primary_button_title: str
+

The name of the primary action button

+
+ +
+
+reply_action: Optional[Callable[[XANotification, str], None]]
+

The method to run when the user replies to the notification. Overrides the primary action and replaces the primary action button with a “Reply” button.

+
+ +
+
+sound_name
+

The sound to play when the notification is displayed

+
+ +
+
+subtitle: str
+

The subtitle of the notification

+
+ +
+
+text: str
+

The main text of the notification

+
+ +
+
+timeout: float
+

The number of seconds to wait for the user to act on the notification, or -1 to wait infinitely

+
+ +
+
+title: str
+

The title of the notification

+
+ +
+ +
+
+class PyXA.Additions.UI.XASegmentedControl(segments: Union[list[str], list[PyXA.XABase.XAImage]], action: Optional[Callable[[XASlider, int, Any], None]] = None, args: Optional[list[Any]] = None, multiselect: bool = False)[source]
+

Bases: object

+

A segmented control UI element. Wrapper around AppKit.NSSegmentedControl functionality.

+
+

New in version 0.1.2.

+
+

Attributes:

+ + + + + + + + + + + + +

action

The method to run when the value of the slider changes

args

The arguments to pass to the action method upon execution

selection

The list of currently selected segments.

+

Methods:

+ + + + + + +

run_action_(slider, _)

Runs the action method associated with the segmented control.

+
+
+action
+

The method to run when the value of the slider changes

+
+ +
+
+args
+

The arguments to pass to the action method upon execution

+
+ +
+
+run_action_(slider, _)[source]
+

Runs the action method associated with the segmented control.

+
+

New in version 0.1.2.

+
+
+ +
+
+property selection: Union[list[str], list[PyXA.XABase.XAImage]]
+

The list of currently selected segments.

+
+

New in version 0.1.2.

+
+
+ +
+ +
+
+class PyXA.Additions.UI.XASegmentedControlMenuItem(parent: XAMenuBarMenu, segments: Union[list[str], list[PyXA.XABase.XAImage]], tooltip: Optional[str] = None, action: Optional[Callable[[XASlider, Any], None]] = None, args: Optional[list[Any]] = None, multiselect: bool = False)[source]
+

Bases: XAMenuBarMenuItem

+

A menu item containing a segmented control.

+
+

New in version 0.1.2.

+
+
+ +
+
+class PyXA.Additions.UI.XASeparatorMenuItem(parent: XAMenuBarMenu)[source]
+

Bases: XAMenuBarMenuItem

+

A menu item containing a separator.

+
+

New in version 0.1.2.

+
+
+ +
+
+class PyXA.Additions.UI.XASlider(action: Optional[Callable[[XASlider, int, Any], None]] = None, args: Optional[list[Any]] = None, value: float = 50.0, min_value: float = 0, max_value: float = 100)[source]
+

Bases: object

+

A slider UI element. Wrapper around AppKit.NSSlider functionality.

+
+

New in version 0.1.2.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + +

action

The method to run when the value of the slider changes

args

The arguments to pass to the action method upon execution

max_value

The maximum value that the slider can be set to.

min_value

The minimum value that the slider can be set to.

value

The current value of the slider.

+

Methods:

+ + + + + + +

run_action_(slider, _)

Runs the action method associated with the slider.

+
+
+action
+

The method to run when the value of the slider changes

+
+ +
+
+args
+

The arguments to pass to the action method upon execution

+
+ +
+
+property max_value: float
+

The maximum value that the slider can be set to.

+
+ +
+
+property min_value: float
+

The minimum value that the slider can be set to.

+
+ +
+
+run_action_(slider, _)[source]
+

Runs the action method associated with the slider.

+
+

New in version 0.1.2.

+
+
+ +
+
+property value: float
+

The current value of the slider.

+
+ +
+ +
+
+class PyXA.Additions.UI.XASliderMenuItem(parent: XAMenuBarMenu, tooltip: Optional[str] = None, action: Optional[Callable[[XASlider, Any], None]] = None, args: Optional[list[Any]] = None, value: float = 50, min_value: float = 0, max_value: float = 100)[source]
+

Bases: XAMenuBarMenuItem

+

A menu item containing a slider.

+
+

New in version 0.1.2.

+
+

Attributes:

+ + + + + + +

value

+
+
+property value: float
+
+ +
+ +
+
+class PyXA.Additions.UI.XASwitch(action: Optional[Callable[[XASwitch, int, Any], None]] = None, args: Optional[list[Any]] = None)[source]
+

Bases: object

+

A switch UI element. Wrapper around AppKit.NSSwitch functionality.

+
+

New in version 0.1.2.

+
+

Attributes:

+ + + + + + + + + + + + +

action

The method to run when the switch's state changes

args

The arguments to pass to the action method upon execution

state

The current state of the switch.

+

Methods:

+ + + + + + + + + +

run_action_(slider, _)

Runs the action method attached to the switch.

toggle()

Toggles the switch on or off.

+
+
+action
+

The method to run when the switch’s state changes

+
+ +
+
+args
+

The arguments to pass to the action method upon execution

+
+ +
+
+run_action_(slider, _)[source]
+

Runs the action method attached to the switch.

+
+
Parameters:
+

switch (AppKit.NSSwitch) – The NSSwitch object associated with this object

+
+
+
+

New in version 0.1.2.

+
+
+ +
+
+property state: bool
+

The current state of the switch.

+
+ +
+
+toggle()[source]
+

Toggles the switch on or off.

+
+

New in version 0.1.2.

+
+
+ +
+ +
+
+class PyXA.Additions.UI.XASwitchMenuItem(parent: XAMenuBarMenu, label: Optional[str] = None, tooltip: Optional[str] = None, action: Optional[Callable[[XASwitch, int, Any], None]] = None, args: Optional[list[Any]] = None)[source]
+

Bases: XAMenuBarMenuItem

+

A menu item containing a labelled switch.

+
+

New in version 0.1.2.

+
+

Attributes:

+ + + + + + +

label

The label for this switch menu item.

+
+
+property label: str
+

The label for this switch menu item.

+
+ +
+ +
+
+class PyXA.Additions.UI.XATextMenuItem(parent: XAMenuBarMenu, text: str, icon: Optional[XAImage] = None, icon_dimensions: tuple[int, int] = (20, 20), tooltip: Optional[str] = None, action: Optional[Callable[[XAURLMenuItem, int, Any], None]] = None, args: Optional[list[Any]] = None)[source]
+

Bases: XAMenuBarMenuItem

+

A menu item containing text.

+
+

New in version 0.1.2.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + +

enabled

Whether the menu item is enabled (vs.

icon

The image associated with the menu item.

icon_dimensions

The width and height of the menu item's image, in pixels.

indent

The level of indentation of the menu item, from 0 to 15.

text

+

Methods:

+ + + + + + + + + +

new_subitem([content, icon, action, args, ...])

Creates a new menu item and places it in a submenu of this item.

remove_subitem(id)

Removes a subitem from this item's submenu.

+
+
+property enabled: int
+

Whether the menu item is enabled (vs. appearing grayed out).

+
+ +
+
+property icon: XAImage
+

The image associated with the menu item.

+
+ +
+
+property icon_dimensions: tuple[int, int]
+

The width and height of the menu item’s image, in pixels.

+
+ +
+
+property indent: int
+

The level of indentation of the menu item, from 0 to 15.

+
+ +
+
+new_subitem(content: Optional[str] = None, icon: Optional[XAImage] = None, action: Optional[Callable[[], None]] = None, args: Optional[list[Any]] = None, icon_dimensions: tuple[int, int] = (20, 20), id: Optional[str] = None, index: int = -1, label: Optional[str] = None, tooltip: Optional[str] = None) XAMenuBarMenuItem[source]
+

Creates a new menu item and places it in a submenu of this item.

+

This will create a new submenu as needed, or will append to the existing submenu if one is already available on this item.

+
+
Parameters:
+
    +
  • content (Union[str, None], optional) – The title text of the item, defaults to None

  • +
  • icon (Union[XABase.XAImage, None], optional) – The image for the item, defaults to None

  • +
  • action (Union[Callable[[], None], None], optional) – The method to call when the item is clicked, defaults to None

  • +
  • args (Union[list[Any], None], optional) – The arguments to pass to the action method upon execution, defaults to None

  • +
  • icon_dimensions (tuple[int, int], optional) – The width and height of the image, in pixels, defaults to (20, 20)

  • +
  • id (Union[str, None], optional) – A unique identifier for the item, defaults to None

  • +
  • index (int, optional) – The position to insert the item in the list of menu items, defaults to -1

  • +
  • label (Union[str, None], optional) – The label to the left of the item’s content

  • +
  • tooltip (Union[str, None], optional) – The tooltip text for the menu item, defaults to None

  • +
+
+
Returns:
+

The newly created menu item object

+
+
Return type:
+

XAMenuBarMenuItem

+
+
Example:
+

+
+
>>> import PyXA
+>>> menu_bar = PyXA.XAMenuBar()
+>>> m1 = menu_bar.new_menu("Menu 1")
+>>> i1 = m1.new_item("Item 1")
+>>> i2 = i1.new_subitem("Item 1.1")
+>>> i3 = i2.new_subitem("Item 1.1.1")
+>>> i4 = i3.new_subitem("Item 1.1.1.1")
+>>> menu_bar.display()
+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+remove_subitem(id: str)[source]
+

Removes a subitem from this item’s submenu.

+
+
Parameters:
+

id (str) – The ID of the subitem to remove

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+property text: str
+
+ +
+ +
+
+class PyXA.Additions.UI.XAURLMenuItem(parent: XAMenuBarMenu, url: Union[XAURL, XAPath], label: Optional[str] = None, icon: Optional[XAImage] = None, icon_dimensions: tuple[int, int] = (20, 20), tooltip: Optional[str] = None, action: Optional[Callable[[XAURLMenuItem, int, Any], None]] = None, args: Optional[list[Any]] = None)[source]
+

Bases: XATextMenuItem

+

A menu item containing a URL or path.

+
+

New in version 0.1.2.

+
+

Attributes:

+ + + + + + + + + +

label

location

The URL or path that the menu item refers to.

+
+
+property label: str
+
+ +
+
+property location: Union[XAURL, XAPath]
+

The URL or path that the menu item refers to.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/additions/utils.html b/docs/reference/additions/utils.html new file mode 100644 index 0000000..89c0185 --- /dev/null +++ b/docs/reference/additions/utils.html @@ -0,0 +1,180 @@ + + + + + + + Utils Module — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Utils Module

+
+

New in version 0.1.1.

+
+

A collection of classes for interacting with macOS features in various ways.

+

Classes:

+ + + + + + +

SDEFParser(sdef_file)

+
+
+class PyXA.Additions.Utils.SDEFParser(sdef_file: Union[XAPath, str])[source]
+

Bases: object

+

Methods:

+ + + + + + + + + +

export(output_file)

parse()

+

Attributes:

+ + + + + + +

file

The full path to the SDEF file to parse

+
+
+export(output_file: Union[XAPath, str])[source]
+
+ +
+
+file
+

The full path to the SDEF file to parse

+
+ +
+
+parse()[source]
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/additions/web.html b/docs/reference/additions/web.html new file mode 100644 index 0000000..62e350a --- /dev/null +++ b/docs/reference/additions/web.html @@ -0,0 +1,868 @@ + + + + + + + Web Module — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

Web Module

+
+

New in version 0.1.0.

+
+

Internet-related automation features that extend PyXA scripting functionality.

+

Classes:

+ + + + + + + + + + + + + + + + + + +

RSSFeed(url)

An RSS feed reader.

RSSItem(properties)

An item or entry in an RSS feed.

RSSItemContent(properties)

The content of an RSS entry.

RSSItemContentList(properties)

RSSItemList(properties)

+
+
+class PyXA.Additions.Web.RSSFeed(url: Union[str, XAURL])[source]
+

Bases: XAObject

+

An RSS feed reader.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + +

items()

Retrieves all item and/or entry tags in the RSS feed as RSSItem objects.

refetch()

Resends the GET request for the RSS feed URL and updates this object's data accordingly.

+
+
+items() RSSItemList[source]
+

Retrieves all item and/or entry tags in the RSS feed as RSSItem objects.

+
+
Returns:
+

The list of items and/or entries

+
+
Return type:
+

RSSItemList

+
+
Example:
+

+
+
>>> import PyXA
+>>> reader = PyXA.RSSFeed("http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml")
+>>> print(reader.items())
+<<class 'PyXA.extensions.XAWeb.RSSItemList'>['Hold Me Closer - Elton John & Britney Spears', 'Only Ever Wanted - Timcast', "I Ain't Worried - OneRepublic", 'wait in the truck - HARDY & Lainey Wilson', 'Bring Me to Life - Evanescence', 'Running Up That Hill (A Deal with God) - Kate Bush', 'Beer With My Friends - Kenny Chesney & Old Dominion', 'American Pie (Full Length Version) - Don Mclean', 'She Had Me At Heads Carolina - Cole Swindell', 'You Proof - Morgan Wallen']>
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+refetch()[source]
+

Resends the GET request for the RSS feed URL and updates this object’s data accordingly.

+
+
Example:
+

Get the top 10 songs on iTunes every hour

+
+
+
>>> import PyXA
+>>> from time import sleep
+>>> reader = PyXA.RSSFeed("http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml")
+>>> while True:
+>>>     reader.refetch()
+>>>     print(reader.items())
+>>>     sleep(3600)
+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.Additions.Web.RSSItem(properties)[source]
+

Bases: XAObject

+

An item or entry in an RSS feed.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

author

The author of the entry

category

The category of the entry

comments

The comments of the entry

content

The raw content of the entry

copyright

The copyright text of the entry

description

The description of the entry

enclosure

The media idea enclosed in the entry

link

The hyperlink to the entry

publication_date

The most recent publication date of the entry

source

The third-party source of the entry

text

All text within the entry (not just the description/content text!)

title

The title of the RSS entry

xml

The raw XML of the entry

+

Methods:

+ + + + + + +

links()

Retrieves the URL referenced by each link tag as a list of XABase.XAURL objects.

+
+
+property author: str
+

The author of the entry

+
+ +
+
+property category: str
+

The category of the entry

+
+ +
+
+property comments: str
+

The comments of the entry

+
+ +
+
+property content: type
+

The raw content of the entry

+
+ +
+
+property copyright: str
+

The copyright text of the entry

+
+ +
+
+property description: str
+

The description of the entry

+
+ +
+
+property enclosure: str
+

The media idea enclosed in the entry

+
+ +
+ +

The hyperlink to the entry

+
+ +
+ +

Retrieves the URL referenced by each link tag as a list of XABase.XAURL objects.

+
+
Returns:
+

The list of link URLs

+
+
Return type:
+

List[XABase.XAURL]

+
+
Example:
+

+
+
>>> import PyXA
+>>> reader = PyXA.RSSFeed("http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml")
+>>> item = reader.items()[0]
+>>> print(item.links())
+[<<class 'PyXA.XABase.XAURL'>https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview122/v4/7a/24/60/7a246091-cef8-1df4-1435-a107ed3c6980/mzaf_8623157179635634843.plus.aac.p.m4a>, <<class 'PyXA.XABase.XAURL'>https://music.apple.com/us/album/hold-me-closer-single/1641082201?uo=2>, <<class 'PyXA.XABase.XAURL'>https://music.apple.com/us/album/hold-me-closer/1641082201?i=1641082205&uo=2>]
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property publication_date: Optional[str]
+

The most recent publication date of the entry

+
+ +
+
+property source: str
+

The third-party source of the entry

+
+ +
+
+property text: str
+

All text within the entry (not just the description/content text!)

+
+ +
+
+property title: str
+

The title of the RSS entry

+
+ +
+
+property xml: str
+

The raw XML of the entry

+
+ +
+ +
+
+class PyXA.Additions.Web.RSSItemContent(properties)[source]
+

Bases: XAObject

+

The content of an RSS entry.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + +

html

The raw html of the content

text

The visible text of the content

+

Methods:

+ + + + + + + + + +

images()

Retrieves the image referenced by each image element as a list of XABase.XAImage objects.

links()

Retrieves the URL referenced by each anchor element as a list of XABase.XAURL objects.

+
+
+property html: str
+

The raw html of the content

+
+ +
+
+images() List[XAImage][source]
+

Retrieves the image referenced by each image element as a list of XABase.XAImage objects.

+
+
Returns:
+

The list of images

+
+
Return type:
+

List[XABase.XAImage]

+
+
Example:
+

+
+
>>> import PyXA
+>>> reader = PyXA.RSSFeed("http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml")
+>>> content = reader.items()[0].content
+>>> print(content.images())
+[<PyXA.XABase.XAImage object at 0x10635ee80>, <PyXA.XABase.XAImage object at 0x10635ebb0>]
+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +

Retrieves the URL referenced by each anchor element as a list of XABase.XAURL objects.

+
+
Returns:
+

The list of link URLs

+
+
Return type:
+

List[XABase.XAURL]

+
+
Example:
+

+
+
>>> import PyXA
+>>> reader = PyXA.RSSFeed("http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml")
+>>> content = reader.items()[0].content
+>>> print(content.links())
+[<<class 'PyXA.XABase.XAURL'>https://music.apple.com/us/album/hold-me-closer/1641082201?i=1641082205&uo=2>, <<class 'PyXA.XABase.XAURL'>https://music.apple.com/us/album/hold-me-closer/1641082201?i=1641082205&uo=2>, <<class 'PyXA.XABase.XAURL'>https://music.apple.com/us/album/hold-me-closer-single/1641082201?uo=2>, <<class 'PyXA.XABase.XAURL'>https://music.apple.com/us/artist/elton-john/54657?uo=2>, <<class 'PyXA.XABase.XAURL'>https://music.apple.com/us/genre/music-pop/id14?uo=2>]
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property text: str
+

The visible text of the content

+
+ +
+ +
+
+class PyXA.Additions.Web.RSSItemContentList(properties)[source]
+

Bases: XAList

+

Methods:

+ + + + + + + + + + + + + + + +

html()

Gets the raw HTML of each item in the list.

images()

Gets the images contained in each item of the list as XABase.XAImage objects.

links()

Gets the links contained in each item of the list as XABase.XAURL objects.

text()

Gets the text of each item in the list.

+
+
+html() List[str][source]
+

Gets the raw HTML of each item in the list.

+
+
Returns:
+

The list of HTML strings

+
+
Return type:
+

List[str]

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+images() List[XAImage][source]
+

Gets the images contained in each item of the list as XABase.XAImage objects.

+
+
Returns:
+

The list of links

+
+
Return type:
+

List[XABase.XAImage]

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +

Gets the links contained in each item of the list as XABase.XAURL objects.

+
+
Returns:
+

The list of links

+
+
Return type:
+

List[XABase.XAURL]

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+text() List[str][source]
+

Gets the text of each item in the list.

+
+
Returns:
+

The list of content texts

+
+
Return type:
+

List[str]

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.Additions.Web.RSSItemList(properties)[source]
+

Bases: XAList

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

author()

Gets the author of each item in the list.

category()

Gets the category of each item in the list.

comments()

Gets the comments of each item in the list.

content()

Gets the content of each item as RSSItemContent objects.

copyright()

Gets the copyright of each item in the list.

description()

Gets the description of each item as RSSItemContent objects.

enclosure()

Gets the enclosure of each item in the list.

link()

Gets the link of each item in the list.

links()

Gets the links contained in each item of the list as XABase.XAURL objects.

publication_date()

Gets the publication date of each item in the list.

source()

Gets the source of each item in the list.

text()

Gets the text of each item in the list.

title()

Gets the title of each item in the list.

xml()

Gets the raw XML of each item in the list.

+
+
+author() List[str][source]
+

Gets the author of each item in the list.

+
+
Returns:
+

The list of RSS item authors

+
+
Return type:
+

List[str]

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+category() List[str][source]
+

Gets the category of each item in the list.

+
+
Returns:
+

The list of RSS item categories

+
+
Return type:
+

List[str]

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+comments() List[str][source]
+

Gets the comments of each item in the list.

+
+
Returns:
+

The list of RSS item comments

+
+
Return type:
+

List[str]

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+content() RSSItemContentList[source]
+

Gets the content of each item as RSSItemContent objects.

+
+
Returns:
+

The list of item contents

+
+
Return type:
+

RSSItemContentList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+copyright() List[str][source]
+

Gets the copyright of each item in the list.

+
+
Returns:
+

The list of RSS item copyrights

+
+
Return type:
+

List[str]

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+description() RSSItemContentList[source]
+

Gets the description of each item as RSSItemContent objects.

+
+
Returns:
+

The list of item descriptions

+
+
Return type:
+

RSSItemContentList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+enclosure() List[str][source]
+

Gets the enclosure of each item in the list.

+
+
Returns:
+

The list of RSS item enclosures

+
+
Return type:
+

List[str]

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +

Gets the link of each item in the list.

+
+
Returns:
+

The list of RSS item links

+
+
Return type:
+

List[str]

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +

Gets the links contained in each item of the list as XABase.XAURL objects.

+
+
Returns:
+

The list of links

+
+
Return type:
+

List[XABase.XAURL]

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+publication_date() List[datetime][source]
+

Gets the publication date of each item in the list.

+
+
Returns:
+

The list of RSS item publication dates

+
+
Return type:
+

List[datetime]

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+source() List[str][source]
+

Gets the source of each item in the list.

+
+
Returns:
+

The list of RSS item sources

+
+
Return type:
+

List[str]

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+text() List[str][source]
+

Gets the text of each item in the list.

+
+
Returns:
+

The list of RSS item texts

+
+
Return type:
+

List[str]

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+title() List[str][source]
+

Gets the title of each item in the list.

+
+
Returns:
+

The list of RSS item titles

+
+
Return type:
+

List[str]

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+xml() List[str][source]
+

Gets the raw XML of each item in the list.

+
+
Returns:
+

The list of XML strings

+
+
Return type:
+

List[str]

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/automator.html b/docs/reference/apps/automator.html new file mode 100644 index 0000000..f773c58 --- /dev/null +++ b/docs/reference/apps/automator.html @@ -0,0 +1,1940 @@ + + + + + + + Automator Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Automator Module Reference

+
+

New in version 0.0.4.

+
+

Control Automator using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XAAutomatorAction(properties)

A class for managing and interacting with actions in Automator.app.

XAAutomatorActionList(properties[, filter])

A wrapper around a list of Automator required resources which utilizes fast enumeration techniques.

XAAutomatorApplication(properties)

A class for managing and interacting with Automator.app.

XAAutomatorDocument(properties)

A class for managing and interacting with Automator windows.

XAAutomatorDocumentList(properties[, filter])

A wrapper around a list of Automator documents which utilizes fast enumeration techniques.

XAAutomatorRequiredResource(properties)

A class for managing and interacting with required resources in Automator.app.

XAAutomatorRequiredResourceList(properties)

A wrapper around a list of Automator required resources which utilizes fast enumeration techniques.

XAAutomatorSetting(properties)

A class for managing and interacting with Automator settings (i.e.

XAAutomatorSettingList(properties[, filter])

A wrapper around a list of Automator settings which utilizes fast enumeration techniques.

XAAutomatorVariable(properties)

A class for managing and interacting with Automator variables.

XAAutomatorVariableList(properties[, filter])

A wrapper around a list of Automator variables which utilizes fast enumeration techniques.

XAAutomatorWindow(properties)

A class for managing and interacting with Automator windows.

XAAutomatorWorkflow(properties)

A class for managing and interacting with Automator workflows.

XAAutomatorWorkflowList(properties[, filter])

A wrapper around a list of Automator workflows which utilizes fast enumeration techniques.

+
+
+class PyXA.apps.Automator.XAAutomatorAction(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with actions in Automator.app.

+ +
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

bundle_id

The bundle identifier for the action.

category

The categories that contain the action

comment

The comment for the name of the action.

enabled

Whether the action is enabled.

execution_error_message

The text error message generated by execution of the action.

execution_error_number

The numeric error code generated by execution of the action.

execution_result

The result of the action, passed as input to the next action.

icon_name

The name for the icon associated with the action.

id

The unique identifier for the action.

ignores_input

Whether the action ignores input when run.

index

The index of the action from the first action in the workflow.

input_types

The input types accepted by the action.

keywords

The keywords that describe the action.

name

The localized name of the action.

output_types

The output types produced by the action.

parent_workflow

The workflow that contains the action.

path

The path of the file that contains the action.

show_action_when_run

Whether the action should show its user interface when run.

target_application

The application(s) with which the action communicates.

version

The version of the action.

warning_action

The action suggested by the warning, if any.

warning_level

The level of the warning, increasing in likelihood of data loss.

warning_message

The message that accompanies the warning, if any.

+

Methods:

+ + + + + + + + + +

required_resources([filter])

Returns a list of required resource, as PyXA objects, matching the given filter.

settings([filter])

Returns a list of settings, as PyXA objects, matching the given filter.

+
+
+property bundle_id: str
+

The bundle identifier for the action.

+
+ +
+
+property category: list[str]
+

The categories that contain the action

+
+ +
+
+property comment: str
+

The comment for the name of the action.

+
+ +
+
+property enabled: bool
+

Whether the action is enabled.

+
+ +
+
+property execution_error_message: str
+

The text error message generated by execution of the action.

+
+ +
+
+property execution_error_number: int
+

The numeric error code generated by execution of the action.

+
+ +
+
+property execution_result: Any
+

The result of the action, passed as input to the next action.

+
+ +
+
+property icon_name: str
+

The name for the icon associated with the action.

+
+ +
+
+property id: str
+

The unique identifier for the action.

+
+ +
+
+property ignores_input: bool
+

Whether the action ignores input when run.

+
+ +
+
+property index: int
+

The index of the action from the first action in the workflow.

+
+ +
+
+property input_types: list[str]
+

The input types accepted by the action.

+
+ +
+
+property keywords: list[str]
+

The keywords that describe the action.

+
+ +
+
+property name: str
+

The localized name of the action.

+
+ +
+
+property output_types: list[str]
+

The output types produced by the action.

+
+ +
+
+property parent_workflow: XAAutomatorWorkflow
+

The workflow that contains the action.

+
+ +
+
+property path: XAPath
+

The path of the file that contains the action.

+
+ +
+
+required_resources(filter: Optional[dict] = None) XAAutomatorRequiredResourceList[source]
+

Returns a list of required resource, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter resources by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of required resources

+
+
Return type:
+

XAAutomatorVariableList

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+settings(filter: Optional[dict] = None) XAAutomatorSettingList[source]
+

Returns a list of settings, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter settings by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of settings

+
+
Return type:
+

XAAutomatorWorkflowList

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+property show_action_when_run: bool
+

Whether the action should show its user interface when run.

+
+ +
+
+property target_application: list[str]
+

The application(s) with which the action communicates.

+
+ +
+
+property version: str
+

The version of the action.

+
+ +
+
+property warning_action: str
+

The action suggested by the warning, if any.

+
+ +
+
+property warning_level: WarningLevel
+

The level of the warning, increasing in likelihood of data loss.

+
+ +
+
+property warning_message: str
+

The message that accompanies the warning, if any.

+
+ +
+ +
+
+class PyXA.apps.Automator.XAAutomatorActionList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around a list of Automator required resources which utilizes fast enumeration techniques.

+

All properties of required resources can be called as methods on the wrapped list, returning a list containing each resource’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

bundle_id()

by_bundle_id(bundle_id)

by_category(category)

by_comment(comment)

by_enabled(enabled)

by_execution_error_message(...)

by_execution_error_number(execution_error_number)

by_execution_result(execution_result)

by_icon_name(icon_name)

by_id(id)

by_ignores_input(ignores_input)

by_input_types(input_types)

by_keywords(keywords)

by_name(name)

by_output_types(output_types)

by_parent_workflow(parent_workflow)

by_path(path)

by_show_action_when_run(show_action_when_run)

by_target_application(target_application)

by_version(version)

by_warning_action(warning_action)

by_warning_level(warning_level)

by_warning_message(warning_message)

category()

comment()

enabled()

execution_error_message()

execution_error_number()

execution_result()

icon_name()

ignores_input()

index()

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

input_types()

keywords()

name()

output_types()

parent_workflow()

path()

show_action_when_run()

target_application()

version()

warning_action()

warning_level()

warning_message()

+
+
+bundle_id() list[str][source]
+
+ +
+
+by_bundle_id(bundle_id: str) Optional[XAAutomatorAction][source]
+
+ +
+
+by_category(category: list[str]) Optional[XAAutomatorAction][source]
+
+ +
+
+by_comment(comment: str) Optional[XAAutomatorAction][source]
+
+ +
+
+by_enabled(enabled: bool) Optional[XAAutomatorAction][source]
+
+ +
+
+by_execution_error_message(execution_error_message: str) Optional[XAAutomatorAction][source]
+
+ +
+
+by_execution_error_number(execution_error_number: int) Optional[XAAutomatorAction][source]
+
+ +
+
+by_execution_result(execution_result: Any) Optional[XAAutomatorAction][source]
+
+ +
+
+by_icon_name(icon_name: str) Optional[XAAutomatorAction][source]
+
+ +
+
+by_id(id: str) Optional[XAAutomatorAction][source]
+
+ +
+
+by_ignores_input(ignores_input: bool) Optional[XAAutomatorAction][source]
+
+ +
+
+by_input_types(input_types: list[str]) Optional[XAAutomatorAction][source]
+
+ +
+
+by_keywords(keywords: list[str]) Optional[XAAutomatorAction][source]
+
+ +
+
+by_name(name: str) Optional[XAAutomatorAction][source]
+
+ +
+
+by_output_types(output_types: list[str]) Optional[XAAutomatorAction][source]
+
+ +
+
+by_parent_workflow(parent_workflow: XAAutomatorWorkflow) Optional[XAAutomatorAction][source]
+
+ +
+
+by_path(path: str) Optional[XAAutomatorAction][source]
+
+ +
+
+by_show_action_when_run(show_action_when_run: bool) Optional[XAAutomatorAction][source]
+
+ +
+
+by_target_application(target_application: list[str]) Optional[XAAutomatorAction][source]
+
+ +
+
+by_version(version: str) Optional[XAAutomatorAction][source]
+
+ +
+
+by_warning_action(warning_action: str) Optional[XAAutomatorAction][source]
+
+ +
+
+by_warning_level(warning_level: WarningLevel) Optional[XAAutomatorAction][source]
+
+ +
+
+by_warning_message(warning_message: str) Optional[XAAutomatorAction][source]
+
+ +
+
+category() list[list[str]][source]
+
+ +
+
+comment() list[str][source]
+
+ +
+
+enabled() list[bool][source]
+
+ +
+
+execution_error_message() list[str][source]
+
+ +
+
+execution_error_number() list[int][source]
+
+ +
+
+execution_result() list[Any][source]
+
+ +
+
+icon_name() list[str][source]
+
+ +
+
+ignores_input() list[bool][source]
+
+ +
+
+index() list[int][source]
+

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

+
+

New in version 0.1.2.

+
+
+ +
+
+input_types() list[list[str]][source]
+
+ +
+
+keywords() list[list[str]][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+output_types() list[list[str]][source]
+
+ +
+
+parent_workflow() XAAutomatorWorkflowList[source]
+
+ +
+
+path() list[str][source]
+
+ +
+
+show_action_when_run() list[bool][source]
+
+ +
+
+target_application() list[list[str]][source]
+
+ +
+
+version() list[str][source]
+
+ +
+
+warning_action() list[str][source]
+
+ +
+
+warning_level() list[PyXA.apps.Automator.XAAutomatorApplication.WarningLevel][source]
+
+ +
+
+warning_message() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Automator.XAAutomatorApplication(properties)[source]
+

Bases: XASBApplication, XACanOpenPath

+

A class for managing and interacting with Automator.app.

+ +
+

New in version 0.0.4.

+
+

Classes:

+ + + + + + +

WarningLevel(value[, names, module, ...])

Options for warning level in regard to likelihood of data loss.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + +

add(action, workflow[, index])

Adds the specified action to a workflow at the specified index.

automator_actions([filter])

Returns a list of Automator actions, as PyXA objects, matching the given filter.

documents([filter])

Returns a list of documents, as PyXA objects, matching the given filter.

make(specifier, properties)

Creates a new element of the given specifier class without adding it to any list.

open(path)

Opens the file at the given filepath.

variables([filter])

Returns a list of Automator variables, as PyXA objects, matching the given filter.

workflows([filter])

Returns a list of Automator workflows, as PyXA objects, matching the given filter.

+

Attributes:

+ + + + + + + + + + + + +

frontmost

Whether Automator is the active application.

name

The name of the application.

version

The version of Automator.app.

+
+
+class WarningLevel(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for warning level in regard to likelihood of data loss.

+

Attributes:

+ + + + + + + + + + + + +

IRREVERSIBLE

NONE

REVERSIBLE

+
+
+IRREVERSIBLE = 1769108086
+
+ +
+
+NONE = 1852796517
+
+ +
+
+REVERSIBLE = 1920361068
+
+ +
+ +
+
+add(action: XAAutomatorAction, workflow: XAAutomatorWorkflow, index: int = -1) XAAutomatorApplication[source]
+

Adds the specified action to a workflow at the specified index.

+
+
Parameters:
+
    +
  • action (XAAutomatorAction) – The action to add

  • +
  • workflow (XAAutomatorWorkflow) – The workflow to add the action to

  • +
  • index (int, optional) – The index at which to add the action, defaults to -1

  • +
+
+
Returns:
+

A reference to the application object

+
+
Return type:
+

XAAutomatorApplication

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+automator_actions(filter: Optional[dict] = None) XAAutomatorActionList[source]
+

Returns a list of Automator actions, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter actions by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of actions

+
+
Return type:
+

XAAutomatorActionList

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+documents(filter: Optional[dict] = None) XAAutomatorDocumentList[source]
+

Returns a list of documents, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter documents by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of documents

+
+
Return type:
+

XAAutomatorDocumentList

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+property frontmost: bool
+

Whether Automator is the active application.

+
+ +
+
+make(specifier: str, properties: dict)[source]
+

Creates a new element of the given specifier class without adding it to any list.

+

Use XABase.XAList.push() to push the element onto a list.

+
+
Parameters:
+
    +
  • specifier (str) – The classname of the object to create

  • +
  • properties (dict) – The properties to give the object

  • +
+
+
Returns:
+

A PyXA wrapped form of the object

+
+
Return type:
+

XABase.XAObject

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+open(path: Union[str, NSURL]) XAAutomatorWorkflow[source]
+

Opens the file at the given filepath.

+
+
Parameters:
+

target (Union[str, AppKit.NSURL]) – The path to a file or the URL to a website to open.

+
+
Returns:
+

A reference to the PyXA object that called this method.

+
+
Return type:
+

XAObject

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+variables(filter: Optional[dict] = None) XAAutomatorVariableList[source]
+

Returns a list of Automator variables, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter variables by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of variables

+
+
Return type:
+

XAAutomatorVariableList

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+property version: str
+

The version of Automator.app.

+
+ +
+
+workflows(filter: Optional[dict] = None) XAAutomatorWorkflowList[source]
+

Returns a list of Automator workflows, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter workflows by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of workflows

+
+
Return type:
+

XAAutomatorWorkflowList

+
+
+
+

New in version 0.0.4.

+
+
+ +
+ +
+
+class PyXA.apps.Automator.XAAutomatorDocument(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with Automator windows.

+ +
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + + + + +

modified

Whether the document has been modified since its last save.

name

The title of the document.

path

The path to the document on the disk.

+
+
+property modified: bool
+

Whether the document has been modified since its last save.

+
+ +
+
+property name: str
+

The title of the document.

+
+ +
+
+property path: XAPath
+

The path to the document on the disk.

+
+ +
+ +
+
+class PyXA.apps.Automator.XAAutomatorDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around a list of Automator documents which utilizes fast enumeration techniques.

+

All properties of documents can be called as methods on the wrapped list, returning a list containing each document’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_id(id)

by_index(index)

by_title(title)

id()

index()

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

title()

+
+
+by_id(id: int) Optional[XAAutomatorDocument][source]
+
+ +
+
+by_index(index: int) Optional[XAAutomatorDocument][source]
+
+ +
+
+by_title(title: str) Optional[XAAutomatorDocument][source]
+
+ +
+
+id() list[int][source]
+
+ +
+
+index() list[int][source]
+

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

+
+

New in version 0.1.2.

+
+
+ +
+
+title() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Automator.XAAutomatorRequiredResource(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with required resources in Automator.app.

+ +
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

kind

The kind of required resource.

name

The name of the required resource.

resource

The specification of the required resource.

version

The minimum acceptable version of the required resource.

+
+
+property kind: str
+

The kind of required resource.

+
+ +
+
+property name: str
+

The name of the required resource.

+
+ +
+
+property resource: str
+

The specification of the required resource.

+
+ +
+
+property version: int
+

The minimum acceptable version of the required resource.

+
+ +
+ +
+
+class PyXA.apps.Automator.XAAutomatorRequiredResourceList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around a list of Automator required resources which utilizes fast enumeration techniques.

+

All properties of required resources can be called as methods on the wrapped list, returning a list containing each resource’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_kind(kind)

by_name(name)

by_resource(resource)

by_version(version)

kind()

name()

resource()

version()

+
+
+by_kind(kind: str) Optional[XAAutomatorRequiredResource][source]
+
+ +
+
+by_name(name: str) Optional[XAAutomatorRequiredResource][source]
+
+ +
+
+by_resource(resource: str) Optional[XAAutomatorRequiredResource][source]
+
+ +
+
+by_version(version: int) Optional[XAAutomatorRequiredResource][source]
+
+ +
+
+kind() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+resource() list[str][source]
+
+ +
+
+version() list[int][source]
+
+ +
+ +
+
+class PyXA.apps.Automator.XAAutomatorSetting(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with Automator settings (i.e. named values).

+ +
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + + + + +

default_value

The default value of the setting.

name

The name of the setting.

value

The value of the setting.

+
+
+property default_value: Any
+

The default value of the setting.

+
+ +
+
+property name: str
+

The name of the setting.

+
+ +
+
+property value: Any
+

The value of the setting.

+
+ +
+ +
+
+class PyXA.apps.Automator.XAAutomatorSettingList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around a list of Automator settings which utilizes fast enumeration techniques.

+

All properties of settings can be called as methods on the wrapped list, returning a list containing each setting’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_default_value(default_value)

by_name(name)

by_value(value)

default_value()

name()

value()

+
+
+by_default_value(default_value: Any) Optional[XAAutomatorSetting][source]
+
+ +
+
+by_name(name: str) Optional[XAAutomatorSetting][source]
+
+ +
+
+by_value(value: Any) Optional[XAAutomatorSetting][source]
+
+ +
+
+default_value() list[Any][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+value() list[Any][source]
+
+ +
+ +
+
+class PyXA.apps.Automator.XAAutomatorVariable(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with Automator variables.

+ +
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + + + + +

name

The name of the variable.

settable

Whether the name and value of the variable can be changed.

value

The value of the variable.

+
+
+property name: str
+

The name of the variable.

+
+ +
+
+property settable: bool
+

Whether the name and value of the variable can be changed.

+
+ +
+
+property value: Any
+

The value of the variable.

+
+ +
+ +
+
+class PyXA.apps.Automator.XAAutomatorVariableList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around a list of Automator variables which utilizes fast enumeration techniques.

+

All properties of variables can be called as methods on the wrapped list, returning a list containing each variable’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_name(name)

by_settable(settable)

by_value(value)

name()

settable()

value()

+
+
+by_name(name: str) Optional[XAAutomatorVariable][source]
+
+ +
+
+by_settable(settable: bool) Optional[XAAutomatorVariable][source]
+
+ +
+
+by_value(value: Any) Optional[XAAutomatorVariable][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+settable() list[bool][source]
+
+ +
+
+value() list[Any][source]
+
+ +
+ +
+
+class PyXA.apps.Automator.XAAutomatorWindow(properties)[source]
+

Bases: XASBWindow

+

A class for managing and interacting with Automator windows.

+ +
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

document

The document currently displayed in the window.

floating

Whether the window floats.

modal

Whether the window is a modal window.

titled

Whether the window has a title bar.

+
+
+property document: XAAutomatorDocument
+

The document currently displayed in the window.

+
+ +
+
+property floating: bool
+

Whether the window floats.

+
+ +
+
+property modal: bool
+

Whether the window is a modal window.

+
+ +
+
+property titled: bool
+

Whether the window has a title bar.

+
+ +
+ +
+
+class PyXA.apps.Automator.XAAutomatorWorkflow(properties)[source]
+

Bases: XAAutomatorDocument

+

A class for managing and interacting with Automator workflows.

+ +
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + +

automator_actions([filter])

Returns a list of actions, as PyXA objects, matching the given filter.

delete()

Closes the workflow.

execute()

Executes the workflow.

save()

Saves the workflow to the disk at the location specified by XAAutomatorWorkflow.path, or in the downloads folder if no path has been specified.

variables([filter])

Returns a list of variables, as PyXA objects, matching the given filter.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

current_action

The current or most recent action of the workflow.

execution_error_message

The text error message generated by the most recent execution.

execution_error_number

The numeric error code generated by the most recent execution.

execution_id

The unique identifier for the current or most recent execution.

execution_result

The result of the most resent execution.

name

The name of the workflow.

+
+
+automator_actions(filter: Optional[dict] = None) XAAutomatorActionList[source]
+

Returns a list of actions, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter actions by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of actions

+
+
Return type:
+

XAAutomatorActionList

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+property current_action: XAAutomatorAction
+

The current or most recent action of the workflow.

+
+ +
+
+delete()[source]
+

Closes the workflow.

+
+

New in version 0.0.4.

+
+
+ +
+
+execute() Any[source]
+

Executes the workflow.

+
+
Returns:
+

The return value of the workflow after execution

+
+
Return type:
+

Any

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+property execution_error_message: str
+

The text error message generated by the most recent execution.

+
+ +
+
+property execution_error_number: int
+

The numeric error code generated by the most recent execution.

+
+ +
+
+property execution_id: str
+

The unique identifier for the current or most recent execution.

+
+ +
+
+property execution_result: Any
+

The result of the most resent execution.

+
+ +
+
+property name: str
+

The name of the workflow.

+
+ +
+
+save() XAAutomatorWorkflow[source]
+

Saves the workflow to the disk at the location specified by XAAutomatorWorkflow.path, or in the downloads folder if no path has been specified.

+
+
Returns:
+

The workflow object.

+
+
Return type:
+

XAAutomatorWorkflow

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+variables(filter: Optional[dict] = None) XAAutomatorVariableList[source]
+

Returns a list of variables, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter variables by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of variables

+
+
Return type:
+

XAAutomatorVariableList

+
+
+
+

New in version 0.0.4.

+
+
+ +
+ +
+
+class PyXA.apps.Automator.XAAutomatorWorkflowList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around a list of Automator workflows which utilizes fast enumeration techniques.

+

All properties of workflows can be called as methods on the wrapped list, returning a list containing each workflow’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_current_action(current_action)

by_execution_error_message(...)

by_execution_error_number(execution_error_number)

by_execution_id(execution_id)

by_execution_result(result)

by_name(name)

current_action()

execution_error_message()

execution_error_number()

execution_id()

execution_result()

name()

+
+
+by_current_action(current_action: XAAutomatorAction) Optional[XAAutomatorWorkflow][source]
+
+ +
+
+by_execution_error_message(execution_error_message: str) Optional[XAAutomatorWorkflow][source]
+
+ +
+
+by_execution_error_number(execution_error_number: int) Optional[XAAutomatorWorkflow][source]
+
+ +
+
+by_execution_id(execution_id: str) Optional[XAAutomatorWorkflow][source]
+
+ +
+
+by_execution_result(result: Any) Optional[XAAutomatorWorkflow][source]
+
+ +
+
+by_name(name: str) Optional[XAAutomatorWorkflow][source]
+
+ +
+
+current_action() XAAutomatorActionList[source]
+
+ +
+
+execution_error_message() list[str][source]
+
+ +
+
+execution_error_number() list[int][source]
+
+ +
+
+execution_id() list[str][source]
+
+ +
+
+execution_result() list[Any][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/bike.html b/docs/reference/apps/bike.html new file mode 100644 index 0000000..b9c988a --- /dev/null +++ b/docs/reference/apps/bike.html @@ -0,0 +1,1462 @@ + + + + + + + Bike Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Bike Module Reference

+
+

New in version 0.1.0.

+
+

Control Bike using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

XABikeApplication(properties)

A class for managing and interacting with Bike.app.

XABikeAttribute(properties)

An attribute in a row.

XABikeAttributeList(properties[, filter])

A wrapper around a list of attributes.

XABikeDocument(properties)

A document of Bike.app.

XABikeDocumentList(properties[, filter])

A wrapper around lists of Bike documents that employs fast enumeration techniques.

XABikeRow(properties)

A row in an outline.

XABikeRowList(properties[, filter])

A wrapper around a list of rows.

XABikeWindow(properties)

A window of Bike.app.

+
+
+class PyXA.apps.Bike.XABikeApplication(properties)[source]
+

Bases: XASBApplication, XACanOpenPath

+

A class for managing and interacting with Bike.app.

+
+

New in version 0.1.0.

+
+

Classes:

+ + + + + + +

FileFormat(value[, names, module, qualname, ...])

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

background_color

Bike background color preference.

font_size

Bike font size preference.

foreground_color

Bike foreground color preference.

frontmost

Whether Bike is the frontmost application.

name

The name of the application.

version

The version of Bike.app.

+

Methods:

+ + + + + + + + + +

documents([filter])

Returns a list of documents, as PyXA-wrapped objects, matching the given filter.

make(specifier[, properties])

Creates a new element of the given specifier class without adding it to any list.

+
+
+class FileFormat(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Attributes:

+ + + + + + + + + + + + +

BIKE

OPML

PLAINTEXT

+
+
+BIKE = 1112237670
+
+ +
+
+OPML = 1330670956
+
+ +
+
+PLAINTEXT = 1347708525
+
+ +
+ +
+
+property background_color: XAColor
+

Bike background color preference.

+
+ +
+
+documents(filter: dict = None) Optional[XABikeDocumentList][source]
+

Returns a list of documents, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned documents will have, or None

+
+
Returns:
+

The list of documents

+
+
Return type:
+

XABikeDocumentList

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Bike")
+>>> print(app.documents())
+<<class 'PyXA.apps.Bike.XABikeDocumentList'>['Untitled', 'PyXA Notes.bike']>
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property font_size: Union[int, float]
+

Bike font size preference.

+
+ +
+
+property foreground_color: XAColor
+

Bike foreground color preference.

+
+ +
+
+property frontmost: bool
+

Whether Bike is the frontmost application.

+
+ +
+
+make(specifier: str, properties: Optional[dict] = None) XAObject[source]
+

Creates a new element of the given specifier class without adding it to any list.

+

Use XABase.XAList.push() to push the element onto a list.

+
+
Parameters:
+
    +
  • specifier (str) – The classname of the object to create

  • +
  • properties (dict) – The properties to give the object

  • +
+
+
Returns:
+

A PyXA wrapped form of the object

+
+
Return type:
+

XABase.XAObject

+
+
Example 1:
+

Add new rows to the current document

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Bike")
+>>> front_doc_rows = app.front_window.document.rows()
+>>> 
+>>> row1 = app.make("row", {"name": "This is a new row!"})
+>>> row2 = app.make("row", {"name": "This is another new row!"})
+>>> row3 = app.make("row", {"name": "This is a third new row!"})
+>>> 
+>>> front_doc_rows.push(row1) # Add to the end of the document
+>>> front_doc_rows.insert(row2, 0) # Insert at the beginning of the document
+>>> front_doc_rows.insert(row3, 5) # Insert at the middle of the document
+
+
+
+

New in version 0.1,0.

+
+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+property version: str
+

The version of Bike.app.

+
+ +
+ +
+
+class PyXA.apps.Bike.XABikeAttribute(properties)[source]
+

Bases: XAObject

+

An attribute in a row.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + +

container_row

The row that contains this attribute.

name

The name of the attribute.

value

The value of the attribute.

+
+
+property container_row: XABikeRow
+

The row that contains this attribute.

+
+ +
+
+property name: str
+

The name of the attribute.

+
+ +
+
+property value: str
+

The value of the attribute.

+
+ +
+ +
+
+class PyXA.apps.Bike.XABikeAttributeList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around a list of attributes.

+

All properties of attribute objects can be accessed via methods on the list, returning a list of each attribute’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_container_row(container_row)

by_name(name)

by_value(value)

container_row()

name()

value()

+
+
+by_container_row(container_row: XABikeRow) Optional[XABikeAttribute][source]
+
+ +
+
+by_name(name: str) Optional[XABikeAttribute][source]
+
+ +
+
+by_value(value: str) Optional[XABikeAttribute][source]
+
+ +
+
+container_row() XABikeRowList[source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+value() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Bike.XABikeDocument(properties)[source]
+

Bases: XAObject, XACloseable

+

A document of Bike.app.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

entire_contents

All rows in the document.

file

The location of the document on disk, if it has one.

focused_row

The currently focused row.

hoisted_row

The currently hoisted row.

id

The unique and persistent identifier for the document.

modified

Whether the document has been modified since it was last saved.

name

The name of the document.

root_row

The top 'root' row of the document, not visible in the outline editor.

selected_text

The currently selected text.

selection_row

The row intersecting the selected text head.

selection_rows

All rows intersecting the selected text.

url

The Bike URL link for the document.

+

Methods:

+ + + + + + + + + +

rows([filter])

Returns a list of rows, as PyXA-wrapped objects, matching the given filter.

save([path, format])

Saves the document to the specified location, or at its existing location.

+
+
+property entire_contents: XABikeRowList
+

All rows in the document.

+
+ +
+
+property file: XAPath
+

The location of the document on disk, if it has one.

+
+ +
+
+property focused_row: XABikeRow
+

The currently focused row.

+
+ +
+
+property hoisted_row: XABikeRow
+

The currently hoisted row.

+
+ +
+
+property id: str
+

The unique and persistent identifier for the document.

+
+ +
+
+property modified: str
+

Whether the document has been modified since it was last saved.

+
+ +
+
+property name: str
+

The name of the document.

+
+ +
+
+property root_row: XABikeRow
+

The top ‘root’ row of the document, not visible in the outline editor.

+
+ +
+
+rows(filter: dict = None) Optional[XABikeRowList][source]
+

Returns a list of rows, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned rows will have, or None

+
+
Returns:
+

The list of rows

+
+
Return type:
+

XABikeRowList

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Bike")
+>>> doc = app.front_window.document
+>>> print(doc.rows())
+<<class 'PyXA.apps.Bike.XABikeRowList'>['Row 1', 'Row 2', 'Row 2.1']>
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+save(path: Optional[Union[str, XAPath]] = None, format: FileFormat = FileFormat.BIKE)[source]
+

Saves the document to the specified location, or at its existing location.

+
+
Parameters:
+
    +
  • path (Union[str, XABase.XAPath, None], optional) – The location to save the document in, defaults to None

  • +
  • format (XABikeApplication.FileFormat, optional) – The format to save the document as, defaults to XABikeApplication.FileFormat.BIKE

  • +
+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Bike")
+>>> doc = app.documents()[0]
+>>> doc.save("/Users/exampleUser/Documents/Notes.opml", app.FileFormat.OPML)
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property selected_text: str
+

The currently selected text.

+
+ +
+
+property selection_row: XABikeRow
+

The row intersecting the selected text head.

+
+ +
+
+property selection_rows: XABikeRowList
+

All rows intersecting the selected text.

+
+ +
+
+property url: XAURL
+

The Bike URL link for the document.

+
+ +
+ +
+
+class PyXA.apps.Bike.XABikeDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XACanOpenPath, XAClipboardCodable

+

A wrapper around lists of Bike documents that employs fast enumeration techniques.

+

All properties of documents can be called as methods on the wrapped list, returning a list containing each document’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_entire_contents(entire_contents)

by_file(file)

by_focused_row(focused_row)

by_hoisted_row(hoisted_row)

by_id(id)

by_modified(modified)

by_name(name)

by_root_row(root_row)

by_selected_text(selected_text)

by_selection_row(selection_row)

by_selection_rows(selection_rows)

by_url(url)

close([save])

Closes every document in the list.

entireContents()

file()

focused_row()

hoisted_row()

id()

modified()

name()

root_row()

selected_text()

selection_row()

selection_rows()

url()

+
+
+by_entire_contents(entire_contents: Union[XABikeRowList, list[PyXA.apps.Bike.XABikeRow]]) Optional[XABikeDocument][source]
+
+ +
+
+by_file(file: Union[str, XAPath]) Optional[XABikeDocument][source]
+
+ +
+
+by_focused_row(focused_row: XABikeRow) Optional[XABikeDocument][source]
+
+ +
+
+by_hoisted_row(hoisted_row: XABikeRow) Optional[XABikeDocument][source]
+
+ +
+
+by_id(id: str) Optional[XABikeDocument][source]
+
+ +
+
+by_modified(modified: bool) Optional[XABikeDocument][source]
+
+ +
+
+by_name(name: str) Optional[XABikeDocument][source]
+
+ +
+
+by_root_row(root_row: XABikeRow) Optional[XABikeDocument][source]
+
+ +
+
+by_selected_text(selected_text: str) Optional[XABikeDocument][source]
+
+ +
+
+by_selection_row(selection_row: XABikeRow) Optional[XABikeDocument][source]
+
+ +
+
+by_selection_rows(selection_rows: Union[XABikeRowList, list[PyXA.apps.Bike.XABikeRow]]) Optional[XABikeDocument][source]
+
+ +
+
+by_url(url: Union[str, XAURL]) Optional[XABikeDocument][source]
+
+ +
+
+close(save: XACloseable.SaveOption = None)[source]
+

Closes every document in the list. Leaves the last document open if it is the only document open in the application.

+
+
Parameters:
+

save (XACloseable.SaveOption, optional) – Whether to save the documents before closing, defaults to YES

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+entireContents() XABikeRowList[source]
+
+ +
+
+file() list[PyXA.XABase.XAPath][source]
+
+ +
+
+focused_row() XABikeRowList[source]
+
+ +
+
+hoisted_row() XABikeRowList[source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+modified() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+root_row() XABikeRowList[source]
+
+ +
+
+selected_text() list[str][source]
+
+ +
+
+selection_row() XABikeRowList[source]
+
+ +
+
+selection_rows() XABikeRowList[source]
+
+ +
+
+url() list[PyXA.XABase.XAURL][source]
+
+ +
+ +
+
+class PyXA.apps.Bike.XABikeRow(properties)[source]
+

Bases: XAObject, XADeletable

+

A row in an outline.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + +

attributes([filter])

Returns a list of attributes, as PyXA-wrapped objects, matching the given filter.

collapse([all])

Collapses the row and optionally all rows it contains.

expand([all])

Expanded the row and optionally all rows it contains.

move_to(location)

Makes the row a child of the specified row.

rows([filter])

Returns a list of rows, as PyXA-wrapped objects, matching the given filter.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

collapsed

True if this row is collapsed in the window.

container

The container of the row.

container_document

The document that contains this row.

container_row

The row that directly contains this row.

contains_rows

True if the row contains other rows.

entire_contents

The list of all rows contained by this row.

expanded

True if this row is expanded in the window.

id

The unique and persistent identifier for the row.

level

The indentation level for the row in the outline.

name

The plain text content of the row.

next_sibling_row

The next row with the same container as this row.

prev_sibling_row

The previous row with the same container row as this row.

selected

True if this row is selected in the window.

url

The Bike URL for the row combining the document ID with the item ID.

visible

True if this row is visible in the window (may require scrolling).

+
+
+attributes(filter: dict = None) Optional[XABikeAttributeList][source]
+

Returns a list of attributes, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned attributes will have, or None

+
+
Returns:
+

The list of attributes

+
+
Return type:
+

XABikeAttributeList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+collapse(all: bool = False)[source]
+

Collapses the row and optionally all rows it contains.

+
+
Parameters:
+

recursive (bool, optional) – Whether to also collapse all rows contained by this row, defaults to False

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property collapsed: bool
+

True if this row is collapsed in the window.

+
+ +
+
+property container: Union[XABikeRow, XABikeDocument]
+

The container of the row.

+
+ +
+
+property container_document: XABikeDocument
+

The document that contains this row.

+
+ +
+
+property container_row: Optional[XABikeRow]
+

The row that directly contains this row.

+
+ +
+
+property contains_rows: bool
+

True if the row contains other rows.

+
+ +
+
+property entire_contents: XABikeRowList
+

The list of all rows contained by this row.

+
+ +
+
+expand(all: bool = False)[source]
+

Expanded the row and optionally all rows it contains.

+
+
Parameters:
+

recursive (bool, optional) – Whether to also expand all rows contained by this row, defaults to False

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property expanded: bool
+

True if this row is expanded in the window.

+
+ +
+
+property id: str
+

The unique and persistent identifier for the row.

+
+ +
+
+property level: int
+

The indentation level for the row in the outline.

+
+ +
+
+move_to(location: XABikeRow)[source]
+

Makes the row a child of the specified row.

+
+
Parameters:
+

location (XABikeRow) – The row to move this row to.

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Bike")
+>>> doc = app.documents()[0]
+>>> row1 = doc.rows()[0]
+>>> row2 = doc.rows()[5]
+>>> row1.move_to(row2)
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property name: str
+

The plain text content of the row.

+
+ +
+
+property next_sibling_row: type
+

The next row with the same container as this row.

+
+ +
+
+property prev_sibling_row: XABikeRow
+

The previous row with the same container row as this row.

+
+ +
+
+rows(filter: dict = None) Optional[XABikeRowList][source]
+

Returns a list of rows, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned rows will have, or None

+
+
Returns:
+

The list of rows

+
+
Return type:
+

XABikeRowList

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Bike")
+>>> doc = app.front_window.document
+>>> row = doc.rows()[4]
+>>> print(row.rows())
+<<class 'PyXA.apps.Bike.XABikeRowList'>['Watch intro movie', 'Glance through features list', 'https://www.hogbaysoftware.com/bike']>
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property selected: bool
+

True if this row is selected in the window.

+
+ +
+
+property url: XAURL
+

The Bike URL for the row combining the document ID with the item ID.

+
+ +
+
+property visible: bool
+

True if this row is visible in the window (may require scrolling).

+
+ +
+ +
+
+class PyXA.apps.Bike.XABikeRowList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around a list of rows.

+

All properties of row objects can be accessed via methods on the list, returning a list of each row’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_collapsed(collapsed)

by_container(container)

by_container_document(container_document)

by_container_row(container_row)

by_contains_rows(contains_rows)

by_entire_contents(entire_contents)

by_expanded(expanded)

by_id(id)

by_level(level)

by_name(name)

by_next_sibling_row(next_sibling_row)

by_prev_sibling_row(prev_sibling_row)

by_selected(selected)

by_url(url)

by_visible(visible)

collapse([all])

Collapses all rows in the list, optionally collapsing all of the children as well.

collapsed()

container()

container_row()

contains_rows()

entire_contents()

expand([all])

Expands all rows in the list, optionally expanding all of the children as well.

expanded()

id()

level()

name()

next_sibling_row()

prev_sibling_row()

selected()

url()

visible()

+
+
+by_collapsed(collapsed: bool) Optional[XABikeRow][source]
+
+ +
+
+by_container(container: Union[XABikeDocument, XABikeRow]) Optional[XABikeRow][source]
+
+ +
+
+by_container_document(container_document: XABikeDocument) Optional[XABikeRow][source]
+
+ +
+
+by_container_row(container_row: XABikeRow) Optional[XABikeRow][source]
+
+ +
+
+by_contains_rows(contains_rows: bool) Optional[XABikeRow][source]
+
+ +
+
+by_entire_contents(entire_contents: Union[XABikeRowList, list[PyXA.apps.Bike.XABikeRow]]) Optional[XABikeRow][source]
+
+ +
+
+by_expanded(expanded: bool) Optional[XABikeRow][source]
+
+ +
+
+by_id(id: str) Optional[XABikeRow][source]
+
+ +
+
+by_level(level: int) Optional[XABikeRow][source]
+
+ +
+
+by_name(name: str) Optional[XABikeRow][source]
+
+ +
+
+by_next_sibling_row(next_sibling_row: XABikeRow) Optional[XABikeRow][source]
+
+ +
+
+by_prev_sibling_row(prev_sibling_row: XABikeRow) Optional[XABikeRow][source]
+
+ +
+
+by_selected(selected: bool) Optional[XABikeRow][source]
+
+ +
+
+by_url(url: Union[str, XAURL]) Optional[XABikeRow][source]
+
+ +
+
+by_visible(visible: bool) Optional[XABikeRow][source]
+
+ +
+
+collapse(all: bool = False)[source]
+

Collapses all rows in the list, optionally collapsing all of the children as well.

+
+
Parameters:
+

all (bool, optional) – Whether to collapse all child rows, defaults to False

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+collapsed() list[bool][source]
+
+ +
+
+container() list[Union[PyXA.apps.Bike.XABikeDocument, PyXA.apps.Bike.XABikeRow]][source]
+
+ +
+
+container_row() XABikeRowList[source]
+
+ +
+
+contains_rows() list[bool][source]
+
+ +
+
+entire_contents() XABikeRowList[source]
+
+ +
+
+expand(all: bool = False)[source]
+

Expands all rows in the list, optionally expanding all of the children as well.

+
+
Parameters:
+

all (bool, optional) – Whether to expand all child rows, defaults to False

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+expanded() list[bool][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+level() list[int][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+next_sibling_row() XABikeRowList[source]
+
+ +
+
+prev_sibling_row() XABikeRowList[source]
+
+ +
+
+selected() list[bool][source]
+
+ +
+
+url() list[PyXA.XABase.XAURL][source]
+
+ +
+
+visible() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Bike.XABikeWindow(properties)[source]
+

Bases: XASBWindow

+

A window of Bike.app.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + +

document

The document whose contents are currently displayed in the window.

+
+
+property document: XABikeDocument
+

The document whose contents are currently displayed in the window.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/calculator.html b/docs/reference/apps/calculator.html new file mode 100644 index 0000000..51bd2d6 --- /dev/null +++ b/docs/reference/apps/calculator.html @@ -0,0 +1,388 @@ + + + + + + + Calculator Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Calculator Module Reference

+
+

New in version 0.0.2.

+
+

Control the macOS Calculator application using JXA-like syntax.

+

Classes:

+ + + + + + +

XACalculatorApplication(properties)

A class for managing and interacting with Calculator.app.

+
+
+class PyXA.apps.Calculator.XACalculatorApplication(properties)[source]
+

Bases: XAApplication

+

A class for managing and interacting with Calculator.app.

+
+

New in version 0.0.2.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

clear_value()

Clears the current calculator output.

copy_value()

Copies the current value of the calculator result.

current_value()

Retrieves the current value of the calculator output.

input(sequence)

Inputs a sequence of numbers and operations into the calculator by mimicking button clicks.

open_about_panel()

Opens the "About Calculator" panel.

open_page_setup()

Opens the page setup dialog.

print_tape()

Opens the print tape dialog.

save_tape()

Opens the "save tape" dialog.

show_basic_calculator()

Switches the view to the basic calculator.

show_help()

Opens the Calculator help window.

show_paper_tape()

Opens the paper tape window.

show_programmer_calculator()

Switches the view to the programmer calculator.

show_scientific_calculator()

Switches the view to the scientific calculator.

toggle_RPN_mode()

Toggles Reverse Polish Notation.

toggle_thousands_separators()

Toggles whether comma separators are shown at thousand intervals.

+
+
+clear_value()[source]
+

Clears the current calculator output. Mimics clicking the “C” (clear) button.

+
+

New in version 0.0.2.

+
+
+ +
+
+copy_value()[source]
+

Copies the current value of the calculator result. Mimics clicking Edit->Copy.

+
+

New in version 0.0.2.

+
+
+ +
+
+current_value() float[source]
+

Retrieves the current value of the calculator output.

+
+
Returns:
+

The calculator’s current displayed value

+
+
Return type:
+

float

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+input(sequence: str)[source]
+

Inputs a sequence of numbers and operations into the calculator by mimicking button clicks.

+

This method does not obtain the result of the input. For that, use current_value().

+

The sequence should be a continuous string (no spaces). The valid characters are numbers 0-9, +, -, *, /, %, ~, =, and c. Their meanings are as follows:

+
    +
  • +, -, *, and / correspond to their usual operation buttons.

  • +
  • % designates the percentage button.

  • +
  • ~ corresponds to the negation button.

  • +
  • = represents the equals button.

  • +
  • c denotes the clear button.

  • +
+
+
Parameters:
+

sequence (str) – The sequence of numbers and operations to execute.

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Calculator")
+>>> app.input("c2*3.14*5*5=")
+34.54
+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+open_about_panel()[source]
+

Opens the “About Calculator” panel. Mimics clicking File->About Calculator.

+
+

New in version 0.0.2.

+
+
+ +
+
+open_page_setup()[source]
+

Opens the page setup dialog. Mimics clicking File->Page Setup…

+
+

New in version 0.0.2.

+
+
+ +
+
+print_tape()[source]
+

Opens the print tape dialog. Mimics clicking File->Print Tape…

+
+

New in version 0.0.2.

+
+
+ +
+
+save_tape()[source]
+

Opens the “save tape” dialog. Mimics clicking File->Save Tape As…

+
+

New in version 0.0.2.

+
+
+ +
+
+show_basic_calculator()[source]
+

Switches the view to the basic calculator. Mimics clicking View->Basic.

+
+

New in version 0.0.2.

+
+
+ +
+
+show_help()[source]
+

Opens the Calculator help window. Mimics clicking Help->Calculator Help.add()

+
+

New in version 0.0.2.

+
+
+ +
+
+show_paper_tape()[source]
+

Opens the paper tape window. Mimics clicking Window->Show Paper Tape.

+
+

New in version 0.0.2.

+
+
+ +
+
+show_programmer_calculator()[source]
+

Switches the view to the programmer calculator. Mimics clicking View->Programmer.

+
+

New in version 0.0.2.

+
+
+ +
+
+show_scientific_calculator()[source]
+

Switches the view to the scientific calculator. Mimics clicking View->Scientific.

+
+

New in version 0.0.2.

+
+
+ +
+
+toggle_RPN_mode()[source]
+

Toggles Reverse Polish Notation. Mimics clicking View->RPN Mode.

+
+

New in version 0.0.2.

+
+
+ +
+
+toggle_thousands_separators()[source]
+

Toggles whether comma separators are shown at thousand intervals. Mimics clicking View->Show Thousands Separators.

+
+

New in version 0.0.2.

+
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/calendar.html b/docs/reference/apps/calendar.html new file mode 100644 index 0000000..4859410 --- /dev/null +++ b/docs/reference/apps/calendar.html @@ -0,0 +1,2351 @@ + + + + + + + Calendar Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Calendar Module Reference

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XACalendarAlarm(properties)

An event alarm in Calendar.app.

XACalendarApplication(properties)

A class for managing and interacting with scripting elements of the macOS Calendar application.

XACalendarAttachment(properties)

A class for interacting with calendar event attachments.

XACalendarAttachmentList(properties[, filter])

A wrapper around lists of event attachments that employs fast enumeration techniques.

XACalendarAttendee(properties)

An event attendee in Calendar.app.

XACalendarAttendeeList(properties[, filter])

A wrapper around lists of attendees that employs fast enumeration techniques.

XACalendarCalendar(properties)

A calendar in Calendar.app.

XACalendarCalendarList(properties[, filter])

A wrapper around lists of calendars that employs fast enumeration techniques.

XACalendarDisplayAlarm(properties)

A display alarm in Calendar.app.

XACalendarDocument(properties)

A document in Calendar.app.

XACalendarDocumentList(properties[, filter])

A wrapper around lists of documents that employs fast enumeration techniques.

XACalendarEvent(properties)

An event in Calendar.app.

XACalendarEventList(properties[, filter])

A wrapper around lists of events that employs fast enumeration techniques.

XACalendarMailAlarm(properties)

A mail alarm in Calendar.app.

XACalendarOpenFileAlarm(properties)

An open file alarm in Calendar.app.

XACalendarSoundAlarm(properties)

A sound alarm in Calendar.app.

XACalendarWindow(properties)

A window of Calendar.app.

+
+
+class PyXA.apps.Calendar.XACalendarAlarm(properties: dict)[source]
+

Bases: XAObject

+

An event alarm in Calendar.app.

+
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + + + + +

properties

All properties of the alarm.

trigger_date

The date of the alarm.

trigger_interval

The interval in minutes between the event and the alarm.

+
+
+property properties: dict
+

All properties of the alarm.

+
+ +
+
+property trigger_date: datetime
+

The date of the alarm.

+
+ +
+
+property trigger_interval: int
+

The interval in minutes between the event and the alarm.

+
+ +
+ +
+
+class PyXA.apps.Calendar.XACalendarApplication(properties: dict)[source]
+

Bases: XASBApplication, XACanOpenPath

+

A class for managing and interacting with scripting elements of the macOS Calendar application.

+
+

See also

+

Classes XACalendarCalendar, XACalendarEvent

+
+
+

New in version 0.0.1.

+
+

Classes:

+ + + + + + + + + + + + + + + +

EventStatus(value[, names, module, ...])

Event confirmation statuses.

ParticipationStatus(value[, names, module, ...])

Event participation statuses.

Priority(value[, names, module, qualname, ...])

Event priorities.

ViewType(value[, names, module, qualname, ...])

Views in Calendar.app.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

calendars([filter])

Returns a list of calendars, as PyXA objects, matching the given filter.

documents([filter])

Returns a list of documents, as PyXA objects, matching the given filter.

make(specifier[, properties])

Creates a new element of the given specifier class without adding it to any list.

new_calendar([name])

Creates a new calendar with the given name.

new_event(summary, start_date, end_date[, ...])

Creates a new event with the given name and start/end dates in the specified calendar.

reload_calendars()

Reloads the contents of all calendars.

subscribe_to(url)

Subscribes to the calendar at the specified URL.

switch_view_to(view)

Switches to the target calendar view.

view_calendar_at(date[, view])

Displays the calendar at the provided date.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

default_calendar

The calendar that events are added to by default.

frontmost

Whether Calendar is the frontmost application.

name

The name of the application.

properties

All properties of the application.

version

The version of the Calendar application.

+
+
+class EventStatus(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Event confirmation statuses.

+

Attributes:

+ + + + + + + + + + + + + + + +

CANCELLED

A cancelled event

CONFIRMED

A confirmed event

NONE

An event without a status

TENTATIVE

A tentative event

+
+
+CANCELLED = 1161061217
+

A cancelled event

+
+ +
+
+CONFIRMED = 1161061230
+

A confirmed event

+
+ +
+
+NONE = 1161064047
+

An event without a status

+
+ +
+
+TENTATIVE = 1161065573
+

A tentative event

+
+ +
+ +
+
+class ParticipationStatus(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Event participation statuses.

+

Attributes:

+ + + + + + + + + + + + + + + +

ACCEPTED

Invitation has been accepted

DECLINED

Invitation has been declined

TENTATIVE

Invitation has been tentatively accepted

UNKNOWN

No answer yet

+
+
+ACCEPTED = 1161191792
+

Invitation has been accepted

+
+ +
+
+DECLINED = 1161192560
+

Invitation has been declined

+
+ +
+
+TENTATIVE = 1161196656
+

Invitation has been tentatively accepted

+
+ +
+
+UNKNOWN = 1161195105
+

No answer yet

+
+ +
+ +
+
+class Priority(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Event priorities.

+

Attributes:

+ + + + + + + + + + + + + + + +

HIGH

High priority

LOW

Low priority

MEDIUM

Medium priority

NONE

No priority assigned

+
+
+HIGH = 1952739377
+

High priority

+
+ +
+
+LOW = 1952739385
+

Low priority

+
+ +
+
+MEDIUM = 1952739381
+

Medium priority

+
+ +
+
+NONE = 1952739376
+

No priority assigned

+
+ +
+ +
+
+class ViewType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Views in Calendar.app.

+

Attributes:

+ + + + + + + + + + + + + + + +

DAY

The iCal day view

MONTH

The iCal month view

WEEK

The iCal week view

YEAR

The iCal year view

+
+
+DAY = 1161127009
+

The iCal day view

+
+ +
+
+MONTH = 1161129327
+

The iCal month view

+
+ +
+
+WEEK = 1161131877
+

The iCal week view

+
+ +
+
+YEAR = 1161132389
+

The iCal year view

+
+ +
+ +
+
+calendars(filter: Optional[dict] = None) XACalendarCalendarList[source]
+

Returns a list of calendars, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned calendars will have, or None

+
+
Returns:
+

The list of calendars

+
+
Return type:
+

XACalendarCalendarList

+
+
Example 1:
+

Get all calendars

+
+
+
>>> import PyXA
+>>> app = PyXA.application("Calendar")
+>>> print(app.calendars())
+<<class 'PyXA.apps.Calendar.XACalendarCalendarList'>['Calendar', 'Calendar2', 'Calendar3', ...]>
+
+
+
+
Example 2:
+

Get calendars using a filter

+
+
+
>>> import PyXA
+>>> app = PyXA.application("Calendar")
+>>> print(app.calendars({"name": "Calendar"})[0])
+<<class 'PyXA.apps.Calendar.XACalendarCalendar'>Calendar>
+
+
+
+
Example 3:
+

Get calendars using list methods

+
+
+
>>> import PyXA
+>>> app = PyXA.application("Calendar")
+>>> print(app.calendars().by_name("Calendar"))
+<<class 'PyXA.apps.Calendar.XACalendarCalendar'>Calendar>
+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property default_calendar: XACalendarCalendar
+

The calendar that events are added to by default.

+
+ +
+
+documents(filter: Optional[dict] = None) XACalendarDocumentList[source]
+

Returns a list of documents, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned documents will have, or None

+
+
Returns:
+

The list of documents

+
+
Return type:
+

XARemindersDocumentList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property frontmost: bool
+

Whether Calendar is the frontmost application.

+
+ +
+
+make(specifier: str, properties: dict = None)[source]
+

Creates a new element of the given specifier class without adding it to any list.

+

Use XABase.XAList.push() to push the element onto a list.

+
+
Parameters:
+
    +
  • specifier (str) – The classname of the object to create

  • +
  • properties (dict) – The properties to give the object

  • +
+
+
Returns:
+

A PyXA wrapped form of the object

+
+
Return type:
+

XABase.XAObject

+
+
Example 1:
+

Make a new calendar

+
+
+
>>> import PyXA
+>>> app = PyXA.application("Calendar")
+>>> new_calendar = app.make("calendar", {"name": "PyXA Development"})
+>>> app.calendars().push(new_calendar)
+
+
+
+
Example 2:
+

Make a new event

+
+
+
>>> import PyXA
+>>> app = PyXA.application("Calendar")
+>>> start_date = datetime.now()
+>>> end_date = start_date + timedelta(hours = 1)
+>>> new_event = app.make("event", {"summary": "Work on PyXA", "startDate": start_date, "endDate": end_date})
+>>> app.default_calendar.events().push(new_event)
+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+new_calendar(name: str = 'New Calendar') XACalendarCalendar[source]
+

Creates a new calendar with the given name.

+
+
Parameters:
+

name (str, optional) – The name of the calendar, defaults to “New Calendar”

+
+
Returns:
+

The newly created calendar object

+
+
Return type:
+

XACalendarCalendar

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.application("Calendar")
+>>> app.new_calendar("PyXA Development")
+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+new_event(summary: str, start_date: datetime, end_date: datetime, calendar: Optional[XACalendarCalendar] = None) XACalendarEvent[source]
+

Creates a new event with the given name and start/end dates in the specified calendar. If no calendar is specified, the default calendar is used.

+
+
Parameters:
+
    +
  • name (str) – The name of the event

  • +
  • start_date (datetime) – The start date and time of the event.

  • +
  • end_date (datetime) – The end date and time of the event.

  • +
+
+
Returns:
+

A reference to the newly created event.

+
+
Return type:
+

XACalendarEvent

+
+
Example:
+

Create event on the default calendar

+
+
+
>>> from datetime import datetime, timedelta
+>>> import PyXA
+>>> app = PyXA.application("Calendar")
+>>> start_date = datetime.now()
+>>> end_date = start_date + timedelta(hours = 1)
+>>> app.new_event("Learn about PyXA", start_date, end_date)
+
+
+
+
Example:
+

Create event on a specific calendar

+
+
+
>>> from datetime import datetime, timedelta
+>>> import PyXA
+>>> app = PyXA.application("Calendar")
+>>> start_date = datetime.now()
+>>> end_date = start_date + timedelta(hours = 1)
+>>> calendar = app.calendars()[-1]
+>>> app.new_event("Learn about PyXA", start_date, end_date, calendar)
+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property properties: dict
+

All properties of the application.

+
+ +
+
+reload_calendars() XACalendarApplication[source]
+

Reloads the contents of all calendars.

+
+
Returns:
+

The application object

+
+
Return type:
+

XACalendarApplication

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+subscribe_to(url: str) XACalendarCalendar[source]
+

Subscribes to the calendar at the specified URL.

+
+
Parameters:
+

url (str) – The URL of the calendar (in iCal format) to subscribe to

+
+
Returns:
+

The newly created calendar object

+
+
Return type:
+

XACalendarCalendar

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+switch_view_to(view: ViewType) XACalendarApplication[source]
+

Switches to the target calendar view.

+
+
Parameters:
+

view (XACalendarApplication.ViewType) – The view to switch to.

+
+
Returns:
+

The application object

+
+
Return type:
+

XACalendarApplication

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.application("Calendar")
+>>> app.switch_view_to(app.ViewType.WEEK)
+>>> app.switch_view_to(app.ViewType.DAY)
+>>> app.switch_view_to(app.ViewType.MONTH)
+>>> app.switch_view_to(app.ViewType.YEAR)
+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property version: str
+

The version of the Calendar application.

+
+ +
+
+view_calendar_at(date: datetime, view: Union[None, ViewType] = None) XACalendarApplication[source]
+

Displays the calendar at the provided date.

+
+
Parameters:
+

date (datetime) – The date to display.

+
+
Returns:
+

A reference to the Calendar application object.

+
+
Return type:
+

XACalendarApplication

+
+
Example:
+

+
+
>>> import PyXA
+>>> from datetime import date
+>>> app = PyXA.application("Calendar")
+>>> date1 = date(2022, 7, 20)
+>>> app.view_calendar_at(date1)
+
+
+
+

New in version 0.0.1.

+
+
+ +
+ +
+
+class PyXA.apps.Calendar.XACalendarAttachment(properties: dict)[source]
+

Bases: XAObject

+

A class for interacting with calendar event attachments.

+
+

New in version 0.0.2.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + +

file

The location of the attachment on the local disk.

file_name

The filename of the original document.

type

The content type of the attachment, e.g.

url

The iCloud URL of the attachment.

uuid

A unique identifier for the attachment.

+

Methods:

+ + + + + + +

open()

Opens the attachment in its default application.

+
+
+property file: XAPath
+

The location of the attachment on the local disk.

+
+ +
+
+property file_name: str
+

The filename of the original document.

+
+ +
+
+open() XACalendarAttachment[source]
+

Opens the attachment in its default application.

+
+
Returns:
+

A reference to the attachment object.

+
+
Return type:
+

XACalendarAttachment

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.application("Calendar")
+>>> calendar = app.default_calendar
+>>> event = calendar.events_today()[0]
+>>> event.attachments()[0].open()
+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+property type: str
+

The content type of the attachment, e.g. image/png.

+
+ +
+
+property url: XAURL
+

The iCloud URL of the attachment.

+
+ +
+
+property uuid: str
+

A unique identifier for the attachment.

+
+ +
+ +
+
+class PyXA.apps.Calendar.XACalendarAttachmentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of event attachments that employs fast enumeration techniques.

+

All properties of attachments can be called as methods on the wrapped list, returning a list containing each attachment’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_file(file)

by_file_name(file_name)

by_type(type)

by_url(url)

by_uuid(uuid)

file()

file_name()

type()

url()

uuid()

+
+
+by_file(file: Union[XAPath, str]) Optional[XACalendarAttachment][source]
+
+ +
+
+by_file_name(file_name: str) Optional[XACalendarAttachment][source]
+
+ +
+
+by_type(type: str) Optional[XACalendarAttachment][source]
+
+ +
+
+by_url(url: Union[XAURL, str]) Optional[XACalendarAttachment][source]
+
+ +
+
+by_uuid(uuid: str) Optional[XACalendarAttachment][source]
+
+ +
+
+file() list[PyXA.XABase.XAPath][source]
+
+ +
+
+file_name() list[str][source]
+
+ +
+
+type() list[str][source]
+
+ +
+
+url() list[PyXA.XABase.XAURL][source]
+
+ +
+
+uuid() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Calendar.XACalendarAttendee(properties: dict)[source]
+

Bases: XAObject

+

An event attendee in Calendar.app.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

display_name

The first and last name of the attendee.

email

The email address of the attendee.

participation_status

The invitation status for the attendee.

properties

All properties of the attendee.

+
+
+property display_name: str
+

The first and last name of the attendee.

+
+ +
+
+property email: str
+

The email address of the attendee.

+
+ +
+
+property participation_status: ParticipationStatus
+

The invitation status for the attendee.

+
+ +
+
+property properties: dict
+

All properties of the attendee.

+
+ +
+ +
+
+class PyXA.apps.Calendar.XACalendarAttendeeList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of attendees that employs fast enumeration techniques.

+

All properties of attendees can be called as methods on the wrapped list, returning a list containing each attendee’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_display_name(display_name)

by_email(email)

by_participation_status(participation_status)

by_properties(properties)

display_name()

email()

participation_status()

properties()

+
+
+by_display_name(display_name: str) Optional[XACalendarAttendee][source]
+
+ +
+
+by_email(email: str) Optional[XACalendarAttendee][source]
+
+ +
+
+by_participation_status(participation_status: ParticipationStatus) Optional[XACalendarAttendee][source]
+
+ +
+
+by_properties(properties: dict) Optional[XACalendarAttendee][source]
+
+ +
+
+display_name() list[str][source]
+
+ +
+
+email() list[str][source]
+
+ +
+
+participation_status() list[PyXA.apps.Calendar.XACalendarApplication.ParticipationStatus][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+ +
+
+class PyXA.apps.Calendar.XACalendarCalendar(properties: dict)[source]
+

Bases: XAObject

+

A calendar in Calendar.app.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

calendar_obj

color

The color of the calendar.

description

The description of the calendar.

name

The name of the calendar.

properties

All properties of the calendar.

writable

Whether the calendar is writable.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

delete()

Deletes the calendar.

events([filter])

Returns a list of events, as PyXA objects, matching the given filter.

events_in_range(start_date, end_date)

Gets a list of events occurring between the specified start and end datetimes.

events_today()

Gets a list of all events in the next 24 hours.

new_event(name, start_date, end_date)

Creates a new event and pushes it onto this calendar's events array.

week_events()

Gets a list of events occurring in the next 7 days.

+
+
+property calendar_obj: EKCalendar
+
+ +
+
+property color: XAColor
+

The color of the calendar.

+
+ +
+
+delete() XACalendarEvent[source]
+

Deletes the calendar.

+
+

New in version 0.0.2.

+
+
+ +
+
+property description: str
+

The description of the calendar.

+
+ +
+
+events(filter: Optional[dict] = None) XACalendarEventList[source]
+

Returns a list of events, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned events will have, or None

+
+
Returns:
+

The list of events

+
+
Return type:
+

XACalendarEventList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+events_in_range(start_date: datetime, end_date: datetime) XACalendarEventList[source]
+

Gets a list of events occurring between the specified start and end datetimes.

+
+
Parameters:
+
    +
  • start_date (datetime) – The earliest date an event in the list should begin.

  • +
  • end_date (datetime) – The latest date an event in the list should end.

  • +
+
+
Returns:
+

The list of events.

+
+
Return type:
+

XACalendarEventList

+
+
Example:
+

+
+
>>> from datetime import date
+>>> import PyXA
+>>> app = PyXA.application("Calendar")
+>>> calendar = app.default_calendar
+>>> start_date = date(2022, 6, 4)
+>>> end_date = date(2022, 6, 6)
+>>> print(calendar.events_in_range(start_date, end_date))
+[<PyXA.apps.Calendar.XACalendarEvent object at 0x105b83d90>, <PyXA.apps.Calendar.XACalendarEvent object at 0x105b90bb0>, <PyXA.apps.Calendar.XACalendarEvent object at 0x105b90dc0>]
+
+
+
+

Note

+

Querying events from a wide date range can take significant time. If you are looking for a specific subset of events within a large date range, it might be faster to use events() with a well-constructed filter and then iterate through the resulting array of objects, parsing out events outside of the desired date range.

+
+
+

New in version 0.0.2.

+
+
+ +
+
+events_today() XACalendarEventList[source]
+

Gets a list of all events in the next 24 hours.

+
+
Returns:
+

The list of events.

+
+
Return type:
+

XACalendarEventList

+
+
+
+

See also

+

week_events()

+
+
+

New in version 0.0.2.

+
+
+ +
+
+property name: str
+

The name of the calendar.

+
+ +
+
+new_event(name: str, start_date: datetime, end_date: datetime) XACalendarEvent[source]
+

Creates a new event and pushes it onto this calendar’s events array.

+
+
Parameters:
+
    +
  • name (str) – The name of the event.

  • +
  • start_date (datetime) – The start date and time of the event.

  • +
  • end_date (datetime) – The end date and time of the event.

  • +
+
+
Returns:
+

A reference to the newly created event.

+
+
Return type:
+

XACalendarEvent

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property properties: dict
+

All properties of the calendar.

+
+ +
+
+week_events() XACalendarEventList[source]
+

Gets a list of events occurring in the next 7 days.

+
+
Returns:
+

The list of events.

+
+
Return type:
+

XACalendarEventList

+
+
+
+

See also

+

events_today()

+
+
+

Deprecated since version 0.1.2: Use events_in_range() instead.

+
+
+

New in version 0.0.2.

+
+
+ +
+
+property writable: bool
+

Whether the calendar is writable.

+
+ +
+ +
+
+class PyXA.apps.Calendar.XACalendarCalendarList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of calendars that employs fast enumeration techniques.

+

All properties of calendars can be called as methods on the wrapped list, returning a list containing each calendar’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_color(color)

by_description(description)

by_name(name)

by_properties(properties)

by_writable(writable)

color()

description()

events()

name()

properties()

writable()

+
+
+by_color(color: XAColor) Optional[XACalendarCalendar][source]
+
+ +
+
+by_description(description: str) Optional[XACalendarCalendar][source]
+
+ +
+
+by_name(name: str) Optional[XACalendarCalendar][source]
+
+ +
+
+by_properties(properties: dict) Optional[XACalendarCalendar][source]
+
+ +
+
+by_writable(writable: bool) Optional[XACalendarCalendar][source]
+
+ +
+
+color() list[PyXA.XABase.XAColor][source]
+
+ +
+
+description() list[str][source]
+
+ +
+
+events() XACalendarEventList[source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+
+writable() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Calendar.XACalendarDisplayAlarm(properties: dict)[source]
+

Bases: XACalendarAlarm

+

A display alarm in Calendar.app.

+
+

New in version 0.0.6.

+
+
+ +
+
+class PyXA.apps.Calendar.XACalendarDocument(properties: dict)[source]
+

Bases: XAObject

+

A document in Calendar.app.

+
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

file

The location of the document on disk, if it has one.

modified

Whether the document has been modified since it was last saved.

name

The name of the document.

properties

All properties of the document.

+
+
+property file: XAPath
+

The location of the document on disk, if it has one.

+
+ +
+
+property modified: bool
+

Whether the document has been modified since it was last saved.

+
+ +
+
+property name: str
+

The name of the document.

+
+ +
+
+property properties: dict
+

All properties of the document.

+
+ +
+ +
+
+class PyXA.apps.Calendar.XACalendarDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of documents that employs fast enumeration techniques.

+

All properties of documents can be called as methods on the wrapped list, returning a list containing each document’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_file(file)

by_modified(modified)

by_name(name)

by_properties(properties)

file()

modified()

name()

properties()

+
+
+by_file(file: XAPath) Optional[XACalendarDocument][source]
+
+ +
+
+by_modified(modified: bool) Optional[XACalendarDocument][source]
+
+ +
+
+by_name(name: str) Optional[XACalendarDocument][source]
+
+ +
+
+by_properties(properties: dict) Optional[XACalendarDocument][source]
+
+ +
+
+file() list[PyXA.XABase.XAPath][source]
+
+ +
+
+modified() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+ +
+
+class PyXA.apps.Calendar.XACalendarEvent(properties: dict)[source]
+

Bases: XAObject

+

An event in Calendar.app.

+
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

add_attachment(path)

Adds the file at the specified path as an attachment to the event.

attachments([filter])

"Returns a list of attachments, as PyXA objects, matching the given filter.

attendees([filter])

Returns a list of attendees, as PyXA objects, matching the given filter.

delete()

Deletes the event.

duplicate()

Duplicates the event, placing the copy on the same calendar.

duplicate_to(calendar)

Duplicates the event, placing the copy on the same calendar.

move_to(calendar)

Moves this event to the specified calendar.

show()

Shows the event in the front calendar window.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

allday_event

Whether the event is an all-day event.

description

The event's notes.

end_date

The end date and time of the event.

excluded_dates

The exception dates for the event.

location

The location of the event.

properties

All properties of the event.

recurrence

A string describing the event recurrence.

sequence

The event version.

stamp_date

The date the event was last modified.

start_date

The start date and time of the event.

status

The status of the event.

summary

The summary (title) of the event.

uid

A unique identifier for the event.

url

The URL associated with the event.

xa_event_obj

+
+
+add_attachment(path: str) XACalendarEvent[source]
+

Adds the file at the specified path as an attachment to the event.

+
+
Parameters:
+

path (str) – The path of the file to attach to the event.

+
+
Returns:
+

A reference to this event object.

+
+
Return type:
+

XACalendarEvent

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.application("Calendar")
+>>> calendar = app.default_calendar
+>>> calendar2 = app.calendars()[1]
+>>> event = calendar.events_today()[0]
+>>> event.add_attachment("/Users/exampleuser/Image.png")
+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+property allday_event: bool
+

Whether the event is an all-day event.

+
+ +
+
+attachments(filter: dict = None) XACalendarAttachmentList[source]
+

“Returns a list of attachments, as PyXA objects, matching the given filter.

+
+
Returns:
+

The list of attachments.

+
+
Return type:
+

XACalendarAttachmentList

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+attendees(filter: Optional[dict] = None) XACalendarAttendeeList[source]
+

Returns a list of attendees, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned attendees will have, or None

+
+
Returns:
+

The list of attendees

+
+
Return type:
+

XACalendarAttendeeList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+delete()[source]
+

Deletes the event.

+
+

New in version 0.0.1.

+
+
+ +
+
+property description: str
+

The event’s notes.

+
+ +
+
+duplicate() XACalendarEvent[source]
+

Duplicates the event, placing the copy on the same calendar.

+

:return:The newly created event object. +:rtype: XACalendarEvent

+
+

New in version 0.0.1.

+
+
+ +
+
+duplicate_to(calendar: XACalendarCalendar) XACalendarEvent[source]
+

Duplicates the event, placing the copy on the same calendar.

+
+
Returns:
+

The event object that this method was called from

+
+
Return type:
+

XACalendarEvent

+
+
Example:
+

Copy today’s event to another calendar

+
+
+
>>> import PyXA
+>>> app = PyXA.application("Calendar")
+>>> calendar = app.default_calendar
+>>> calendar2 = app.calendars()[2]
+>>> event = calendar.events_today()[0]
+>>> event.duplicate_to(calendar2)
+
+
+
+

See also

+

duplicate(), move_to()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property end_date: datetime
+

The end date and time of the event.

+
+ +
+
+property excluded_dates: list[datetime.datetime]
+

The exception dates for the event.

+
+ +
+
+property location: str
+

The location of the event.

+
+ +
+
+move_to(calendar: XACalendarCalendar) XACalendarEvent[source]
+

Moves this event to the specified calendar.

+
+
Parameters:
+

calendar (XACalendar) – The calendar to move the event to.

+
+
Returns:
+

A reference to the moved event object.

+
+
Return type:
+

XACalendarEvent

+
+
Example:
+

Move today’s event to another calendar

+
+
+
>>> import PyXA
+>>> app = PyXA.application("Calendar")
+>>> calendar = app.default_calendar
+>>> calendar2 = app.calendars()[2]
+>>> event = calendar.events_today()[0]
+>>> event.move_to(calendar2)
+
+
+
+

See also

+

duplicate_to()

+
+
+

New in version 0.0.2.

+
+
+ +
+
+property properties: dict
+

All properties of the event.

+
+ +
+
+property recurrence: str
+

A string describing the event recurrence.

+
+ +
+
+property sequence: int
+

The event version.

+
+ +
+
+show() XACalendarEvent[source]
+

Shows the event in the front calendar window.

+
+
Returns:
+

The event object.

+
+
Return type:
+

XACalendarEvent

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property stamp_date: datetime
+

The date the event was last modified.

+
+ +
+
+property start_date: datetime
+

The start date and time of the event.

+
+ +
+
+property status: EventStatus
+

The status of the event.

+
+ +
+
+property summary: str
+

The summary (title) of the event.

+
+ +
+
+property uid: str
+

A unique identifier for the event.

+
+ +
+
+property url: str
+

The URL associated with the event.

+
+ +
+
+property xa_event_obj: type
+
+ +
+ +
+
+class PyXA.apps.Calendar.XACalendarEventList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of events that employs fast enumeration techniques.

+

All properties of events can be called as methods on the wrapped list, returning a list containing each event’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

allday_event()

by_allday_event(allday_event)

by_description(description)

by_end_date(end_date)

by_excluded_dates(excluded_dates)

by_location(location)

by_properties(properties)

by_recurrence(recurrence)

by_sequence(sequence)

by_stamp_date(stamp_date)

by_start_date(start_date)

by_status(status)

by_summary(summary)

by_uid(uid)

by_url(url)

description()

end_date()

excluded_dates()

location()

properties()

Gets the properties of every event in the list.

recurrence()

sequence()

stamp_date()

start_date()

status()

summary()

uid()

url()

+
+
+allday_event() list[bool][source]
+
+ +
+
+by_allday_event(allday_event: bool) Optional[XACalendarEvent][source]
+
+ +
+
+by_description(description: str) Optional[XACalendarEvent][source]
+
+ +
+
+by_end_date(end_date: datetime) Optional[XACalendarEvent][source]
+
+ +
+
+by_excluded_dates(excluded_dates: list[datetime.datetime]) Optional[XACalendarEvent][source]
+
+ +
+
+by_location(location: str) Optional[XACalendarEvent][source]
+
+ +
+
+by_properties(properties: dict) Optional[XACalendarEvent][source]
+
+ +
+
+by_recurrence(recurrence: str) Optional[XACalendarEvent][source]
+
+ +
+
+by_sequence(sequence: int) Optional[XACalendarEvent][source]
+
+ +
+
+by_stamp_date(stamp_date: datetime) Optional[XACalendarEvent][source]
+
+ +
+
+by_start_date(start_date: datetime) Optional[XACalendarEvent][source]
+
+ +
+
+by_status(status: EventStatus) Optional[XACalendarEvent][source]
+
+ +
+
+by_summary(summary: str) Optional[XACalendarEvent][source]
+
+ +
+
+by_uid(uid: str) Optional[XACalendarEvent][source]
+
+ +
+
+by_url(url: Union[str, XAURL]) Optional[XACalendarEvent][source]
+
+ +
+
+description() list[str][source]
+
+ +
+
+end_date() list[datetime.datetime][source]
+
+ +
+
+excluded_dates() list[list[datetime.datetime]][source]
+
+ +
+
+location() list[str][source]
+
+ +
+
+properties() Generator[dict[str, Any], None, None][source]
+

Gets the properties of every event in the list.

+
+
Returns:
+

A generator that generates a dictionary of element properties.

+
+
Return type:
+

Generator[dict[str, Any], None, None]

+
+
+
+ +
+
+recurrence() list[str][source]
+
+ +
+
+sequence() list[int][source]
+
+ +
+
+stamp_date() list[datetime.datetime][source]
+
+ +
+
+start_date() list[datetime.datetime][source]
+
+ +
+
+status() list[PyXA.apps.Calendar.XACalendarApplication.EventStatus][source]
+
+ +
+
+summary() list[str][source]
+
+ +
+
+uid() list[str][source]
+
+ +
+
+url() list[PyXA.XABase.XAURL][source]
+
+ +
+ +
+
+class PyXA.apps.Calendar.XACalendarMailAlarm(properties: dict)[source]
+

Bases: XACalendarAlarm

+

A mail alarm in Calendar.app.

+
+

New in version 0.0.6.

+
+
+ +
+
+class PyXA.apps.Calendar.XACalendarOpenFileAlarm(properties: dict)[source]
+

Bases: XACalendarAlarm

+

An open file alarm in Calendar.app.

+
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + +

file_path

The path to be opened by the alarm.

+
+
+property file_path: str
+

The path to be opened by the alarm.

+
+ +
+ +
+
+class PyXA.apps.Calendar.XACalendarSoundAlarm(properties: dict)[source]
+

Bases: XACalendarAlarm

+

A sound alarm in Calendar.app.

+
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + +

sound_file

The path to the sound file to be used for the alarm

sound_name

The system sound name to be used for the alarm

+
+
+property sound_file: str
+

The path to the sound file to be used for the alarm

+
+ +
+
+property sound_name: str
+

The system sound name to be used for the alarm

+
+ +
+ +
+
+class PyXA.apps.Calendar.XACalendarWindow(properties: dict)[source]
+

Bases: XASBWindow

+

A window of Calendar.app.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + +

document

The current document displayed in the window.

properties

All properties of the window.

+
+
+property document: XACalendarDocument
+

The current document displayed in the window.

+
+ +
+
+property properties: dict
+

All properties of the window.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/cardhop.html b/docs/reference/apps/cardhop.html new file mode 100644 index 0000000..218fb4a --- /dev/null +++ b/docs/reference/apps/cardhop.html @@ -0,0 +1,456 @@ + + + + + + + Cardhop Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Cardhop Module Reference

+
+

New in version 0.1.0.

+
+

Control Cardhop using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + +

XACardhopAppplication(properties)

A class for interacting with Cardhop.app.

XACardhopDocument(properties)

A document of Cardhop.app.

XACardhopDocumentList(properties[, filter])

A wrapper around lists of documents that employs fast enumeration techniques.

XACardhopWindow(properties)

A window of Cardhop.app.

+
+
+class PyXA.apps.Cardhop.XACardhopAppplication(properties)[source]
+

Bases: XASBApplication, XACanOpenPath, XACanPrintPath

+

A class for interacting with Cardhop.app.

+
+

New in version 0.1.0.

+
+

Classes:

+ + + + + + +

ZoomType(value[, names, module, qualname, ...])

Options for zoom type to use when opening a new document.

+

Methods:

+ + + + + + + + + +

documents([filter])

Returns a list of documents, as PyXA objects, matching the filter.

parse_sentence(sentence[, add_immediately])

Parses the given sentence and carries out the corresponding actions.

+

Attributes:

+ + + + + + + + + + + + +

frontmost

Whether Cardhop is the active application.

name

The name of the application.

version

The version of Cardhop.app.

+
+
+class ZoomType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for zoom type to use when opening a new document.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

FIT_HEIGHT

FIT_PAGE

FIT_VISIBLE_WIDTH

FIT_WIDTH

NO_VARY

+
+
+FIT_HEIGHT = 3
+
+ +
+
+FIT_PAGE = 1
+
+ +
+
+FIT_VISIBLE_WIDTH = 4
+
+ +
+
+FIT_WIDTH = 2
+
+ +
+
+NO_VARY = 0
+
+ +
+ +
+
+documents(filter: dict = None) XACardhopDocumentList[source]
+

Returns a list of documents, as PyXA objects, matching the filter.

+
+
Parameters:
+

filter (dict) – A dictionary specifying property-value pairs that all returned documents will have

+
+
Returns:
+

The list of documents

+
+
Return type:
+

XACardhopDocumentList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property frontmost: bool
+

Whether Cardhop is the active application.

+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+parse_sentence(sentence: str, add_immediately: bool = True)[source]
+

Parses the given sentence and carries out the corresponding actions.

+
+
Parameters:
+
    +
  • sentence (str) – The sentence to parse

  • +
  • add_immediately (bool, optional) – Whether to immediately parse the sentence and save resulting changes, instead of having the user confirm changes via the GUI, defaults to True

  • +
+
+
+
+ +
+
+property version: str
+

The version of Cardhop.app.

+
+ +
+ +
+
+class PyXA.apps.Cardhop.XACardhopDocument(properties)[source]
+

Bases: XAObject

+

A document of Cardhop.app.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + +

file

The location of the document on disk, if it has one.

modified

Whether the document has been modified since its last save.

name

The title of the document.

+
+
+property file: XAPath
+

The location of the document on disk, if it has one.

+
+ +
+
+property modified: bool
+

Whether the document has been modified since its last save.

+
+ +
+
+property name: str
+

The title of the document.

+
+ +
+ +
+
+class PyXA.apps.Cardhop.XACardhopDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAPrintable, XAClipboardCodable

+

A wrapper around lists of documents that employs fast enumeration techniques.

+

All properties of documents can be called as methods on the wrapped list, returning a list containing each document’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + +

by_file(file)

by_modified(modified)

by_name(name)

file()

get_clipboard_representation()

Gets a clipboard-codable representation of each document in the list.

modified()

name()

+
+
+by_file(file: Union[XAPath, str]) Optional[XACardhopDocument][source]
+
+ +
+
+by_modified(modified: bool) Optional[XACardhopDocument][source]
+
+ +
+
+by_name(name: str) Optional[XACardhopDocument][source]
+
+ +
+
+file() list[PyXA.XABase.XAPath][source]
+
+ +
+
+get_clipboard_representation() list[Union[str, objc.NSURL]][source]
+

Gets a clipboard-codable representation of each document in the list.

+

When the clipboard content is set to a list of documents, each documents’s file URL and name are added to the clipboard.

+
+
Returns:
+

A list of each document’s file URL and name

+
+
Return type:
+

list[Union[str, AppKit.NSURL]]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+modified() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Cardhop.XACardhopWindow(properties)[source]
+

Bases: XASBWindow, XAPrintable

+

A window of Cardhop.app.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + +

document

The document whose contents are displayed in the window.

+
+
+property document: XACardhopDocument
+

The document whose contents are displayed in the window.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/chromium.html b/docs/reference/apps/chromium.html new file mode 100644 index 0000000..f747e75 --- /dev/null +++ b/docs/reference/apps/chromium.html @@ -0,0 +1,1366 @@ + + + + + + + Chromium Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Chromium Module Reference

+
+

New in version 0.0.3.

+
+

Control Chromium using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

XAChromiumApplication(properties)

A class for managing and interacting with Chromium.app.

XAChromiumBookmarkFolder(properties)

A class for managing and interacting with bookmark folders in Chromium.app.

XAChromiumBookmarkFolderList(properties[, ...])

A wrapper around a list of bookmark folders.

XAChromiumBookmarkItem(properties)

A class for managing and interacting with bookmarks in Chromium.app.

XAChromiumBookmarkItemList(properties[, filter])

A wrapper around a list of bookmark items.

XAChromiumTab(properties)

A class for managing and interacting with Chromium tabs.

XAChromiumTabList(properties[, filter])

A wrapper around a list of tabs.

XAChromiumWindow(properties)

A class for managing and interacting with Chromium windows.

+
+
+class PyXA.apps.Chromium.XAChromiumApplication(properties)[source]
+

Bases: XASBApplication, XACanOpenPath

+

A class for managing and interacting with Chromium.app.

+ +
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + +

bookmark_folders([filter])

Returns a list of bookmark folders, as PyXA objects, matching the given filter.

make(specifier[, properties])

Creates a new element of the given specifier class without adding it to any list.

new_tab([url])

Opens a new tab at the specified URL.

new_window([url])

Opens a new window at the specified URL.

open([url])

Opens a URL in a new tab.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

bookmarks_bar

The bookmarks bar bookmark folder.

frontmost

Whether Chromium is the active application.

name

The name of the application.

other_bookmarks

The other bookmarks bookmark folder.

version

The version of Chromium.app.

+
+
+bookmark_folders(filter: Optional[dict] = None) XAChromiumBookmarkFolderList[source]
+

Returns a list of bookmark folders, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter folders by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of bookmark folders

+
+
Return type:
+

XAChromiumBookmarkFolderList

+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+property bookmarks_bar: XAChromiumBookmarkFolder
+

The bookmarks bar bookmark folder.

+
+ +
+
+property frontmost: bool
+

Whether Chromium is the active application.

+
+ +
+
+make(specifier: str, properties: dict = None)[source]
+

Creates a new element of the given specifier class without adding it to any list.

+

Use XABase.XAList.push() to push the element onto a list.

+
+
Parameters:
+
    +
  • specifier (str) – The classname of the object to create

  • +
  • properties (dict) – The properties to give the object

  • +
+
+
Returns:
+

A PyXA wrapped form of the object

+
+
Return type:
+

XABase.XAObject

+
+
+
+

See also

+

new_window(), new_tab()

+
+
+

New in version 0.0.4.

+
+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+new_tab(url: Optional[Union[str, XAURL]] = None) XAChromiumTab[source]
+

Opens a new tab at the specified URL.

+
+
Parameters:
+

url (Union[str, XABase.XAURL, None], optional) – The URL to open in a new tab, or None to open the tab at the homepage, defaults to None

+
+
Returns:
+

The newly created tab object

+
+
Return type:
+

XAChromiumTab

+
+
+
+

See also

+

new_window(), make()

+
+
+

New in version 0.0.5.

+
+
+ +
+
+new_window(url: Optional[Union[str, XAURL]] = None) XAChromiumWindow[source]
+

Opens a new window at the specified URL.

+
+
Parameters:
+

url (Union[str, XABase.XAURL, None], optional) – The URL to open in a new window, or None to open the window at the homepage, defaults to None

+
+
Returns:
+

The newly created window object

+
+
Return type:
+

XAChromiumWindow

+
+
+
+

See also

+

new_tab(), make()

+
+
+

New in version 0.0.5.

+
+
+ +
+
+open(url: Union[str, XAURL] = 'https://google.com') XAChromiumApplication[source]
+

Opens a URL in a new tab.

+
+
Parameters:
+

url (str, optional) – _description_, defaults to “http://google.com

+
+
Returns:
+

A reference to the Chromium application object.

+
+
Return type:
+

XAChromiumApplication

+
+
Example 1:
+

Open a local or external URL

+
>>> import PyXA
+>>> app = PyXA.Application("Chromium")
+>>> app.open("https://www.google.com")
+>>> app.open("google.com")
+>>> app.open("/Users/exampleuser/Documents/WebPage.html")
+
+
+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+property other_bookmarks: XAChromiumBookmarkFolder
+

The other bookmarks bookmark folder.

+
+ +
+
+property version: str
+

The version of Chromium.app.

+
+ +
+ +
+
+class PyXA.apps.Chromium.XAChromiumBookmarkFolder(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for managing and interacting with bookmark folders in Chromium.app.

+ +
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + +

bookmark_folders([filter])

Returns a list of bookmark folders, as PyXA objects, matching the given filter.

bookmark_items([filter])

Returns a list of bookmark items, as PyXA objects, matching the given filter.

delete()

Permanently deletes the bookmark folder.

get_clipboard_representation()

Gets a clipboard-codable representation of the bookmark folder.

+

Attributes:

+ + + + + + + + + + + + +

id

The unique identifier for the bookmark folder.

index

The index of the bookmark folder with respect to its parent folder.

title

The name of the bookmark folder.

+
+
+bookmark_folders(filter: Optional[dict] = None) XAChromiumBookmarkFolderList[source]
+

Returns a list of bookmark folders, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter folders by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of bookmark folders

+
+
Return type:
+

XAChromiumBookmarkFolderList

+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+bookmark_items(filter: Optional[dict] = None) XAChromiumBookmarkItemList[source]
+

Returns a list of bookmark items, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter items by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of bookmark items

+
+
Return type:
+

XAChromiumBookmarkItemList

+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+delete()[source]
+

Permanently deletes the bookmark folder.

+
+

New in version 0.0.4.

+
+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the bookmark folder.

+

When the clipboard content is set to a bookmark folder, the folders’s title is added to the clipboard.

+
+
Returns:
+

The bookmark folders’s title

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: int
+

The unique identifier for the bookmark folder.

+
+ +
+
+property index: int
+

The index of the bookmark folder with respect to its parent folder.

+
+ +
+
+property title: str
+

The name of the bookmark folder.

+
+ +
+ +
+
+class PyXA.apps.Chromium.XAChromiumBookmarkFolderList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around a list of bookmark folders.

+ +
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + +

by_id(id)

by_index(index)

by_title(title)

get_clipboard_representation()

Gets a clipboard-codable representation of each bookmark folder in the list.

id()

index()

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

title()

+
+
+by_id(id: int) Optional[XAChromiumBookmarkFolder][source]
+
+ +
+
+by_index(index: int) Optional[XAChromiumBookmarkFolder][source]
+
+ +
+
+by_title(title: str) Optional[XAChromiumBookmarkFolder][source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each bookmark folder in the list.

+

When the clipboard content is set to a list of bookmark folders, each folder’s title is added to the clipboard.

+
+
Returns:
+

The list of each bookmark folder’s title

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+id() list[int][source]
+
+ +
+
+index() list[int][source]
+

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

+
+

New in version 0.1.2.

+
+
+ +
+
+title() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Chromium.XAChromiumBookmarkItem(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for managing and interacting with bookmarks in Chromium.app.

+ +
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + +

delete()

Permanently deletes the bookmark.

get_clipboard_representation()

Gets a clipboard-codable representation of the bookmark item.

+

Attributes:

+ + + + + + + + + + + + + + + +

id

The unique identifier for the bookmark item.

index

The index of the item with respect to its parent folder.

title

The title of the bookmark item.

url

The URL of the bookmark.

+
+
+delete()[source]
+

Permanently deletes the bookmark.

+
+

New in version 0.0.4.

+
+
+ +
+
+get_clipboard_representation() list[Union[str, objc.NSURL]][source]
+

Gets a clipboard-codable representation of the bookmark item.

+

When the clipboard content is set to a bookmark item, the item’s title and URL are added to the clipboard.

+
+
Returns:
+

The bookmark items’s title and URL

+
+
Return type:
+

list[Union[str, AppKit.NSURL]]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: int
+

The unique identifier for the bookmark item.

+
+ +
+
+property index: int
+

The index of the item with respect to its parent folder.

+
+ +
+
+property title: str
+

The title of the bookmark item.

+
+ +
+
+property url: XAURL
+

The URL of the bookmark.

+
+ +
+ +
+
+class PyXA.apps.Chromium.XAChromiumBookmarkItemList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around a list of bookmark items.

+ +
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_id(id)

by_index(index)

by_title(title)

by_url(url)

get_clipboard_representation()

Gets a clipboard-codable representation of each bookmark item in the list.

id()

index()

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

title()

url()

+
+
+by_id(id: int) Optional[XAChromiumBookmarkItem][source]
+
+ +
+
+by_index(index: int) Optional[XAChromiumBookmarkItem][source]
+
+ +
+
+by_title(title: str) Optional[XAChromiumBookmarkItem][source]
+
+ +
+
+by_url(url: XAURL) Optional[XAChromiumBookmarkItem][source]
+
+ +
+
+get_clipboard_representation() list[Union[str, objc.NSURL]][source]
+

Gets a clipboard-codable representation of each bookmark item in the list.

+

When the clipboard content is set to a list of bookmark items, each item’s title and URL are added to the clipboard.

+
+
Returns:
+

The list of each bookmark items’s title and URL

+
+
Return type:
+

list[Union[str, AppKit.NSURL]]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+id() list[int][source]
+
+ +
+
+index() list[int][source]
+

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

+
+

New in version 0.1.2.

+
+
+ +
+
+title() list[str][source]
+
+ +
+
+url() list[PyXA.XABase.XAURL][source]
+
+ +
+ +
+
+class PyXA.apps.Chromium.XAChromiumTab(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for managing and interacting with Chromium tabs.

+ +
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

close()

Closes the tab.

copy_selection()

Copies the selected element to the clipboard.

cut_selection()

Attempts to cut the selected content and copy it to the clipboard.

duplicate_to(window)

Duplicates the tab in the specified window.

execute(script)

Executes JavaScript in the tab.

get_clipboard_representation()

Gets a clipboard-codable representation of the tab.

go_back()

Goes to the previous URL in the tab's history.

go_forward()

Goes to the next URL in the tab's history, or does nothing if the current document is the most recent URL.

move_to(window)

Moves the tab to the specified window.

paste_selection()

Attempts to paste the clipboard into the selected element.

print()

Opens the print dialog for the tab.

redo()

Redoes the last action done on the tab.

reload()

Reloads the tab.

save(file_path[, save_assets])

select_all()

Selects all text content within the tab.

stop()

Forces the tab to stop loading.

undo()

Undoes the last action done on the tab.

view_source()

Opens the source HTML of the tab's document in a separate tab.

+

Attributes:

+ + + + + + + + + + + + + + + +

id

The unique identifier for the tab.

loading

Is the tab currently loading?

title

The title of the tab.

url

The URL visible to the user.

+
+
+close() XAChromiumTab[source]
+

Closes the tab.

+
+

New in version 0.0.4.

+
+
+ +
+
+copy_selection() XAChromiumTab[source]
+

Copies the selected element to the clipboard.

+
+

New in version 0.0.4.

+
+
+ +
+
+cut_selection() XAChromiumTab[source]
+

Attempts to cut the selected content and copy it to the clipboard. If the content cannot be deleted, then it is only copied to the clipboard.

+
+

New in version 0.0.4.

+
+
+ +
+
+duplicate_to(window: XAChromiumWindow) XAChromiumWindow[source]
+

Duplicates the tab in the specified window. The tab will then exist in two locations.

+
+
Parameters:
+

window (XASafariWindow) – The window to duplicate the tab in.

+
+
Returns:
+

A reference to the tab object.

+
+
Return type:
+

XASafariTab

+
+
Example 1:
+

Duplicate the current tab in the second window

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Chromium")
+>>> tab = app.front_window.active_tab
+>>> window2 = app.windows()[1]
+>>> tab.duplicate_to(window2)
+
+
+
+

See also

+

move_to()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+execute(script: str) Any[source]
+

Executes JavaScript in the tab.

+
+

New in version 0.0.4.

+
+
+ +
+
+get_clipboard_representation() list[Union[str, objc.NSURL]][source]
+

Gets a clipboard-codable representation of the tab.

+

When the clipboard content is set to a Chromium tab, the tab’s title and URL are added to the clipboard.

+
+
Returns:
+

The tab’s title and URL

+
+
Return type:
+

list[Union[str, AppKit.NSURL]]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+go_back() XAChromiumTab[source]
+

Goes to the previous URL in the tab’s history.

+
+

New in version 0.0.4.

+
+
+ +
+
+go_forward() XAChromiumTab[source]
+

Goes to the next URL in the tab’s history, or does nothing if the current document is the most recent URL.

+
+

New in version 0.0.4.

+
+
+ +
+
+property id: int
+

The unique identifier for the tab.

+
+ +
+
+property loading: bool
+

Is the tab currently loading?

+
+ +
+
+move_to(window: XAChromiumWindow) XAChromiumWindow[source]
+

Moves the tab to the specified window. After, the tab will exist in only one location.

+
+
Parameters:
+

window (XASafariWindow) – The window to move the tab to.

+
+
Returns:
+

A reference to the tab object.

+
+
Return type:
+

XASafariGeneric

+
+
Example 1:
+

Move the current tab to the second window

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Chromium")
+>>> tab = app.front_window.active_tab
+>>> window2 = app.windows()[1]
+>>> tab.move_to(window2)
+
+
+
+

See also

+

duplicate_to()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+paste_selection() XAChromiumTab[source]
+

Attempts to paste the clipboard into the selected element.

+
+

New in version 0.0.4.

+
+
+ +
+
+print() XAChromiumTab[source]
+

Opens the print dialog for the tab.

+
+

New in version 0.0.4.

+
+
+ +
+
+redo() XAChromiumTab[source]
+

Redoes the last action done on the tab.

+
+

New in version 0.0.4.

+
+
+ +
+
+reload() XAChromiumTab[source]
+

Reloads the tab.

+
+

New in version 0.0.4.

+
+
+ +
+
+save(file_path: Union[str, NSURL], save_assets: bool = True) XAChromiumTab[source]
+
+ +
+
+select_all() XAChromiumTab[source]
+

Selects all text content within the tab.

+
+

New in version 0.0.4.

+
+
+ +
+
+stop() XAChromiumTab[source]
+

Forces the tab to stop loading.

+
+

New in version 0.0.4.

+
+
+ +
+
+property title: str
+

The title of the tab.

+
+ +
+
+undo() XAChromiumTab[source]
+

Undoes the last action done on the tab.

+
+

New in version 0.0.4.

+
+
+ +
+
+property url: XAURL
+

The URL visible to the user.

+
+ +
+
+view_source() XAChromiumTab[source]
+

Opens the source HTML of the tab’s document in a separate tab.

+
+

New in version 0.0.4.

+
+
+ +
+ +
+
+class PyXA.apps.Chromium.XAChromiumTabList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around a list of tabs.

+
+

See also

+

XAChromiumTab

+
+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_id(id)

by_loading(loading)

by_title(title)

by_url(url)

get_clipboard_representation()

Gets a clipboard-codable representation of each tab in the list.

id()

loading()

title()

url()

+
+
+by_id(id: int) Optional[XAChromiumTab][source]
+
+ +
+
+by_loading(loading: bool) Optional[XAChromiumTab][source]
+
+ +
+
+by_title(title: str) Optional[XAChromiumTab][source]
+
+ +
+
+by_url(url: XAURL) Optional[XAChromiumTab][source]
+
+ +
+
+get_clipboard_representation() list[Union[str, objc.NSURL]][source]
+

Gets a clipboard-codable representation of each tab in the list.

+

When the clipboard content is set to a list of Chromium tabs, each tab’s URL is added to the clipboard.

+
+
Returns:
+

A list of tab URLs

+
+
Return type:
+

list[Union[str, AppKit.NSURL]]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+id() list[int][source]
+
+ +
+
+loading() list[bool][source]
+
+ +
+
+title() list[str][source]
+
+ +
+
+url() list[PyXA.XABase.XAURL][source]
+
+ +
+ +
+
+class PyXA.apps.Chromium.XAChromiumWindow(properties)[source]
+

Bases: XASBWindow

+

A class for managing and interacting with Chromium windows.

+ +
+

New in version 0.0.3.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

active_tab

The currently selected tab.

active_tab_index

The index of the active tab.

given_name

The given name of the window.

minimizable

Whether the window can be minimized.

minimized

Whether the window is currently minimized.

mode

The mode of the window, either 'normal' or 'incognito'.

+

Methods:

+ + + + + + + + + +

new_tab([url])

Opens a new tab at the specified URL.

tabs([filter])

Returns a list of tabs, as PyXA objects, matching the given filter.

+
+
+property active_tab: XAChromiumTab
+

The currently selected tab.

+
+ +
+
+property active_tab_index: int
+

The index of the active tab.

+
+ +
+
+property given_name: str
+

The given name of the window.

+
+ +
+
+property minimizable: bool
+

Whether the window can be minimized.

+
+ +
+
+property minimized: bool
+

Whether the window is currently minimized.

+
+ +
+
+property mode: str
+

The mode of the window, either ‘normal’ or ‘incognito’.

+
+ +
+
+new_tab(url: Optional[Union[str, XAURL]] = None) XAChromiumTab[source]
+

Opens a new tab at the specified URL.

+
+
Parameters:
+

url (Union[str, XABase.XAURL, None], optional) – The URL to open in a new tab, or None to open the tab at the homepage, defaults to None

+
+
Returns:
+

The newly created tab object

+
+
Return type:
+

XAChromiumTab

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+tabs(filter: Optional[dict] = None) XAChromiumTabList[source]
+

Returns a list of tabs, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter tabs by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of tabs

+
+
Return type:
+

XAChromiumTabList

+
+
+
+

New in version 0.0.3.

+
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/console.html b/docs/reference/apps/console.html new file mode 100644 index 0000000..1320170 --- /dev/null +++ b/docs/reference/apps/console.html @@ -0,0 +1,201 @@ + + + + + + + Console Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Console Module Reference

+
+

New in version 0.0.5.

+
+

Control the macOS Console application using JXA-like syntax.

+

Classes:

+ + + + + + +

XAConsoleApplication(properties)

A class for managing and interacting with Console.app.

+
+
+class PyXA.apps.Console.XAConsoleApplication(properties)[source]
+

Bases: XASBApplication

+

A class for managing and interacting with Console.app.

+
+

New in version 0.0.5.

+
+

Methods:

+ + + + + + +

select_device(uuid)

Select a device.

+
+
+select_device(uuid: str) Self[source]
+

Select a device.

+
+
Parameters:
+

uuid (str) – The UUID of the device to select

+
+
Returns:
+

The application ject

+
+
Return type:
+

Self

+
+
+
+

New in version 0.0.5.

+
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/contacts.html b/docs/reference/apps/contacts.html new file mode 100644 index 0000000..b0a6203 --- /dev/null +++ b/docs/reference/apps/contacts.html @@ -0,0 +1,2566 @@ + + + + + + + Contacts Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Contacts Module Reference

+
+

New in version 0.0.2.

+
+

Control the macOS Contacts application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XAContactsAddress(properties)

An address associated with a contact in Contacts.app.

XAContactsAddressList(properties[, filter])

A wrapper around lists of addresses that employs fast enumeration techniques.

XAContactsApplication(properties)

A class for managing and interacting with Contacts.app.

XAContactsContactInfo(properties)

Contact information associated with a contact in Contacts.app.

XAContactsContactInfoList(properties[, ...])

A wrapper around lists of contact information entries that employs fast enumeration techniques.

XAContactsCustomDate(properties)

A custom date associated with a contact in Contacts.app.

XAContactsCustomDateList(properties[, filter])

A wrapper around lists of contact custom dates that employs fast enumeration techniques.

XAContactsDocument(properties)

A document in Contacts.app.

XAContactsDocumentList(properties[, filter])

A wrapper around lists of documents that employs fast enumeration techniques.

XAContactsEmail(properties)

A document in Contacts.app.

XAContactsEmailList(properties[, filter])

A wrapper around lists of contact email addresses that employs fast enumeration techniques.

XAContactsEntry(properties)

An entry in Contacts.app.

XAContactsEntryList(properties[, filter, ...])

A wrapper around lists of contact entries that employs fast enumeration techniques.

XAContactsGroup(properties)

A group in Contacts.app.

XAContactsGroupList(properties[, filter])

A wrapper around lists of contact groups that employs fast enumeration techniques.

XAContactsInstantMessage(properties)

An instant message (IM) address associated with a contact in Contacts.app.

XAContactsInstantMessageList(properties[, ...])

A wrapper around lists of IM addresses that employs fast enumeration techniques.

XAContactsPerson(properties)

A person in Contacts.app.

XAContactsPersonList(properties[, filter])

A wrapper around lists of people that employs fast enumeration techniques.

XAContactsPhone(properties)

A phone number associated with a contact in Contacts.app.

XAContactsPhoneList(properties[, filter])

A wrapper around lists of contact phone numbers that employs fast enumeration techniques.

XAContactsRelatedName(properties)

A related name of a contact in Contacts.app.

XAContactsRelatedNameList(properties[, filter])

A wrapper around lists of contact related names that employs fast enumeration techniques.

XAContactsSocialProfile(properties)

A social profile associated with a contact in Contacts.app.

XAContactsSocialProfileList(properties[, filter])

A wrapper around lists of contact social profiles that employs fast enumeration techniques.

XAContactsURL(properties)

A URL associated with a contact in Contacts.app.

XAContactsURLList(properties[, filter])

A wrapper around lists of contact URLs that employs fast enumeration techniques.

XAContactsWindow(properties)

A window of Contacts.app.

+
+
+class PyXA.apps.Contacts.XAContactsAddress(properties)[source]
+

Bases: XAObject

+

An address associated with a contact in Contacts.app.

+
+

New in version 0.0.7.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

city

The city part of the address.

country

The country part of the address.

country_code

The country code part of the address.

formatted_address

The formatted string for the address.

id

The unique identifier for the address.

label

The label associated with the address.

state

The state, province, or region part of the address.

street

The street part of the address.

zip

The zip code or postal code part of the address.

+
+
+property city: str
+

The city part of the address.

+
+ +
+
+property country: str
+

The country part of the address.

+
+ +
+
+property country_code: str
+

The country code part of the address.

+
+ +
+
+property formatted_address: str
+

The formatted string for the address.

+
+ +
+
+property id: str
+

The unique identifier for the address.

+
+ +
+
+property label: str
+

The label associated with the address.

+
+ +
+
+property state: str
+

The state, province, or region part of the address.

+
+ +
+
+property street: str
+

The street part of the address.

+
+ +
+
+property zip: str
+

The zip code or postal code part of the address.

+
+ +
+ +
+
+class PyXA.apps.Contacts.XAContactsAddressList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of addresses that employs fast enumeration techniques.

+

All properties of addresses can be called as methods on the wrapped list, returning a list containing each address’ value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_city(city)

by_country(country)

by_country_code(country_code)

by_formatted_address(formatted_address)

by_id(id)

by_label(label)

by_state(state)

by_street(street)

by_zip(zip)

city()

country()

country_code()

formatted_address()

id()

label()

state()

street()

zip()

+
+
+by_city(city: str) Optional[XAContactsAddress][source]
+
+ +
+
+by_country(country: str) Optional[XAContactsAddress][source]
+
+ +
+
+by_country_code(country_code: str) Optional[XAContactsAddress][source]
+
+ +
+
+by_formatted_address(formatted_address: str) Optional[XAContactsAddress][source]
+
+ +
+
+by_id(id: str) Optional[XAContactsAddress][source]
+
+ +
+
+by_label(label: str) Optional[XAContactsAddress][source]
+
+ +
+
+by_state(state: str) Optional[XAContactsAddress][source]
+
+ +
+
+by_street(street: str) Optional[XAContactsAddress][source]
+
+ +
+
+by_zip(zip: str) Optional[XAContactsAddress][source]
+
+ +
+
+city() list[str][source]
+
+ +
+
+country() list[str][source]
+
+ +
+
+country_code() list[str][source]
+
+ +
+
+formatted_address() list[str][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+label() list[str][source]
+
+ +
+
+state() list[str][source]
+
+ +
+
+street() list[str][source]
+
+ +
+
+zip() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Contacts.XAContactsApplication(properties)[source]
+

Bases: XASBApplication, XACanOpenPath

+

A class for managing and interacting with Contacts.app.

+ +
+

New in version 0.0.2.

+
+

Classes:

+ + + + + + + + + +

Format(value[, names, module, qualname, ...])

Format options when saving documents.

ServiceType(value[, names, module, ...])

Service types for social media accounts.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

default_country_code

The default country code for addresses.

frontmost

Whether Contacts is the frontmost application.

my_card

The user's contact card.

name

The name of the application.

selection

The currently selected entries.

unsaved

Whether there are any unsaved changed.

version

The version of Contacts.app.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

documents([filter])

Returns a list of documents, as PyXA objects, matching the given filter.

groups([filter])

Returns a list of groups, as PyXA objects, matching the given filter.

make(specifier[, properties])

Creates a new element of the given specifier class without adding it to any list.

open(file_path)

Opens a document and prompts whether to import the contact(s) contained in the document.

people([filter])

Returns a list of people, as PyXA objects, matching the given filter.

save()

Saves all changes to the address book.

+
+
+class Format(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Format options when saving documents.

+

Attributes:

+ + + + + + +

ARCHIVE

The native Address Book file format

+
+
+ARCHIVE = 1633837685
+

The native Address Book file format

+
+ +
+ +
+
+class ServiceType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Service types for social media accounts.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

AIM

FACEBOOK

GADU_GADU

GOOGLE_TALK

ICQ

JABBER

MSN

QQ

SKYPE

YAHOO

+
+
+AIM = 1635399733
+
+ +
+
+FACEBOOK = 1635399988
+
+ +
+
+GADU_GADU = 1635399734
+
+ +
+
+GOOGLE_TALK = 1635399735
+
+ +
+
+ICQ = 1635399736
+
+ +
+
+JABBER = 1635399737
+
+ +
+
+MSN = 1635399984
+
+ +
+
+QQ = 1635399985
+
+ +
+
+SKYPE = 1635399986
+
+ +
+
+YAHOO = 1635399987
+
+ +
+ +
+
+property default_country_code: str
+

The default country code for addresses.

+
+ +
+
+documents(filter: Optional[dict] = None) XAContactsDocumentList[source]
+

Returns a list of documents, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned documents will have, or None

+
+
Returns:
+

The list of documents

+
+
Return type:
+

XAContactsDocumentList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property frontmost: bool
+

Whether Contacts is the frontmost application.

+
+ +
+
+groups(filter: Optional[dict] = None) XAContactsGroupList[source]
+

Returns a list of groups, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned groups will have, or None

+
+
Returns:
+

The list of groups

+
+
Return type:
+

XAContactsGroupList

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Contacts")
+>>> print(app.groups())
+<<class 'PyXA.apps.Contacts.XAContactsGroupList'>['Example Group 1', 'Example Group 2', ...]>
+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+make(specifier: str, properties: dict = None)[source]
+

Creates a new element of the given specifier class without adding it to any list.

+

Use XABase.XAList.push() to push the element onto a list.

+
+
Parameters:
+
    +
  • specifier (str) – The classname of the object to create

  • +
  • properties (dict) – The properties to give the object

  • +
+
+
Returns:
+

A PyXA wrapped form of the object

+
+
Return type:
+

XABase.XAObject

+
+
Example 1:
+

Add a URL to a contact

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Contacts")
+>>> contact = app.people().by_name("Example Contact")
+>>> new_url = app.make("url", {"label": "Google", "value": "www.google.com"})
+>>> contact.urls().push(new_url)
+>>> app.save()
+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property my_card: XAContactsPerson
+

The user’s contact card.

+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+open(file_path: str)[source]
+

Opens a document and prompts whether to import the contact(s) contained in the document.

+
+
Parameters:
+

file_path (str) – The path to the file to import

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+people(filter: Optional[dict] = None) XAContactsPersonList[source]
+

Returns a list of people, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned people will have, or None

+
+
Returns:
+

The list of people

+
+
Return type:
+

XAContactsPersonList

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Contacts")
+>>> print(app.people())
+<<class 'PyXA.apps.Contacts.XAContactsPersonList'>['Example Contact 1', 'Example Contact 2', ...]>
+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+save()[source]
+

Saves all changes to the address book.

+
+

New in version 0.0.7.

+
+
+ +
+
+property selection: XAContactsPersonList
+

The currently selected entries.

+
+ +
+
+property unsaved: bool
+

Whether there are any unsaved changed.

+
+ +
+
+property version: str
+

The version of Contacts.app.

+
+ +
+ +
+
+class PyXA.apps.Contacts.XAContactsContactInfo(properties)[source]
+

Bases: XAObject

+

Contact information associated with a contact in Contacts.app.

+
+

New in version 0.0.7.

+
+

Attributes:

+ + + + + + + + + + + + +

id

The persistent unique identifier for the information entry.

label

The label associated with the information entry.

value

The value of the information entry.

+
+
+property id: str
+

The persistent unique identifier for the information entry.

+
+ +
+
+property label: str
+

The label associated with the information entry.

+
+ +
+
+property value: Optional[Union[str, datetime]]
+

The value of the information entry.

+
+ +
+ +
+
+class PyXA.apps.Contacts.XAContactsContactInfoList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList

+

A wrapper around lists of contact information entries that employs fast enumeration techniques.

+

All properties of contact information entries can be called as methods on the wrapped list, returning a list containing each entry’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_id(id)

by_label(label)

by_value(value)

id()

label()

value()

+
+
+by_id(id: str) Optional[XAContactsContactInfo][source]
+
+ +
+
+by_label(label: str) Optional[XAContactsContactInfo][source]
+
+ +
+
+by_value(value: Any) Optional[XAContactsContactInfo][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+label() list[str][source]
+
+ +
+
+value() list[Any][source]
+
+ +
+ +
+
+class PyXA.apps.Contacts.XAContactsCustomDate(properties)[source]
+

Bases: XAContactsContactInfo

+

A custom date associated with a contact in Contacts.app.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.Contacts.XAContactsCustomDateList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAContactsContactInfoList

+

A wrapper around lists of contact custom dates that employs fast enumeration techniques.

+

All properties of contact custom dates can be called as methods on the wrapped list, returning a list containing each custom date’s value for the property.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.Contacts.XAContactsDocument(properties)[source]
+

Bases: XAObject

+

A document in Contacts.app.

+
+

New in version 0.0.7.

+
+

Attributes:

+ + + + + + + + + + + + +

file

The location of the document of the disk, if one exists.

modified

Whether the document has been modified since it was last saved.

name

The name of the document.

+
+
+property file: XAURL
+

The location of the document of the disk, if one exists.

+
+ +
+
+property modified: bool
+

Whether the document has been modified since it was last saved.

+
+ +
+
+property name: str
+

The name of the document.

+
+ +
+ +
+
+class PyXA.apps.Contacts.XAContactsDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of documents that employs fast enumeration techniques.

+

All properties of documents can be called as methods on the wrapped list, returning a list containing each document’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_file(file)

by_modified(modified)

by_name(name)

file()

modified()

name()

+
+
+by_file(file: XAURL) Optional[XAContactsDocument][source]
+
+ +
+
+by_modified(modified: bool) Optional[XAContactsDocument][source]
+
+ +
+
+by_name(name: str) Optional[XAContactsDocument][source]
+
+ +
+
+file() list[PyXA.XABase.XAURL][source]
+
+ +
+
+modified() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Contacts.XAContactsEmail(properties)[source]
+

Bases: XAContactsContactInfo

+

A document in Contacts.app.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.Contacts.XAContactsEmailList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAContactsContactInfoList

+

A wrapper around lists of contact email addresses that employs fast enumeration techniques.

+

All properties of contact email addresses can be called as methods on the wrapped list, returning a list containing each email address’s value for the property.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.Contacts.XAContactsEntry(properties)[source]
+

Bases: XAObject

+

An entry in Contacts.app.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + +

add_to(parent)

Adds a child object to an entry.

delete()

Deletes the entry.

remove_from(elem)

Removes a child object from an entry.

+

Attributes:

+ + + + + + + + + + + + + + + +

creation_date

The creation date of the contact entry.

id

The unique persistent identifier for the entry.

modification_date

The last modification date of the contact entry.

selected

Whether the entry is selected.

+
+
+add_to(parent: XAObject) XAContactsPerson[source]
+

Adds a child object to an entry.

+
+
Parameters:
+

parent (XABase.XAObject) – The entry to add this entry as a child to

+
+
Example 1:
+

Add a contact to a group

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Contacts")
+>>> group = app.groups().by_name("Example Group")
+>>> app.people()[0].add_to(group)
+>>> app.save()
+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property creation_date: datetime
+

The creation date of the contact entry.

+
+ +
+
+delete()[source]
+

Deletes the entry. Only entries creates in the current session can be deleted.

+
+

New in version 0.0.7.

+
+
+ +
+
+property id: str
+

The unique persistent identifier for the entry.

+
+ +
+
+property modification_date: datetime
+

The last modification date of the contact entry.

+
+ +
+
+remove_from(elem) XAContactsPerson[source]
+

Removes a child object from an entry.

+
+
Parameters:
+

parent (XABase.XAObject) – The entry to removes this entry as a child from

+
+
Example 1:
+

Remove a contact from a group

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Contacts")
+>>> group = app.groups().by_name("Example Group")
+>>> app.people()[0].add_to(group)
+>>> app.people()[0].remove_from(group)
+>>> app.save()
+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property selected: bool
+

Whether the entry is selected.

+
+ +
+ +
+
+class PyXA.apps.Contacts.XAContactsEntryList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList

+

A wrapper around lists of contact entries that employs fast enumeration techniques.

+

All properties of contact entries can be called as methods on the wrapped list, returning a list containing each entry’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_creation_date(creation_date)

by_id(id)

by_modification_date(modification_date)

by_selected(selected)

creation_date()

id()

modification_date()

selected()

+
+
+by_creation_date(creation_date: datetime) Optional[XAContactsEntry][source]
+
+ +
+
+by_id(id: str) Optional[XAContactsEntry][source]
+
+ +
+
+by_modification_date(modification_date: datetime) Optional[XAContactsEntry][source]
+
+ +
+
+by_selected(selected: bool) Optional[XAContactsEntry][source]
+
+ +
+
+creation_date() list[datetime.datetime][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+modification_date() list[datetime.datetime][source]
+
+ +
+
+selected() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Contacts.XAContactsGroup(properties)[source]
+

Bases: XAContactsEntry

+

A group in Contacts.app.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + +

groups([filter])

Returns a list of groups, as PyXA objects, matching the given filter.

people([filter])

Returns a list of people, as PyXA objects, matching the given filter.

+

Attributes:

+ + + + + + +

name

The name of the group.

+
+
+groups(filter: Optional[dict] = None) XAContactsGroupList[source]
+

Returns a list of groups, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned groups will have, or None

+
+
Returns:
+

The list of groups

+
+
Return type:
+

XAContactsGroupList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property name: str
+

The name of the group.

+
+ +
+
+people(filter: Optional[dict] = None) XAContactsPersonList[source]
+

Returns a list of people, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned people will have, or None

+
+
Returns:
+

The list of people

+
+
Return type:
+

XAContactsPersonList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+ +
+
+class PyXA.apps.Contacts.XAContactsGroupList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAContactsEntryList

+

A wrapper around lists of contact groups that employs fast enumeration techniques.

+

All properties of contact groups can be called as methods on the wrapped list, returning a list containing each group’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + +

by_name(name)

name()

+
+
+by_name(name: str) Optional[XAContactsGroup][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Contacts.XAContactsInstantMessage(properties)[source]
+

Bases: XAContactsContactInfo

+

An instant message (IM) address associated with a contact in Contacts.app.

+
+

New in version 0.0.7.

+
+

Attributes:

+ + + + + + + + + + + + +

service_name

The service name of the IM address.

service_type

The service type of the IM address.

user_name

The user name of the the IM address.

+
+
+property service_name: str
+

The service name of the IM address.

+
+ +
+
+property service_type: ServiceType
+

The service type of the IM address.

+
+ +
+
+property user_name: str
+

The user name of the the IM address.

+
+ +
+ +
+
+class PyXA.apps.Contacts.XAContactsInstantMessageList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAContactsContactInfoList

+

A wrapper around lists of IM addresses that employs fast enumeration techniques.

+

All properties of IM addresses can be called as methods on the wrapped list, returning a list containing each IM address’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_service_name(service_name)

by_service_type(service_type)

by_user_name(user_name)

service_name()

service_type()

user_name()

+
+
+by_service_name(service_name: str) Optional[XAContactsInstantMessage][source]
+
+ +
+
+by_service_type(service_type: ServiceType) Optional[XAContactsInstantMessage][source]
+
+ +
+
+by_user_name(user_name: str) Optional[XAContactsInstantMessage][source]
+
+ +
+
+service_name() list[str][source]
+
+ +
+
+service_type() list[PyXA.apps.Contacts.XAContactsApplication.ServiceType][source]
+
+ +
+
+user_name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Contacts.XAContactsPerson(properties)[source]
+

Bases: XAContactsEntry

+

A person in Contacts.app.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

addresses([filter])

Returns a list of addresses, as PyXA objects, matching the given filter.

custom_dates([filter])

Returns a list of groups, as PyXA objects, matching the given filter.

emails([filter])

Returns a list of email addresses, as PyXA objects, matching the given filter.

groups([filter])

Returns a list of groups, as PyXA objects, matching the given filter.

instant_messages([filter])

Returns a list of IM addresses, as PyXA objects, matching the given filter.

phones([filter])

Returns a list of phone numbers, as PyXA objects, matching the given filter.

related_names([filter])

Returns a list of related names, as PyXA objects, matching the given filter.

show()

Shows the contact card for this contact in Contacts.app.

social_profiles([filter])

Returns a list of social profiles, as PyXA objects, matching the given filter.

urls([filter])

Returns a list of URLs, as PyXA objects, matching the given filter.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

birth_date

The birthdate of the person.

company

Whether the record is for a company or not (if not, the record is for a person).

department

The department that the person works for.

first_name

The first name of the person.

home_page

The homepage of the person.

image

The image for the person.

job_title

The job title of the person.

last_name

The last name of the person.

maiden_name

The maiden name of the person.

middle_name

The middle name of the person.

name

The first and last name of the person.

nickname

The nickname of the person.

note

The notes for the person.

organization

The organization that employs the person.

phonetic_first_name

The phonetic version of the person's first name.

phonetic_last_name

The phonetic version of the person's last name.

phonetic_middle_name

The phonetic version of the person's middle name.

suffix

The suffix of the person's name.

title

The title of the person.

vcard

The person's information in vCard format.

+
+
+addresses(filter: Optional[dict] = None) XAContactsAddressList[source]
+

Returns a list of addresses, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned addresses will have, or None

+
+
Returns:
+

The list of addresses

+
+
Return type:
+

XAContactsAddressList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property birth_date: datetime
+

The birthdate of the person.

+
+ +
+
+property company: bool
+

Whether the record is for a company or not (if not, the record is for a person).

+
+ +
+
+custom_dates(filter: Optional[dict] = None) XAContactsCustomDateList[source]
+

Returns a list of groups, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned groups will have, or None

+
+
Returns:
+

The list of groups

+
+
Return type:
+

XAContactsCustomDateList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property department: str
+

The department that the person works for.

+
+ +
+
+emails(filter: Optional[dict] = None) XAContactsEmailList[source]
+

Returns a list of email addresses, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned email addresses will have, or None

+
+
Returns:
+

The list of email addresses

+
+
Return type:
+

XAContactsEmailList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property first_name: str
+

The first name of the person.

+
+ +
+
+groups(filter: Optional[dict] = None) XAContactsGroupList[source]
+

Returns a list of groups, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned groups will have, or None

+
+
Returns:
+

The list of groups

+
+
Return type:
+

XAContactsGroupList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property home_page: str
+

The homepage of the person.

+
+ +
+
+property image: XAImage
+

The image for the person.

+
+ +
+
+instant_messages(filter: Optional[dict] = None) XAContactsInstantMessageList[source]
+

Returns a list of IM addresses, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned IM addresses will have, or None

+
+
Returns:
+

The list of IM addresses

+
+
Return type:
+

XAContactsInstantMessageList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property job_title: str
+

The job title of the person.

+
+ +
+
+property last_name: str
+

The last name of the person.

+
+ +
+
+property maiden_name: str
+

The maiden name of the person.

+
+ +
+
+property middle_name: str
+

The middle name of the person.

+
+ +
+
+property name: str
+

The first and last name of the person.

+
+ +
+
+property nickname: str
+

The nickname of the person.

+
+ +
+
+property note: str
+

The notes for the person.

+
+ +
+
+property organization: str
+

The organization that employs the person.

+
+ +
+
+phones(filter: Optional[dict] = None) XAContactsPhoneList[source]
+

Returns a list of phone numbers, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned phone numbers will have, or None

+
+
Returns:
+

The list of phone numbers

+
+
Return type:
+

XAContactsPhoneList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property phonetic_first_name: str
+

The phonetic version of the person’s first name.

+
+ +
+
+property phonetic_last_name: str
+

The phonetic version of the person’s last name.

+
+ +
+
+property phonetic_middle_name: str
+

The phonetic version of the person’s middle name.

+
+ +
+
+related_names(filter: Optional[dict] = None) XAContactsRelatedNameList[source]
+

Returns a list of related names, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned related names will have, or None

+
+
Returns:
+

The list of related names

+
+
Return type:
+

XAContactsRelatedNameList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+show() XAContactsPerson[source]
+

Shows the contact card for this contact in Contacts.app.

+
+
Returns:
+

The contact person object

+
+
Return type:
+

XAContactsPerson

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+social_profiles(filter: Optional[dict] = None) XAContactsSocialProfileList[source]
+

Returns a list of social profiles, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned social profiles will have, or None

+
+
Returns:
+

The list of social profiles

+
+
Return type:
+

XAContactsSocialProfileList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property suffix: str
+

The suffix of the person’s name.

+
+ +
+
+property title: str
+

The title of the person.

+
+ +
+
+urls(filter: Optional[dict] = None) XAContactsURLList[source]
+

Returns a list of URLs, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned URLs will have, or None

+
+
Returns:
+

The list of URLs

+
+
Return type:
+

XAContactsURLList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property vcard: str
+

The person’s information in vCard format.

+
+ +
+ +
+
+class PyXA.apps.Contacts.XAContactsPersonList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAContactsEntryList

+

A wrapper around lists of people that employs fast enumeration techniques.

+

All properties of people can be called as methods on the wrapped list, returning a list containing each IM person’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

birth_date()

by_birth_date(birth_date)

by_company(company)

by_department(department)

by_first_name(first_name)

by_home_page(home_page)

by_image(image)

by_job_title(job_title)

by_last_name(last_name)

by_maiden_name(maiden_name)

by_middle_name(middle_name)

by_name(name)

by_nickname(nickname)

by_note(note)

by_organization(organization)

by_phonetic_first_name(phonetic_first_name)

by_phonetic_last_name(phonetic_last_name)

by_phonetic_middle_name(phonetic_middle_name)

by_suffix(suffix)

by_title(title)

by_vcard(vcard)

company()

department()

first_name()

home_page()

image()

job_title()

last_name()

maiden_name()

middle_name()

name()

nickname()

note()

organization()

phonetic_first_name()

phonetic_last_name()

phonetic_middle_name()

suffix()

title()

vcard()

+
+
+birth_date() list[datetime.datetime][source]
+
+ +
+
+by_birth_date(birth_date: datetime) Optional[XAContactsPerson][source]
+
+ +
+
+by_company(company: bool) Optional[XAContactsPerson][source]
+
+ +
+
+by_department(department: str) Optional[XAContactsPerson][source]
+
+ +
+
+by_first_name(first_name: str) Optional[XAContactsPerson][source]
+
+ +
+
+by_home_page(home_page: str) Optional[XAContactsPerson][source]
+
+ +
+
+by_image(image: XAImage) Optional[XAContactsPerson][source]
+
+ +
+
+by_job_title(job_title: str) Optional[XAContactsPerson][source]
+
+ +
+
+by_last_name(last_name: str) Optional[XAContactsPerson][source]
+
+ +
+
+by_maiden_name(maiden_name: str) Optional[XAContactsPerson][source]
+
+ +
+
+by_middle_name(middle_name: str) Optional[XAContactsPerson][source]
+
+ +
+
+by_name(name: str) Optional[XAContactsPerson][source]
+
+ +
+
+by_nickname(nickname: str) Optional[XAContactsPerson][source]
+
+ +
+
+by_note(note: str) Optional[XAContactsPerson][source]
+
+ +
+
+by_organization(organization: str) Optional[XAContactsPerson][source]
+
+ +
+
+by_phonetic_first_name(phonetic_first_name: str) Optional[XAContactsPerson][source]
+
+ +
+
+by_phonetic_last_name(phonetic_last_name: str) Optional[XAContactsPerson][source]
+
+ +
+
+by_phonetic_middle_name(phonetic_middle_name: str) Optional[XAContactsPerson][source]
+
+ +
+
+by_suffix(suffix: str) Optional[XAContactsPerson][source]
+
+ +
+
+by_title(title: str) Optional[XAContactsPerson][source]
+
+ +
+
+by_vcard(vcard: str) Optional[XAContactsPerson][source]
+
+ +
+
+company() list[bool][source]
+
+ +
+
+department() list[str][source]
+
+ +
+
+first_name() list[str][source]
+
+ +
+
+home_page() list[str][source]
+
+ +
+
+image() list[PyXA.XABase.XAImage][source]
+
+ +
+
+job_title() list[str][source]
+
+ +
+
+last_name() list[str][source]
+
+ +
+
+maiden_name() list[str][source]
+
+ +
+
+middle_name() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+nickname() list[str][source]
+
+ +
+
+note() list[str][source]
+
+ +
+
+organization() list[str][source]
+
+ +
+
+phonetic_first_name() list[str][source]
+
+ +
+
+phonetic_last_name() list[str][source]
+
+ +
+
+phonetic_middle_name() list[str][source]
+
+ +
+
+suffix() list[str][source]
+
+ +
+
+title() list[str][source]
+
+ +
+
+vcard() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Contacts.XAContactsPhone(properties)[source]
+

Bases: XAContactsContactInfo

+

A phone number associated with a contact in Contacts.app.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.Contacts.XAContactsPhoneList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAContactsContactInfoList

+

A wrapper around lists of contact phone numbers that employs fast enumeration techniques.

+

All properties of contact phone numbers can be called as methods on the wrapped list, returning a list containing each phone numbers’s value for the property.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.Contacts.XAContactsRelatedName(properties)[source]
+

Bases: XAContactsContactInfo

+

A related name of a contact in Contacts.app.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.Contacts.XAContactsRelatedNameList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAContactsContactInfoList

+

A wrapper around lists of contact related names that employs fast enumeration techniques.

+

All properties of contact related names can be called as methods on the wrapped list, returning a list containing each related names’s value for the property.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.Contacts.XAContactsSocialProfile(properties)[source]
+

Bases: XASBWindow

+

A social profile associated with a contact in Contacts.app.

+
+

New in version 0.0.7.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + +

id

A persistent unique identifier for this profile.

service_name

The service name of this social profile.

url

The URL of the social profile.

user_identifier

A service-specific identifier used with this social profile.

user_name

The user name used with this social profile.

+
+
+property id: str
+

A persistent unique identifier for this profile.

+
+ +
+
+property service_name: str
+

The service name of this social profile.

+
+ +
+
+property url: str
+

The URL of the social profile.

+
+ +
+
+property user_identifier: str
+

A service-specific identifier used with this social profile.

+
+ +
+
+property user_name: str
+

The user name used with this social profile.

+
+ +
+ +
+
+class PyXA.apps.Contacts.XAContactsSocialProfileList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of contact social profiles that employs fast enumeration techniques.

+

All properties of contact social profiles can be called as methods on the wrapped list, returning a list containing each social profile’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_id(id)

by_service_name(service_name)

by_url(url)

by_user_identifier(user_identifier)

by_user_name(user_name)

id()

service_name()

url()

user_identifier()

user_name()

+
+
+by_id(id: str) Optional[XAContactsSocialProfile][source]
+
+ +
+
+by_service_name(service_name: str) Optional[XAContactsSocialProfile][source]
+
+ +
+
+by_url(url: str) Optional[XAContactsSocialProfile][source]
+
+ +
+
+by_user_identifier(user_identifier: str) Optional[XAContactsSocialProfile][source]
+
+ +
+
+by_user_name(user_name: str) Optional[XAContactsSocialProfile][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+service_name() list[str][source]
+
+ +
+
+url() list[str][source]
+
+ +
+
+user_identifier() list[str][source]
+
+ +
+
+user_name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Contacts.XAContactsURL(properties)[source]
+

Bases: XAContactsContactInfo

+

A URL associated with a contact in Contacts.app.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.Contacts.XAContactsURLList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAContactsContactInfoList

+

A wrapper around lists of contact URLs that employs fast enumeration techniques.

+

All properties of contact URLs can be called as methods on the wrapped list, returning a list containing each URL’s value for the property.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.Contacts.XAContactsWindow(properties)[source]
+

Bases: XASBWindow

+

A window of Contacts.app.

+
+

New in version 0.0.7.

+
+

Attributes:

+ + + + + + +

document

The documents currently displayed in the window.

+
+
+property document: XAContactsDocument
+

The documents currently displayed in the window.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/dictionary.html b/docs/reference/apps/dictionary.html new file mode 100644 index 0000000..ecad95d --- /dev/null +++ b/docs/reference/apps/dictionary.html @@ -0,0 +1,538 @@ + + + + + + + Dictionary Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Dictionary Module Reference

+
+

New in version 0.0.2.

+
+

Control the macOS Dictionary application using JXA-like syntax.

+

Functions:

+ + + + + + +

DCSCopyTextDefinition(arg0, arg1, arg2, /)

CFStringRef DCSCopyTextDefinition(DCSDictionaryRef arg0, CFStringRef arg1, CoreFoundation.CFRange arg2);

+

Classes:

+ + + + + + +

XADictionaryApplication(properties)

A class for managing and interacting with Dictionary.app.

+
+
+PyXA.apps.Dictionary.DCSCopyTextDefinition(arg0, arg1, arg2, /)
+

CFStringRef DCSCopyTextDefinition(DCSDictionaryRef arg0, CFStringRef arg1, CoreFoundation.CFRange arg2);

+
+ +
+
+class PyXA.apps.Dictionary.XADictionaryApplication(properties)[source]
+

Bases: XAApplication

+

A class for managing and interacting with Dictionary.app.

+
+

See also

+

XADictionaryDefinition

+
+
+

New in version 0.0.2.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

define(word)

Gets the definition of a word in raw text form.

fullscreen()

Toggles fullscreen for the current Dictionary window.

go_back()

Goes to the previous page/definition.

go_forward()

Goes to the next page/definition.

new_tab()

Opens a new Dictionary tab.

new_window()

Opens a new Dictionary window.

open_about_panel()

Opens the "About Dictionary" panel.

open_dictionaries_folder()

Opens the folder containing custom/downloaded dictionaries.

open_preferences()

Opens the preferences window for the Dictionary application.

paste()

Pastes the current contents of the clipboard into the selected item, if there is one.

print()

Opens the dictionary app's print dialog.

search(term)

Searches the currently selected dictionary.

search_all(term)

Searches the provided term in all dictionaries

search_apple_dictionary(term)

Searches the provided term in the Apple Dictionary

search_new_oxford(term)

Searches the provided term in the New Oxford American Dictionary

search_oxford_thesaurus(term)

Searches the provided term in the Oxford American Writer's Thesaurus

search_wikipedia(term)

Searches the provided term in Wikipedia

show_help()

Displays the help window for Dictionary.app.

start_dictation()

Begins dictation to fill the selected item, if there is one.

switch_to_all()

Switches to searching all installed dictionaries.

switch_to_apple_dictionary()

Switches to searching the Apple Dictionary.

switch_to_new_oxford()

Switches to searching the New Oxford American Dictionary.

switch_to_oxford_thesaurus()

Switches to searching the Oxford American Writer's Thesaurus.

switch_to_wikipedia()

Switches to searching Wikipedia.

view_front_back_matter()

Displays the front/back matter of the selected dictionary.

+
+
+define(word: str) str[source]
+

Gets the definition of a word in raw text form.

+
+
Parameters:
+

word (str) – The word to define

+
+
Returns:
+

The definition of the word

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+fullscreen()[source]
+

Toggles fullscreen for the current Dictionary window.

+
+

New in version 0.0.2.

+
+
+ +
+
+go_back()[source]
+

Goes to the previous page/definition.

+
+

New in version 0.0.2.

+
+
+ +
+
+go_forward()[source]
+

Goes to the next page/definition.

+
+

New in version 0.0.2.

+
+
+ +
+
+new_tab()[source]
+

Opens a new Dictionary tab.

+
+

New in version 0.0.2.

+
+
+ +
+
+new_window()[source]
+

Opens a new Dictionary window.

+
+

New in version 0.0.2.

+
+
+ +
+
+open_about_panel()[source]
+

Opens the “About Dictionary” panel. Mimics clicking File->About Dictionary.

+
+

New in version 0.0.2.

+
+
+ +
+
+open_dictionaries_folder()[source]
+

Opens the folder containing custom/downloaded dictionaries.

+
+

New in version 0.0.2.

+
+
+ +
+
+open_preferences()[source]
+

Opens the preferences window for the Dictionary application. Mimics clicking File->Preferences…

+
+

New in version 0.0.2.

+
+
+ +
+
+paste()[source]
+

Pastes the current contents of the clipboard into the selected item, if there is one.

+
+

New in version 0.0.2.

+
+
+ +
+
+print()[source]
+

Opens the dictionary app’s print dialog.

+
+

New in version 0.0.2.

+
+
+ +
+
+search(term: str)[source]
+

Searches the currently selected dictionary.

+
+
Parameters:
+

term (str) – The term to search

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+search_all(term: str)[source]
+

Searches the provided term in all dictionaries

+
+
Parameters:
+

term (str) – The term to search

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+search_apple_dictionary(term: str)[source]
+

Searches the provided term in the Apple Dictionary

+
+
Parameters:
+

term (str) – The term to search

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+search_new_oxford(term: str)[source]
+

Searches the provided term in the New Oxford American Dictionary

+
+
Parameters:
+

term (str) – The term to search

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+search_oxford_thesaurus(term: str)[source]
+

Searches the provided term in the Oxford American Writer’s Thesaurus

+
+
Parameters:
+

term (str) – The term to search

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+search_wikipedia(term: str)[source]
+

Searches the provided term in Wikipedia

+
+
Parameters:
+

term (str) – The term to search

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+show_help()[source]
+

Displays the help window for Dictionary.app.

+
+

New in version 0.0.2.

+
+
+ +
+
+start_dictation()[source]
+

Begins dictation to fill the selected item, if there is one.

+
+

New in version 0.0.2.

+
+
+ +
+
+switch_to_all()[source]
+

Switches to searching all installed dictionaries.

+
+

New in version 0.0.2.

+
+
+ +
+
+switch_to_apple_dictionary()[source]
+

Switches to searching the Apple Dictionary.

+
+

New in version 0.0.2.

+
+
+ +
+
+switch_to_new_oxford()[source]
+

Switches to searching the New Oxford American Dictionary.

+
+

New in version 0.0.2.

+
+
+ +
+
+switch_to_oxford_thesaurus()[source]
+

Switches to searching the Oxford American Writer’s Thesaurus.

+
+

New in version 0.0.2.

+
+
+ +
+
+switch_to_wikipedia()[source]
+

Switches to searching Wikipedia.

+
+

New in version 0.0.2.

+
+
+ +
+
+view_front_back_matter()[source]
+

Displays the front/back matter of the selected dictionary.

+
+

New in version 0.0.2.

+
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/drafts.html b/docs/reference/apps/drafts.html new file mode 100644 index 0000000..e21e413 --- /dev/null +++ b/docs/reference/apps/drafts.html @@ -0,0 +1,520 @@ + + + + + + + Drafts Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Drafts Module Reference

+
+

New in version 0.0.8.

+
+

Control Drafts using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + +

XADraftsApplication(properties)

A class for managing and interacting with Drafts.app.

XADraftsDraft(properties)

A draft in Drafts.app.

XADraftsDraftList(properties[, filter])

A wrapper around a list of drafts.

+
+
+class PyXA.apps.Drafts.XADraftsApplication(properties)[source]
+

Bases: XASBApplication, XACanOpenPath

+

A class for managing and interacting with Drafts.app.

+
+

New in version 0.0.8.

+
+

Methods:

+ + + + + + + + + + + + +

drafts([filter])

Returns a list of drafts, as PyXA-wrapped objects, matching the given filter.

make(specifier[, properties])

Creates a new element of the given specifier class without adding it to any list.

new_draft(content)

Creates a new draft with the given name and content

+

Attributes:

+ + + + + + + + + +

name

The name of the application.

version

The version of Drafts.app.

+
+
+drafts(filter: Optional[dict] = None) XADraftsDraftList[source]
+

Returns a list of drafts, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter drafts by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of drafts

+
+
Return type:
+

XADraftsDraftList

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+make(specifier: str, properties: dict = None)[source]
+

Creates a new element of the given specifier class without adding it to any list.

+

Use XABase.XAList.push() to push the element onto a list.

+
+
Parameters:
+
    +
  • specifier (str) – The classname of the object to create

  • +
  • properties (dict) – The properties to give the object

  • +
+
+
Returns:
+

A PyXA wrapped form of the object

+
+
Return type:
+

XABase.XAObject

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+new_draft(content: str) XADraftsDraft[source]
+

Creates a new draft with the given name and content

+
+
Parameters:
+

content (str) – The full content of the draft (the first line is the name)

+
+
Returns:
+

The newly created draft object

+
+
Return type:
+

XADraftsDraft

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property version: str
+

The version of Drafts.app.

+
+ +
+ +
+
+class PyXA.apps.Drafts.XADraftsDraft(properties)[source]
+

Bases: XAObject

+

A draft in Drafts.app.

+
+

New in version 0.0.8.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

accessed_at

The date the draft was last accessed.

content

The content of the draft.

created_at

The date the draft was created.

flagged

The flagged status of the draft.

id

The unique identifier of the draft.

modified_at

The date the draft was last modified.

name

The first line of the draft.

permalink

The URL of the draft.

tags

The tags assigned to the draft.

+
+
+property accessed_at: datetime
+

The date the draft was last accessed.

+
+ +
+
+property content: str
+

The content of the draft.

+
+ +
+
+property created_at: datetime
+

The date the draft was created.

+
+ +
+
+property flagged: bool
+

The flagged status of the draft.

+
+ +
+
+property id: str
+

The unique identifier of the draft.

+
+ +
+
+property modified_at: datetime
+

The date the draft was last modified.

+
+ +
+
+property name: str
+

The first line of the draft.

+
+ +
+ +

The URL of the draft.

+
+ +
+
+property tags: list[str]
+

The tags assigned to the draft.

+
+ +
+ +
+
+class PyXA.apps.Drafts.XADraftsDraftList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around a list of drafts.

+
+

New in version 0.0.8.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

accessed_at()

by_accessed_at(accessed_at)

by_content(content)

by_created_at(created_at)

by_flagged(flagged)

by_id(id)

by_modified_at(modified_at)

by_name(name)

by_permalink(permalink)

by_tags(tags)

content()

created_at()

flagged()

id()

modified_at()

name()

permalink()

tags()

+
+
+accessed_at() list[datetime.datetime][source]
+
+ +
+
+by_accessed_at(accessed_at: datetime) Optional[XADraftsDraft][source]
+
+ +
+
+by_content(content: str) Optional[XADraftsDraft][source]
+
+ +
+
+by_created_at(created_at: datetime) Optional[XADraftsDraft][source]
+
+ +
+
+by_flagged(flagged: bool) Optional[XADraftsDraft][source]
+
+ +
+
+by_id(id: str) Optional[XADraftsDraft][source]
+
+ +
+
+by_modified_at(modified_at: datetime) Optional[XADraftsDraft][source]
+
+ +
+
+by_name(name: str) Optional[XADraftsDraft][source]
+
+ +
+ +
+ +
+
+by_tags(tags: list[str]) Optional[XADraftsDraft][source]
+
+ +
+
+content() list[str][source]
+
+ +
+
+created_at() list[datetime.datetime][source]
+
+ +
+
+flagged() list[bool][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+modified_at() list[datetime.datetime][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+ +
+
+tags() list[list[str]][source]
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/fantastical.html b/docs/reference/apps/fantastical.html new file mode 100644 index 0000000..3d72fe7 --- /dev/null +++ b/docs/reference/apps/fantastical.html @@ -0,0 +1,950 @@ + + + + + + + Fantastical Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Fantastical Module Reference

+
+

New in version 0.0.9.

+
+

Control Fantastical using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XAFantasticalApplication(properties)

A class for managing and interacting with Fantastical.app.

XAFantasticalCalendar(properties)

A class in Fantastical.app.

XAFantasticalCalendarEvent(properties)

XAFantasticalCalendarItem(properties)

An insertion point between two objects in Fantastical.app.

XAFantasticalCalendarItemList(properties[, ...])

A wrapper around lists of Fantastical calendar items that employs fast enumeration techniques.

XAFantasticalCalendarList(properties[, filter])

A wrapper around lists of Fantastical calendars that employs fast enumeration techniques.

XAFantasticalDocument(properties)

A document in Fantastical.app.

XAFantasticalDocumentList(properties[, filter])

A wrapper around lists of Fantastical documents that employs fast enumeration techniques.

XAFantasticalSelectedCalendarItem(properties)

XAFantasticalSelectedCalendarItemList(properties)

A wrapper around lists of Fantastical selected calendar items that employs fast enumeration techniques.

XAFantasticalTaskItem(properties)

XAFantasticalWindow(properties)

A window of Fantastical.app.

+
+
+class PyXA.apps.Fantastical.XAFantasticalApplication(properties)[source]
+

Bases: XASBApplication

+

A class for managing and interacting with Fantastical.app.

+
+

New in version 0.0.9.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

calendars([filter])

Returns a list of calendars, as PyXA objects, matching the given filter.

documents([filter])

Returns a list of documents, as PyXA objects, matching the given filter.

parse_sentence(sentence[, notes, calendar, ...])

Parses the given sentences and creates a corresponding calendar item based on the parsing result.

selected_calendar_items([filter])

Returns a list of selected calendar items, as PyXA objects, matching the given filter.

show_calendar_view([date])

Shows the (large) calendar view, optionally showing a specific date.

show_mini_view([date])

Shows the mini calendar view, optionally showing a specific date.

+

Attributes:

+ + + + + + + + + + + + +

frontmost

Whether Fantastical is the active application.

name

The name of the application.

version

The version of Fantastical.app.

+
+
+calendars(filter: dict = None) XAFantasticalCalendarList[source]
+

Returns a list of calendars, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+documents(filter: dict = None) XAFantasticalDocumentList[source]
+

Returns a list of documents, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+property frontmost: bool
+

Whether Fantastical is the active application.

+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+parse_sentence(sentence: str, notes: str = '', calendar: Optional[Union[str, XAFantasticalCalendar]] = None, add_immediately: bool = True, add_attendees: bool = False)[source]
+

Parses the given sentences and creates a corresponding calendar item based on the parsing result.

+
+
Parameters:
+
    +
  • sentence (str) – The sentence to parse

  • +
  • notes (str, optional) – Notes to attach to the calendar item, defaults to “”

  • +
  • calendar (Union[str, XAFantasticalCalendar, None], optional) – The calendar to add the item to, defaults to None

  • +
  • add_immediately (bool, optional) – Whether to add the item without displaying an event editing dialog, defaults to True

  • +
  • add_attendees (bool, optional) – Whether to invite attendees parsed from the sentence, defaults to False

  • +
+
+
Example 1:
+

Add simple events to calendars

+
+
+
>>> # Create an event on the default calendar
+>>> import PyXA
+>>> app = PyXA.Application("Fantastical")
+>>> app.parse_sentence("Event 1")
+>>> 
+>>> # Create an event on a calendar specified by a calendar object
+>>> cal = app.calendars().by_title("PyXA Development")
+>>> app.parse_sentence("Event 2", calendar = cal)
+>>> 
+>>> # Create an event on a calendar specified by a string
+>>> app.parse_sentence("Event 3", calendar = "Testing")
+
+
+
+
Example 2:
+

Use Fantastical’s query parsing to adjust calendar item settings

+
+
+
>>> # Automatically set the time of a task to 8am, show event editing dialog
+>>> app.parse_sentence("Wake up at 8am", add_immediately = False)
+>>> 
+>>> # Create a todo
+>>> app.parse_sentence("todo today Learn PyXA")
+>>> 
+>>> # Create an event at a location, with an alert, repeating weekly
+>>> app.parse_sentence("Meet with Example Person at 10am at 1 Infinite Loop, Cupertino, CA with alert 30 minutes before repeat weekly")
+>>> 
+>>> # Create an event spanning a week
+>>> app.parse_sentence("PyXA stuff August 22 to August 29")
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+selected_calendar_items(filter: dict = None) XAFantasticalSelectedCalendarItemList[source]
+

Returns a list of selected calendar items, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+show_calendar_view(date: Optional[Union[str, datetime]] = None)[source]
+

Shows the (large) calendar view, optionally showing a specific date.

+
+
Parameters:
+

date (Union[str, datetime, None], optional) – The date to display, defaults to None

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+show_mini_view(date: Optional[Union[str, datetime]] = None)[source]
+

Shows the mini calendar view, optionally showing a specific date.

+
+
Parameters:
+

date (Union[str, datetime, None], optional) – The date to display, defaults to None

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+property version: str
+

The version of Fantastical.app.

+
+ +
+ +
+
+class PyXA.apps.Fantastical.XAFantasticalCalendar(properties)[source]
+

Bases: XAObject

+

A class in Fantastical.app.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + + + + +

id

The unique identifier for the calendar.

title

The calendar's title.

+
+
+property id: str
+

The unique identifier for the calendar.

+
+ +
+
+property title: str
+

The calendar’s title.

+
+ +
+ +
+
+class PyXA.apps.Fantastical.XAFantasticalCalendarEvent(properties)[source]
+

Bases: XAFantasticalCalendarItem

+

Attributes:

+ + + + + + +

location

The event location.

+
+
+property location: str
+

The event location.

+
+ +
+ +
+
+class PyXA.apps.Fantastical.XAFantasticalCalendarItem(properties)[source]
+

Bases: XAObject

+

An insertion point between two objects in Fantastical.app.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

end_date

The end date of the event.

id

The unique identifier for the item.

is_all_day

True if the item spans an entire day.

is_recurring

True if the item is a recurring item.

notes

The notes for the event.

show_url

The show URL for the event.

start_date

The start date of the event.

title

The event title.

url

The related URL for the event.

+

Methods:

+ + + + + + +

save()

+
+
+property end_date: datetime
+

The end date of the event.

+
+ +
+
+property id: str
+

The unique identifier for the item.

+
+ +
+
+property is_all_day: bool
+

True if the item spans an entire day.

+
+ +
+
+property is_recurring: bool
+

True if the item is a recurring item.

+
+ +
+
+property notes: str
+

The notes for the event.

+
+ +
+
+save()[source]
+
+ +
+
+property show_url: XAURL
+

The show URL for the event.

+
+ +
+
+property start_date: datetime
+

The start date of the event.

+
+ +
+
+property title: str
+

The event title.

+
+ +
+
+property url: XAURL
+

The related URL for the event.

+
+ +
+ +
+
+class PyXA.apps.Fantastical.XAFantasticalCalendarItemList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList

+

A wrapper around lists of Fantastical calendar items that employs fast enumeration techniques.

+

All properties of calendar items can be called as methods on the wrapped list, returning a list containing each calendar item’s value for the property.

+
+

New in version 0.0.9.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_end_date(end_date)

by_id(id)

by_is_all_day(is_all_day)

by_is_recurring(is_recurring)

by_notes(notes)

by_show_url(show_url)

by_start_date(start_date)

by_title(title)

by_url(url)

end_date()

id()

is_all_day()

is_recurring()

notes()

show_url()

start_date()

title()

url()

+
+
+by_end_date(end_date: datetime) XAFantasticalCalendarItem[source]
+
+ +
+
+by_id(id: str) XAFantasticalCalendarItem[source]
+
+ +
+
+by_is_all_day(is_all_day: bool) XAFantasticalCalendarItem[source]
+
+ +
+
+by_is_recurring(is_recurring: bool) XAFantasticalCalendarItem[source]
+
+ +
+
+by_notes(notes: str) XAFantasticalCalendarItem[source]
+
+ +
+
+by_show_url(show_url: XAURL) XAFantasticalCalendarItem[source]
+
+ +
+
+by_start_date(start_date: datetime) XAFantasticalCalendarItem[source]
+
+ +
+
+by_title(title: str) XAFantasticalCalendarItem[source]
+
+ +
+
+by_url(url: XAURL) XAFantasticalCalendarItem[source]
+
+ +
+
+end_date() list[datetime.datetime][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+is_all_day() list[bool][source]
+
+ +
+
+is_recurring() list[bool][source]
+
+ +
+
+notes() list[str][source]
+
+ +
+
+show_url() list[PyXA.XABase.XAURL][source]
+
+ +
+
+start_date() list[datetime.datetime][source]
+
+ +
+
+title() list[str][source]
+
+ +
+
+url() list[PyXA.XABase.XAURL][source]
+
+ +
+ +
+
+class PyXA.apps.Fantastical.XAFantasticalCalendarList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of Fantastical calendars that employs fast enumeration techniques.

+

All properties of calendars can be called as methods on the wrapped list, returning a list containing each calendar’s value for the property.

+
+

New in version 0.0.9.

+
+

Methods:

+ + + + + + + + + + + + + + + +

by_id(id)

by_title(title)

id()

title()

+
+
+by_id(id: str) XAFantasticalCalendar[source]
+
+ +
+
+by_title(title: str) XAFantasticalCalendar[source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+title() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Fantastical.XAFantasticalDocument(properties)[source]
+

Bases: XAObject, XACloseable, XADeletable, XAPrintable, XAClipboardCodable

+

A document in Fantastical.app.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + + + + + + + +

file

The document's path.

modified

Whether the document has been modified since it was last saved.

name

+

Methods:

+ + + + + + + + + +

get_clipboard_representation()

Gets a clipboard-codable representation of the document.

print([print_properties, show_dialog])

Prints the object.

+
+
+property file: XAPath
+

The document’s path.

+
+ +
+
+get_clipboard_representation() list[Union[objc.NSURL, str]][source]
+

Gets a clipboard-codable representation of the document.

+

When the clipboard content is set to a Fantastical document, the document’s URL and source code are added to the clipboard.

+
+
Returns:
+

The document’s path and text content

+
+
Return type:
+

list[Union[AppKit.NSURL, str]]

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+property modified: bool
+

Whether the document has been modified since it was last saved.

+
+ +
+
+property name: str
+
+ +
+
+print(print_properties: Optional[dict] = None, show_dialog: bool = True) XAPrintable[source]
+

Prints the object.

+

Child classes of XAPrintable should override this method as necessary.

+
+
Parameters:
+
    +
  • show_dialog (bool, optional) – Whether to show the print dialog, defaults to True

  • +
  • print_properties (Union[dict, None], optional) – Properties to set for printing, defaults to None

  • +
+
+
Returns:
+

A reference to the PyXA object that called this method.

+
+
Return type:
+

XACanPrintPath

+
+
+
+

New in version 0.0.9.

+
+
+ +
+ +
+
+class PyXA.apps.Fantastical.XAFantasticalDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of Fantastical documents that employs fast enumeration techniques.

+

All properties of documents can be called as methods on the wrapped list, returning a list containing each document’s value for the property.

+
+

New in version 0.0.9.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_file(file)

by_modified(modified)

by_name(name)

file()

modified()

name()

+
+
+by_file(file: XAPath) XAFantasticalDocument[source]
+
+ +
+
+by_modified(modified: bool) XAFantasticalDocument[source]
+
+ +
+
+by_name(name: str) XAFantasticalDocument[source]
+
+ +
+
+file() list[PyXA.XABase.XAPath][source]
+
+ +
+
+modified() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Fantastical.XAFantasticalSelectedCalendarItem(properties)[source]
+

Bases: XAFantasticalCalendarItem

+
+ +
+
+class PyXA.apps.Fantastical.XAFantasticalSelectedCalendarItemList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAFantasticalCalendarItemList

+

A wrapper around lists of Fantastical selected calendar items that employs fast enumeration techniques.

+

All properties of selected calendar items can be called as methods on the wrapped list, returning a list containing each items’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.Fantastical.XAFantasticalTaskItem(properties)[source]
+

Bases: XAFantasticalCalendarItem

+

Attributes:

+ + + + + + +

priority

The event priority; higher number means lower priority.

+
+
+property priority: int
+

The event priority; higher number means lower priority.

+
+ +
+ +
+
+class PyXA.apps.Fantastical.XAFantasticalWindow(properties)[source]
+

Bases: XASBWindow, XAPrintable, XACloseable

+

A window of Fantastical.app.

+

Attributes:

+ + + + + + +

document

The document currently displayed in the window.

+
+
+property document: XAFantasticalDocument
+

The document currently displayed in the window.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/finder.html b/docs/reference/apps/finder.html new file mode 100644 index 0000000..3156256 --- /dev/null +++ b/docs/reference/apps/finder.html @@ -0,0 +1,5027 @@ + + + + + + + Finder Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Finder Module Reference

+
+

New in version 0.0.1.

+
+

Control Finder using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XAFinderAliasFile(properties)

A class for managing and interacting with alias files in Finder.app.

XAFinderAliasFileList(properties[, filter])

A wrapper around lists of alias files that employs fast enumeration techniques.

XAFinderApplication(properties)

A class for managing and interacting with Finder.app.

XAFinderApplicationFile(properties)

A class for managing and interacting with application files in Finder.app.

XAFinderApplicationFileList(properties[, filter])

A wrapper around lists of application files that employs fast enumeration techniques.

XAFinderClipping(properties)

A class for managing and interacting with clippings in Finder.app.

XAFinderClippingList(properties[, filter])

A wrapper around lists of clippings that employs fast enumeration techniques.

XAFinderClippingWindow(properties)

A class for managing and interacting with clipping windows in Finder.

XAFinderClippingWindowList(properties[, filter])

A wrapper around lists of clipping windows that employs fast enumeration techniques.

XAFinderColumn(properties)

A class for managing and interacting with columns in Finder windows.

XAFinderColumnList(properties[, filter])

A wrapper around lists of Finder columns that employs fast enumeration techniques.

XAFinderColumnViewOptions(properties)

A class representing the column view options of a Finder window.

XAFinderComputer(properties)

A class for managing and interacting with the Desktop.

XAFinderContainer(properties)

A class for managing and interacting with containers in Finder.

XAFinderContainerList(properties[, filter, ...])

A wrapper around lists of containers that employs fast enumeration techniques.

XAFinderDesktop(properties)

A class for managing and interacting with the Desktop.

XAFinderDesktopWindow(properties)

A class representing the containing window around Finder's desktop element.

XAFinderDisk(properties)

A class for managing and interacting with disks in Finder.

XAFinderDiskList(properties[, filter])

A wrapper around lists of disks that employs fast enumeration techniques.

XAFinderDocumentFile(properties)

A class for managing and interacting with document files in Finder.app.

XAFinderDocumentFileList(properties[, filter])

A wrapper around lists of document files that employs fast enumeration techniques.

XAFinderFile(properties)

A class for managing and interacting with files in Finder.

XAFinderFileList(properties[, filter, obj_class])

A wrapper around lists of files that employs fast enumeration techniques.

XAFinderFinderWindow(properties)

A class for managing and interacting with internal windows within Finder.app.

XAFinderFinderWindowList(properties[, filter])

A wrapper around lists of Finder internal windows (such as preference and information windows) that employs fast enumeration techniques.

XAFinderFolder(properties)

A class for managing and interacting with folders in Finder.

XAFinderFolderList(properties[, filter])

A wrapper around lists of folders that employs fast enumeration techniques.

XAFinderIconViewOptions(properties)

A class representing the icon view options of a Finder window.

XAFinderInformationWindow(properties)

A class for interacting with information windows in Finder.app.

XAFinderInformationWindowList(properties[, ...])

A wrapper around lists of info windows that employs fast enumeration techniques.

XAFinderInternetLocationFile(properties)

A class for managing and interacting with internet location files in Finder.app.

XAFinderInternetLocationFileList(properties)

A wrapper around lists of internet location files that employs fast enumeration techniques.

XAFinderItem(properties)

A generic class with methods common to the various item classes of Finder.

XAFinderItemList(properties[, filter, ...])

A wrapper around lists of Finder items that employs fast enumeration techniques.

XAFinderListViewOptions(properties)

A class representing the list view options in a Finder window.

XAFinderPackage(properties)

A class for managing and interacting with packages in Finder.app.

XAFinderPackageList(properties[, filter])

A wrapper around lists of packages that employs fast enumeration techniques.

XAFinderPreferences(properties)

A class for managing general preferences of Finder.app.

XAFinderPreferencesWindow(properties)

A class for managing and interacting with preference windows in Finder.app.

XAFinderTrash(properties)

A class for managing and interacting with Finder's Trash.

XAFinderWindow(properties)

A class for managing and interacting with windows of Finder.app.

XAFinderWindowList(properties[, filter, ...])

A wrapper around lists of Finder windows that employs fast enumeration techniques.

+
+
+class PyXA.apps.Finder.XAFinderAliasFile(properties)[source]
+

Bases: XAFinderFile

+

A class for managing and interacting with alias files in Finder.app.

+
+

New in version 0.0.3.

+
+

Attributes:

+ + + + + + +

original_item

The original item pointed to by the alias.

+
+
+property original_item: XAFinderItem
+

The original item pointed to by the alias.

+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderAliasFileList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAFinderFileList

+

A wrapper around lists of alias files that employs fast enumeration techniques.

+

All properties of alias files can be called as methods on the wrapped list, returning a list containing each alias files’s value for the property.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + +

by_original_item(original_item)

original_item()

+
+
+by_original_item(original_item: XAFinderItem) Optional[XAFinderAliasFile][source]
+
+ +
+
+original_item() list[PyXA.apps.Finder.XAFinderItem][source]
+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderApplication(properties)[source]
+

Bases: XASBApplication, XACanOpenPath

+

A class for managing and interacting with Finder.app.

+
+

Changed in version 0.0.3: Added methods and properties to reach parity with Finder.h.

+
+
+

New in version 0.0.1.

+
+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Arrangement(value[, names, module, ...])

Arrangement options for lists of items in Finder windows.

ColumnName(value[, names, module, qualname, ...])

Columns in Finder windows.

IconSize(value[, names, module, qualname, ...])

Options for the size of icons in Finder windows.

ItemFormat(value[, names, module, qualname, ...])

Options for file and disk formats of Finder items.

LabelPosition(value[, names, module, ...])

Options for the label position of items in Finder windows.

Panel(value[, names, module, qualname, ...])

Options for information panels in Finder.

PrivacySetting(value[, names, module, ...])

Options for privacy settings on Finder items.

SortDirection(value[, names, module, ...])

Options for sort direction of lists of Finder items.

ViewSetting(value[, names, module, ...])

View options for lists of items in Finder windows.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

alias_files([filter])

Returns a list of alias files matching the filter.

application_files([filter])

Returns a list of application files matching the filter.

applications_directory()

Obtains a reference to the system applications directory.

clipping_windows([filter])

Returns a list of clipping windows matching the filter.

clippings([filter])

Returns a list of clippings matching the filter.

containers([filter])

Returns a list of containers matching the filter.

delete_item(path)

Permanently deletes the file or folder at the specified path.

delete_items(paths)

Permanently deletes the files or folders at the specified paths.

directory(path)

+

Deprecated since version 0.1.1.

+
+

disks([filter])

Returns a list of disks matching the filter.

document_files([filter])

Returns a list of document files matching the filter.

documents_directory()

Obtains a reference to the current user's documents directory.

downloads_directory()

Obtains a reference to the current user's downloads directory.

duplicate_item(path)

Duplicates the specified file or folder in its containing folder.

duplicate_items(paths)

Duplicates the specified files or folders in their containing folder.

empty_trash()

Empties the trash.

files([filter])

Returns a list of files matching the filter.

finder_windows([filter])

Returns a list of Finder windows matching the filter.

folders([filter])

Returns a list of folders matching the filter.

get_labels()

Gets the list of file labels.

home_directory()

Obtains a reference to the current user's home directory.

internet_location_files([filter])

Returns a list of internet location files matching the filter.

items([filter])

Returns a list of items matching the filter.

movies_directory()

Obtains a reference to the current user's movies directory.

music_directory()

Obtains a reference to the current user's music directory.

packages([filter])

Returns a list of packages matching the filter.

pictures_directory()

Obtains a reference to the current user's pictures directory.

public_directory()

Obtains a reference to the public directory.

recycle_item(path)

Moves the file or folder at the specified path to the trash.

recycle_items(paths)

Moves the files or folders at the specified paths to the trash.

search(query)

Opens a Finder search window and searches for the specified term.

select_item(path)

Selects the file or folder at the specified path.

select_items(paths)

Selects the files or folders at the specified paths.

temp_directory()

Obtains a reference to the temporary directory for the current user.

trash_directory()

Obtains a reference to the current user's trash directory.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

computer_container

The computer directory.

desktop

The user's desktop.

desktop_picture

The desktop picture of the main monitor.

finder_preferences

Preferences for Finder as a whole.

frontmost

Whether Finder is the active application.

home

The home directory.

insertion_location

The container in which a new folder would be created in by default in the frontmost window.

name

The name of the application.

product_version

The system software version.

selection

The currently selected items in Finder.

startup_disk

The startup disk for this system.

trash

The system Trash.

version

The version of Finder

visible

Whether Finder is currently visible.

+
+
+class Arrangement(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Arrangement options for lists of items in Finder windows.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

BY_CREATION_DATE

BY_KIND

BY_LABEL

BY_MODIFICATION_DATE

BY_NAME

BY_SIZE

NOT_ARRANGED

SNAP_TO_GRID

+
+
+BY_CREATION_DATE = 1667527777
+
+ +
+
+BY_KIND = 1802071649
+
+ +
+
+BY_LABEL = 1818321505
+
+ +
+
+BY_MODIFICATION_DATE = 1835299937
+
+ +
+
+BY_NAME = 1851878753
+
+ +
+
+BY_SIZE = 1936292449
+
+ +
+
+NOT_ARRANGED = 1851880050
+
+ +
+
+SNAP_TO_GRID = 1735550049
+
+ +
+ +
+
+class ColumnName(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Columns in Finder windows.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

COMMENT

CREATION_DATE

KIND

LABEL

MODIFICATE_DATE

NAME

SIZE

VERSION

+
+
+COMMENT = 1701606211
+
+ +
+
+CREATION_DATE = 1701606243
+
+ +
+
+KIND = 1701606251
+
+ +
+
+LABEL = 1701606252
+
+ +
+
+MODIFICATE_DATE = 1701606253
+
+ +
+
+NAME = 1702063214
+
+ +
+
+SIZE = 1701606259
+
+ +
+
+VERSION = 1701606262
+
+ +
+ +
+
+class IconSize(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for the size of icons in Finder windows.

+

Attributes:

+ + + + + + + + + +

LARGE

SMALL

+
+
+LARGE = 1818716515
+
+ +
+
+SMALL = 1936550243
+
+ +
+ +
+
+class ItemFormat(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for file and disk formats of Finder items.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

APFS

APPLE_PHOTO

APPLE_SHARE

AUDIO

EXFAT

FTP

HIGH_SIERRA

ISO9660

MACOS

MACOS_EXTENDED

MSDOS

NFS

NTFS

PACKET_WRITTEN_UDF

PRO_DOS

QUICKTAKE

SMB

UDF

UFS

UNKNOWN

WEBDAV

XSAN

+
+
+APFS = 1684431216
+
+ +
+
+APPLE_PHOTO = 1684435048
+
+ +
+
+APPLE_SHARE = 1684431219
+
+ +
+
+AUDIO = 1684431221
+
+ +
+
+EXFAT = 1684437094
+
+ +
+
+FTP = 1684432500
+
+ +
+
+HIGH_SIERRA = 1684433011
+
+ +
+
+ISO9660 = 1684420918
+
+ +
+
+MACOS = 1684432998
+
+ +
+
+MACOS_EXTENDED = 1684432939
+
+ +
+
+MSDOS = 1684434291
+
+ +
+
+NFS = 1684434534
+
+ +
+
+NTFS = 1684434548
+
+ +
+
+PACKET_WRITTEN_UDF = 1684435061
+
+ +
+
+PRO_DOS = 1684435058
+
+ +
+
+QUICKTAKE = 1684435316
+
+ +
+
+SMB = 1684435821
+
+ +
+
+UDF = 1684436324
+
+ +
+
+UFS = 1684436326
+
+ +
+
+UNKNOWN = 110390797098047
+
+ +
+
+WEBDAV = 1684436836
+
+ +
+
+XSAN = 1684431203
+
+ +
+ +
+
+class LabelPosition(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for the label position of items in Finder windows.

+

Attributes:

+ + + + + + + + + +

BOTTOM

RIGHT

+
+
+BOTTOM = 1818390388
+
+ +
+
+RIGHT = 1819436916
+
+ +
+ +
+
+class Panel(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for information panels in Finder.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

ADVANCED_PREFERENCES

APPLICATION

BURNING

COMMENTS

CONTENT_INDEX

GENERAL_INFORMATION

GENERAL_PREFERENCES

LABEL_PREFERENCES

LANGUAGES

MEMORY

MORE_INFO

NAME_EXTENSION

PLUGINS

PREVIEW

SHARING

SIDEBAR_PREFERENCES

SIMPLE_HEADER

+
+
+ADVANCED_PREFERENCES = 1885430902
+
+ +
+
+APPLICATION = 1634758252
+
+ +
+
+BURNING = 1651535468
+
+ +
+
+COMMENTS = 1668312684
+
+ +
+
+CONTENT_INDEX = 1667853932
+
+ +
+
+GENERAL_INFORMATION = 1735421548
+
+ +
+
+GENERAL_PREFERENCES = 1885826672
+
+ +
+
+LABEL_PREFERENCES = 1886151280
+
+ +
+
+LANGUAGES = 1886088295
+
+ +
+
+MEMORY = 1836084844
+
+ +
+
+MORE_INFO = 1835626092
+
+ +
+
+NAME_EXTENSION = 1852862060
+
+ +
+
+PLUGINS = 1886089319
+
+ +
+
+PREVIEW = 1987079788
+
+ +
+
+SHARING = 1936748140
+
+ +
+
+SIDEBAR_PREFERENCES = 1886611812
+
+ +
+
+SIMPLE_HEADER = 1936223852
+
+ +
+ +
+
+class PrivacySetting(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for privacy settings on Finder items.

+

Attributes:

+ + + + + + + + + + + + + + + +

NONE

READ_ONLY

READ_WRITE

WRITE_ONLY

+
+
+NONE = 1852796517
+
+ +
+
+READ_ONLY = 1919246692
+
+ +
+
+READ_WRITE = 1919186802
+
+ +
+
+WRITE_ONLY = 2003986804
+
+ +
+ +
+
+class SortDirection(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for sort direction of lists of Finder items.

+

Attributes:

+ + + + + + + + + +

NORMAL

REVERSED

+
+
+NORMAL = 1936618093
+
+ +
+
+REVERSED = 1936881267
+
+ +
+ +
+
+class ViewSetting(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

View options for lists of items in Finder windows.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

COLUMN_VIEW

FLOW_VIEW

GROUP_VIEW

ICON_VIEW

LIST_VIEW

+
+
+COLUMN_VIEW = 1668052599
+
+ +
+
+FLOW_VIEW = 1718384247
+
+ +
+
+GROUP_VIEW = 1718384247
+
+ +
+
+ICON_VIEW = 1768124022
+
+ +
+
+LIST_VIEW = 1819506295
+
+ +
+ +
+
+alias_files(filter: dict = None) XAFinderAliasFileList[source]
+

Returns a list of alias files matching the filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+application_files(filter: dict = None) XAFinderApplicationFileList[source]
+

Returns a list of application files matching the filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+applications_directory() XAFinderFolder[source]
+

Obtains a reference to the system applications directory.

+
+
Returns:
+

A PyXA reference to the system applications directory.

+
+
Return type:
+

XAFinderFolder

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+clipping_windows(filter: dict = None) XAFinderClippingWindowList[source]
+

Returns a list of clipping windows matching the filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+clippings(filter: dict = None) XAFinderClippingList[source]
+

Returns a list of clippings matching the filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+property computer_container: XAFinderComputer
+

The computer directory.

+
+ +
+
+containers(filter: dict = None) XAFinderContainerList[source]
+

Returns a list of containers matching the filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+delete_item(path: Union[str, NSURL]) XAFinderApplication[source]
+

Permanently deletes the file or folder at the specified path.

+
+
+
param path:
+

The path of the file or folder to delete.

+
+
type path:
+

Union[str, AppKit.NSURL]

+
+
return:
+

A reference to the Finder application object.

+
+
rtype:
+

XAFinderApplication

+
+
+
+
+
Example:
+
>>> import PyXA
+>>> app = PyXA.Application("Finder")
+>>> app.delete_item("/Users/exampleuser/Documents/Example.txt")
+
+
+
+

See also

+

delete_items()

+
+
+

New in version 0.0.1.

+
+
+
+
+ +
+
+delete_items(paths: list[Union[str, objc.NSURL]]) XAFinderApplication[source]
+

Permanently deletes the files or folders at the specified paths.

+

This method utilizes fast enumeration methods from Objective-C to improve the performance of deleting large amounts of files. As such, it is preferred over calling delete_item() repeatedly, especially when dealing with large lists of paths.

+
+
Parameters:
+

path (Union[str, AppKit.NSURL]) – The paths of the files and/or folders to delete.

+
+
Returns:
+

A reference to the Finder application object.

+
+
Return type:
+

XAFinderApplication

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Finder")
+>>> items = ["/Users/exampleuser/Documents/Example 1.txt", "/Users/exampleuser/Documents/Example 2.txt"]
+>>> app.delete_items(items)
+
+
+
+

See also

+

delete_items()

+
+
+

Deprecated since version 0.1.2: Use delete_item() instead.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property desktop: XAFinderDesktop
+

The user’s desktop.

+
+ +
+
+property desktop_picture: XAFinderFile
+

The desktop picture of the main monitor.

+
+ +
+
+directory(path: Union[str, NSURL])[source]
+
+

Deprecated since version 0.1.1.

+
+

Use the folders() method with a filter instead.

+
+ +
+
+disks(filter: dict = None) XAFinderDiskList[source]
+

Returns a list of disks matching the filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+document_files(filter: dict = None) XAFinderDocumentFileList[source]
+

Returns a list of document files matching the filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+documents_directory() XAFinderFolder[source]
+

Obtains a reference to the current user’s documents directory.

+
+
Returns:
+

A PyXA reference to the user’s documents directory.

+
+
Return type:
+

XAFinderFolder

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+downloads_directory() XAFinderFolder[source]
+

Obtains a reference to the current user’s downloads directory.

+
+
Returns:
+

A PyXA reference to the user’s downloads directory.

+
+
Return type:
+

XAFinderFolder

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+duplicate_item(path: str) XAFinderApplication[source]
+

Duplicates the specified file or folder in its containing folder.

+
+

The duplicated item will have the name of the original with “ 2” added to the end.

+
+
param path:
+

The path of the file or folder to duplicate.

+
+
type path:
+

str

+
+
return:
+

A reference to the Finder application object.

+
+
rtype:
+

XAFinderApplication

+
+
+
+
+
Example:
+
>>> import PyXA
+>>> app = PyXA.Application("Finder")
+>>> app.duplicate_item("/Users/exampleuser/Documents/Example.txt")
+
+
+
+

See also

+

duplicate_items()

+
+
+

New in version 0.0.1.

+
+
+
+
+ +
+
+duplicate_items(paths: list[str]) XAFinderApplication[source]
+

Duplicates the specified files or folders in their containing folder.

+

The duplicated items will have the name of the original with “ 2” added to the end. This method utilizes fast enumeration methods from Objective-C to improve the performance of duplicating large amounts of files. As such, it is preferred over calling duplicate_item() repeatedly, especially when dealing with large lists of paths.

+
+
Parameters:
+

path (str) – The paths of the files and/or folders to duplicate.

+
+
Returns:
+

A reference to the Finder application object.

+
+
Return type:
+

XAFinderApplication

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Finder")
+>>> items = ["/Users/exampleuser/Documents/Example 1.txt", "/Users/exampleuser/Documents/Example 2.txt"]
+>>> app.duplicate_items(items)
+
+
+
+

See also

+

duplicate_item()

+
+
+

Deprecated since version 0.1.2: Use duplicate_item() instead.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+empty_trash() XAFinderApplication[source]
+

Empties the trash.

+
+
+
return:
+

A reference to the Finder application object.

+
+
rtype:
+

XAFinderApplication

+
+
+
+
+
Example:
+
>>> import PyXA
+>>> app = PyXA.Application("Finder")
+>>> app.empty_trash()
+
+
+
+

New in version 0.0.1.

+
+
+
+
+ +
+
+files(filter: dict = None) XAFinderFileList[source]
+

Returns a list of files matching the filter.

+
+

New in version 0.0.1.

+
+
+ +
+
+property finder_preferences: XAFinderPreferences
+

Preferences for Finder as a whole.

+
+ +
+
+finder_windows(filter: dict = None) XAFinderFinderWindowList[source]
+

Returns a list of Finder windows matching the filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+folders(filter: dict = None) XAFinderFolderList[source]
+

Returns a list of folders matching the filter.

+
+

New in version 0.0.1.

+
+
+ +
+
+property frontmost: bool
+

Whether Finder is the active application.

+
+ +
+
+get_labels() list[str][source]
+

Gets the list of file labels.

+
+
Returns:
+

The list of file labels.

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property home: XAFinderFolder
+

The home directory.

+
+ +
+
+home_directory() XAFinderFolder[source]
+

Obtains a reference to the current user’s home directory.

+
+
Returns:
+

A PyXA reference to the user’s home directory.

+
+
Return type:
+

XAFinderFolder

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property insertion_location: XAFinderFolder
+

The container in which a new folder would be created in by default in the frontmost window.

+
+ +
+
+internet_location_files(filter: dict = None) XAFinderInternetLocationFileList[source]
+

Returns a list of internet location files matching the filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+items(filter: dict = None) XAFinderItemList[source]
+

Returns a list of items matching the filter.

+
+

New in version 0.0.1.

+
+
+ +
+
+movies_directory() XAFinderFolder[source]
+

Obtains a reference to the current user’s movies directory.

+
+
Returns:
+

A PyXA reference to the user’s movies directory.

+
+
Return type:
+

XAFinderFolder

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+music_directory() XAFinderFolder[source]
+

Obtains a reference to the current user’s music directory.

+
+
Returns:
+

A PyXA reference to the user’s music directory.

+
+
Return type:
+

XAFinderFolder

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+packages(filter: dict = None) XAFinderPackageList[source]
+

Returns a list of packages matching the filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+pictures_directory() XAFinderFolder[source]
+

Obtains a reference to the current user’s pictures directory.

+
+
Returns:
+

A PyXA reference to the user’s pictures directory.

+
+
Return type:
+

XAFinderFolder

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property product_version: str
+

The system software version.

+
+ +
+
+public_directory() XAFinderFolder[source]
+

Obtains a reference to the public directory.

+
+
Returns:
+

A PyXA reference to the public directory.

+
+
Return type:
+

XAFinderFolder

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+recycle_item(path: Union[str, NSURL]) XAFinderApplication[source]
+

Moves the file or folder at the specified path to the trash.

+
+
+
param path:
+

The path of the file or folder to recycle.

+
+
type path:
+

Union[str, AppKit.NSURL]

+
+
return:
+

A reference to the Finder application object.

+
+
rtype:
+

XAFinderApplication

+
+
+
+
+
Example:
+
>>> import PyXA
+>>> app = PyXA.Application("Finder")
+>>> app.recycle_item("/Users/exampleuser/Documents/Example.txt")
+
+
+
+

See also

+

recycle_items()

+
+
+

New in version 0.0.1.

+
+
+
+
+ +
+
+recycle_items(paths: list[Union[str, objc.NSURL]]) XAFinderApplication[source]
+

Moves the files or folders at the specified paths to the trash.

+

This method utilizes fast enumeration methods from Objective-C to improve the performance of recycling large amounts of files. As such, it is preferred over calling recycle_item() repeatedly, especially when dealing with large lists of paths.

+
+
Parameters:
+

path (list[Union[str, AppKit.NSURL]]) – The paths of the file and/or folders to recycle.

+
+
Returns:
+

A reference to the Finder application object.

+
+
Return type:
+

XAFinderApplication

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Finder")
+>>> items = ["/Users/exampleuser/Documents/Example 1.txt", "/Users/exampleuser/Documents/Example 2.txt"]
+>>> app.recycle_items(items)
+
+
+
+

See also

+

recycle_item()

+
+
+

Deprecated since version 0.1.2: Use recycle_item() instead.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+search(query: str) XAFinderApplication[source]
+

Opens a Finder search window and searches for the specified term.

+
+
Parameters:
+

query (str) – The term to search.

+
+
Returns:
+

A reference to the Finder application object.

+
+
Return type:
+

XAFinderApplication

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+select_item(path: str) XAFinderApplication[source]
+

Selects the file or folder at the specified path.

+

This opens a new tab of Finder unless the current tab is the parent folder of the provided path and no item is currently selected.

+
+
Parameters:
+

path (str) – The path of the file or folder to select.

+
+
Returns:
+

A reference to the Finder application object.

+
+
Return type:
+

XAFinderApplication

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Finder")
+>>> app.select_item("/Users/exampleuser/Documents/Example.txt")
+
+
+
+

See also

+

select_items()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+select_items(paths: list[str]) XAFinderApplication[source]
+

Selects the files or folders at the specified paths.

+

This opens a new tab of Finder for each different parent folder in the list of paths to select. This method utilizes fast specialized methods from Objective-C to improve the performance of selecting large amounts of files. As such, when dealing with multiple file paths, this method should always be used instead of calling select_item() repeatedly.

+
+
Parameters:
+

path – The paths to select.

+
+
Returns:
+

A reference to the Finder application object.

+
+
Return type:
+

XAFinderApplication

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Finder")
+>>> items = ["/Users/exampleuser/Documents/Example 1.txt", "/Users/exampleuser/Documents/Example 2.txt"]
+>>> app.select_items(items)
+
+
+
+

See also

+

select_item()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property selection: XAFinderItemList
+

The currently selected items in Finder.

+
+ +
+
+property startup_disk: XAFinderDisk
+

The startup disk for this system.

+
+ +
+
+temp_directory() XAFinderFolder[source]
+

Obtains a reference to the temporary directory for the current user.

+
+
Returns:
+

A PyXA reference to the user’s temporary directory.

+
+
Return type:
+

XAFinderFolder

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property trash: XAFinderTrash
+

The system Trash.

+
+ +
+
+trash_directory() XAFinderFolder[source]
+

Obtains a reference to the current user’s trash directory.

+
+
Returns:
+

A PyXA reference to the user’s trash directory.

+
+
Return type:
+

XAFinderFolder

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property version: str
+

The version of Finder

+
+ +
+
+property visible: bool
+

Whether Finder is currently visible.

+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderApplicationFile(properties)[source]
+

Bases: XAFinderFile

+

A class for managing and interacting with application files in Finder.app.

+
+

New in version 0.0.3.

+
+

Attributes:

+ + + + + + + + + +

has_scripting_terminology

Whether the process can be scripted.

id

The bundle identifier or creator type of the application.

+
+
+property has_scripting_terminology: bool
+

Whether the process can be scripted.

+
+ +
+
+property id: str
+

The bundle identifier or creator type of the application.

+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderApplicationFileList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAFinderFileList

+

A wrapper around lists of application files that employs fast enumeration techniques.

+

All properties of application files can be called as methods on the wrapped list, returning a list containing each application file’s value for the property.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + +

by_has_scripting_terminology(...)

by_id(id)

has_scripting_terminology()

id()

+
+
+by_has_scripting_terminology(has_scripting_terminology: bool) Optional[XAFinderApplicationFile][source]
+
+ +
+
+by_id(id: str) Optional[XAFinderApplicationFile][source]
+
+ +
+
+has_scripting_terminology() list[bool][source]
+
+ +
+
+id() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderClipping(properties)[source]
+

Bases: XAFinderFile

+

A class for managing and interacting with clippings in Finder.app.

+
+

New in version 0.0.3.

+
+
+ +
+
+class PyXA.apps.Finder.XAFinderClippingList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAFinderFileList

+

A wrapper around lists of clippings that employs fast enumeration techniques.

+

All properties of clippings can be called as methods on the wrapped list, returning a list containing each clipping’s value for the property.

+
+

New in version 0.0.3.

+
+
+ +
+
+class PyXA.apps.Finder.XAFinderClippingWindow(properties)[source]
+

Bases: XAFinderWindow, XASBPrintable

+

A class for managing and interacting with clipping windows in Finder.

+
+

New in version 0.0.3.

+
+
+ +
+
+class PyXA.apps.Finder.XAFinderClippingWindowList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAFinderWindowList

+

A wrapper around lists of clipping windows that employs fast enumeration techniques.

+

All properties of clipping windows can be called as methods on the wrapped list, returning a list containing each window’s value for the property.

+
+

New in version 0.0.3.

+
+
+ +
+
+class PyXA.apps.Finder.XAFinderColumn(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with columns in Finder windows.

+
+

New in version 0.0.3.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

index

The index of the column in the front-to-back ordering within the containing window.

maximum_width

The maximum width allowed for the column in pixels.

minimum_width

The minimum width allowed for the column in pixels.

name

The column name.

sort_direction

The direction which the window is sorted.

visible

Whether the column is visible.

width

The current width of the column in pixels.

+
+
+property index: int
+

The index of the column in the front-to-back ordering within the containing window.

+
+ +
+
+property maximum_width: int
+

The maximum width allowed for the column in pixels.

+
+ +
+
+property minimum_width: int
+

The minimum width allowed for the column in pixels.

+
+ +
+
+property name: ColumnName
+

The column name.

+
+ +
+
+property sort_direction: SortDirection
+

The direction which the window is sorted.

+
+ +
+
+property visible: bool
+

Whether the column is visible.

+
+ +
+
+property width: int
+

The current width of the column in pixels.

+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderColumnList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of Finder columns that employs fast enumeration techniques.

+

All properties of Finder columns can be called as methods on the wrapped list, returning a list containing each columns’s value for the property.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_index(index)

by_maximum_width(maximum_width)

by_minimum_width(minimum_width)

by_name(name)

by_sort_direction(sort_direction)

by_visible(visible)

by_width(width)

index()

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

maximum_width()

minimum_width()

name()

sort_direction()

visible()

width()

+
+
+by_index(index: int) Optional[XAFinderColumn][source]
+
+ +
+
+by_maximum_width(maximum_width: int) Optional[XAFinderColumn][source]
+
+ +
+
+by_minimum_width(minimum_width: int) Optional[XAFinderColumn][source]
+
+ +
+
+by_name(name: str) Optional[XAFinderColumn][source]
+
+ +
+
+by_sort_direction(sort_direction: SortDirection) Optional[XAFinderColumn][source]
+
+ +
+
+by_visible(visible: bool) Optional[XAFinderColumn][source]
+
+ +
+
+by_width(width: int) Optional[XAFinderColumn][source]
+
+ +
+
+index() list[int][source]
+

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

+
+

New in version 0.1.2.

+
+
+ +
+
+maximum_width() list[int][source]
+
+ +
+
+minimum_width() list[int][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+sort_direction() list[PyXA.apps.Finder.XAFinderApplication.SortDirection][source]
+
+ +
+
+visible() list[bool][source]
+
+ +
+
+width() list[int][source]
+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderColumnViewOptions(properties)[source]
+

Bases: XAObject

+

A class representing the column view options of a Finder window.

+
+

New in version 0.0.3.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + +

discloses_preview_pane

Whether the preview pane is disclosed in the column view.

shows_icon

Whether icons are shown in the column view.

shows_icon_preview

Whether icon previews are shown in the column view.

shows_preview_column

Whether the preview column is shown in the column view.

text_size

The size of text in the column view.

+
+
+property discloses_preview_pane: bool
+

Whether the preview pane is disclosed in the column view.

+
+ +
+
+property shows_icon: bool
+

Whether icons are shown in the column view.

+
+ +
+
+property shows_icon_preview: bool
+

Whether icon previews are shown in the column view.

+
+ +
+
+property shows_preview_column: bool
+

Whether the preview column is shown in the column view.

+
+ +
+
+property text_size: int
+

The size of text in the column view.

+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderComputer(properties)[source]
+

Bases: XAFinderItem

+

A class for managing and interacting with the Desktop.

+
+

New in version 0.0.2.

+
+
+ +
+
+class PyXA.apps.Finder.XAFinderContainer(properties)[source]
+

Bases: XAFinderItem

+

A class for managing and interacting with containers in Finder.

+ +
+

New in version 0.0.2.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

alias_files([filter])

Returns a list of alias files matching the filter.

application_files([filter])

Returns a list of application files matching the filter.

clippings([filter])

Returns a list of clippings matching the filter.

containers([filter])

Returns a list of containers matching the filter.

document_files([filter])

Returns a list of document files matching the filter.

files([filter])

Returns a list of files matching the filter.

folders([filter])

Returns a list of folders matching the filter.

internet_location_files([filter])

Returns a list of internet location files matching the filter.

items([filter])

Returns a list of items matching the filter.

packages([filter])

Returns a list of packages matching the filter.

+

Attributes:

+ + + + + + + + + +

container_window

The container window for this folder.

entire_contents

The entire contents of the container, including the contents of its children.

+
+
+alias_files(filter: dict = None) XAFinderAliasFileList[source]
+

Returns a list of alias files matching the filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+application_files(filter: dict = None) XAFinderApplicationFileList[source]
+

Returns a list of application files matching the filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+clippings(filter: dict = None) XAFinderClippingList[source]
+

Returns a list of clippings matching the filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+property container_window
+

The container window for this folder.

+
+ +
+
+containers(filter: dict = None) XAFinderContainerList[source]
+

Returns a list of containers matching the filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+document_files(filter: dict = None) XAFinderDocumentFileList[source]
+

Returns a list of document files matching the filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+property entire_contents
+

The entire contents of the container, including the contents of its children.

+
+ +
+
+files(filter: dict = None) XAFinderFileList[source]
+

Returns a list of files matching the filter.

+
+

New in version 0.0.1.

+
+
+ +
+
+folders(filter: dict = None) XAFinderFolderList[source]
+

Returns a list of folders matching the filter.

+
+

New in version 0.0.1.

+
+
+ +
+
+internet_location_files(filter: dict = None) XAFinderInternetLocationFileList[source]
+

Returns a list of internet location files matching the filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+items(filter: dict = None) XAFinderItemList[source]
+

Returns a list of items matching the filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+packages(filter: dict = None) XAFinderPackageList[source]
+

Returns a list of packages matching the filter.

+
+

New in version 0.0.3.

+
+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderContainerList(properties: dict, filter: Optional[dict] = None, object_class=None)[source]
+

Bases: XAFinderItemList

+

A wrapper around lists of containers that employs fast enumeration techniques.

+

All properties of containers can be called as methods on the wrapped list, returning a list with each container’s value for the property.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

alias_files()

application_files()

by_container_window(container_window)

by_entire_contents(entire_contents)

clippings()

container_window()

containers()

document_files()

entire_contents()

files()

folders()

internet_location_files()

items()

packages()

+
+
+alias_files() XAFinderAliasFileList[source]
+
+ +
+
+application_files() XAFinderApplicationFileList[source]
+
+ +
+
+by_container_window(container_window: XAFinderFinderWindow) Optional[XAFinderContainer][source]
+
+ +
+
+by_entire_contents(entire_contents: XAFinderItemList) Optional[XAFinderContainer][source]
+
+ +
+
+clippings() XAFinderClippingList[source]
+
+ +
+
+container_window() XAFinderFinderWindowList[source]
+
+ +
+
+containers() XAFinderContainerList[source]
+
+ +
+
+document_files() XAFinderDocumentFileList[source]
+
+ +
+
+entire_contents() XAFinderItemList[source]
+
+ +
+
+files() XAFinderFileList[source]
+
+ +
+
+folders() XAFinderFolderList[source]
+
+ +
+
+internet_location_files() XAFinderInternetLocationFileList[source]
+
+ +
+
+items() XAFinderItemList[source]
+
+ +
+
+packages() XAFinderPackageList[source]
+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderDesktop(properties)[source]
+

Bases: XAFinderContainer

+

A class for managing and interacting with the Desktop.

+
+

New in version 0.0.2.

+
+

Attributes:

+ + + + + + +

window

The desktop window.

+
+
+property window: XAFinderDesktopWindow
+

The desktop window.

+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderDesktopWindow(properties)[source]
+

Bases: XAFinderWindow

+

A class representing the containing window around Finder’s desktop element.

+
+

New in version 0.0.3.

+
+
+ +
+
+class PyXA.apps.Finder.XAFinderDisk(properties)[source]
+

Bases: XAFinderContainer

+

A class for managing and interacting with disks in Finder.

+
+

New in version 0.0.2.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

capacity

The total number of bytes on the disk.

ejectable

Whether the disk can be ejected.

format

The format of the disk, e.g.

free_space

The number of free bytes left on the disk.

id

A unique identifier for the disk that is persistent for as long as the disc is connected and Finder is running.

ignore_privileges

Whether to ignore permissions on the disk.

journaling_enabled

Whether the disk does file system journaling.

local_volume

Whether the disk is a local volume vs.

startup

Whether the disk is the boot disk.

+
+
+property capacity: int
+

The total number of bytes on the disk.

+
+ +
+
+property ejectable: bool
+

Whether the disk can be ejected.

+
+ +
+
+property format: ItemFormat
+

The format of the disk, e.g. “APFS format”.

+
+ +
+
+property free_space: int
+

The number of free bytes left on the disk.

+
+ +
+
+property id: int
+

A unique identifier for the disk that is persistent for as long as the disc is connected and Finder is running.

+
+ +
+
+property ignore_privileges: bool
+

Whether to ignore permissions on the disk.

+
+ +
+
+property journaling_enabled: bool
+

Whether the disk does file system journaling.

+
+ +
+
+property local_volume: bool
+

Whether the disk is a local volume vs. a file server.

+
+ +
+
+property startup: bool
+

Whether the disk is the boot disk.

+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderDiskList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAFinderContainerList

+

A wrapper around lists of disks that employs fast enumeration techniques.

+

All properties of disks can be called as methods on the wrapped list, returning a list containing each disk’s value for the property.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_capacity(capacity)

by_ejectable(ejectable)

by_format(format)

by_free_space(free_space)

by_id(id)

by_ignore_privileges(ignore_privileges)

by_journaling_enabled(journaling_enabled)

by_local_volume(local_volume)

by_startup(startup)

capacity()

ejectable()

format()

free_space()

id()

ignore_privileges()

journaling_enabled()

local_volume()

startup()

+
+
+by_capacity(capacity: int) Optional[XAFinderDisk][source]
+
+ +
+
+by_ejectable(ejectable: bool) Optional[XAFinderDisk][source]
+
+ +
+
+by_format(format: ItemFormat) Optional[XAFinderDisk][source]
+
+ +
+
+by_free_space(free_space: int) Optional[XAFinderDisk][source]
+
+ +
+
+by_id(id: int) Optional[XAFinderDisk][source]
+
+ +
+
+by_ignore_privileges(ignore_privileges: bool) Optional[XAFinderDisk][source]
+
+ +
+
+by_journaling_enabled(journaling_enabled: bool) Optional[XAFinderDisk][source]
+
+ +
+
+by_local_volume(local_volume: bool) Optional[XAFinderDisk][source]
+
+ +
+
+by_startup(startup: bool) Optional[XAFinderDisk][source]
+
+ +
+
+capacity() list[int][source]
+
+ +
+
+ejectable() list[bool][source]
+
+ +
+
+format() list[PyXA.apps.Finder.XAFinderApplication.ItemFormat][source]
+
+ +
+
+free_space() list[int][source]
+
+ +
+
+id() list[int][source]
+
+ +
+
+ignore_privileges() list[bool][source]
+
+ +
+
+journaling_enabled() list[bool][source]
+
+ +
+
+local_volume() list[bool][source]
+
+ +
+
+startup() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderDocumentFile(properties)[source]
+

Bases: XAFinderFile

+

A class for managing and interacting with document files in Finder.app.

+
+

New in version 0.0.3.

+
+
+ +
+
+class PyXA.apps.Finder.XAFinderDocumentFileList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAFinderFileList

+

A wrapper around lists of document files that employs fast enumeration techniques.

+

All properties of document files can be called as methods on the wrapped list, returning a list containing each document file’s value for the property.

+
+

New in version 0.0.3.

+
+
+ +
+
+class PyXA.apps.Finder.XAFinderFile(properties)[source]
+

Bases: XAFinderItem, XASBPrintable

+

A class for managing and interacting with files in Finder.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + +

creator_type

The OSType of the application that created the file.

file_type

The OSType of the file and the data within it.

product_version

The version of the application the file was created with.

stationery

Whether the file is a stationery pad.

version

The version of the file.

+
+
+property creator_type: int
+

The OSType of the application that created the file.

+
+ +
+
+property file_type: int
+

The OSType of the file and the data within it.

+
+ +
+
+property product_version: str
+

The version of the application the file was created with.

+
+ +
+
+property stationery: bool
+

Whether the file is a stationery pad.

+
+ +
+
+property version: str
+

The version of the file.

+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderFileList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAFinderItemList

+

A wrapper around lists of files that employs fast enumeration techniques.

+

All properties of files can be called as methods on the wrapped list, returning a list containing each file’s value for the property.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_creator_type(creator_type)

by_file_type(file_type)

by_product_version(product_version)

by_stationery(stationery)

by_version(version)

creator_type()

file_type()

product_version()

stationery()

version()

+
+
+by_creator_type(creator_type: int) Optional[XAFinderFile][source]
+
+ +
+
+by_file_type(file_type: int) Optional[XAFinderFile][source]
+
+ +
+
+by_product_version(product_version: str) Optional[XAFinderFile][source]
+
+ +
+
+by_stationery(stationery: bool) Optional[XAFinderFile][source]
+
+ +
+
+by_version(version: str) Optional[XAFinderFile][source]
+
+ +
+
+creator_type() list[int][source]
+
+ +
+
+file_type() list[int][source]
+
+ +
+
+product_version() list[str][source]
+
+ +
+
+stationery() list[bool][source]
+
+ +
+
+version() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderFinderWindow(properties)[source]
+

Bases: XAFinderWindow

+

A class for managing and interacting with internal windows within Finder.app.

+
+

New in version 0.0.3.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

column_view_options

The column view options for the container window.

current_view

The current view for the container window.

icon_view_options

The icon view options for the container window.

list_view_options

The list view options for the container window.

pathbar_visible

Whether the window's path bar is visible.

sidebar_width

The width of the sidebar in pixels.

statusbar_visible

Whether the window's status bar is visible.

target

The container at which this file viewer is targeted.

toolbar_visible

Whether the window's toolbar is visible.

+
+
+property column_view_options: XAFinderColumnViewOptions
+

The column view options for the container window.

+
+ +
+
+property current_view: ViewSetting
+

The current view for the container window.

+
+ +
+
+property icon_view_options: XAFinderIconViewOptions
+

The icon view options for the container window.

+
+ +
+
+property list_view_options: XAFinderListViewOptions
+

The list view options for the container window.

+
+ +
+
+property pathbar_visible: bool
+

Whether the window’s path bar is visible.

+
+ +
+
+property sidebar_width: int
+

The width of the sidebar in pixels.

+
+ +
+
+property statusbar_visible: bool
+

Whether the window’s status bar is visible.

+
+ +
+
+property target: XAFinderContainer
+

The container at which this file viewer is targeted.

+
+ +
+
+property toolbar_visible: bool
+

Whether the window’s toolbar is visible.

+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderFinderWindowList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAFinderWindowList

+

A wrapper around lists of Finder internal windows (such as preference and information windows) that employs fast enumeration techniques.

+

All properties of the windows can be called as methods on the wrapped list, returning a list containing each windows’s value for the property.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_column_view_options(column_view_options)

by_current_view(current_view)

by_icon_view_options(icon_view_options)

by_list_view_options(list_view_options)

by_pathbar_visible(pathbar_visible)

by_sidebar_width(sidebar_width)

by_statusbar_visible(statusbar_visible)

by_target(target)

by_toolbar_visible(toolbar_visible)

column_view_options()

current_view()

icon_view_options()

list_view_options()

pathbar_visible()

sidebar_width()

statusbar_visible()

target()

toolbar_visible()

+
+
+by_column_view_options(column_view_options: XAFinderColumnViewOptions) Optional[XAFinderFinderWindow][source]
+
+ +
+
+by_current_view(current_view: ViewSetting) Optional[XAFinderFinderWindow][source]
+
+ +
+
+by_icon_view_options(icon_view_options: XAFinderIconViewOptions) Optional[XAFinderFinderWindow][source]
+
+ +
+
+by_list_view_options(list_view_options: XAFinderListViewOptions) Optional[XAFinderFinderWindow][source]
+
+ +
+
+by_pathbar_visible(pathbar_visible: bool) Optional[XAFinderFinderWindow][source]
+
+ +
+
+by_sidebar_width(sidebar_width: int) Optional[XAFinderFinderWindow][source]
+
+ +
+
+by_statusbar_visible(statusbar_visible: bool) Optional[XAFinderFinderWindow][source]
+
+ +
+
+by_target(target: XAFinderContainer) Optional[XAFinderFinderWindow][source]
+
+ +
+
+by_toolbar_visible(toolbar_visible: bool) Optional[XAFinderFinderWindow][source]
+
+ +
+
+column_view_options() list[PyXA.apps.Finder.XAFinderColumnViewOptions][source]
+
+ +
+
+current_view() list[PyXA.apps.Finder.XAFinderApplication.ViewSetting][source]
+
+ +
+
+icon_view_options() list[PyXA.apps.Finder.XAFinderIconViewOptions][source]
+
+ +
+
+list_view_options() list[PyXA.apps.Finder.XAFinderListViewOptions][source]
+
+ +
+
+pathbar_visible() list[bool][source]
+
+ +
+
+sidebar_width() list[int][source]
+
+ +
+
+statusbar_visible() list[bool][source]
+
+ +
+
+target() XAFinderContainerList[source]
+
+ +
+
+toolbar_visible() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderFolder(properties)[source]
+

Bases: XAFinderContainer

+

A class for managing and interacting with folders in Finder.

+
+

New in version 0.0.1.

+
+
+ +
+
+class PyXA.apps.Finder.XAFinderFolderList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAFinderContainerList

+

A wrapper around lists of folders that employs fast enumeration techniques.

+
+

New in version 0.0.3.

+
+
+ +
+
+class PyXA.apps.Finder.XAFinderIconViewOptions(properties)[source]
+

Bases: XAObject

+

A class representing the icon view options of a Finder window.

+
+

New in version 0.0.3.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

arrangement

The arrangement setting of icons in icon view.

background_color

The background color of the icon view.

background_picture

The background picture of the icon view.

icon_size

The size of icons in icon view.

label_position

The position of a label around an icon in icon view.

shows_icon_preview

Whether a preview of the icon is shown in the window.

shows_item_info

Whether additional item information is shown in the window.

text_size

The size of text in icon view.

+
+
+property arrangement: Arrangement
+

The arrangement setting of icons in icon view.

+
+ +
+
+property background_color: XAColor
+

The background color of the icon view.

+
+ +
+
+property background_picture: XAFinderFile
+

The background picture of the icon view.

+
+ +
+
+property icon_size: int
+

The size of icons in icon view.

+
+ +
+
+property label_position: LabelPosition
+

The position of a label around an icon in icon view.

+
+ +
+
+property shows_icon_preview: bool
+

Whether a preview of the icon is shown in the window.

+
+ +
+
+property shows_item_info: bool
+

Whether additional item information is shown in the window.

+
+ +
+
+property text_size: int
+

The size of text in icon view.

+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderInformationWindow(properties)[source]
+

Bases: XAFinderWindow

+

A class for interacting with information windows in Finder.app.

+
+

New in version 0.0.3.

+
+

Attributes:

+ + + + + + + + + +

current_panel

The current panel in the information window.

item

The item from which this window was opened.

+
+
+property current_panel: Panel
+

The current panel in the information window.

+
+ +
+
+property item: XAFinderItem
+

The item from which this window was opened.

+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderInformationWindowList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAFinderWindowList

+

A wrapper around lists of info windows that employs fast enumeration techniques.

+

All properties of info windows can be called as methods on the wrapped list, returning a list containing each window’s value for the property.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + +

by_current_panel(current_panel)

by_item(item)

current_panel()

item()

+
+
+by_current_panel(current_panel: Panel) Optional[XAFinderInformationWindow][source]
+
+ +
+
+by_item(item: XAFinderItem) Optional[XAFinderInformationWindow][source]
+
+ +
+
+current_panel() list[PyXA.apps.Finder.XAFinderApplication.Panel][source]
+
+ +
+
+item() XAFinderItemList[source]
+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderInternetLocationFile(properties)[source]
+

Bases: XAFinderFile

+

A class for managing and interacting with internet location files in Finder.app.

+
+

New in version 0.0.3.

+
+

Attributes:

+ + + + + + +

location

The internet location.

+
+
+property location: str
+

The internet location.

+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderInternetLocationFileList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAFinderFileList

+

A wrapper around lists of internet location files that employs fast enumeration techniques.

+

All properties of internet location files can be called as methods on the wrapped list, returning a list containing each file’s value for the property.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + +

by_location(location)

location()

+
+
+by_location(location: str) Optional[XAFinderInternetLocationFile][source]
+
+ +
+
+location() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderItem(properties)[source]
+

Bases: XAObject, XASelectable, XADeletable, XAClipboardCodable

+

A generic class with methods common to the various item classes of Finder.

+ +
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

bounds

The bounding rectangle of an item.

comment

The user-specified comment on the item.

container

The container of the item.

creation_date

The date the item was created.

description

The description of the item.

desktop_position

The position of an item on the desktop.

disk

The disk on which the item is stored.

displayed_name

The user-visible name of the item.

everyone_privileges

The privilege level of everyone else, e.g.

extension_hidden

Whether the file extension is hidden.

group

The name of the group that has access to the item.

group_privileges

The privilege level of the group, e.g.

icon

The icon bitmap of the item's icon.

index

The index within the containing folder/disk.

information_window

The information window for this item.

kind

The kind of the item, e.g.

label_index

The label assigned to the item.

locked

Whether the file is locked.

modification_date

The date the item was last modified.

name

The name of the item.

name_extension

The file extension of the item.

owner

The name of the user that owns the item.

owner_privileges

The privilege level of the owner, e.g.

physical_size

The actual disk space used by the item.

position

The position of the item within the parent window.

properties

Every property of an item.

size

The logical size of the item.

url

The URL of the item.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

copy()

Copies the item to the clipboard.

exists()

Checks whether the item exists on the disk or not.

get_clipboard_representation()

Gets a clipboard-codable representation of the item.

move_to(new_path[, overwrite])

Moves the item to the specified path.

open()

Opens the item in its default application.

reveal()

Reveals the item in the frontmost Finder window.

+
+
+property bounds: XARectangle
+

The bounding rectangle of an item.

+
+ +
+
+property comment: str
+

The user-specified comment on the item.

+
+ +
+
+property container: XAFinderContainer
+

The container of the item.

+
+ +
+
+copy() XAFinderItem[source]
+

Copies the item to the clipboard.

+
+
Returns:
+

A reference to the Finder item that called this method.

+
+
Return type:
+

XAFinderItem

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property creation_date: datetime
+

The date the item was created.

+
+ +
+
+property description: str
+

The description of the item.

+
+ +
+
+property desktop_position: XAPoint
+

The position of an item on the desktop.

+
+ +
+
+property disk: XAFinderDisk
+

The disk on which the item is stored.

+
+ +
+
+property displayed_name: str
+

The user-visible name of the item.

+
+ +
+
+property everyone_privileges: PrivacySetting
+

The privilege level of everyone else, e.g. “none”.

+
+ +
+
+exists() bool[source]
+

Checks whether the item exists on the disk or not.

+
+
Returns:
+

True if the item exists, false otherwise.

+
+
Return type:
+

bool

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property extension_hidden: bool
+

Whether the file extension is hidden.

+
+ +
+
+get_clipboard_representation() list[Union[str, objc.NSURL]][source]
+

Gets a clipboard-codable representation of the item.

+

When the clipboard content is set to a Finder item, the item’s name and URL are added to the clipboard.

+
+
Returns:
+

The name and URL of the item

+
+
Return type:
+

list[Union[str, AppKit.NSURL]]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property group: str
+

The name of the group that has access to the item.

+
+ +
+
+property group_privileges: PrivacySetting
+

The privilege level of the group, e.g. “write only”.

+
+ +
+
+property icon: XAImage
+

The icon bitmap of the item’s icon.

+
+ +
+
+property index: int
+

The index within the containing folder/disk.

+
+ +
+
+property information_window: XAFinderInformationWindow
+

The information window for this item.

+
+ +
+
+property kind: str
+

The kind of the item, e.g. “Folder” or “File”.

+
+ +
+
+property label_index: int
+

The label assigned to the item.

+
+ +
+
+property locked: bool
+

Whether the file is locked.

+
+ +
+
+property modification_date: datetime
+

The date the item was last modified.

+
+ +
+
+move_to(new_path: Union[str, NSURL], overwrite: bool = False) XAFinderItem[source]
+

Moves the item to the specified path.

+
+
Parameters:
+
    +
  • new_path (Union[str, AppKit.NSURL]) – The path to move the item to.

  • +
  • overwrite (bool, optional) – Whether to overwrite existing files of the same name at the target path, defaults to False

  • +
+
+
Returns:
+

A reference to the Finder item that called this method.

+
+
Return type:
+

XAFinderItem

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property name: str
+

The name of the item.

+
+ +
+
+property name_extension: str
+

The file extension of the item.

+
+ +
+
+open()[source]
+

Opens the item in its default application.

+
+

New in version 0.0.2.

+
+
+ +
+
+property owner: str
+

The name of the user that owns the item.

+
+ +
+
+property owner_privileges: PrivacySetting
+

The privilege level of the owner, e.g. “read only”.

+
+ +
+
+property physical_size: int
+

The actual disk space used by the item.

+
+ +
+
+property position: XAPoint
+

The position of the item within the parent window.

+
+ +
+
+property properties: dict
+

Every property of an item.

+
+ +
+
+reveal() XAFinderItem[source]
+

Reveals the item in the frontmost Finder window.

+
+
Returns:
+

A reference to the item object

+
+
Return type:
+

XAFinderItem

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+property size: int
+

The logical size of the item.

+
+ +
+
+property url: XAPath
+

The URL of the item.

+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderItemList(properties: dict, filter: Optional[dict] = None, object_class=None)[source]
+

Bases: XAList

+

A wrapper around lists of Finder items that employs fast enumeration techniques.

+

All properties of Finder items can be called as methods on the wrapped list, returning a list containing each item’s value for the property.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

bounds()

by_bounds(bounds)

by_comment(comment)

by_container(container)

by_creation_date(creation_date)

by_description(description)

by_desktop_position(desktop_position)

by_disk(disk)

by_displayed_name(displayed_name)

by_everyone_privileges(everyone_privileges)

by_extension_hidden(extension_hidden)

by_group(group)

by_group_privileges(group_privileges)

by_icon(icon)

by_index(index)

by_information_window(information_window)

by_kind(kind)

by_label_index(label_index)

by_locked(locked)

by_modification_date(modification_date)

by_name(name)

by_name_extension(name_extension)

by_owner(owner)

by_owner_privileges(owner_privileges)

by_physical_size(physical_size)

by_position(position)

by_size(size)

by_url(url)

comment()

container()

creation_date()

description()

desktop_position()

disk()

displayed_name()

everyone_privileges()

extension_hidden()

get_clipboard_representation()

Gets a clipboard-codable representation of each item in the list.

group()

group_privileges()

icon()

index()

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

information_window()

kind()

label_index()

locked()

modification_date()

name()

name_extension()

owner()

owner_privileges()

physical_size()

position()

size()

url()

+
+
+bounds() list[tuple[tuple[int, int], tuple[int, int]]][source]
+
+ +
+
+by_bounds(bounds: tuple[tuple[int, int], tuple[int, int]]) Optional[XAFinderItem][source]
+
+ +
+
+by_comment(comment: str) Optional[XAFinderItem][source]
+
+ +
+
+by_container(container: XAFinderContainer) Optional[XAFinderItem][source]
+
+ +
+
+by_creation_date(creation_date: datetime) Optional[XAFinderItem][source]
+
+ +
+
+by_description(description: str) Optional[XAFinderItem][source]
+
+ +
+
+by_desktop_position(desktop_position: tuple[int, int]) Optional[XAFinderItem][source]
+
+ +
+
+by_disk(disk: XAFinderDisk) Optional[XAFinderItem][source]
+
+ +
+
+by_displayed_name(displayed_name: str) Optional[XAFinderItem][source]
+
+ +
+
+by_everyone_privileges(everyone_privileges: PrivacySetting) Optional[XAFinderItem][source]
+
+ +
+
+by_extension_hidden(extension_hidden: bool) Optional[XAFinderItem][source]
+
+ +
+
+by_group(group: str) Optional[XAFinderItem][source]
+
+ +
+
+by_group_privileges(group_privileges: PrivacySetting) Optional[XAFinderItem][source]
+
+ +
+
+by_icon(icon: XAImage) Optional[XAFinderItem][source]
+
+ +
+
+by_index(index: int) Optional[XAFinderItem][source]
+
+ +
+
+by_information_window(information_window: XAFinderInformationWindow) Optional[XAFinderItem][source]
+
+ +
+
+by_kind(kind: str) Optional[XAFinderItem][source]
+
+ +
+
+by_label_index(label_index: index) Optional[XAFinderItem][source]
+
+ +
+
+by_locked(locked: bool) Optional[XAFinderItem][source]
+
+ +
+
+by_modification_date(modification_date: datetime) Optional[XAFinderItem][source]
+
+ +
+
+by_name(name: str) Optional[XAFinderItem][source]
+
+ +
+
+by_name_extension(name_extension: str) Optional[XAFinderItem][source]
+
+ +
+
+by_owner(owner: str) Optional[XAFinderItem][source]
+
+ +
+
+by_owner_privileges(owner_privileges: PrivacySetting) Optional[XAFinderItem][source]
+
+ +
+
+by_physical_size(physical_size: int) Optional[XAFinderItem][source]
+
+ +
+
+by_position(position: tuple[int, int]) Optional[XAFinderItem][source]
+
+ +
+
+by_size(size: int) Optional[XAFinderItem][source]
+
+ +
+
+by_url(url: Union[str, XAPath]) Optional[XAFinderItem][source]
+
+ +
+
+comment() list[str][source]
+
+ +
+
+container() XAFinderContainerList[source]
+
+ +
+
+creation_date() list[datetime.datetime][source]
+
+ +
+
+description() list[str][source]
+
+ +
+
+desktop_position() list[tuple[int, int]][source]
+
+ +
+
+disk() XAFinderDiskList[source]
+
+ +
+
+displayed_name() list[str][source]
+
+ +
+
+everyone_privileges() list[PyXA.apps.Finder.XAFinderApplication.PrivacySetting][source]
+
+ +
+
+extension_hidden() list[bool][source]
+
+ +
+
+get_clipboard_representation() list[Union[str, objc.NSURL]][source]
+

Gets a clipboard-codable representation of each item in the list.

+

When the clipboard content is set to a list of Finder items, each item’s name and URL are added to the clipboard.

+
+
Returns:
+

The name and URL of each item in the list

+
+
Return type:
+

list[Union[str, AppKit.NSURL]]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+group() list[str][source]
+
+ +
+
+group_privileges() list[PyXA.apps.Finder.XAFinderApplication.PrivacySetting][source]
+
+ +
+
+icon() XAImageList[source]
+
+ +
+
+index() list[int][source]
+

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

+
+

New in version 0.1.2.

+
+
+ +
+
+information_window() XAFinderInformationWindowList[source]
+
+ +
+
+kind() list[str][source]
+
+ +
+
+label_index() list[int][source]
+
+ +
+
+locked() list[bool][source]
+
+ +
+
+modification_date() list[datetime.datetime][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+name_extension() list[str][source]
+
+ +
+
+owner() list[str][source]
+
+ +
+
+owner_privileges() list[PyXA.apps.Finder.XAFinderApplication.PrivacySetting][source]
+
+ +
+
+physical_size() list[int][source]
+
+ +
+
+position() list[tuple[int, int]][source]
+
+ +
+
+size() list[int][source]
+
+ +
+
+url() list[PyXA.XABase.XAPath][source]
+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderListViewOptions(properties)[source]
+

Bases: XAObject

+

A class representing the list view options in a Finder window.

+
+

New in version 0.0.3.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

calculates_folder_sizes

Whether folder sizes are calculated and displayed in the window.

icon_size

The size of icons in the window.

shows_icon_preview

Whether a preview of the item is shown in the window.

sort_column

The column that the list view is sorted on.

text_size

The size of text in the window.

uses_relative_dates

Whether relative dates are shown in the window.

+

Methods:

+ + + + + + +

columns([filter])

Returns a list of columns matching the filter.

+
+
+property calculates_folder_sizes: bool
+

Whether folder sizes are calculated and displayed in the window.

+
+ +
+
+columns(filter: dict = None) XAFinderColumnList[source]
+

Returns a list of columns matching the filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+property icon_size: IconSize
+

The size of icons in the window.

+
+ +
+
+property shows_icon_preview: bool
+

Whether a preview of the item is shown in the window.

+
+ +
+
+property sort_column: XAFinderColumn
+

The column that the list view is sorted on.

+
+ +
+
+property text_size: int
+

The size of text in the window.

+
+ +
+
+property uses_relative_dates: bool
+

Whether relative dates are shown in the window.

+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderPackage(properties)[source]
+

Bases: XAFinderItem

+

A class for managing and interacting with packages in Finder.app.

+
+

New in version 0.0.3.

+
+
+ +
+
+class PyXA.apps.Finder.XAFinderPackageList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAFinderItemList

+

A wrapper around lists of packages that employs fast enumeration techniques.

+

All properties of packages can be called as methods on the wrapped list, returning a list containing each package’s value for the property.

+
+

New in version 0.0.3.

+
+
+ +
+
+class PyXA.apps.Finder.XAFinderPreferences(properties)[source]
+

Bases: XAFinderItem, XASBPrintable

+

A class for managing general preferences of Finder.app.

+
+

New in version 0.0.3.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

all_name_extensions_showing

Whether all name extensions are shown regardless of the "extension hidden" setting.

column_view_options

The default column view options.

delay_before_springing

The delay, in seconds, before springing open folders.

desktop_shows_connected_servers

Whether connected servers appear on the desktop.

desktop_shows_external_hard_disks

Whether external hard disks appear on the desktop.

desktop_shows_hard_disks

Whether hard drives appear on the desktop.

desktop_shows_removable_media

Whether CDs, DVDs, and iPods appear on the desktop.

folders_open_in_new_tabs

Whether folders open into new tabs.

folders_open_in_new_windows

Whether folders open into new windows.

folders_spring_open

Whether folders spring open after a delay.

icon_view_options

The default icon view options.

list_view_options

The default list view options.

new_window_target

The target location for a newly opened Finder window.

new_windows_open_in_column_view

Whether new Finder windows open in column view.

window

The Finder preferences window.

+
+
+property all_name_extensions_showing: bool
+

Whether all name extensions are shown regardless of the “extension hidden” setting.

+
+ +
+
+property column_view_options: XAFinderColumnViewOptions
+

The default column view options.

+
+ +
+
+property delay_before_springing: bool
+

The delay, in seconds, before springing open folders.

+
+ +
+
+property desktop_shows_connected_servers: bool
+

Whether connected servers appear on the desktop.

+
+ +
+
+property desktop_shows_external_hard_disks: bool
+

Whether external hard disks appear on the desktop.

+
+ +
+
+property desktop_shows_hard_disks: bool
+

Whether hard drives appear on the desktop.

+
+ +
+
+property desktop_shows_removable_media: bool
+

Whether CDs, DVDs, and iPods appear on the desktop.

+
+ +
+
+property folders_open_in_new_tabs: bool
+

Whether folders open into new tabs.

+
+ +
+
+property folders_open_in_new_windows: bool
+

Whether folders open into new windows.

+
+ +
+
+property folders_spring_open: bool
+

Whether folders spring open after a delay.

+
+ +
+
+property icon_view_options: XAFinderIconViewOptions
+

The default icon view options.

+
+ +
+
+property list_view_options: XAFinderListViewOptions
+

The default list view options.

+
+ +
+
+property new_window_target: XAFinderAliasFile
+

The target location for a newly opened Finder window.

+
+ +
+
+property new_windows_open_in_column_view: bool
+

Whether new Finder windows open in column view.

+
+ +
+
+property window: bool
+

The Finder preferences window.

+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderPreferencesWindow(properties)[source]
+

Bases: XAFinderWindow

+

A class for managing and interacting with preference windows in Finder.app.

+
+

New in version 0.0.3.

+
+

Attributes:

+ + + + + + +

current_panel

The current panel in the Finder preferences window.

+
+
+property current_panel: Panel
+

The current panel in the Finder preferences window.

+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderTrash(properties)[source]
+

Bases: XAFinderContainer

+

A class for managing and interacting with Finder’s Trash.

+
+

New in version 0.0.2.

+
+

Attributes:

+ + + + + + +

warns_before_emptying

Whether to display a dialog before emptying the Trash.

+
+
+property warns_before_emptying: bool
+

Whether to display a dialog before emptying the Trash.

+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderWindow(properties)[source]
+

Bases: XASBWindow, XASBPrintable

+

A class for managing and interacting with windows of Finder.app.

+
+
Example 1:
+

Setting the bounds of a Finder window

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Finder")
+>>> window = app.windows()[0]
+>>> lock = False
+>>> (old_w, old_h) = (0,0)
+>>> while True:
+>>>     if window.position.y < 50 and lock is False:
+>>>         # Increase height of window when user drags it to the top
+>>>         (old_w, old_h) = window.bounds.size
+>>>         (x, y) = window.position
+>>>         window.set_property("bounds", ((x, y), (old_w, 2000)))
+>>>         lock = True
+>>>     if lock is True and window.position.y > 55:
+>>>         # Return to original size if user moves window down
+>>>         (x, y) = window.position
+>>>         window.set_property("bounds", ((x, y), (old_w, old_h)))
+>>>         lock = False
+
+
+
+

New in version 0.0.3.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

collapsed

Whether the window is collapsed.

floating

Whether the window floats.

modal

Whether the window is modal.

position

The upper left position of the window.

properties

Every property of a Finder window.

titled

Whether the window has a title bar.

+
+
+property collapsed: bool
+

Whether the window is collapsed.

+
+ +
+
+property floating: bool
+

Whether the window floats.

+
+ +
+
+property modal: bool
+

Whether the window is modal.

+
+ +
+
+property position: XAPoint
+

The upper left position of the window.

+
+ +
+
+property properties: dict
+

Every property of a Finder window.

+
+ +
+
+property titled: bool
+

Whether the window has a title bar.

+
+ +
+ +
+
+class PyXA.apps.Finder.XAFinderWindowList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XASBWindowList

+

A wrapper around lists of Finder windows that employs fast enumeration techniques.

+

All properties of Finder windows can be called as methods on the wrapped list, returning a list containing each window’s value for the property.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_collapsed(collapsed)

by_floating(floating)

by_modal(modal)

by_position(position)

by_properties(properties)

by_titled(titled)

collapsed()

floating()

modal()

position()

properties()

titled()

+
+
+by_collapsed(collapsed: bool) Optional[XAFinderWindow][source]
+
+ +
+
+by_floating(floating: bool) Optional[XAFinderWindow][source]
+
+ +
+
+by_modal(modal: bool) Optional[XAFinderWindow][source]
+
+ +
+
+by_position(position: tuple[int, int]) Optional[XAFinderWindow][source]
+
+ +
+
+by_properties(properties: dict) Optional[XAFinderWindow][source]
+
+ +
+
+by_titled(titled: bool) Optional[XAFinderWindow][source]
+
+ +
+
+collapsed() list[bool][source]
+
+ +
+
+floating() list[bool][source]
+
+ +
+
+modal() list[bool][source]
+
+ +
+
+position() list[PyXA.XATypes.XAPoint][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+
+titled() list[bool][source]
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/flow.html b/docs/reference/apps/flow.html new file mode 100644 index 0000000..264081a --- /dev/null +++ b/docs/reference/apps/flow.html @@ -0,0 +1,341 @@ + + + + + + + Flow Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Flow Module Reference

+
+

New in version 0.1.0.

+
+

Control Flow using JXA-like syntax.

+

Classes:

+ + + + + + +

XAFlowApplication(properties)

A class for managing and interacting with Flow.app.

+
+
+class PyXA.apps.Flow.XAFlowApplication(properties)[source]
+

Bases: XASBApplication

+

A class for managing and interacting with Flow.app.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

get_phase()

Gets the current phase (e.g.

get_time()

Gets the remaining time of the current session.

hide()

Hides the Flow app window.

previous()

Reloads the current or previous session.

reset()

Resets the session progress.

show()

Shows the Flow app window.

skip()

Skips the current session.

start()

Starts or resumes the current session.

stop()

Stops the current session.

+
+
+get_phase() str[source]
+

Gets the current phase (e.g. Flow or Break)

+
+
Returns:
+

The name of the current session

+
+
Return type:
+

str

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+get_time() timedelta[source]
+

Gets the remaining time of the current session.

+
+
Returns:
+

The remaining time of the current session

+
+
Return type:
+

timedelta

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+hide() str[source]
+

Hides the Flow app window.

+
+
Returns:
+

The name of the current session

+
+
Return type:
+

str

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+previous() str[source]
+

Reloads the current or previous session.

+
+
Returns:
+

The name of the next pending session

+
+
Return type:
+

str

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+reset() str[source]
+

Resets the session progress.

+
+
Returns:
+

The name of the next pending session

+
+
Return type:
+

str

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+show() str[source]
+

Shows the Flow app window.

+
+
Returns:
+

The name of the current session

+
+
Return type:
+

str

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+skip() str[source]
+

Skips the current session.

+
+
Returns:
+

The name of the next pending session.

+
+
Return type:
+

str

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+start() str[source]
+

Starts or resumes the current session.

+
+
Returns:
+

The name of the current session

+
+
Return type:
+

str

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+stop() str[source]
+

Stops the current session.

+
+
Returns:
+

The name of the stopped session

+
+
Return type:
+

str

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/fontbook.html b/docs/reference/apps/fontbook.html new file mode 100644 index 0000000..77efd63 --- /dev/null +++ b/docs/reference/apps/fontbook.html @@ -0,0 +1,1891 @@ + + + + + + + FontBook Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

FontBook Module Reference

+
+

New in version 0.0.6.

+
+

Control the macOS FontBook application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XAFontBookApplication(properties)

A class for managing and interacting with Font Book.app.

XAFontBookDocument(properties)

A class for managing and interacting with documents in Font Book.app.

XAFontBookDocumentList(properties[, filter])

A wrapper around lists of Font Book documents that employs fast enumeration techniques.

XAFontBookFontBookAllFontsLibraryObject(...)

A class for managing and interacting with the all fonts library object in Font Book.app.

XAFontBookFontCollection(properties)

A class for managing and interacting with font collections in Font Book.app.

XAFontBookFontCollectionList(properties[, ...])

A wrapper around lists of Font Book font containers that employs fast enumeration techniques.

XAFontBookFontContainer(properties)

A class for managing and interacting with font containers in Font Book.app.

XAFontBookFontContainerList(properties[, filter])

A wrapper around lists of Font Book font containers that employs fast enumeration techniques.

XAFontBookFontDomain(properties)

A class for managing and interacting with font domains in Font Book.app.

XAFontBookFontDomainList(properties[, filter])

A wrapper around lists of Font Book font domains that employs fast enumeration techniques.

XAFontBookFontFamily(properties)

A class for managing and interacting with font families in Font Book.app.

XAFontBookFontFamilyList(properties[, filter])

A wrapper around lists of Font Book font families that employs fast enumeration techniques.

XAFontBookFontLibrary(properties)

A class for managing and interacting with font libraries in Font Book.app.

XAFontBookFontLibraryList(properties[, filter])

A wrapper around lists of Font Book font libraries that employs fast enumeration techniques.

XAFontBookTypeface(properties)

A class for managing and interacting with typefaces in Font Book.app.

XAFontBookTypefaceList(properties[, filter])

A wrapper around lists of Font Book documents that employs fast enumeration techniques.

XAFontBookWindow(properties)

A class for managing and interacting with documents in Font Book.app.

+
+
+class PyXA.apps.FontBook.XAFontBookApplication(properties)[source]
+

Bases: XASBApplication

+

A class for managing and interacting with Font Book.app.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + +

documents([filter])

Returns a list of documents matching the filter.

font_collections([filter])

Returns a list of font collections matching the filter.

font_containers([filter])

Returns a list of font containers matching the filter.

font_domains([filter])

Returns a list of font domains matching the filter.

font_families([filter])

Returns a list of font families matching the filter.

font_libraries([filter])

Returns a list of font libraries matching the filter.

typefaces([filter])

Returns a list of typefaces matching the filter.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

fonts_library

The All Fonts library.

installation_target

The library where new fonts are installed.

name

The name of the application.

selected_collections

The currently selected collections.

selected_font_families

The currently selected font families.

selection

The currently selected typefaces.

validate_fonts_before_installing

Whether to validate fonts before installing them.

version

The version of the Font Book application.

+
+
+documents(filter: dict = None) XAFontBookDocumentList[source]
+

Returns a list of documents matching the filter.

+
+

New in version 0.0.6.

+
+
+ +
+
+font_collections(filter: dict = None) XAFontBookFontCollectionList[source]
+

Returns a list of font collections matching the filter.

+
+

New in version 0.0.6.

+
+
+ +
+
+font_containers(filter: dict = None) XAFontBookFontContainerList[source]
+

Returns a list of font containers matching the filter.

+
+

New in version 0.0.6.

+
+
+ +
+
+font_domains(filter: dict = None) XAFontBookFontDomainList[source]
+

Returns a list of font domains matching the filter.

+
+

New in version 0.0.6.

+
+
+ +
+
+font_families(filter: dict = None) XAFontBookFontFamilyList[source]
+

Returns a list of font families matching the filter.

+
+

New in version 0.0.6.

+
+
+ +
+
+font_libraries(filter: dict = None) XAFontBookFontLibraryList[source]
+

Returns a list of font libraries matching the filter.

+
+

New in version 0.0.6.

+
+
+ +
+
+property fonts_library: XAFontBookFontBookAllFontsLibraryObject
+

The All Fonts library.

+
+ +
+
+property installation_target: XAFontBookFontLibrary
+

The library where new fonts are installed.

+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+property selected_collections: XAFontBookFontCollectionList
+

The currently selected collections.

+
+ +
+
+property selected_font_families: XAFontBookFontFamilyList
+

The currently selected font families.

+
+ +
+
+property selection: XAFontBookTypefaceList
+

The currently selected typefaces.

+
+ +
+
+typefaces(filter: dict = None) XAFontBookTypefaceList[source]
+

Returns a list of typefaces matching the filter.

+
+

New in version 0.0.6.

+
+
+ +
+
+property validate_fonts_before_installing: bool
+

Whether to validate fonts before installing them.

+
+ +
+
+property version: str
+

The version of the Font Book application.

+
+ +
+ +
+
+class PyXA.apps.FontBook.XAFontBookDocument(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with documents in Font Book.app.

+
+

See also

+

XAFontBookApplication

+
+
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + + + + +

modified

Whether the document has been modified since its last save.

name

The name of the document.

path

The file path of the document.

+
+
+property modified: bool
+

Whether the document has been modified since its last save.

+
+ +
+
+property name: str
+

The name of the document.

+
+ +
+
+property path: XAPath
+

The file path of the document.

+
+ +
+ +
+
+class PyXA.apps.FontBook.XAFontBookDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of Font Book documents that employs fast enumeration techniques.

+

All properties of documents can be called as methods on the wrapped list, returning a list containing each document’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_modified(modified)

by_name(name)

by_path(path)

modified()

name()

path()

+
+
+by_modified(modified: bool) XAFontBookDocument[source]
+
+ +
+
+by_name(name: str) XAFontBookDocument[source]
+
+ +
+
+by_path(path: str) XAFontBookDocument[source]
+
+ +
+
+modified() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+path() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.FontBook.XAFontBookFontBookAllFontsLibraryObject(properties)[source]
+

Bases: XAFontBookFontDomain

+

A class for managing and interacting with the all fonts library object in Font Book.app.

+
+

See also

+

XAFontBookApplication

+
+
+

New in version 0.0.6.

+
+
+ +
+
+class PyXA.apps.FontBook.XAFontBookFontCollection(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for managing and interacting with font collections in Font Book.app.

+
+

See also

+

XAFontBookApplication

+
+
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + +

display_name

The display name of the collection.

displayed_name

The display name of the collection.

enabled

Whether the collection is enabled.

name

The name of the collection.

properties

All properties of the collection.

+

Methods:

+ + + + + + + + + + + + +

font_families([filter])

Returns a list of font families matching the filter.

get_clipboard_representation()

Gets a clipboard-codable representation of the collection.

typefaces([filter])

Returns a list of typefaces matching the filter.

+
+
+property display_name: str
+

The display name of the collection.

+
+ +
+
+property displayed_name: str
+

The display name of the collection.

+
+ +
+
+property enabled: bool
+

Whether the collection is enabled.

+
+ +
+
+font_families(filter: dict = None) XAFontBookFontFamilyList[source]
+

Returns a list of font families matching the filter.

+
+

New in version 0.0.6.

+
+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the collection.

+

When the clipboard content is set to a collection, the name of the collection is added to the clipboard.

+
+
Returns:
+

The name of the collection

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property name: str
+

The name of the collection.

+
+ +
+
+property properties: dict
+

All properties of the collection.

+
+ +
+
+typefaces(filter: dict = None) XAFontBookTypefaceList[source]
+

Returns a list of typefaces matching the filter.

+
+

New in version 0.0.6.

+
+
+ +
+ +
+
+class PyXA.apps.FontBook.XAFontBookFontCollectionList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around lists of Font Book font containers that employs fast enumeration techniques.

+

All properties of font containers can be called as methods on the wrapped list, returning a list containing each container’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_display_name(display_name)

by_displayed_name(displayed_name)

by_enabled(enabled)

by_name(name)

by_properties(properties)

display_name()

displayed_name()

enabled()

get_clipboard_representation()

Gets a clipboard-codable representation of each collection in the list.

name()

properties()

+
+
+by_display_name(display_name: str) XAFontBookFontCollection[source]
+
+ +
+
+by_displayed_name(displayed_name: str) XAFontBookFontCollection[source]
+
+ +
+
+by_enabled(enabled: bool) XAFontBookFontCollection[source]
+
+ +
+
+by_name(name: str) XAFontBookFontCollection[source]
+
+ +
+
+by_properties(properties: dict) XAFontBookFontCollection[source]
+
+ +
+
+display_name() list[str][source]
+
+ +
+
+displayed_name() list[str][source]
+
+ +
+
+enabled() list[bool][source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each collection in the list.

+

When the clipboard content is set to a list of collections, the name of each collection is added to the clipboard.

+
+
Returns:
+

The list of collection names

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+name() list[str][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+ +
+
+class PyXA.apps.FontBook.XAFontBookFontContainer(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for managing and interacting with font containers in Font Book.app.

+
+

See also

+

XAFontBookApplication

+
+
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

domain

The font domain for the container.

files

The files for the container.

id

The unique identifier of the container.

name

The name of the container.

path

The path to the main container.

properties

All properties of the container.

+

Methods:

+ + + + + + + + + + + + + + + +

font_domains([filter])

Returns a list of font domains matching the filter.

font_families([filter])

Returns a list of font families matching the filter.

get_clipboard_representation()

Gets a clipboard-codable representation of the container.

typefaces([filter])

Returns a list of typefaces matching the filter.

+
+
+property domain: XAFontBookFontDomain
+

The font domain for the container.

+
+ +
+
+property files: list[PyXA.XABase.XAPath]
+

The files for the container.

+
+ +
+
+font_domains(filter: dict = None) XAFontBookFontDomainList[source]
+

Returns a list of font domains matching the filter.

+
+

New in version 0.0.6.

+
+
+ +
+
+font_families(filter: dict = None) XAFontBookFontFamilyList[source]
+

Returns a list of font families matching the filter.

+
+

New in version 0.0.6.

+
+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the container.

+

When the clipboard content is set to a container, the name of the container is added to the clipboard.

+
+
Returns:
+

The name of the container

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: str
+

The unique identifier of the container.

+
+ +
+
+property name: str
+

The name of the container.

+
+ +
+
+property path: str
+

The path to the main container.

+
+ +
+
+property properties: dict
+

All properties of the container.

+
+ +
+
+typefaces(filter: dict = None) XAFontBookTypefaceList[source]
+

Returns a list of typefaces matching the filter.

+
+

New in version 0.0.6.

+
+
+ +
+ +
+
+class PyXA.apps.FontBook.XAFontBookFontContainerList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around lists of Font Book font containers that employs fast enumeration techniques.

+

All properties of font containers can be called as methods on the wrapped list, returning a list containing each container’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_domain(domain)

by_files(files)

by_id(id)

by_name(name)

by_path(path)

by_properties(properties)

domain()

files()

get_clipboard_representation()

Gets a clipboard-codable representation of each container in the list.

id()

name()

path()

properties()

+
+
+by_domain(domain: XAFontBookFontDomain) XAFontBookFontContainer[source]
+
+ +
+
+by_files(files: list[PyXA.XABase.XAPath]) XAFontBookFontContainer[source]
+
+ +
+
+by_id(id: str) XAFontBookFontContainer[source]
+
+ +
+
+by_name(name: str) XAFontBookFontContainer[source]
+
+ +
+
+by_path(path: str) XAFontBookFontContainer[source]
+
+ +
+
+by_properties(properties: dict) XAFontBookFontContainer[source]
+
+ +
+
+domain() XAFontBookFontDomainList[source]
+
+ +
+
+files() list[PyXA.XABase.XAPath][source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each container in the list.

+

When the clipboard content is set to a list of containers, the name of each container is added to the clipboard.

+
+
Returns:
+

The list of container names

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+path() list[str][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+ +
+
+class PyXA.apps.FontBook.XAFontBookFontDomain(properties)[source]
+

Bases: XAFontBookFontLibrary

+

A class for managing and interacting with font domains in Font Book.app.

+
+

See also

+

XAFontBookApplication

+
+
+

New in version 0.0.6.

+
+
+ +
+
+class PyXA.apps.FontBook.XAFontBookFontDomainList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAFontBookFontLibraryList

+

A wrapper around lists of Font Book font domains that employs fast enumeration techniques.

+

All properties of font domains can be called as methods on the wrapped list, returning a list containing each domain’s value for the property.

+
+

New in version 0.0.6.

+
+
+ +
+
+class PyXA.apps.FontBook.XAFontBookFontFamily(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for managing and interacting with font families in Font Book.app.

+
+

See also

+

XAFontBookApplication

+
+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + +

delete()

Permanently deletes the typeface.

get_clipboard_representation()

Gets a clipboard-codable representation of the font family.

typefaces([filter])

Returns a list of typefaces matching the filter.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

display_name

The display name of the font family.

displayed_name

The display name of the font family.

duplicated

Whether teh font family contains duplicated faces.

enabled

Whether the font family is enabled.

files

The font files of the font family.

name

The name of the font family.

properties

All properties of the font family.

+
+
+delete()[source]
+

Permanently deletes the typeface.

+
+

New in version 0.0.6.

+
+
+ +
+
+property display_name: str
+

The display name of the font family.

+
+ +
+
+property displayed_name: str
+

The display name of the font family.

+
+ +
+
+property duplicated: bool
+

Whether teh font family contains duplicated faces.

+
+ +
+
+property enabled: bool
+

Whether the font family is enabled.

+
+ +
+
+property files: list[PyXA.XABase.XAPath]
+

The font files of the font family.

+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the font family.

+

When the clipboard content is set to a font family, the name of the font family is added to the clipboard.

+
+
Returns:
+

The name of the font family

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property name: str
+

The name of the font family.

+
+ +
+
+property properties: dict
+

All properties of the font family.

+
+ +
+
+typefaces(filter: dict = None) XAFontBookTypefaceList[source]
+

Returns a list of typefaces matching the filter.

+
+

New in version 0.0.6.

+
+
+ +
+ +
+
+class PyXA.apps.FontBook.XAFontBookFontFamilyList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around lists of Font Book font families that employs fast enumeration techniques.

+

All properties of font families can be called as methods on the wrapped list, returning a list containing each font family’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_display_name(display_name)

by_displayed_name(displayed_name)

by_duplicates(duplicated)

by_enabled(enabled)

by_files(files)

by_name(name)

by_properties(properties)

display_name()

displayed_name()

duplicated()

enabled()

files()

get_clipboard_representation()

Gets a clipboard-codable representation of each font family in the list.

name()

properties()

+
+
+by_display_name(display_name: str) XAFontBookFontFamily[source]
+
+ +
+
+by_displayed_name(displayed_name: str) XAFontBookFontFamily[source]
+
+ +
+
+by_duplicates(duplicated: bool) XAFontBookFontFamily[source]
+
+ +
+
+by_enabled(enabled: bool) XAFontBookFontFamily[source]
+
+ +
+
+by_files(files: list[PyXA.XABase.XAPath]) XAFontBookFontFamily[source]
+
+ +
+
+by_name(name: str) XAFontBookFontFamily[source]
+
+ +
+
+by_properties(properties: dict) XAFontBookFontFamily[source]
+
+ +
+
+display_name() list[str][source]
+
+ +
+
+displayed_name() list[str][source]
+
+ +
+
+duplicated() list[bool][source]
+
+ +
+
+enabled() list[bool][source]
+
+ +
+
+files() list[list[PyXA.XABase.XAPath]][source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each font family in the list.

+

When the clipboard content is set to a list of font families, the name of each font family is added to the clipboard.

+
+
Returns:
+

The list of font family names

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+name() list[str][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+ +
+
+class PyXA.apps.FontBook.XAFontBookFontLibrary(properties)[source]
+

Bases: XAFontBookFontCollection

+

A class for managing and interacting with font libraries in Font Book.app.

+
+

See also

+

XAFontBookApplication

+
+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + +

font_containers([filter])

Returns a list of font containers matching the filter.

+

Attributes:

+ + + + + + +

id

The unique identifier of the domain.

+
+
+font_containers(filter: dict = None) XAFontBookFontContainerList[source]
+

Returns a list of font containers matching the filter.

+
+

New in version 0.0.6.

+
+
+ +
+
+property id: str
+

The unique identifier of the domain.

+
+ +
+ +
+
+class PyXA.apps.FontBook.XAFontBookFontLibraryList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAFontBookFontCollectionList

+

A wrapper around lists of Font Book font libraries that employs fast enumeration techniques.

+

All properties of font libraries can be called as methods on the wrapped list, returning a list containing each library’s value for the property.

+
+

New in version 0.0.6.

+
+
+ +
+
+class PyXA.apps.FontBook.XAFontBookTypeface(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for managing and interacting with typefaces in Font Book.app.

+
+

See also

+

XAFontBookApplication

+
+
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

copyright

The copyright string for the typeface.

display_name

The display name of the typeface.

displayed_name

The display name of the typeface.

duplicated

Whether the typeface is duplicated.

enabled

Whether the typeface is enabled.

family_name

The name of the typeface's font family.

files

The font files for the typeface.

font_container

The container of the typeface.

font_family

The font family that contains the typeface.

font_type

The type of the typeface.

id

The unique identifier for the typeface.

name

The name of the typeface.

post_script_name

The PostScript font name.

properties

All properties of the typeface.

style_name

The name of the typeface's style.

+

Methods:

+ + + + + + +

get_clipboard_representation()

Gets a clipboard-codable representation of the typeface.

+
+
+property copyright: str
+

The copyright string for the typeface.

+
+ +
+
+property display_name: str
+

The display name of the typeface.

+
+ +
+
+property displayed_name: str
+

The display name of the typeface.

+
+ +
+
+property duplicated: bool
+

Whether the typeface is duplicated.

+
+ +
+
+property enabled: bool
+

Whether the typeface is enabled.

+
+ +
+
+property family_name: str
+

The name of the typeface’s font family.

+
+ +
+
+property files: list[PyXA.XABase.XAPath]
+

The font files for the typeface.

+
+ +
+
+property font_container: XAFontBookFontContainer
+

The container of the typeface.

+
+ +
+
+property font_family: XAFontBookFontFamily
+

The font family that contains the typeface.

+
+ +
+
+property font_type: str
+

The type of the typeface.

+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the typeface.

+

When the clipboard content is set to a typeface, the name of the typeface is added to the clipboard.

+
+
Returns:
+

The name of the typeface

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: str
+

The unique identifier for the typeface.

+
+ +
+
+property name: str
+

The name of the typeface.

+
+ +
+
+property post_script_name: str
+

The PostScript font name.

+
+ +
+
+property properties: dict
+

All properties of the typeface.

+
+ +
+
+property style_name: str
+

The name of the typeface’s style.

+
+ +
+ +
+
+class PyXA.apps.FontBook.XAFontBookTypefaceList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around lists of Font Book documents that employs fast enumeration techniques.

+

All properties of documents can be called as methods on the wrapped list, returning a list containing each document’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_copyright(copyright)

by_display_name(display_name)

by_displayed_name(displayed_name)

by_duplicated(duplicated)

by_enabled(enabled)

by_family_name(family_name)

by_files(files)

by_font_container(font_container)

by_font_family(font_family)

by_font_type(font_type)

by_id(id)

by_name(name)

by_post_script_name(post_script_name)

by_properties(properties)

by_style_name(style_name)

copyright()

display_name()

displayed_name()

duplicated()

enabled()

family_name()

files()

font_container()

font_family()

font_type()

get_clipboard_representation()

Gets a clipboard-codable representation of each typeface in the list.

id()

name()

post_script_name()

properties()

style_name()

+
+ +
+ +
+
+by_display_name(display_name: str) XAFontBookTypeface[source]
+
+ +
+
+by_displayed_name(displayed_name: str) XAFontBookTypeface[source]
+
+ +
+
+by_duplicated(duplicated: bool) XAFontBookTypeface[source]
+
+ +
+
+by_enabled(enabled: bool) XAFontBookTypeface[source]
+
+ +
+
+by_family_name(family_name: str) XAFontBookTypeface[source]
+
+ +
+
+by_files(files: list[PyXA.XABase.XAPath]) XAFontBookTypeface[source]
+
+ +
+
+by_font_container(font_container: XAFontBookFontContainer) XAFontBookTypeface[source]
+
+ +
+
+by_font_family(font_family: XAFontBookFontFamily) XAFontBookTypeface[source]
+
+ +
+
+by_font_type(font_type: str) XAFontBookTypeface[source]
+
+ +
+
+by_id(id: str) XAFontBookTypeface[source]
+
+ +
+
+by_name(name: str) XAFontBookTypeface[source]
+
+ +
+
+by_post_script_name(post_script_name: str) XAFontBookTypeface[source]
+
+ +
+
+by_properties(properties: dict) XAFontBookTypeface[source]
+
+ +
+
+by_style_name(style_name: str) XAFontBookTypeface[source]
+
+ +
+
+copyright() list[str][source]
+
+ +
+
+display_name() list[str][source]
+
+ +
+
+displayed_name() list[str][source]
+
+ +
+
+duplicated() list[bool][source]
+
+ +
+
+enabled() list[bool][source]
+
+ +
+
+family_name() list[str][source]
+
+ +
+
+files() list[PyXA.XABase.XAPath][source]
+
+ +
+
+font_container() XAFontBookFontContainerList[source]
+
+ +
+
+font_family() XAFontBookFontFamilyList[source]
+
+ +
+
+font_type() list[str][source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each typeface in the list.

+

When the clipboard content is set to a list of typefaces, the name of each typeface is added to the clipboard.

+
+
Returns:
+

The list of typeface names

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+post_script_name() list[str][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+
+style_name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.FontBook.XAFontBookWindow(properties)[source]
+

Bases: XASBWindow

+

A class for managing and interacting with documents in Font Book.app.

+
+

See also

+

XAFontBookApplication

+
+
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + + + + +

floating

Whether the window floats.

modal

Whether the window is a modal window.

titled

Whether the window has a title bar.

+
+
+property floating: bool
+

Whether the window floats.

+
+ +
+
+property modal: bool
+

Whether the window is a modal window.

+
+ +
+
+property titled: bool
+

Whether the window has a title bar.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/hammerspoon.html b/docs/reference/apps/hammerspoon.html new file mode 100644 index 0000000..6c6c5d5 --- /dev/null +++ b/docs/reference/apps/hammerspoon.html @@ -0,0 +1,233 @@ + + + + + + + Hammerspoon Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Hammerspoon Module Reference

+
+

New in version 0.0.8.

+
+

Control Hammerspoon using JXA-like syntax.

+

Classes:

+ + + + + + +

XAHammerspoonApplication(properties)

A class for managing and interacting with Hammerspoon.app.

+
+
+class PyXA.apps.Hammerspoon.XAHammerspoonApplication(properties)[source]
+

Bases: XASBApplication

+

A class for managing and interacting with Hammerspoon.app.

+
+

New in version 0.0.8.

+
+

Methods:

+ + + + + + +

execute_lua_code(code)

Executes Lua code via Hammerspoon, with support for all Hammerspoon features.

+

Attributes:

+ + + + + + + + + + + + +

frontmost

Whether Hammerspoon is the active application.

name

The name of the application.

version

The version of Hammerspoon.app.

+
+
+execute_lua_code(code: str) Any[source]
+

Executes Lua code via Hammerspoon, with support for all Hammerspoon features.

+
+
Parameters:
+

code (str) – The Lua code to execute

+
+
Returns:
+

The Lua code execution result

+
+
Return type:
+

Any

+
+
+
+

Note

+

In order for this to work, you must add hs.allowAppleScript(true) to your Hammerspoon config.

+
+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("hammerspoon")
+>>> app.execute_lua_code("""
+>>>     app = hs.appfinder.appFromName("Finder")
+>>>     app:activate()
+>>>     app:selectMenuItem({"Window", "Bring All to Front"})
+>>> """)
+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property frontmost: bool
+

Whether Hammerspoon is the active application.

+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+property version: str
+

The version of Hammerspoon.app.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/imageevents.html b/docs/reference/apps/imageevents.html new file mode 100644 index 0000000..3abbdea --- /dev/null +++ b/docs/reference/apps/imageevents.html @@ -0,0 +1,2792 @@ + + + + + + + Image Events Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Image Events Module Reference

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XAImageEventsApplication(properties)

A class for interacting with Image Events.app.

XAImageEventsDisplay(properties)

A monitor connected to the computer.

XAImageEventsDisplayList(properties[, filter])

A wrapper around lists of displays that employs fast enumeration techniques.

XAImageEventsImage(properties)

An image contained in a file.

XAImageEventsImageList(properties[, filter])

A wrapper around lists of images that employs fast enumeration techniques.

XAImageEventsMetadataTag(properties)

A metadata tag: EXIF, IPTC, etc.

XAImageEventsMetadataTagList(properties[, ...])

A wrapper around lists of metadata tags that employs fast enumeration techniques.

XAImageEventsProfile(properties)

A ColorSync ICC profile.

XAImageEventsProfileList(properties[, filter])

A wrapper around lists of profiles that employs fast enumeration techniques.

+
+
+class PyXA.apps.ImageEvents.XAImageEventsApplication(properties)[source]
+

Bases: XAEventsApplication, XASBApplication, XACanOpenPath

+

A class for interacting with Image Events.app.

+
+

New in version 0.1.0.

+
+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

BitDepth(value[, names, module, qualname, ...])

Bit depth options.

ColorSpace(value[, names, module, qualname, ...])

Color space options.

CompressionLevel(value[, names, module, ...])

Compression options.

ConnectionSpace(value[, names, module, ...])

Profile connection space options.

DeviceClass(value[, names, module, ...])

Profile device class options.

FileType(value[, names, module, qualname, ...])

Image file type options.

ImageQuality(value[, names, module, ...])

Image quality options.

ProfileQuality(value[, names, module, ...])

Profile quality options.

RenderingIntent(value[, names, module, ...])

Rendering intent options.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

aliases([filter])

Returns a list of aliases, as PyXA objects, matching the given filter.

disk_items([filter])

Returns a list of disk items, as PyXA objects, matching the given filter.

disks([filter])

Returns a list of disks, as PyXA objects, matching the given filter.

displays([filter])

Returns a list of displays, as PyXA objects, matching the given filter.

domains([filter])

Returns a list of domains, as PyXA objects, matching the given filter.

file_packages([filter])

Returns a list of file packages, as PyXA objects, matching the given filter.

files([filter])

Returns a list of files, as PyXA objects, matching the given filter.

folders([filter])

Returns a list of folders, as PyXA objects, matching the given filter.

images([filter])

Returns a list of images, as PyXA objects, matching the given filter.

items([filter])

Returns a list of items, as PyXA objects, matching the given filter.

open(*paths)

Opens the disk item at the given filepath.

profiles([filter])

Returns a list of profiles, as PyXA objects, matching the given filter.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

application_support_folder

The Application Support folder.

applications_folder

The user's Applications folder.

classic_domain

The collection of folders belonging to the Classic System.

default_cmyk_profile

The default CMYK profile.

default_cmyk_profile_location

The default CMYK profile location.

default_gray_profile

The default Gray profile.

default_gray_profile_location

The default Gray profile location.

default_lab_profile

The default Lab profile.

default_lab_profile_location

The default Lab profile location.

default_rgb_profile

The default RGB profile.

default_rgb_profile_location

The default RGB profile location.

default_xyz_profile

The default XYZ profile.

default_xyz_profile_location

The default XYZ profile location.

desktop_folder

The user's Desktop folder.

desktop_pictures_folder

The Desktop Pictures folder.

documents_folder

The user's Documents folder.

downloads_folder

The user's Downloads folder.

favorites_folder

The user's Favorites folder.

folder_action_scripts_folder

The user's Folder Action Scripts folder.

fonts_folder

The Fonts folder.

frontmost

Whether Image Events is the frontmost application.

home_folder

The Home folder of the currently logged in user.

library_folder

The Library folder.

local_domain

The collection of folders residing on the Local machine.

movies_folder

The user's Movies folder.

music_folder

The user's Music folder.

name

The name of the application.

network_domain

The collection of folders residing on the Network.

pictures_folder

The user's Pictures folder.

preferences_folder

The user's Preferences folder.

preferred_cmm

Specifies preferred Color Management Module to use, or "automatic".

profile_folder

The ColorSync profile folder.

public_folder

The user's Public folder.

quit_delay

The time in seconds the application will idle before quitting; if set to zero, idle time will not cause the application to quit.

scripting_additions_folder

The Scripting Additions folder.

scripts_folder

The user's Scripts folder.

shared_documents_folder

The Shared Documents folder.

sites_folder

The user's Sites folder.

speakable_items_folder

The Speakable Items folder.

startup_disk

The disk from which Mac OS X was loaded.

system_domain

The collection of folders belonging to the System.

system_profile

The default system profile.

system_profile_location

The default system profile location.

temporary_items_folder

The Temporary Items folder.

trash

The user's Trash folder.

user_domain

The collection of folders belonging to the User.

utilities_folder

The Utilities folder.

version

The version number of the application.

workflows_folder

The Automator Workflows folder.

+
+
+class BitDepth(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Bit depth options.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

BEST

BLACK_AND_WHITE

COLOR

FOUR_COLORS

FOUR_GRAYS

GRAYSCALE

MILLIONS_OF_COLORS

MILLIONS_OF_COLORS_PLUS

SIXTEEN_COLORS

SIXTEEN_GRAYS

THOUSANDS_OF_COLORS

TWO_HUNDRED_FIFTY_SIX_COLORS

TWO_HUNDRED_FIFTY_SIX_GRAYS

+
+
+BEST = 1650815860
+
+ +
+
+BLACK_AND_WHITE = 7072447387494217504
+
+ +
+
+COLOR = 1668246642
+
+ +
+
+FOUR_COLORS = 878931058
+
+ +
+
+FOUR_GRAYS = 879194745
+
+ +
+
+GRAYSCALE = 1735549305
+
+ +
+
+MILLIONS_OF_COLORS = 1835625580
+
+ +
+
+MILLIONS_OF_COLORS_PLUS = 1835625515
+
+ +
+
+SIXTEEN_COLORS = 825647980
+
+ +
+
+SIXTEEN_GRAYS = 825649010
+
+ +
+
+THOUSANDS_OF_COLORS = 1953001333
+
+ +
+
+TWO_HUNDRED_FIFTY_SIX_COLORS = 842348131
+
+ +
+
+TWO_HUNDRED_FIFTY_SIX_GRAYS = 842348135
+
+ +
+ +
+
+class ColorSpace(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Color space options.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

CMYK

EIGHT_CHANNEL

EIGHT_COLOR

FIVE_CHANNEL

FIVE_COLOR

GRAY

LAB

NAMED

RGB

SEVEN_CHANNEL

SEVEN_COLOR

SIX_CHANNEL

SIX_COLOR

XYZ

+
+
+CMYK = 1129142603
+
+ +
+
+EIGHT_CHANNEL = 1296255032
+
+ +
+
+EIGHT_COLOR = 943934546
+
+ +
+
+FIVE_CHANNEL = 1296255029
+
+ +
+
+FIVE_COLOR = 893602898
+
+ +
+
+GRAY = 1196573017
+
+ +
+
+LAB = 1281450528
+
+ +
+
+NAMED = 1312902469
+
+ +
+
+RGB = 1380401696
+
+ +
+
+SEVEN_CHANNEL = 1296255031
+
+ +
+
+SEVEN_COLOR = 927157330
+
+ +
+
+SIX_CHANNEL = 1296255030
+
+ +
+
+SIX_COLOR = 910380114
+
+ +
+
+XYZ = 1482250784
+
+ +
+ +
+
+class CompressionLevel(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Compression options.

+

Attributes:

+ + + + + + + + + + + + +

HIGH

LOW

MEDIUM

+
+
+HIGH = 1751738216
+
+ +
+
+LOW = 1819244320
+
+ +
+
+MEDIUM = 1835361385
+
+ +
+ +
+
+class ConnectionSpace(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Profile connection space options.

+

Attributes:

+ + + + + + + + + +

LAB

XYZ

+
+
+LAB = 1281450528
+
+ +
+
+XYZ = 1482250784
+
+ +
+ +
+
+class DeviceClass(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Profile device class options.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

ABSTRACT

COLORSPACE

INPUT

LINK

MONITOR

NAMED

OUTPUT

+
+
+ABSTRACT = 1633842036
+
+ +
+
+COLORSPACE = 1936744803
+
+ +
+
+INPUT = 1935896178
+
+ +
+ +
+ +
+
+MONITOR = 1835955314
+
+ +
+
+NAMED = 1852662636
+
+ +
+
+OUTPUT = 1886549106
+
+ +
+ +
+
+class FileType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Image file type options.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

BMP

GIF

JPEG

JPEG2

MACPAINT

PDF

PHOTOSHOP

PICT

PNG

PSD

QUICKTIME

SGI

TEXT

TGA

TIFF

+
+
+BMP = 1112363110
+
+ +
+
+GIF = 1195984416
+
+ +
+
+JPEG = 1246774599
+
+ +
+
+JPEG2 = 1785751346
+
+ +
+
+MACPAINT = 1347310663
+
+ +
+
+PDF = 1346651680
+
+ +
+
+PHOTOSHOP = 943870035
+
+ +
+
+PICT = 1346978644
+
+ +
+
+PNG = 1347307366
+
+ +
+
+PSD = 1886610464
+
+ +
+
+QUICKTIME = 1903454566
+
+ +
+
+SGI = 777209673
+
+ +
+
+TEXT = 1413830740
+
+ +
+
+TGA = 1952932128
+
+ +
+
+TIFF = 1414088262
+
+ +
+ +
+
+class ImageQuality(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Image quality options.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

BEST

HIGH

LEAST

LOW

MEDIUM

+
+
+BEST = 1650815860
+
+ +
+
+HIGH = 1751738216
+
+ +
+
+LEAST = 1818583411
+
+ +
+
+LOW = 1819244320
+
+ +
+
+MEDIUM = 1835361385
+
+ +
+ +
+
+class ProfileQuality(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Profile quality options.

+

Attributes:

+ + + + + + + + + + + + +

BEST

DRAFT

NORMAL

+
+
+BEST = 1366647090
+
+ +
+
+DRAFT = 1366647089
+
+ +
+
+NORMAL = 1366647088
+
+ +
+ +
+
+class RenderingIntent(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Rendering intent options.

+

Attributes:

+ + + + + + + + + + + + + + + +

ABSOLUTE_COLORIMETRIC

PERCEPTUAL

RELATIVE_COLORIMETRIC

SATURATION

+
+
+ABSOLUTE_COLORIMETRIC = 1382314547
+
+ +
+
+PERCEPTUAL = 1382314544
+
+ +
+
+RELATIVE_COLORIMETRIC = 1378972210
+
+ +
+
+SATURATION = 1382314546
+
+ +
+ +
+
+aliases(filter: Optional[dict] = None) XAAliasList[source]
+

Returns a list of aliases, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+property application_support_folder: XAFolder
+

The Application Support folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property applications_folder: XAFolder
+

The user’s Applications folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property classic_domain: XAClassicDomainObject
+

The collection of folders belonging to the Classic System.

+
+

New in version 0.1.0.

+
+
+ +
+
+property default_cmyk_profile: XAImageEventsProfile
+

The default CMYK profile.

+
+

New in version 0.1.0.

+
+
+ +
+
+property default_cmyk_profile_location: XAFile
+

The default CMYK profile location.

+
+

New in version 0.1.0.

+
+
+ +
+
+property default_gray_profile: XAImageEventsProfile
+

The default Gray profile.

+
+

New in version 0.1.0.

+
+
+ +
+
+property default_gray_profile_location: XAFile
+

The default Gray profile location.

+
+

New in version 0.1.0.

+
+
+ +
+
+property default_lab_profile: XAImageEventsProfile
+

The default Lab profile.

+
+

New in version 0.1.0.

+
+
+ +
+
+property default_lab_profile_location: XAFile
+

The default Lab profile location.

+
+

New in version 0.1.0.

+
+
+ +
+
+property default_rgb_profile: XAImageEventsProfile
+

The default RGB profile.

+
+

New in version 0.1.0.

+
+
+ +
+
+property default_rgb_profile_location: XAFile
+

The default RGB profile location.

+
+

New in version 0.1.0.

+
+
+ +
+
+property default_xyz_profile: XAImageEventsProfile
+

The default XYZ profile.

+
+

New in version 0.1.0.

+
+
+ +
+
+property default_xyz_profile_location: XAFile
+

The default XYZ profile location.

+
+

New in version 0.1.0.

+
+
+ +
+
+property desktop_folder: XAFolder
+

The user’s Desktop folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property desktop_pictures_folder: XAFolder
+

The Desktop Pictures folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+disk_items(filter: Optional[dict] = None) XADiskItemList[source]
+

Returns a list of disk items, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+disks(filter: Optional[dict] = None) XADiskList[source]
+

Returns a list of disks, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+displays(filter: Optional[dict] = None) XAImageEventsDisplayList[source]
+

Returns a list of displays, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+property documents_folder: XAFolder
+

The user’s Documents folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+domains(filter: Optional[dict] = None) XADomainList[source]
+

Returns a list of domains, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+property downloads_folder: XAFolder
+

The user’s Downloads folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property favorites_folder: XAFolder
+

The user’s Favorites folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+file_packages(filter: Optional[dict] = None) XAFilePackageList[source]
+

Returns a list of file packages, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+files(filter: Optional[dict] = None) XAFileList[source]
+

Returns a list of files, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+property folder_action_scripts_folder: XAFolder
+

The user’s Folder Action Scripts folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+folders(filter: Optional[dict] = None) XAFolderList[source]
+

Returns a list of folders, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+property fonts_folder: XAFolder
+

The Fonts folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property frontmost: bool
+

Whether Image Events is the frontmost application.

+
+

New in version 0.1.0.

+
+
+ +
+
+property home_folder: XAFolder
+

The Home folder of the currently logged in user.

+
+

New in version 0.1.0.

+
+
+ +
+
+images(filter: Optional[dict] = None) XAImageEventsImageList[source]
+

Returns a list of images, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+items(filter: Optional[dict] = None) XADiskItemList[source]
+

Returns a list of items, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+property library_folder: XAFolder
+

The Library folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property local_domain: XALocalDomainObject
+

The collection of folders residing on the Local machine.

+
+

New in version 0.1.0.

+
+
+ +
+
+property movies_folder: XAFolder
+

The user’s Movies folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property music_folder: XAFolder
+

The user’s Music folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property name: str
+

The name of the application.

+
+

New in version 0.1.0.

+
+
+ +
+
+property network_domain: XANetworkDomainObject
+

The collection of folders residing on the Network.

+
+

New in version 0.1.0.

+
+
+ +
+
+open(*paths: Union[list[PyXA.XABase.XAPath], XAPath, str]) XAImageEventsImage[source]
+

Opens the disk item at the given filepath.

+
+
Parameters:
+

path (Union[list[XABase.XAPath], XABase.XAPath, str]) – The path to a file or the URL to a website to open.

+
+
Returns:
+

A reference to the opened file, or None if no file was created or it cannot be found

+
+
Return type:
+

Any

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property pictures_folder: XAFolder
+

The user’s Pictures folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property preferences_folder: XAFolder
+

The user’s Preferences folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property preferred_cmm: str
+

Specifies preferred Color Management Module to use, or “automatic”.

+
+

New in version 0.1.0.

+
+
+ +
+
+property profile_folder: XAAlias
+

The ColorSync profile folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+profiles(filter: Optional[dict] = None) XAImageEventsProfileList[source]
+

Returns a list of profiles, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+property public_folder: XAFolder
+

The user’s Public folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property quit_delay: int
+

The time in seconds the application will idle before quitting; if set to zero, idle time will not cause the application to quit.

+
+

New in version 0.1.0.

+
+
+ +
+
+property scripting_additions_folder: XAFolder
+

The Scripting Additions folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property scripts_folder: XAFolder
+

The user’s Scripts folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property shared_documents_folder: XAFolder
+

The Shared Documents folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property sites_folder: XAFolder
+

The user’s Sites folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property speakable_items_folder: XAFolder
+

The Speakable Items folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property startup_disk: XADisk
+

The disk from which Mac OS X was loaded.

+
+

New in version 0.1.0.

+
+
+ +
+
+property system_domain: XASystemDomainObject
+

The collection of folders belonging to the System.

+
+

New in version 0.1.0.

+
+
+ +
+
+property system_profile: XAImageEventsProfile
+

The default system profile.

+
+

New in version 0.1.0.

+
+
+ +
+
+property system_profile_location: XAFile
+

The default system profile location.

+
+

New in version 0.1.0.

+
+
+ +
+
+property temporary_items_folder: XAFolder
+

The Temporary Items folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property trash: XAFolder
+

The user’s Trash folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property user_domain: XAUserDomainObject
+

The collection of folders belonging to the User.

+
+

New in version 0.1.0.

+
+
+ +
+
+property utilities_folder: XAFolder
+

The Utilities folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property version: str
+

The version number of the application.

+
+

New in version 0.1.0.

+
+
+ +
+
+property workflows_folder: XAFolder
+

The Automator Workflows folder.

+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.ImageEvents.XAImageEventsDisplay(properties)[source]
+

Bases: XAObject

+

A monitor connected to the computer.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + +

display_number

The number of the display.

display_profile

The profile for the display.

name

The name of the display.

+
+
+property display_number: int
+

The number of the display.

+
+

New in version 0.1.0.

+
+
+ +
+
+property display_profile: XAImageEventsProfile
+

The profile for the display.

+
+

New in version 0.1.0.

+
+
+ +
+
+property name: str
+

The name of the display.

+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.ImageEvents.XAImageEventsDisplayList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of displays that employs fast enumeration techniques.

+

All properties of displays can be called as methods on the wrapped list, returning a list containing each display’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_display_number(display_number)

by_display_profile(display_profile)

by_name(name)

display_number()

display_profile()

name()

+
+
+by_display_number(display_number: int) XAImageEventsDisplay[source]
+
+ +
+
+by_display_profile(display_profile: XAImageEventsProfile) XAImageEventsDisplay[source]
+
+ +
+
+by_name(name: str) XAImageEventsDisplay[source]
+
+ +
+
+display_number() list[int][source]
+
+ +
+
+display_profile() XAImageEventsProfileList[source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.ImageEvents.XAImageEventsImage(properties)[source]
+

Bases: XAImage

+

An image contained in a file.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

bit_depth

Bit depth of the image's color representation.

color_space

Color space of the image's color representation.

dimensions

The width and height of the image, respectively, in pixels.

embedded_profile

The profile, if any, embedded in the image.

file_type

File type of the image's file.

image_file

The file that contains the image.

location

The folder or disk that encloses the file that contains the image.

modified

Whether the image has been modified since it was last saved

modified_image_object

The image stored in active memory, including modifications.

name

The name of the image.

original_image_object

The original image contained in the file, without any modification.

properties

All properties of the image.

resolution

The horizontal and vertical pixel density of the image, respectively, in dots per inch.

+

Methods:

+ + + + + + + + + + + + + + + +

embed_profile(profile)

Embeds the specified ICC profile in the image.

metadata_tags([filter])

Returns a list of metadata tags, as PyXA objects, matching the given filter.

profiles([filter])

Returns a list of profiles, as PyXA objects, matching the given filter.

unembed()

Removes any embedded ICC profiles from the image.

+
+
+property bit_depth: BitDepth
+

Bit depth of the image’s color representation.

+
+

New in version 0.1.0.

+
+
+ +
+
+property color_space: ColorSpace
+

Color space of the image’s color representation.

+
+

New in version 0.1.0.

+
+
+ +
+
+property dimensions: tuple[int, int]
+

The width and height of the image, respectively, in pixels.

+
+

New in version 0.1.0.

+
+
+ +
+
+embed_profile(profile: XAImageEventsProfile) XAImageEventsImage[source]
+

Embeds the specified ICC profile in the image.

+
+
Parameters:
+

profile (XAImageEventsProfile) – The ICC profile to embed in the image

+
+
Returns:
+

The image object

+
+
Return type:
+

XAImageEventsImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property embedded_profile: XAImageEventsProfile
+

The profile, if any, embedded in the image.

+
+

New in version 0.1.0.

+
+
+ +
+
+file: Union[XAPath, None]
+

The path to the image file, if one exists

+
+ +
+
+property file_type: FileType
+

File type of the image’s file.

+
+

New in version 0.1.0.

+
+
+ +
+
+property image_file: XAFile
+

The file that contains the image.

+
+

New in version 0.1.0.

+
+
+ +
+
+property location: XADiskItem
+

The folder or disk that encloses the file that contains the image.

+
+

New in version 0.1.0.

+
+
+ +
+
+metadata_tags(filter: Optional[dict] = None) XAImageEventsMetadataTagList[source]
+

Returns a list of metadata tags, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+modified: bool
+

Whether the image has been modified since it was last saved

+
+ +
+
+property modified_image_object: XAImage
+

The image stored in active memory, including modifications.

+
+
Returns:
+

The image object stored in active memory

+
+
Return type:
+

XABase.XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property name: str
+

The name of the image.

+
+

New in version 0.1.0.

+
+
+ +
+
+property original_image_object: XAImage
+

The original image contained in the file, without any modification.

+
+
Returns:
+

The image object stored in the file

+
+
Return type:
+

XABase.XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+profiles(filter: Optional[dict] = None) XAImageEventsProfileList[source]
+

Returns a list of profiles, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+property properties: Dict
+

All properties of the image.

+
+

New in version 0.1.0.

+
+
+ +
+
+property resolution: tuple[float, float]
+

The horizontal and vertical pixel density of the image, respectively, in dots per inch.

+
+

New in version 0.1.0.

+
+
+ +
+
+unembed() XAImageEventsImage[source]
+

Removes any embedded ICC profiles from the image.

+
+
Returns:
+

The image object

+
+
Return type:
+

XAImageEventsImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.ImageEvents.XAImageEventsImageList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAImageList

+

A wrapper around lists of images that employs fast enumeration techniques.

+

All properties of images can be called as methods on the wrapped list, returning a list containing each image’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

bit_depth()

by_bit_depth(bit_depth)

by_color_space(color_space)

by_dimensions(dimensions)

by_embedded_profile(embedded_profile)

by_file_type(file_type)

by_image_file(image_file)

by_location(location)

by_name(name)

by_resolution(resolution)

color_space()

dimensions()

embed_profile(profile)

Embeds the specified ICC profile in each image of the list.

embedded_profile()

file_type()

image_file()

location()

modified_image_objects()

name()

original_image_objects()

properties()

resolution()

unembed()

Removes any embedded ICC profiles from each image of the list.

+
+
+bit_depth() list[PyXA.apps.ImageEvents.XAImageEventsApplication.BitDepth][source]
+
+ +
+
+by_bit_depth(bit_depth) BitDepth[source]
+
+ +
+
+by_color_space(color_space: ColorSpace) XAImageEventsImage[source]
+
+ +
+
+by_dimensions(dimensions: list[int]) XAImageEventsImage[source]
+
+ +
+
+by_embedded_profile(embedded_profile: XAImageEventsProfile) XAImageEventsImage[source]
+
+ +
+
+by_file_type(file_type: FileType) XAImageEventsImage[source]
+
+ +
+
+by_image_file(image_file: XAFile) XAImageEventsImage[source]
+
+ +
+
+by_location(location: XADiskItem) XAImageEventsImage[source]
+
+ +
+
+by_name(name: str) XAImageEventsImage[source]
+
+ +
+
+by_resolution(resolution: list[float]) XAImageEventsImage[source]
+
+ +
+
+color_space() list[PyXA.apps.ImageEvents.XAImageEventsApplication.ColorSpace][source]
+
+ +
+
+dimensions() list[list[int]][source]
+
+ +
+
+embed_profile(profile: XAImageEventsProfile) XAImageList[source]
+

Embeds the specified ICC profile in each image of the list.

+
+
Parameters:
+

profile (XAImageEventsProfile) – The ICC profile to embed in the image

+
+
Returns:
+

The list of modified images

+
+
Return type:
+

XABase.XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+embedded_profile() XAImageEventsProfileList[source]
+
+ +
+
+file_type() list[PyXA.apps.ImageEvents.XAImageEventsApplication.FileType][source]
+
+ +
+
+image_file() XAFileList[source]
+
+ +
+
+location() list[PyXA.XABase.XADiskItem][source]
+
+ +
+
+modified_image_objects() XAImageList[source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+original_image_objects() XAImageList[source]
+
+ +
+
+properties() list[Dict][source]
+
+ +
+
+resolution() list[float][source]
+
+ +
+
+unembed() XAImageList[source]
+

Removes any embedded ICC profiles from each image of the list.

+
+
Returns:
+

The list of modified images

+
+
Return type:
+

XABase.XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.ImageEvents.XAImageEventsMetadataTag(properties)[source]
+

Bases: XAObject

+

A metadata tag: EXIF, IPTC, etc.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + +

description

The description of the tag's function.

name

The name of the tag.

value

The current setting of the tag.

+
+
+property description: str
+

The description of the tag’s function.

+
+

New in version 0.1.0.

+
+
+ +
+
+property name: str
+

The name of the tag.

+
+

New in version 0.1.0.

+
+
+ +
+
+property value: Union[bool, int, float, str, XAImageEventsProfile, any]
+

The current setting of the tag.

+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.ImageEvents.XAImageEventsMetadataTagList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of metadata tags that employs fast enumeration techniques.

+

All properties of metadata tags can be called as methods on the wrapped list, returning a list containing each tag’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_description(description)

by_name(name)

by_value(value)

description()

name()

value()

+
+
+by_description(description: str) XAImageEventsMetadataTag[source]
+
+ +
+
+by_name(name: str) XAImageEventsMetadataTag[source]
+
+ +
+
+by_value(value: list[typing.Union[bool, int, float, str, PyXA.apps.ImageEvents.XAImageEventsProfile, <built-in function any>]]) XAImageEventsMetadataTag[source]
+
+ +
+
+description() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+value() list[typing.Union[bool, int, float, str, PyXA.apps.ImageEvents.XAImageEventsProfile, <built-in function any>]][source]
+
+ +
+ +
+
+class PyXA.apps.ImageEvents.XAImageEventsProfile(properties)[source]
+

Bases: XAObject

+

A ColorSync ICC profile.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

color_space

The color space of the profile.

connection_space

The connection space of the profile.

creation_date

The creation date of the profile.

creator

The creator type of the profile.

device_class

The device class of the profile.

device_manufacturer

The device manufacturer of the profile.

device_model

The device model of the profile.

location

The file location of the profile.

name

The description text of the profile.

platform

The intended platform of the profile.

preferred_cmm

The preferred CMM of the profile.

quality

The quality of the profile.

rendering_intent

The rendering intent of the profile.

size

The size of the profile in bytes.

version

The version number of the profile.

+
+
+property color_space: ColorSpace
+

The color space of the profile.

+
+

New in version 0.1.0.

+
+
+ +
+
+property connection_space: ConnectionSpace
+

The connection space of the profile.

+
+

New in version 0.1.0.

+
+
+ +
+
+property creation_date: datetime
+

The creation date of the profile.

+
+

New in version 0.1.0.

+
+
+ +
+
+property creator: str
+

The creator type of the profile.

+
+

New in version 0.1.0.

+
+
+ +
+
+property device_class: DeviceClass
+

The device class of the profile.

+
+

New in version 0.1.0.

+
+
+ +
+
+property device_manufacturer: str
+

The device manufacturer of the profile.

+
+

New in version 0.1.0.

+
+
+ +
+
+property device_model: int
+

The device model of the profile.

+
+

New in version 0.1.0.

+
+
+ +
+
+property location: XAAlias
+

The file location of the profile.

+
+

New in version 0.1.0.

+
+
+ +
+
+property name: str
+

The description text of the profile.

+
+

New in version 0.1.0.

+
+
+ +
+
+property platform: str
+

The intended platform of the profile.

+
+

New in version 0.1.0.

+
+
+ +
+
+property preferred_cmm: str
+

The preferred CMM of the profile.

+
+

New in version 0.1.0.

+
+
+ +
+
+property quality: ProfileQuality
+

The quality of the profile.

+
+

New in version 0.1.0.

+
+
+ +
+
+property rendering_intent: RenderingIntent
+

The rendering intent of the profile.

+
+

New in version 0.1.0.

+
+
+ +
+
+property size: int
+

The size of the profile in bytes.

+
+

New in version 0.1.0.

+
+
+ +
+
+property version: str
+

The version number of the profile.

+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.ImageEvents.XAImageEventsProfileList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of profiles that employs fast enumeration techniques.

+

All properties of profiles can be called as methods on the wrapped list, returning a list containing each profile’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_color_space(color_space)

by_connection_space(connection_space)

by_creation_date(creation_date)

by_creator(creator)

by_device_class(device_class)

by_device_manufacturer(device_manufacturer)

by_device_model(device_model)

by_location(location)

by_name(name)

by_platform(platform)

by_preferred_cmm(preferred_cmm)

by_quality(quality)

by_rendering_intent(rendering_intent)

by_size(size)

by_version(version)

color_space()

connection_space()

creation_date()

creator()

device_class()

device_manufacturer()

device_model()

location()

name()

platform()

preferred_cmm()

quality()

rendering_intent()

size()

version()

+
+
+by_color_space(color_space: ColorSpace) XAImageEventsProfile[source]
+
+ +
+
+by_connection_space(connection_space: ConnectionSpace) XAImageEventsProfile[source]
+
+ +
+
+by_creation_date(creation_date: datetime) XAImageEventsProfile[source]
+
+ +
+
+by_creator(creator) XAImageEventsProfile[source]
+
+ +
+
+by_device_class(device_class: DeviceClass) XAImageEventsProfile[source]
+
+ +
+
+by_device_manufacturer(device_manufacturer: str) XAImageEventsProfile[source]
+
+ +
+
+by_device_model(device_model: str) XAImageEventsProfile[source]
+
+ +
+
+by_location(location: XAAlias) XAImageEventsProfile[source]
+
+ +
+
+by_name(name: str) XAImageEventsProfile[source]
+
+ +
+
+by_platform(platform: str) XAImageEventsProfile[source]
+
+ +
+
+by_preferred_cmm(preferred_cmm: str) XAImageEventsProfile[source]
+
+ +
+
+by_quality(quality: ProfileQuality) XAImageEventsProfile[source]
+
+ +
+
+by_rendering_intent(rendering_intent: RenderingIntent) XAImageEventsProfile[source]
+
+ +
+
+by_size(size: int) XAImageEventsProfile[source]
+
+ +
+
+by_version(version: str) XAImageEventsProfile[source]
+
+ +
+
+color_space() list[PyXA.apps.ImageEvents.XAImageEventsApplication.ColorSpace][source]
+
+ +
+
+connection_space() list[PyXA.apps.ImageEvents.XAImageEventsApplication.ConnectionSpace][source]
+
+ +
+
+creation_date() list[datetime.datetime][source]
+
+ +
+
+creator() list[str][source]
+
+ +
+
+device_class() list[PyXA.apps.ImageEvents.XAImageEventsApplication.DeviceClass][source]
+
+ +
+
+device_manufacturer() list[str][source]
+
+ +
+
+device_model() list[int][source]
+
+ +
+
+location() XAAliasList[source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+platform() list[str][source]
+
+ +
+
+preferred_cmm() list[str][source]
+
+ +
+
+quality() list[PyXA.apps.ImageEvents.XAImageEventsApplication.ProfileQuality][source]
+
+ +
+
+rendering_intent() list[PyXA.apps.ImageEvents.XAImageEventsApplication.RenderingIntent][source]
+
+ +
+
+size() list[int][source]
+
+ +
+
+version() list[str][source]
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/iterm.html b/docs/reference/apps/iterm.html new file mode 100644 index 0000000..d47e659 --- /dev/null +++ b/docs/reference/apps/iterm.html @@ -0,0 +1,1060 @@ + + + + + + + iTerm Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

iTerm Module Reference

+
+

New in version 0.1.0.

+
+

Control iTerm using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + +

XAiTermApplication(properties)

A class for managing and interacting with iTerm.app.

XAiTermHotkeyWindow(properties)

A hotkey window of iTerm.app.

XAiTermSession(properties)

A session of iTerm.app.

XAiTermTab(properties)

A tab of iTerm.app.

XAiTermWindow(properties)

A window of iTerm.app.

+
+
+class PyXA.apps.iTerm.XAiTermApplication(properties)[source]
+

Bases: XASBApplication

+

A class for managing and interacting with iTerm.app.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + +

create_hotkey_window([profile])

Creates a new hotkey window with the given profile.

create_window([profile, command])

Creates a new window with the given profile, executing the specified command upon the window's creation.

invoke_api_expression(expression)

Invokes an expression, such as a registered function.

launch_api_script(script_name[, arguments])

Launches an API script by name, providing it with the given arguments.

request_cookie_and_key(app)

Requests a Python API cookie for the specified application.

+

Attributes:

+ + + + + + + + + + + + + + + +

current_window

The frontmost window.

frontmost

Whether iTerm is the active application.

name

The name of the application.

version

The version of iTerm.app.

+
+
+create_hotkey_window(profile: Optional[str] = None) XAiTermHotkeyWindow[source]
+

Creates a new hotkey window with the given profile.

+
+
Parameters:
+

profile (Union[str, None], optional) – The profile to initialize the window with, defaults to None

+
+
Returns:
+

The newly created hotkey window object

+
+
Return type:
+

XAiTermHotkeyWindow

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+create_window(profile: Optional[str] = None, command: Optional[str] = None) XAiTermWindow[source]
+

Creates a new window with the given profile, executing the specified command upon the window’s creation.

+
+
Parameters:
+
    +
  • profile (Union[str, None], optional) – The profile to initialize the window with, defaults to None (default profile)

  • +
  • command (Union[str, None], optional) – The command to execute, defaults to None

  • +
+
+
Returns:
+

The newly created window object

+
+
Return type:
+

XAiTermWindow

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property current_window: XAiTermWindow
+

The frontmost window.

+
+ +
+
+property frontmost: bool
+

Whether iTerm is the active application.

+
+ +
+
+invoke_api_expression(expression: str)[source]
+

Invokes an expression, such as a registered function.

+
+
Parameters:
+

expression (str) – The expression to invoke

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+launch_api_script(script_name: str, arguments: Optional[list[str]] = None)[source]
+

Launches an API script by name, providing it with the given arguments.

+
+
Parameters:
+
    +
  • script_name (str) – The name of the script to launch

  • +
  • arguments (Union[list[str], None], optional) – The arguments to pass to the script, defaults to None

  • +
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+ +

Requests a Python API cookie for the specified application.

+
+
Parameters:
+

app (str) – The app to retrieve an API cookie for

+
+
Returns:
+

The API cookie

+
+
Return type:
+

str

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property version: str
+

The version of iTerm.app.

+
+ +
+ +
+
+class PyXA.apps.iTerm.XAiTermHotkeyWindow(properties)[source]
+

Bases: XAiTermWindow

+

A hotkey window of iTerm.app.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + +

hide_hotkey_window()

Hides the hotkey window.

reveal_hotkey_window()

Reveals the hotkey window.

toggle_hotkey_window()

Toggles the hotkey window.

+
+
+hide_hotkey_window()[source]
+

Hides the hotkey window.

+
+

New in version 0.1.0.

+
+
+ +
+
+reveal_hotkey_window()[source]
+

Reveals the hotkey window.

+
+

New in version 0.1.0.

+
+
+ +
+
+toggle_hotkey_window()[source]
+

Toggles the hotkey window.

+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.iTerm.XAiTermSession(properties)[source]
+

Bases: XAObject, XACloseable, XASelectable

+

A session of iTerm.app.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

ansi_black_color

ansi_blue_color

ansi_bright_black_color

ansi_bright_blue_color

ansi_bright_cyan_color

ansi_bright_green_color

ansi_bright_magenta_color

ansi_bright_red_color

ansi_bright_white_color

ansi_bright_yellow_color

ansi_cyan_color

ansi_green_color

ansi_magenta_color

ansi_red_color

ansi_white_color

ansi_yellow_color

answerback_string

ENQ Answerback string.

background_color

background_image

The path of the background image file.

bold_color

color_preset

The color preset of the session.

columns

The number of columns in the terminal window.

contents

The currently visible contents of the session.

cursor_color

cursor_text_color

foreground_color

id

The unique identifier of the session.

is_at_shell_prompt

Whether the terminal is at the shell prompt.

is_processing

Whether the session is currently processing.

name

The name of the session.

profile_name

The session's profile name.

rows

The number of rows in the terminal window.

selected_text_color

selection_color

text

The currently visible contents of the session.

transparency

The transparency of the session window.

tty

The current TTY.

underline_color

unique_id

The unique identifier of the session.

use_underline_color

Whether to use a dedicated color for underlining.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

close()

Closes the session.

set_variable(variable_name, value)

Sets the value of a session variable.

split_horizontally([profile, command])

Splits the session horizontally, instantiating a new session with the specified profile.

split_horizontally_with_default_profile([...])

Splits the session horizontally, instantiating a new session with the default profile.

split_vertically([profile, command])

Splits the session vertically, instantiating a new session with the specified profile.

split_vertically_with_default_profile(command)

Splits the session vertically, instantiating a new session with the default profile.

variable(variable_name)

Returns the value of a session variable with the given name.

write([text, file, add_newline])

Writes a string or file contents to the session.

+
+
+property ansi_black_color: XAColor
+
+ +
+
+property ansi_blue_color: XAColor
+
+ +
+
+property ansi_bright_black_color: XAColor
+
+ +
+
+property ansi_bright_blue_color: XAColor
+
+ +
+
+property ansi_bright_cyan_color: XAColor
+
+ +
+
+property ansi_bright_green_color: XAColor
+
+ +
+
+property ansi_bright_magenta_color: XAColor
+
+ +
+
+property ansi_bright_red_color: XAColor
+
+ +
+
+property ansi_bright_white_color: XAColor
+
+ +
+
+property ansi_bright_yellow_color: XAColor
+
+ +
+
+property ansi_cyan_color: XAColor
+
+ +
+
+property ansi_green_color: XAColor
+
+ +
+
+property ansi_magenta_color: XAColor
+
+ +
+
+property ansi_red_color: XAColor
+
+ +
+
+property ansi_white_color: XAColor
+
+ +
+
+property ansi_yellow_color: XAColor
+
+ +
+
+property answerback_string: str
+

ENQ Answerback string.

+
+ +
+
+property background_color: XAColor
+
+ +
+
+property background_image: str
+

The path of the background image file.

+
+ +
+
+property bold_color: XAColor
+
+ +
+
+close()[source]
+

Closes the session.

+
+

New in version 0.1.0.

+
+
+ +
+
+property color_preset: str
+

The color preset of the session.

+
+ +
+
+property columns: int
+

The number of columns in the terminal window.

+
+ +
+
+property contents: str
+

The currently visible contents of the session.

+
+ +
+
+property cursor_color: XAColor
+
+ +
+
+property cursor_text_color: XAColor
+
+ +
+
+property foreground_color: XAColor
+
+ +
+
+property id: str
+

The unique identifier of the session.

+
+ +
+
+property is_at_shell_prompt: bool
+

Whether the terminal is at the shell prompt.

+
+ +
+
+property is_processing: bool
+

Whether the session is currently processing.

+
+ +
+
+property name: str
+

The name of the session.

+
+ +
+
+property profile_name: str
+

The session’s profile name.

+
+ +
+
+property rows: int
+

The number of rows in the terminal window.

+
+ +
+
+property selected_text_color: XAColor
+
+ +
+
+property selection_color: XAColor
+
+ +
+
+set_variable(variable_name: str, value: str) str[source]
+

Sets the value of a session variable.

+
+
Parameters:
+
    +
  • variable_name (str) – The name of the variable to set

  • +
  • value (str) – The value to give the variable

  • +
+
+
Returns:
+

The new value of the variable

+
+
Return type:
+

str

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+split_horizontally(profile: Optional[str] = None, command: Optional[str] = None)[source]
+

Splits the session horizontally, instantiating a new session with the specified profile.

+
+
Parameters:
+
    +
  • profile (Union[str, None], optional) – The profile to instantiate the new session with, defaults to None (current profile)

  • +
  • command (Union[str, None], optional) – The command to run in the newly created session upon its creation, defaults to None

  • +
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+split_horizontally_with_default_profile(command: Optional[str] = None)[source]
+

Splits the session horizontally, instantiating a new session with the default profile.

+
+
Parameters:
+

command (Union[str, None]) – The command to run in the newly created session upon its creation, defaults to None

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+split_vertically(profile: Optional[str] = None, command: Optional[str] = None)[source]
+

Splits the session vertically, instantiating a new session with the specified profile.

+
+
Parameters:
+
    +
  • profile (Union[str, None], optional) – The profile to instantiate the new session with, defaults to None (current profile)

  • +
  • command (Union[str, None], optional) – The command to run in the newly created session upon its creation, defaults to None

  • +
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+split_vertically_with_default_profile(command: Optional[str])[source]
+

Splits the session vertically, instantiating a new session with the default profile.

+
+
Parameters:
+

command (Union[str, None]) – The command to run in the newly created session upon its creation, defaults to None

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property text: str
+

The currently visible contents of the session.

+
+ +
+
+property transparency: float
+

The transparency of the session window.

+
+ +
+
+property tty: str
+

The current TTY.

+
+ +
+
+property underline_color: XAColor
+
+ +
+
+property unique_id: str
+

The unique identifier of the session.

+
+ +
+
+property use_underline_color: bool
+

Whether to use a dedicated color for underlining.

+
+ +
+
+variable(variable_name: str) str[source]
+

Returns the value of a session variable with the given name.

+
+
Parameters:
+

variable_name (str) – The name of the variable to retrieve the value on

+
+
Returns:
+

The value of the variable

+
+
Return type:
+

str

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+write(text: Optional[str] = None, file: Optional[Union[XAPath, str]] = None, add_newline: bool = True)[source]
+

Writes a string or file contents to the session.

+
+
Parameters:
+
    +
  • text (Union[str, None], optional) – The text to input into the session, defaults to None

  • +
  • file (Union[XABase.XAPath, str, None], optional) – The file whose contents to input into the session, defaults to None

  • +
  • add_newline (bool, optional) – Whether to add a new line after inputting the specified content, defaults to True

  • +
+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.iTerm.XAiTermTab(properties)[source]
+

Bases: XAObject, XACloseable, XASelectable

+

A tab of iTerm.app.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + +

close()

Closes the tab.

move_to(window)

+

Attributes:

+ + + + + + + + + +

current_session

The current session in a tab.

index

Index of tab in parent tab view control.

+
+
+close()[source]
+

Closes the tab.

+
+

New in version 0.1.0.

+
+
+ +
+
+property current_session: XAiTermSession
+

The current session in a tab.

+
+ +
+
+property index: int
+

Index of tab in parent tab view control.

+
+ +
+
+move_to(window: XAiTermWindow)[source]
+
+ +
+ +
+
+class PyXA.apps.iTerm.XAiTermWindow(properties)[source]
+

Bases: XASBWindow, XAObject, XASelectable, XACloseable

+

A window of iTerm.app.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

alternate_identifier

The alternate unique identifier of the session.

current_session

The current session in a window.

current_tab

The currently selected tab.

frontmost

Whether the window is currently the frontmost iTerm window.

hotkey_window_profile

If the window is a hotkey window, this gives the name of the profile that created the window.

is_hotkey_window

Whether the window is a hotkey window.

position

The position of the window, relative to the upper left corner of the screen.

+

Methods:

+ + + + + + + + + +

close()

Closes the window.

create_tab([profile, command])

Creates a new tab with the given profile, executing the specified command upon the tab's creation.

+
+
+property alternate_identifier: str
+

The alternate unique identifier of the session.

+
+ +
+
+close()[source]
+

Closes the window.

+
+

New in version 0.1.0.

+
+
+ +
+
+create_tab(profile: Optional[str] = None, command: Optional[str] = None)[source]
+

Creates a new tab with the given profile, executing the specified command upon the tab’s creation.

+
+
Parameters:
+
    +
  • profile (Union[str, None], optional) – The name of the profile to assign to the tab, if any, defaults to None (default profile)

  • +
  • command (Union[str, None], optional) – The command to run in the tab, if any, defaults to None

  • +
+
+
+
+ +
+
+property current_session: XAiTermSession
+

The current session in a window.

+
+ +
+
+property current_tab: XAiTermTab
+

The currently selected tab.

+
+ +
+
+property frontmost: bool
+

Whether the window is currently the frontmost iTerm window.

+
+ +
+
+property hotkey_window_profile: str
+

If the window is a hotkey window, this gives the name of the profile that created the window.

+
+ +
+
+property is_hotkey_window: bool
+

Whether the window is a hotkey window.

+
+ +
+
+property position: tuple[int, int]
+

The position of the window, relative to the upper left corner of the screen.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/iwork.html b/docs/reference/apps/iwork.html new file mode 100644 index 0000000..59a5840 --- /dev/null +++ b/docs/reference/apps/iwork.html @@ -0,0 +1,4458 @@ + + + + + + + iWork Base Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

iWork Base Reference

+
+

New in version 0.1.1.

+
+

Control iWork applications using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XAiWorkApplication(properties)

A class for managing and interacting with iWork applications.

XAiWorkAudioClip(properties)

A class for managing and interacting with audio clips in Keynote.

XAiWorkAudioClipList(properties[, filter])

A wrapper around lists of audio clips that employs fast enumeration techniques.

XAiWorkCell(properties)

A class for managing and interacting with table cells in Keynote.

XAiWorkCellList(properties[, filter])

A wrapper around lists of cells that employs fast enumeration techniques.

XAiWorkChart(properties)

A class for managing and interacting with charts in Keynote.

XAiWorkChartList(properties[, filter])

A wrapper around lists of themes that employs fast enumeration techniques.

XAiWorkColumn(properties)

A class for managing and interacting with table columns in Keynote.

XAiWorkColumnList(properties[, filter])

A wrapper around lists of columns that employs fast enumeration techniques.

XAiWorkContainer(properties)

A class for managing and interacting with containers in Keynote.

XAiWorkContainerList(properties[, filter, ...])

A wrapper around lists of containers that employs fast enumeration techniques.

XAiWorkDocument(properties)

A class for managing and interacting with TextEdit documents.

XAiWorkDocumentList(properties[, filter, ...])

A wrapper around lists of themes that employs fast enumeration techniques.

XAiWorkGroup(properties)

A class for managing and interacting with iWork item groups in Keynote.

XAiWorkGroupList(properties[, filter])

A wrapper around lists of themes that employs fast enumeration techniques.

XAiWorkImage(properties)

A class for managing and interacting with images in Keynote.

XAiWorkImageList(properties[, filter])

A wrapper around lists of images that employs fast enumeration techniques.

XAiWorkLine(properties)

A class for managing and interacting with lines in Keynote.

XAiWorkLineList(properties[, filter])

A wrapper around lists of shapes that employs fast enumeration techniques.

XAiWorkMovie(properties)

A class for managing and interacting with movie containers in Keynote.

XAiWorkMovieList(properties[, filter])

A wrapper around lists of movies that employs fast enumeration techniques.

XAiWorkRange(properties)

A class for managing and interacting with ranges of table cells in Keynote.

XAiWorkRangeList(properties[, filter, obj_class])

A wrapper around lists of themes that employs fast enumeration techniques.

XAiWorkRow(properties)

A class for managing and interacting with table rows in Keynote.

XAiWorkRowList(properties[, filter])

A wrapper around lists of rows that employs fast enumeration techniques.

XAiWorkShape(properties)

A class for managing and interacting with shapes in Keynote.

XAiWorkShapeList(properties[, filter])

A wrapper around lists of shapes that employs fast enumeration techniques.

XAiWorkTable(properties)

A class for managing and interacting with tables in Keynote.

XAiWorkTableList(properties[, filter])

A wrapper around lists of shapes that employs fast enumeration techniques.

XAiWorkTextItem(properties)

A class for managing and interacting with text items in Keynote.

XAiWorkTextItemList(properties[, filter])

A wrapper around lists of text items that employs fast enumeration techniques.

XAiWorkWindow(properties)

A window of an iWork application.

XAiWorkiWorkItem(properties)

A class for managing and interacting with text, shapes, images, and other elements in Keynote.

XAiWorkiWorkItemList(properties[, filter, ...])

A wrapper around a list of documents.

+
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkApplication(properties)[source]
+

Bases: XASBApplication, XACanOpenPath

+

A class for managing and interacting with iWork applications.

+
+

New in version 0.1.1.

+
+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Alignment(value[, names, module, qualname, ...])

Options for the horizontal and vertical alignment of content within table containers.

CellFormat(value[, names, module, qualname, ...])

Options for the format to use when formatting table cells.

ChartGrouping(value[, names, module, ...])

Options for how data is grouped within a chart.

ChartType(value[, names, module, qualname, ...])

Options for available chart types.

FillOption(value[, names, module, qualname, ...])

Options for the type of fill to use.

ImageQuality(value[, names, module, ...])

Options for the quality of exported images.

KeyAction(value[, names, module, qualname, ...])

Options for key states and interactions.

RepetitionMethod(value[, names, module, ...])

Options for whether and how a clip will repeat.

SortDirection(value[, names, module, ...])

Options for the direction of sorting when sorting table cells.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

current_document

The current document of the front window.

frontmost

Whether this application is the active application.

name

The name of the application.

properties

All properties of the Keynote application.

version

The application version number.

+

Methods:

+ + + + + + + + + + + + + + + +

open(path)

Opens the file at the given filepath.

print(item[, print_properties, show_dialog])

Prints a document or window.

remove_password(document, password)

Removes the password from a document.

set_password(document, password, hint[, ...])

Sets the password of an unencrypted document, optionally storing the password in the user's keychain.

+
+
+class Alignment(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for the horizontal and vertical alignment of content within table containers.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

AUTO

Auto-align based on content type.

BOTTOM

Bottom-align content.

CENTER_HORIZONTAL

Center-align content.

CENTER_VERTICAL

Center-align content.

JUSTIFY

Fully justify (left and right) content.

LEFT

Left-align content.

RIGHT

Right-align content.

TOP

Top-align content.

+
+
+AUTO = 1633777012
+

Auto-align based on content type.

+
+ +
+
+BOTTOM = 1635148404
+

Bottom-align content.

+
+ +
+
+CENTER_HORIZONTAL = 1633907826
+

Center-align content.

+
+ +
+
+CENTER_VERTICAL = 1633907826
+

Center-align content.

+
+ +
+
+JUSTIFY = 1634366324
+

Fully justify (left and right) content.

+
+ +
+
+LEFT = 1634494068
+

Left-align content.

+
+ +
+
+RIGHT = 1634888052
+

Right-align content.

+
+ +
+
+TOP = 1635153008
+

Top-align content.

+
+ +
+ +
+
+class CellFormat(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for the format to use when formatting table cells.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

AUTO

Automatic format

CHECKBOX

Checkbox control format (Numbers only)

CURRENCY

Currency number format

DATE_AND_TIME

Date and time format

DECIMAL_NUMBER

Decimal number format

DURATION

Duration format

FRACTION

Fraction number format

NUMERAL_SYSTEM

Numeral System

PERCENT

Percentage number format

POPUP_MENU

Pop-up menu control format (Numbers only)

RATING

Rating format.

SCIENTIFIC

Scientific notation format

SLIDER

Slider control format (Numbers only)

STEPPER

Stepper control format (Numbers only)

TEXT

Text format

+
+
+AUTO = 1717663092
+

Automatic format

+
+ +
+
+CHECKBOX = 1717789544
+

Checkbox control format (Numbers only)

+
+ +
+
+CURRENCY = 1717794162
+

Currency number format

+
+ +
+
+DATE_AND_TIME = 1717859437
+

Date and time format

+
+ +
+
+DECIMAL_NUMBER = 1852662386
+

Decimal number format

+
+ +
+
+DURATION = 1717859698
+

Duration format

+
+ +
+
+FRACTION = 1717989985
+

Fraction number format

+
+ +
+
+NUMERAL_SYSTEM = 1717792371
+

Numeral System

+
+ +
+
+PERCENT = 1718642034
+

Percentage number format

+
+ +
+
+POPUP_MENU = 1717792880
+

Pop-up menu control format (Numbers only)

+
+ +
+
+RATING = 1718772084
+

Rating format. (Numbers only)

+
+ +
+
+SCIENTIFIC = 1718838121
+

Scientific notation format

+
+ +
+
+SLIDER = 1717793644
+

Slider control format (Numbers only)

+
+ +
+
+STEPPER = 1717793652
+

Stepper control format (Numbers only)

+
+ +
+
+TEXT = 1668577396
+

Text format

+
+ +
+ +
+
+class ChartGrouping(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for how data is grouped within a chart.

+

Attributes:

+ + + + + + + + + +

COLUMN

Group by column

ROW

Group by row

+
+
+COLUMN = 1262708579
+

Group by column

+
+ +
+
+ROW = 1262708594
+

Group by row

+
+ +
+ +
+
+class ChartType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for available chart types.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

AREA_2D

Two-dimensional area chart.

AREA_3D

Three-dimensional area chart

HORIZONTAL_BAR_2D

Two-dimensional horizontal bar chart

HORIZONTAL_BAR_3D

Three-dimensional horizontal bar chart

LINE_2D

Two-dimensional line chart.

LINE_3D

Three-dimensional line chart

PIE_2D

Two-dimensional pie chart

PIE_3D

Three-dimensional pie chart.

SCATTERPLOT_2D

Two-dimensional scatterplot chart

STACKED_AREA_2D

Two-dimensional stacked area chart

STACKED_AREA_3D

Three-dimensional stacked area chart

STACKED_HORIZONTAL_BAR_2D

Two-dimensional stacked horizontal bar chart

STACKED_HORIZONTAL_BAR_3D

Three-dimensional stacked horizontal bar chart

STACKED_VERTICAL_BAR_2D

Two-dimensional stacked vertical bar chart

STACKED_VERTICAL_BAR_3D

Three-dimensional stacked bar chart

VERTICAL_BAR_2D

Two-dimensional vertical bar chart

VERTICAL_BAR_3D

Three-dimensional vertical bar chart

+
+
+AREA_2D = 1634886962
+

Two-dimensional area chart.

+
+ +
+
+AREA_3D = 1634886963
+

Three-dimensional area chart

+
+ +
+
+HORIZONTAL_BAR_2D = 1751282226
+

Two-dimensional horizontal bar chart

+
+ +
+
+HORIZONTAL_BAR_3D = 1751282227
+

Three-dimensional horizontal bar chart

+
+ +
+
+LINE_2D = 1818848818
+

Two-dimensional line chart.

+
+ +
+
+LINE_3D = 1818848819
+

Three-dimensional line chart

+
+ +
+
+PIE_2D = 1885955378
+

Two-dimensional pie chart

+
+ +
+
+PIE_3D = 1885955379
+

Three-dimensional pie chart.

+
+ +
+
+SCATTERPLOT_2D = 1935896626
+

Two-dimensional scatterplot chart

+
+ +
+
+STACKED_AREA_2D = 1935766066
+

Two-dimensional stacked area chart

+
+ +
+
+STACKED_AREA_3D = 1935766067
+

Three-dimensional stacked area chart

+
+ +
+
+STACKED_HORIZONTAL_BAR_2D = 1936220722
+

Two-dimensional stacked horizontal bar chart

+
+ +
+
+STACKED_HORIZONTAL_BAR_3D = 1936220723
+

Three-dimensional stacked horizontal bar chart

+
+ +
+
+STACKED_VERTICAL_BAR_2D = 1937138226
+

Two-dimensional stacked vertical bar chart

+
+ +
+
+STACKED_VERTICAL_BAR_3D = 1937138227
+

Three-dimensional stacked bar chart

+
+ +
+
+VERTICAL_BAR_2D = 1986163250
+

Two-dimensional vertical bar chart

+
+ +
+
+VERTICAL_BAR_3D = 1986163251
+

Three-dimensional vertical bar chart

+
+ +
+ +
+
+class FillOption(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for the type of fill to use.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

ADVANCED_GRADIENT_FILL

ADVANCED_IMAGE_FILL

COLOR_FILL

GRADIENT_FILL

IMAGE_FILL

NO_FILL

+
+
+ADVANCED_GRADIENT_FILL = 1718182247
+
+ +
+
+ADVANCED_IMAGE_FILL = 1718182249
+
+ +
+
+COLOR_FILL = 1718182767
+
+ +
+
+GRADIENT_FILL = 1718183794
+
+ +
+
+IMAGE_FILL = 1718184301
+
+ +
+
+NO_FILL = 1718185583
+
+ +
+ +
+
+class ImageQuality(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for the quality of exported images.

+

Attributes:

+ + + + + + + + + + + + +

BEST

Best quality

BETTER

Better quality

GOOD

Good quality

+
+
+BEST = 1265520690
+

Best quality

+
+ +
+
+BETTER = 1265520689
+

Better quality

+
+ +
+
+GOOD = 1265520688
+

Good quality

+
+ +
+ +
+
+class KeyAction(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for key states and interactions.

+

Attributes:

+ + + + + + + + + + + + + + + +

COMMAND_DOWN

CONTROL_DOWN

OPTION_DOWN

SHIFT_DOWN

+
+
+COMMAND_DOWN = 1264807268
+
+ +
+
+CONTROL_DOWN = 1264809068
+
+ +
+
+OPTION_DOWN = 1265594484
+
+ +
+
+SHIFT_DOWN = 1265854068
+
+ +
+ +
+
+class RepetitionMethod(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for whether and how a clip will repeat.

+

Attributes:

+ + + + + + + + + + + + +

LOOP

Clip repeats sequentially

LOOP_BACK_AND_FORTH

Clip boomerangs back and forth repeatedly

NONE

Clip does not repeat

+
+
+LOOP = 1836477552
+

Clip repeats sequentially

+
+ +
+
+LOOP_BACK_AND_FORTH = 1836474982
+

Clip boomerangs back and forth repeatedly

+
+ +
+
+NONE = 1836479086
+

Clip does not repeat

+
+ +
+ +
+
+class SortDirection(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for the direction of sorting when sorting table cells.

+

Attributes:

+ + + + + + + + + +

ASCENDING

Sort in increasing value order

DESCENDING

Sort in decreasing value order

+
+
+ASCENDING = 1634952046
+

Sort in increasing value order

+
+ +
+
+DESCENDING = 1685283694
+

Sort in decreasing value order

+
+ +
+ +
+
+property current_document: XAiWorkDocument
+

The current document of the front window.

+
+ +
+
+property frontmost: bool
+

Whether this application is the active application.

+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+open(path: Union[str, XAPath]) XAiWorkDocument[source]
+

Opens the file at the given filepath.

+
+
Parameters:
+

target (Union[str, XABase.XAPath]) – The path of the file to open.

+
+
Returns:
+

A reference to newly created document object

+
+
Return type:
+

XAiWorkDocument

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+print(item: Union[XAiWorkDocument, XASBWindow], print_properties: dict = None, show_dialog: bool = True) Self[source]
+

Prints a document or window.

+
+
Parameters:
+
    +
  • item (Union[XAiWorkDocument, XABaseScriptable.XASBWindow]) – The document or window to print

  • +
  • print_properties (dict, optional) – The settings to pre-populate the print dialog with, defaults to None

  • +
  • show_dialog (bool, optional) – Whether to show the print dialog or skip right to printing, defaults to True

  • +
+
+
Returns:
+

A reference to the PyXA application object

+
+
Return type:
+

Self

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+property properties: dict
+

All properties of the Keynote application.

+
+ +
+
+remove_password(document: XAiWorkDocument, password: str) Self[source]
+

Removes the password from a document.

+
+
Parameters:
+
    +
  • document (XAiWorkDocument) – The document to remove the password to

  • +
  • password (str) – The current password

  • +
+
+
Returns:
+

A reference to the PyXA application object

+
+
Return type:
+

Self

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+set_password(document: XAiWorkDocument, password: str, hint: str, save_in_keychain: bool = True) Self[source]
+

Sets the password of an unencrypted document, optionally storing the password in the user’s keychain.

+
+
Parameters:
+
    +
  • document (XAiWorkDocument) – The document to set the password for

  • +
  • password (str) – The password

  • +
  • hint (str) – A hint for the password

  • +
  • save_in_keychain (bool, optional) – Whether to save the password in the user’s keychain, defaults to True

  • +
+
+
Returns:
+

A reference to the PyXA application object

+
+
Return type:
+

Self

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+property version: str
+

The application version number.

+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkAudioClip(properties)[source]
+

Bases: XAiWorkiWorkItem

+

A class for managing and interacting with audio clips in Keynote.

+
+

New in version 0.1.1.

+
+

Attributes:

+ + + + + + + + + + + + +

clip_volume

The volume setting for the audio clip, from 0 to 100.

file_name

The name of the audio file.

repetition_method

Whether or how the audio clip repeats.

+
+
+property clip_volume: int
+

The volume setting for the audio clip, from 0 to 100.

+
+ +
+
+property file_name: str
+

The name of the audio file.

+
+ +
+
+property repetition_method: RepetitionMethod
+

Whether or how the audio clip repeats.

+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkAudioClipList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAiWorkiWorkItemList

+

A wrapper around lists of audio clips that employs fast enumeration techniques.

+

All properties of audio clips can be called as methods on the wrapped list, returning a list containing each audio clips’s value for the property.

+
+

New in version 0.1.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_clip_volume(clip_volume)

by_file_name(file_name)

by_repetition_method(repetition_method)

clip_volume()

file_name()

repetition_method()

+
+
+by_clip_volume(clip_volume: int) XAiWorkAudioClip[source]
+
+ +
+
+by_file_name(file_name: str) XAiWorkAudioClip[source]
+
+ +
+
+by_repetition_method(repetition_method: RepetitionMethod) XAiWorkAudioClip[source]
+
+ +
+
+clip_volume() list[int][source]
+
+ +
+
+file_name() list[str][source]
+
+ +
+
+repetition_method() list[PyXA.apps.iWorkApplicationBase.XAiWorkApplication.RepetitionMethod][source]
+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkCell(properties)[source]
+

Bases: XAiWorkRange

+

A class for managing and interacting with table cells in Keynote.

+
+

New in version 0.1.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

column

The cell's column.

formatted_value

The formatted form of the value stored in the cell.

formula

The formula in the cell as text.

properties

All properties of the cell.

row

The cell's row.

value

The value stored in the cell.

+
+
+property column: XAiWorkColumn
+

The cell’s column.

+
+ +
+
+property formatted_value: str
+

The formatted form of the value stored in the cell.

+
+ +
+
+property formula: str
+

The formula in the cell as text.

+
+ +
+
+property properties: dict
+

All properties of the cell.

+
+ +
+
+property row: XAiWorkRow
+

The cell’s row.

+
+ +
+
+property value: Optional[Union[int, float, datetime, str, bool]]
+

The value stored in the cell.

+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkCellList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAiWorkRangeList

+

A wrapper around lists of cells that employs fast enumeration techniques.

+

All properties of cells can be called as methods on the wrapped list, returning a list containing each cell’s value for the property.

+
+

New in version 0.1.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_column(column)

by_formatted_value(formatted_value)

by_formula(formula)

by_properties(properties)

by_row(row)

by_value(value)

column()

formatted_value()

formula()

properties()

row()

value()

+
+
+by_column(column: XAiWorkColumn) Optional[XAiWorkCell][source]
+
+ +
+
+by_formatted_value(formatted_value: str) Optional[XAiWorkCell][source]
+
+ +
+
+by_formula(formula: str) Optional[XAiWorkCell][source]
+
+ +
+
+by_properties(properties: dict) Optional[XAiWorkCell][source]
+
+ +
+
+by_row(row: XAiWorkRow) Optional[XAiWorkCell][source]
+
+ +
+
+by_value(value: Any) Optional[XAiWorkCell][source]
+
+ +
+
+column() XAiWorkColumnList[source]
+
+ +
+
+formatted_value() list[str][source]
+
+ +
+
+formula() list[str][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+
+row() XAiWorkRowList[source]
+
+ +
+
+value() list[Any][source]
+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkChart(properties)[source]
+

Bases: XAiWorkiWorkItem

+

A class for managing and interacting with charts in Keynote.

+
+

New in version 0.1.1.

+
+
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkChartList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAiWorkiWorkItemList

+

A wrapper around lists of themes that employs fast enumeration techniques.

+

All properties of themes can be called as methods on the wrapped list, returning a list containing each theme’s value for the property.

+
+

New in version 0.1.1.

+
+
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkColumn(properties)[source]
+

Bases: XAiWorkRange

+

A class for managing and interacting with table columns in Keynote.

+
+

New in version 0.1.1.

+
+

Attributes:

+ + + + + + + + + + + + +

address

The index of the column in the table.

properties

All properties of the column.

width

The width of the column in pixels.

+
+
+property address: int
+

The index of the column in the table.

+
+ +
+
+property properties: dict
+

All properties of the column.

+
+ +
+
+property width: float
+

The width of the column in pixels.

+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkColumnList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAiWorkRangeList

+

A wrapper around lists of columns that employs fast enumeration techniques.

+

All properties of columns can be called as methods on the wrapped list, returning a list containing each column’s value for the property.

+
+

New in version 0.1.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

address()

by_address(address)

by_properties(properties)

by_width(width)

properties()

width()

+
+
+address() list[float][source]
+
+ +
+
+by_address(address: float) Optional[XAiWorkColumn][source]
+
+ +
+
+by_properties(properties: dict) Optional[XAiWorkColumn][source]
+
+ +
+
+by_width(width: int) Optional[XAiWorkColumn][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+
+width() list[int][source]
+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkContainer(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with containers in Keynote.

+ +
+

New in version 0.1.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

audio_clips([filter])

Returns a list of audio clips, as PyXA objects, matching the given filter.

charts([filter])

Returns a list of charts, as PyXA objects, matching the given filter.

groups([filter])

Returns a list of groups, as PyXA objects, matching the given filter.

images([filter])

Returns a list of images, as PyXA objects, matching the given filter.

iwork_items([filter])

Returns a list of iWork items, as PyXA objects, matching the given filter.

lines([filter])

Returns a list of lines, as PyXA objects, matching the given filter.

movies([filter])

Returns a list of movies, as PyXA objects, matching the given filter.

shapes([filter])

Returns a list of shapes, as PyXA objects, matching the given filter.

tables([filter])

Returns a list of tables, as PyXA objects, matching the given filter.

text_items([filter])

Returns a list of text_items, as PyXA objects, matching the given filter.

+
+
+audio_clips(filter: Optional[dict] = None) XAiWorkAudioClipList[source]
+

Returns a list of audio clips, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned audio clips will have, or None

+
+
Returns:
+

The list of audio clips

+
+
Return type:
+

XAiWorkAudioClipList

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+charts(filter: Optional[dict] = None) XAiWorkChartList[source]
+

Returns a list of charts, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned charts will have, or None

+
+
Returns:
+

The list of charts

+
+
Return type:
+

XAiWorkChartList

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+groups(filter: Optional[dict] = None) XAiWorkGroupList[source]
+

Returns a list of groups, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned groups will have, or None

+
+
Returns:
+

The list of groups

+
+
Return type:
+

XAiWorkGroupList

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+images(filter: Optional[dict] = None) XAiWorkImageList[source]
+

Returns a list of images, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned images will have, or None

+
+
Returns:
+

The list of images

+
+
Return type:
+

XAiWorkImageList

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+iwork_items(filter: Optional[dict] = None) XAiWorkiWorkItemList[source]
+

Returns a list of iWork items, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned iWork items will have, or None

+
+
Returns:
+

The list of iWork items

+
+
Return type:
+

XAiWorkiWorkItemList

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+lines(filter: Optional[dict] = None) XAiWorkLineList[source]
+

Returns a list of lines, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned lines will have, or None

+
+
Returns:
+

The list of lines

+
+
Return type:
+

XAiWorkLineList

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+movies(filter: Optional[dict] = None) XAiWorkMovieList[source]
+

Returns a list of movies, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned movies will have, or None

+
+
Returns:
+

The list of movies

+
+
Return type:
+

XAiWorkMovieList

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+shapes(filter: Optional[dict] = None) XAiWorkShapeList[source]
+

Returns a list of shapes, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned shapes will have, or None

+
+
Returns:
+

The list of shapes

+
+
Return type:
+

XAiWorkShapeList

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+tables(filter: Optional[dict] = None) XAiWorkTableList[source]
+

Returns a list of tables, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned tables will have, or None

+
+
Returns:
+

The list of tables

+
+
Return type:
+

XAiWorkTableList

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+text_items(filter: Optional[dict] = None) XAiWorkTextItemList[source]
+

Returns a list of text_items, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned text_items will have, or None

+
+
Returns:
+

The list of text_items

+
+
Return type:
+

XAiWorkTextItemList

+
+
+
+

New in version 0.1.1.

+
+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkContainerList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList

+

A wrapper around lists of containers that employs fast enumeration techniques.

+
+

New in version 0.1.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

charts([filter])

groups([filter])

images([filter])

iwork_items([filter])

lines([filter])

movies([filter])

shapes([filter])

tables([filter])

text_items([filter])

+
+
+charts(filter: Optional[dict] = None) XAiWorkChartList[source]
+
+ +
+
+groups(filter: Optional[dict] = None) XAiWorkGroupList[source]
+
+ +
+
+images(filter: Optional[dict] = None) XAiWorkImageList[source]
+
+ +
+
+iwork_items(filter: Optional[dict] = None) XAiWorkiWorkItemList[source]
+
+ +
+
+lines(filter: Optional[dict] = None) XAiWorkLineList[source]
+
+ +
+
+movies(filter: Optional[dict] = None) XAiWorkMovieList[source]
+
+ +
+
+shapes(filter: Optional[dict] = None) XAiWorkShapeList[source]
+
+ +
+
+tables(filter: Optional[dict] = None) XAiWorkTableList[source]
+
+ +
+
+text_items(filter: Optional[dict] = None) XAiWorkTextItemList[source]
+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkDocument(properties)[source]
+

Bases: XASBPrintable, XACloseable

+

A class for managing and interacting with TextEdit documents.

+
+

See also

+

XAiWorkApplication

+
+
+

New in version 0.1.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

file

The location of the document on the disk, if one exists.

id

The unique identifier for the document.

modified

Whether the document has been modified since its last save.

name

The name of the document.

password_protected

Whether the document is password protected.

properties

All properties of the document.

selection

A list of the currently selected items.

+
+
+property file: XAPath
+

The location of the document on the disk, if one exists.

+
+ +
+
+property id: str
+

The unique identifier for the document.

+
+ +
+
+property modified: bool
+

Whether the document has been modified since its last save.

+
+ +
+
+property name: str
+

The name of the document.

+
+ +
+
+property password_protected: bool
+

Whether the document is password protected.

+
+ +
+
+property properties: dict
+

All properties of the document.

+
+ +
+
+property selection: XAiWorkiWorkItemList
+

A list of the currently selected items.

+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkDocumentList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList

+

A wrapper around lists of themes that employs fast enumeration techniques.

+

All properties of themes can be called as methods on the wrapped list, returning a list containing each theme’s value for the property.

+
+

New in version 0.1.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_file(file)

by_id(id)

by_modified(modified)

by_name(name)

by_password_protected(password_protected)

by_properties(properties)

by_selection(selection)

file()

id()

modified()

name()

password_protected()

properties()

selection()

+
+
+by_file(file: Union[str, XAPath]) Optional[XAiWorkDocument][source]
+
+ +
+
+by_id(id: str) Optional[XAiWorkDocument][source]
+
+ +
+
+by_modified(modified: bool) Optional[XAiWorkDocument][source]
+
+ +
+
+by_name(name: str) Optional[XAiWorkDocument][source]
+
+ +
+
+by_password_protected(password_protected: bool) Optional[XAiWorkDocument][source]
+
+ +
+
+by_properties(properties: dict) Optional[XAiWorkDocument][source]
+
+ +
+
+by_selection(selection: Union[XAiWorkiWorkItemList, list[PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItem]]) Optional[XAiWorkDocument][source]
+
+ +
+
+file() list[PyXA.XABase.XAPath][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+modified() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+password_protected() list[bool][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+
+selection() XAiWorkiWorkItemList[source]
+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkGroup(properties)[source]
+

Bases: XAiWorkContainer

+

A class for managing and interacting with iWork item groups in Keynote.

+
+

New in version 0.1.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + +

height

The height of the group.

parent

The container which contains the group.

position

The horizontal and vertical coordinates of the top left point of the group.

rotation

The rotation of the group, in degrees from 0 to 359.

width

The width of the group.

+
+
+property height: int
+

The height of the group.

+
+ +
+
+property parent: XAiWorkContainer
+

The container which contains the group.

+
+ +
+
+property position: tuple[int, int]
+

The horizontal and vertical coordinates of the top left point of the group.

+
+ +
+
+property rotation: int
+

The rotation of the group, in degrees from 0 to 359.

+
+ +
+
+property width: int
+

The width of the group.

+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkGroupList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAiWorkContainerList

+

A wrapper around lists of themes that employs fast enumeration techniques.

+

All properties of themes can be called as methods on the wrapped list, returning a list containing each theme’s value for the property.

+
+

New in version 0.1.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_height(height)

by_parent(parent)

by_position(position)

by_rotation(rotation)

by_width(width)

height()

parent()

position()

rotation()

width()

+
+
+by_height(height: int) XAiWorkGroup[source]
+
+ +
+
+by_parent(parent: XAiWorkContainer) XAiWorkGroup[source]
+
+ +
+
+by_position(position: tuple[int, int]) XAiWorkGroup[source]
+
+ +
+
+by_rotation(rotation: int) XAiWorkGroup[source]
+
+ +
+
+by_width(width: int) XAiWorkGroup[source]
+
+ +
+
+height() list[int][source]
+
+ +
+
+parent() XAiWorkContainerList[source]
+
+ +
+
+position() list[tuple[int, int]][source]
+
+ +
+
+rotation() list[int][source]
+
+ +
+
+width() list[int][source]
+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkImage(properties)[source]
+

Bases: XAiWorkiWorkItem

+

A class for managing and interacting with images in Keynote.

+
+

New in version 0.1.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

description

Text associated with the image, read aloud by VoiceOVer.

file

The image file.

file_name

The name of the image file.

opacity

The opacity of the image, in percent from 0 to 100.

reflection_showing

Whether the image displays a reflection.

reflection_value

The percentage of reflection of the image, from 0 to 100.

rotation

The rotation of the image, in degrees from 0 to 359.

+

Methods:

+ + + + + + + + + +

replace_with(img_path)

Removes the image and inserts another in its place with the same width and height.

rotate(degrees)

Rotates the image by the specified number of degrees.

+
+
+property description: str
+

Text associated with the image, read aloud by VoiceOVer.

+
+ +
+
+property file: str
+

The image file.

+
+ +
+
+property file_name: str
+

The name of the image file.

+
+ +
+
+property opacity: int
+

The opacity of the image, in percent from 0 to 100.

+
+ +
+
+property reflection_showing: bool
+

Whether the image displays a reflection.

+
+ +
+
+property reflection_value: int
+

The percentage of reflection of the image, from 0 to 100.

+
+ +
+
+replace_with(img_path: Union[str, XAPath, XAURL]) XAiWorkImage[source]
+

Removes the image and inserts another in its place with the same width and height.

+
+
Parameters:
+

img_path (Union[str, XABase.XAPath, XABase.XAURL]) – The path to the new image file.

+
+
Returns:
+

A reference to the new PyXA image object.

+
+
Return type:
+

XAiWorkImage

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+rotate(degrees: int) XAiWorkImage[source]
+

Rotates the image by the specified number of degrees.

+
+
Parameters:
+

degrees (int) – The amount to rotate the image, in degrees, from -359 to 359

+
+
Returns:
+

The image.

+
+
Return type:
+

XAiWorkImage

+
+
+
+

Deprecated since version 0.1.1: Set the rotation attribute directly instead.

+
+
+

New in version 0.1.1.

+
+
+ +
+
+property rotation: int
+

The rotation of the image, in degrees from 0 to 359.

+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkImageList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAiWorkiWorkItemList

+

A wrapper around lists of images that employs fast enumeration techniques.

+

All properties of images can be called as methods on the wrapped list, returning a list containing each image’s value for the property.

+
+

New in version 0.1.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_description(description)

by_file(file)

by_file_name(file_name)

by_opacity(opacity)

by_reflection_showing(reflection_showing)

by_reflection_value(reflection_value)

by_rotation(rotation)

description()

file()

file_name()

opacity()

reflection_showing()

reflection_value()

rotation()

+
+
+by_description(description: str) XAiWorkImage[source]
+
+ +
+
+by_file(file: str) XAiWorkImage[source]
+
+ +
+
+by_file_name(file_name: str) XAiWorkImage[source]
+
+ +
+
+by_opacity(opacity: int) XAiWorkImage[source]
+
+ +
+
+by_reflection_showing(reflection_showing: bool) XAiWorkImage[source]
+
+ +
+
+by_reflection_value(reflection_value: int) XAiWorkImage[source]
+
+ +
+
+by_rotation(rotation: int) XAiWorkImage[source]
+
+ +
+
+description() list[str][source]
+
+ +
+
+file() list[str][source]
+
+ +
+
+file_name() list[str][source]
+
+ +
+
+opacity() list[int][source]
+
+ +
+
+reflection_showing() list[bool][source]
+
+ +
+
+reflection_value() list[int][source]
+
+ +
+
+rotation() list[int][source]
+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkLine(properties)[source]
+

Bases: XAiWorkiWorkItem

+

A class for managing and interacting with lines in Keynote.

+
+

New in version 0.1.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + +

end_point

A list of two numbers indicating the horizontal and vertical position of the line ending point.

reflection_showing

Whether the line displays a reflection.

reflection_value

The percent of reflection of the line, from 0 to 100.

rotation

The rotation of the line, in degrees from 0 to 359.

start_point

A list of two numbers indicating the horizontal and vertical position of the line starting point.

+
+
+property end_point: tuple[int, int]
+

A list of two numbers indicating the horizontal and vertical position of the line ending point.

+
+ +
+
+property reflection_showing: bool
+

Whether the line displays a reflection.

+
+ +
+
+property reflection_value: int
+

The percent of reflection of the line, from 0 to 100.

+
+ +
+
+property rotation: int
+

The rotation of the line, in degrees from 0 to 359.

+
+ +
+
+property start_point: tuple[int, int]
+

A list of two numbers indicating the horizontal and vertical position of the line starting point.

+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkLineList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAiWorkiWorkItemList

+

A wrapper around lists of shapes that employs fast enumeration techniques.

+

All properties of shapes can be called as methods on the wrapped list, returning a list containing each shape’s value for the property.

+
+

New in version 0.1.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_end_point(end_point)

by_reflection_showing(reflection_showing)

by_reflection_value(reflection_value)

by_rotation(rotation)

by_start_point(start_point)

end_point()

reflection_showing()

reflection_value()

rotation()

start_point()

+
+
+by_end_point(end_point: tuple[int, int]) XAiWorkLine[source]
+
+ +
+
+by_reflection_showing(reflection_showing: bool) XAiWorkLine[source]
+
+ +
+
+by_reflection_value(reflection_value: int) XAiWorkLine[source]
+
+ +
+
+by_rotation(rotation: int) XAiWorkLine[source]
+
+ +
+
+by_start_point(start_point: tuple[int, int]) XAiWorkLine[source]
+
+ +
+
+end_point() list[tuple[int, int]][source]
+
+ +
+
+reflection_showing() list[bool][source]
+
+ +
+
+reflection_value() list[int][source]
+
+ +
+
+rotation() list[int][source]
+
+ +
+
+start_point() list[tuple[int, int]][source]
+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkMovie(properties)[source]
+

Bases: XAiWorkiWorkItem

+

A class for managing and interacting with movie containers in Keynote.

+
+

New in version 0.1.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

file_name

The name of the movie file.

movie_volume

The volume setting for the movie, from 0 to 100.

opacity

The percent opacity of the object.

reflection_showing

Whether the movie displays a reflection.

reflection_value

The percentage of reflection of the movie, from 0 to 100.

repetition_method

Whether or how the movie repeats.

rotation

The rotation of the movie, in degrees from 0 to 359.

+
+
+property file_name: str
+

The name of the movie file.

+
+ +
+
+property movie_volume: int
+

The volume setting for the movie, from 0 to 100.

+
+ +
+
+property opacity: int
+

The percent opacity of the object.

+
+ +
+
+property reflection_showing: bool
+

Whether the movie displays a reflection.

+
+ +
+
+property reflection_value: int
+

The percentage of reflection of the movie, from 0 to 100.

+
+ +
+
+property repetition_method: RepetitionMethod
+

Whether or how the movie repeats.

+
+ +
+
+property rotation: int
+

The rotation of the movie, in degrees from 0 to 359.

+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkMovieList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAiWorkiWorkItemList

+

A wrapper around lists of movies that employs fast enumeration techniques.

+

All properties of movies can be called as methods on the wrapped list, returning a list containing each movie’s value for the property.

+
+

New in version 0.1.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_file_name(file_name)

by_movie_volume(movie_volume)

by_opacity(opacity)

by_reflection_showing(reflection_showing)

by_reflection_value(reflection_value)

by_repetition_method(repetition_method)

by_rotation(rotation)

file_name()

movie_volume()

opacity()

reflection_showing()

reflection_value()

rotation()

+
+
+by_file_name(file_name: str) XAiWorkMovie[source]
+
+ +
+
+by_movie_volume(movie_volume: int) XAiWorkMovie[source]
+
+ +
+
+by_opacity(opacity: int) XAiWorkMovie[source]
+
+ +
+
+by_reflection_showing(reflection_showing: bool) XAiWorkMovie[source]
+
+ +
+
+by_reflection_value(reflection_value: int) XAiWorkMovie[source]
+
+ +
+
+by_repetition_method(repetition_method: RepetitionMethod) XAiWorkMovie[source]
+
+ +
+
+by_rotation(rotation: int) XAiWorkMovie[source]
+
+ +
+
+file_name() list[str][source]
+
+ +
+
+movie_volume() list[int][source]
+
+ +
+
+opacity() list[int][source]
+
+ +
+
+reflection_showing() list[bool][source]
+
+ +
+
+reflection_value() list[PyXA.apps.iWorkApplicationBase.XAiWorkApplication.RepetitionMethod][source]
+
+ +
+
+rotation() list[int][source]
+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkRange(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with ranges of table cells in Keynote.

+
+

New in version 0.1.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

alignment

The horizontal alignment of content within the range's cells.

background_color

The background color of the range's cells.

font_name

The font of the range's cells.

font_size

The font size of the range's cells.

format

The format of the range's cells.

name

The range's coordinates.

properties

All properties of the range.

text_color

The text color of the range's cells.

text_wrap

Whether text within the range's cell should wrap.

vertical_alignment

The vertical alignment of content in the range's cells.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

cells([filter])

Returns a list of cells, as PyXA objects, matching the given filter.

clear()

Clears the content of every cell in the range.

columns([filter])

Returns a list of columns, as PyXA objects, matching the given filter.

merge()

Merges all cells in the range.

rows([filter])

Returns a list of rows, as PyXA objects, matching the given filter.

unmerge()

Unmerges all cells in the range.

+
+
+property alignment: Alignment
+

The horizontal alignment of content within the range’s cells.

+
+ +
+
+property background_color: XAColor
+

The background color of the range’s cells.

+
+ +
+
+cells(filter: Optional[dict] = None) XAiWorkCellList[source]
+

Returns a list of cells, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned cells will have, or None

+
+
Returns:
+

The list of cells

+
+
Return type:
+

XAiWorkCellList

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+clear() Self[source]
+

Clears the content of every cell in the range.

+
+
Returns:
+

The range object

+
+
Return type:
+

Self

+
+
Example 1:
+

Clear all cells in a table

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Keynote")
+>>> range = app.documents()[0].slides()[0].tables()[0].cell_range
+>>> range.clear()
+
+
+
+
Example 2:
+

Clear all cells whose value is 3

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Keynote")
+>>> cells = app.documents()[0].slides()[0].tables()[0].cells()
+>>> for cell in cells:
+>>>     if cell.value == 3:
+>>>         cell.clear()
+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+columns(filter: Optional[dict] = None) XAiWorkColumnList[source]
+

Returns a list of columns, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned columns will have, or None

+
+
Returns:
+

The list of columns

+
+
Return type:
+

XAiWorkColumnList

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+property font_name: str
+

The font of the range’s cells.

+
+ +
+
+property font_size: float
+

The font size of the range’s cells.

+
+ +
+
+property format: CellFormat
+

The format of the range’s cells.

+
+ +
+
+merge() Self[source]
+

Merges all cells in the range.

+
+
Returns:
+

The range object

+
+
Return type:
+

Self

+
+
Example 1:
+

Merge all cells in the first row of a table

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Keynote")
+>>> table = app.documents()[0].slides()[0].tables()[0]
+>>> row = table.rows()[0]
+>>> row.merge()
+
+
+
+
Example 2:
+

Merge all cells in the first column of a table

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Keynote")
+>>> table = app.documents()[0].slides()[0].tables()[0]
+>>> col = table.columns()[0]
+>>> col.merge()
+
+
+
+

Note

+

If you merge an entire row, then merge an entire column, all cells in the table will be merged. The same is true if the row and column operations are flipped.

+
+
+

New in version 0.1.1.

+
+
+ +
+
+property name: str
+

The range’s coordinates.

+
+ +
+
+property properties: dict
+

All properties of the range.

+
+ +
+
+rows(filter: Optional[dict] = None) XAiWorkRowList[source]
+

Returns a list of rows, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned rows will have, or None

+
+
Returns:
+

The list of rows

+
+
Return type:
+

XAiWorkRowList

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+property text_color: XAColor
+

The text color of the range’s cells.

+
+ +
+
+property text_wrap: bool
+

Whether text within the range’s cell should wrap.

+
+ +
+
+unmerge() Self[source]
+

Unmerges all cells in the range.

+
+
Returns:
+

The range object

+
+
Return type:
+

Self

+
+
Example 1:
+

Unmerge all merged cells

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Keynote")
+>>> range = app.documents()[0].slides()[0].tables()[0].cell_range
+>>> range.unmerge()
+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+property vertical_alignment: Alignment
+

The vertical alignment of content in the range’s cells.

+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkRangeList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList

+

A wrapper around lists of themes that employs fast enumeration techniques.

+

All properties of themes can be called as methods on the wrapped list, returning a list containing each theme’s value for the property.

+
+

New in version 0.1.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

alignment()

background_color()

by_alignment(alignment)

by_background_color(background_color)

by_font_name(font_name)

by_font_size(font_size)

by_format(format)

by_name(name)

by_properties(properties)

by_text_color(text_color)

by_text_wrap(text_wrap)

by_vertical_alignment(vertical_alignment)

font_name()

font_size()

format()

name()

properties()

text_color()

text_wrap()

vertical_alignment()

+
+
+alignment() list[PyXA.apps.iWorkApplicationBase.XAiWorkApplication.Alignment][source]
+
+ +
+
+background_color() list[PyXA.XABase.XAColor][source]
+
+ +
+
+by_alignment(alignment: Alignment) Optional[XAiWorkRange][source]
+
+ +
+
+by_background_color(background_color: XAColor) Optional[XAiWorkRange][source]
+
+ +
+
+by_font_name(font_name: str) Optional[XAiWorkRange][source]
+
+ +
+
+by_font_size(font_size: float) Optional[XAiWorkRange][source]
+
+ +
+
+by_format(format: CellFormat) Optional[XAiWorkRange][source]
+
+ +
+
+by_name(name: str) Optional[XAiWorkRange][source]
+
+ +
+
+by_properties(properties: dict) Optional[XAiWorkRange][source]
+
+ +
+
+by_text_color(text_color: XAColor) Optional[XAiWorkRange][source]
+
+ +
+
+by_text_wrap(text_wrap: bool) Optional[XAiWorkRange][source]
+
+ +
+
+by_vertical_alignment(vertical_alignment: Alignment) Optional[XAiWorkRange][source]
+
+ +
+
+font_name() list[str][source]
+
+ +
+
+font_size() list[float][source]
+
+ +
+
+format() list[PyXA.apps.iWorkApplicationBase.XAiWorkApplication.CellFormat][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+
+text_color() list[PyXA.XABase.XAColor][source]
+
+ +
+
+text_wrap() list[bool][source]
+
+ +
+
+vertical_alignment() list[PyXA.apps.iWorkApplicationBase.XAiWorkApplication.Alignment][source]
+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkRow(properties)[source]
+

Bases: XAiWorkRange

+

A class for managing and interacting with table rows in Keynote.

+
+

New in version 0.1.1.

+
+

Attributes:

+ + + + + + + + + + + + +

address

The index of the row in the table.

height

The height of the row in pixels.

properties

All properties of the row.

+
+
+property address: int
+

The index of the row in the table.

+
+ +
+
+property height: float
+

The height of the row in pixels.

+
+ +
+
+property properties: dict
+

All properties of the row.

+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkRowList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAiWorkRangeList

+

A wrapper around lists of rows that employs fast enumeration techniques.

+

All properties of rows can be called as methods on the wrapped list, returning a list containing each row’s value for the property.

+
+

New in version 0.1.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

address()

by_address(address)

by_height(height)

by_properties(properties)

height()

properties()

+
+
+address() list[float][source]
+
+ +
+
+by_address(address: float) Optional[XAiWorkRow][source]
+
+ +
+
+by_height(height: int) Optional[XAiWorkRow][source]
+
+ +
+
+by_properties(properties: dict) Optional[XAiWorkRow][source]
+
+ +
+
+height() list[int][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkShape(properties)[source]
+

Bases: XAiWorkiWorkItem

+

A class for managing and interacting with shapes in Keynote.

+
+

New in version 0.1.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

background_fill_type

The background, if any, for the shape.

object_text

The text contained within the shape.

opacity

The percent opacity of the object.

properties

All properties of the shape.

reflection_showing

Whether the iWork item displays a reflection.

reflection_value

The percentage of relfection that the iWork item displays, from 0 to 100.

rotation

The rotation of the iWork item, in degrees, from 0 to 359.

+

Methods:

+ + + + + + + + + +

rotate(degrees)

Rotates the shape by the specified number of degrees.

set_property(property_name, value)

Updates the value of a single property of the scripting element associated with this object.

+
+
+property background_fill_type: FillOption
+

The background, if any, for the shape.

+
+ +
+
+property object_text: XAText
+

The text contained within the shape.

+
+ +
+
+property opacity: int
+

The percent opacity of the object.

+
+ +
+
+property properties: dict
+

All properties of the shape.

+
+ +
+
+property reflection_showing: bool
+

Whether the iWork item displays a reflection.

+
+ +
+
+property reflection_value: int
+

The percentage of relfection that the iWork item displays, from 0 to 100.

+
+ +
+
+rotate(degrees: int) XAiWorkShape[source]
+

Rotates the shape by the specified number of degrees.

+
+
Parameters:
+

degrees (int) – The amount to rotate the shape, in degrees, from -359 to 359

+
+
Returns:
+

The shape.

+
+
Return type:
+

XAiWorkShape

+
+
+
+

Deprecated since version 0.1.1: Set the rotation attribute directly instead.

+
+
+

New in version 0.1.1.

+
+
+ +
+
+property rotation: int
+

The rotation of the iWork item, in degrees, from 0 to 359.

+
+ +
+
+set_property(property_name: str, value: Any)[source]
+

Updates the value of a single property of the scripting element associated with this object.

+
+
Parameters:
+
    +
  • property (str) – The name of the property to assign a new value to.

  • +
  • value (Any) – The value to assign to the specified property.

  • +
+
+
Returns:
+

A reference to this PyXA object.

+
+
Return type:
+

XAObject

+
+
+
+

New in version 0.0.1.

+
+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkShapeList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAiWorkiWorkItemList

+

A wrapper around lists of shapes that employs fast enumeration techniques.

+

All properties of shapes can be called as methods on the wrapped list, returning a list containing each shape’s value for the property.

+
+

New in version 0.1.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

background_fill_type()

by_background_fill_type(background_fill_type)

by_object_text(object_text)

by_opacity(opacity)

by_properties(properties)

by_reflection_showing(reflection_showing)

by_reflection_value(reflection_value)

by_rotation(rotation)

object_text()

opacity()

properties()

reflection_showing()

reflection_value()

rotation()

+
+
+background_fill_type() list[PyXA.apps.iWorkApplicationBase.XAiWorkApplication.FillOption][source]
+
+ +
+
+by_background_fill_type(background_fill_type: FillOption) Optional[XAiWorkShape][source]
+
+ +
+
+by_object_text(object_text: Union[str, XAText]) Optional[XAiWorkShape][source]
+
+ +
+
+by_opacity(opacity: int) Optional[XAiWorkShape][source]
+
+ +
+
+by_properties(properties: dict) Optional[XAiWorkShape][source]
+
+ +
+
+by_reflection_showing(reflection_showing: bool) Optional[XAiWorkShape][source]
+
+ +
+
+by_reflection_value(reflection_value: int) Optional[XAiWorkShape][source]
+
+ +
+
+by_rotation(rotation: int) Optional[XAiWorkShape][source]
+
+ +
+
+object_text() XATextList[source]
+
+ +
+
+opacity() list[int][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+
+reflection_showing() list[bool][source]
+
+ +
+
+reflection_value() list[int][source]
+
+ +
+
+rotation() list[int][source]
+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkTable(properties)[source]
+

Bases: XAiWorkiWorkItem

+

A class for managing and interacting with tables in Keynote.

+
+

New in version 0.1.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

cell_range

The range of all cells in the table.

column_count

The number of columns in the table.

footer_row_count

The number of footer rows in the table.

header_column_count

The number of header columns in the table.

header_row_count

The number of header rows in the table.

name

The name of the table.

row_count

The number of rows in the table.

selection_range

The currently selected cells.

+

Methods:

+ + + + + + + + + + + + + + + + + + +

cells([filter])

Returns a list of cells, as PyXA objects, matching the given filter.

columns([filter])

Returns a list of columns, as PyXA objects, matching the given filter.

ranges([filter])

Returns a list of ranges, as PyXA objects, matching the given filter.

rows([filter])

Returns a list of rows, as PyXA objects, matching the given filter.

sort(by_column[, in_rows, direction])

Sorts the table according to the specified column, in the specified sorting direction.

+
+
+property cell_range: XAiWorkRange
+

The range of all cells in the table.

+
+ +
+
+cells(filter: Optional[dict] = None) XAiWorkCellList[source]
+

Returns a list of cells, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned cells will have, or None

+
+
Returns:
+

The list of cells

+
+
Return type:
+

XAiWorkCellList

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+property column_count: int
+

The number of columns in the table.

+
+ +
+
+columns(filter: Optional[dict] = None) XAiWorkColumnList[source]
+

Returns a list of columns, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned columns will have, or None

+
+
Returns:
+

The list of columns

+
+
Return type:
+

XAiWorkColumnList

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+property footer_row_count: int
+

The number of footer rows in the table.

+
+ +
+
+property header_column_count: int
+

The number of header columns in the table.

+
+ +
+
+property header_row_count: int
+

The number of header rows in the table.

+
+ +
+
+property name: str
+

The name of the table.

+
+ +
+
+ranges(filter: Optional[dict] = None) XAiWorkRangeList[source]
+

Returns a list of ranges, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned ranges will have, or None

+
+
Returns:
+

The list of ranges

+
+
Return type:
+

XAiWorkRangeList

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+property row_count: int
+

The number of rows in the table.

+
+ +
+
+rows(filter: Optional[dict] = None) XAiWorkRowList[source]
+

Returns a list of rows, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned rows will have, or None

+
+
Returns:
+

The list of rows

+
+
Return type:
+

XAiWorkRowList

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+property selection_range: XAiWorkRange
+

The currently selected cells.

+
+ +
+
+sort(by_column: XAiWorkColumn, in_rows: Optional[Union[list[PyXA.apps.iWorkApplicationBase.XAiWorkRow], XAiWorkRowList]] = None, direction: SortDirection = SortDirection.ASCENDING) Self[source]
+

Sorts the table according to the specified column, in the specified sorting direction.

+
+
Parameters:
+
+
+
Returns:
+

The table object

+
+
Return type:
+

Self

+
+
+
+

New in version 0.1.1.

+
+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkTableList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAiWorkiWorkItemList

+

A wrapper around lists of shapes that employs fast enumeration techniques.

+

All properties of shapes can be called as methods on the wrapped list, returning a list containing each shape’s value for the property.

+
+

New in version 0.1.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_cell_range(cell_range)

by_column_count(column_count)

by_footer_row_count(footer_row_count)

by_header_column_count(header_column_count)

by_header_row_count(header_row_count)

by_name(name)

by_row_count(row_count)

by_selection_range(selection_range)

cell_range()

column_count()

footer_row_count()

header_column_count()

header_row_count()

name()

row_count()

selection_range()

+
+
+by_cell_range(cell_range: XAiWorkRange) Optional[XAiWorkTable][source]
+
+ +
+
+by_column_count(column_count: int) Optional[XAiWorkTable][source]
+
+ +
+ +
+ +
+
+by_header_column_count(header_column_count: int) Optional[XAiWorkTable][source]
+
+ +
+
+by_header_row_count(header_row_count: int) Optional[XAiWorkTable][source]
+
+ +
+
+by_name(name: str) Optional[XAiWorkTable][source]
+
+ +
+
+by_row_count(row_count: int) Optional[XAiWorkTable][source]
+
+ +
+
+by_selection_range(selection_range: XAiWorkRange) Optional[XAiWorkTable][source]
+
+ +
+
+cell_range() XAiWorkRangeList[source]
+
+ +
+
+column_count() list[int][source]
+
+ +
+
+footer_row_count() list[int][source]
+
+ +
+
+header_column_count() list[int][source]
+
+ +
+
+header_row_count() list[int][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+row_count() list[int][source]
+
+ +
+
+selection_range() XAiWorkRangeList[source]
+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkTextItem(properties)[source]
+

Bases: XAiWorkiWorkItem

+

A class for managing and interacting with text items in Keynote.

+
+

New in version 0.1.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

background_fill_type

The background of the text item.

opacity

The opacity of the text item.

reflection_showing

Whether the text item displays a reflection.

reflection_value

The percentage of reflection of the text item, from 0 to 100.

rotation

The rotation of the text item, in degrees from 0 to 359.

text

The text contained within the text item.

+
+
+property background_fill_type: FillOption
+

The background of the text item.

+
+ +
+
+property opacity: int
+

The opacity of the text item.

+
+ +
+
+property reflection_showing: bool
+

Whether the text item displays a reflection.

+
+ +
+
+property reflection_value: int
+

The percentage of reflection of the text item, from 0 to 100.

+
+ +
+
+property rotation: int
+

The rotation of the text item, in degrees from 0 to 359.

+
+ +
+
+property text: XAText
+

The text contained within the text item.

+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkTextItemList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAiWorkiWorkItemList

+

A wrapper around lists of text items that employs fast enumeration techniques.

+

All properties of text items can be called as methods on the wrapped list, returning a list containing each text item’s value for the property.

+
+

New in version 0.1.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

background_fill_type()

by_background_fill_type(background_fill_type)

by_opacity(opacity)

by_reflection_showing(reflection_showing)

by_reflection_value(reflection_value)

by_rotation(rotation)

by_text(text)

opacity()

reflection_showing()

reflection_value()

rotation()

text()

+
+
+background_fill_type() list[PyXA.apps.iWorkApplicationBase.XAiWorkApplication.FillOption][source]
+
+ +
+
+by_background_fill_type(background_fill_type: FillOption) XAiWorkTextItem[source]
+
+ +
+
+by_opacity(opacity: int) XAiWorkTextItem[source]
+
+ +
+
+by_reflection_showing(reflection_showing: bool) XAiWorkTextItem[source]
+
+ +
+
+by_reflection_value(reflection_value: int) XAiWorkTextItem[source]
+
+ +
+
+by_rotation(rotation: int) XAiWorkTextItem[source]
+
+ +
+
+by_text(text: Union[str, XAText]) XAiWorkTextItem[source]
+
+ +
+
+opacity() list[int][source]
+
+ +
+
+reflection_showing() list[bool][source]
+
+ +
+
+reflection_value() list[int][source]
+
+ +
+
+rotation() list[int][source]
+
+ +
+
+text() XATextList[source]
+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkWindow(properties)[source]
+

Bases: XASBWindow, XASBPrintable, XAObject

+

A window of an iWork application.

+
+

New in version 0.1.1.

+
+
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItem(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with text, shapes, images, and other elements in Keynote.

+
+

See also

+

XAiWorkApplication

+
+
+

New in version 0.1.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

delete()

Deletes the item.

duplicate()

Duplicates the item.

lock()

Locks the properties of the item, preventing changes.

resize(width, height)

Sets the width and height of the item.

set_position(x, y)

unlock()

Unlocks the properties of the item, allowing changes.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

height

The height of the iWork item.

locked

Whether the object is locked.

parent

The iWork container that contains the iWork item.

position

The horizontal and vertical coordinates of the top left point of the iWork item.

width

The width of the iWork item.

+
+
+delete()[source]
+

Deletes the item.

+
+

New in version 0.1.1.

+
+
+ +
+
+duplicate() XAiWorkiWorkItem[source]
+

Duplicates the item.

+
+
Returns:
+

A reference to the PyXA object that called this method.

+
+
Return type:
+

XAiWorkiWorkItem

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+property height: int
+

The height of the iWork item.

+
+ +
+
+lock() XAiWorkiWorkItem[source]
+

Locks the properties of the item, preventing changes.

+
+
Returns:
+

The iWork item

+
+
Return type:
+

XAiWorkiWorkItem

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+property locked: bool
+

Whether the object is locked.

+
+ +
+
+property parent: XAiWorkContainer
+

The iWork container that contains the iWork item.

+
+ +
+
+property position: tuple[int, int]
+

The horizontal and vertical coordinates of the top left point of the iWork item.

+
+ +
+
+resize(width: int, height: int) XAiWorkiWorkItem[source]
+

Sets the width and height of the item.

+
+
Parameters:
+
    +
  • width (int) – The desired width, in pixels

  • +
  • height (int) – The desired height, in pixels

  • +
+
+
Returns:
+

The iWork item

+
+
Return type:
+

XAiWorkiWorkItem

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+set_position(x: int, y: int) XAiWorkiWorkItem[source]
+
+ +
+
+unlock() XAiWorkiWorkItem[source]
+

Unlocks the properties of the item, allowing changes.

+
+
Returns:
+

The iWork item

+
+
Return type:
+

XAiWorkiWorkItem

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+property width: int
+

The width of the iWork item.

+
+ +
+ +
+
+class PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItemList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList

+

A wrapper around a list of documents.

+
+

New in version 0.1.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_height(height)

by_locked(locked)

by_parent(parent)

by_position(position)

by_properties(properties)

by_width(width)

height()

locked()

parent()

position()

properties()

width()

+
+
+by_height(height: int) Optional[XAiWorkiWorkItem][source]
+
+ +
+
+by_locked(locked: bool) Optional[XAiWorkiWorkItem][source]
+
+ +
+
+by_parent(parent: XAiWorkContainer) Optional[XAiWorkiWorkItem][source]
+
+ +
+
+by_position(position: tuple[int, int]) Optional[XAiWorkiWorkItem][source]
+
+ +
+
+by_properties(properties: dict) Optional[XAiWorkiWorkItem][source]
+
+ +
+
+by_width(width: int) Optional[XAiWorkiWorkItem][source]
+
+ +
+
+height() list[int][source]
+
+ +
+
+locked() list[bool][source]
+
+ +
+
+parent() XAiWorkContainerList[source]
+
+ +
+
+position() list[tuple[int, int]][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+
+width() list[int][source]
+
+ +
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2022, Stephen Kaplan.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/keynote.html b/docs/reference/apps/keynote.html new file mode 100644 index 0000000..a16249b --- /dev/null +++ b/docs/reference/apps/keynote.html @@ -0,0 +1,2368 @@ + + + + + + + Keynote Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Keynote Module Reference

+
+

New in version 0.0.2.

+
+

Control the macOS Keynote application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XAKeynoteApplication(properties)

A class for managing and interacting with Keynote.app.

XAKeynoteContainer(properties)

A class for managing and interacting with containers in Keynote.

XAKeynoteContainerList(properties[, filter, ...])

A wrapper around lists of containers that employs fast enumeration techniques.

XAKeynoteDocument(properties)

A class for managing and interacting with TextEdit documents.

XAKeynoteDocumentList(properties[, filter])

A wrapper around lists of themes that employs fast enumeration techniques.

XAKeynoteSlide(properties)

A class for managing and interacting with Keynote slides.

XAKeynoteSlideLayout(properties)

A class for managing and interacting with Keynote slide layouts.

XAKeynoteSlideLayoutList(properties[, filter])

A wrapper around lists of themes that employs fast enumeration techniques.

XAKeynoteSlideList(properties[, filter, ...])

A wrapper around lists of themes that employs fast enumeration techniques.

XAKeynoteTheme(properties)

A class for managing and interacting with Keynote themes.

XAKeynoteThemeList(properties[, filter])

A wrapper around lists of themes that employs fast enumeration techniques.

XAKeynoteTransitionSettings(properties[, parent])

Properties common to all transtions.

XAKeynoteWindow(properties)

A class for managing and interacting with windows in Keynote.app.

+
+
+class PyXA.apps.Keynote.XAKeynoteApplication(properties)[source]
+

Bases: XAiWorkApplication

+

A class for managing and interacting with Keynote.app.

+ +
+

New in version 0.0.2.

+
+

Classes:

+ + + + + + + + + + + + + + + + + + +

Codec(value[, names, module, qualname, ...])

Options for which video codec to use.

ExportFormat(value[, names, module, ...])

Options for what format to export a Keynote project as.

Framerate(value[, names, module, qualname, ...])

Options for which framerate to use when exporting a Keynote project as a video.

PrintSetting(value[, names, module, ...])

Options to use when printing slides.

Transition(value[, names, module, qualname, ...])

The available options for transitions to assign to slides.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

documents([filter])

Returns a list of documents, as PyXA objects, matching the given filter.

make(specifier[, properties])

Creates a new element of the given specifier class without adding it to any list.

new_document([file_path, theme])

Creates a new document at the specified path and with the specified theme.

show_next()

Advance one slide or animation build.

show_previous()

Go back one slide or animation build.

themes([filter])

Returns a list of themes, as PyXA objects, matching the given filter.

+

Attributes:

+ + + + + + + + + + + + +

playing

Whether a slideshow is currently playing.

properties

All properties of the Keynote application.

slide_switcher_visible

Whether the slide switcher is visible.

+
+
+class Codec(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for which video codec to use.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

APPLE_PRO_RES_422

APPLE_PRO_RES_422HQ

APPLE_PRO_RES_422LT

APPLE_PRO_RES_422Proxy

APPLE_PRO_RES_4444

H264

HEVC

+
+
+APPLE_PRO_RES_422 = 1265460018
+
+ +
+
+APPLE_PRO_RES_422HQ = 1265460021
+
+ +
+
+APPLE_PRO_RES_422LT = 1265460020
+
+ +
+
+APPLE_PRO_RES_422Proxy = 1265460022
+
+ +
+
+APPLE_PRO_RES_4444 = 1265460019
+
+ +
+
+H264 = 1265460017
+
+ +
+
+HEVC = 1265460023
+
+ +
+ +
+
+class ExportFormat(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for what format to export a Keynote project as.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

HTML

JPEG

KEYNOTE

KEYNOTE_09

MICROSOFT_POWERPOINT

NativeSize

PDF

PNG

QUICKTIME_MOVIE

SLIDE_IMAGES

TIFF

f1080p

f2160p

f360p

f540p

f720p

+
+
+HTML = 1265136749
+
+ +
+
+JPEG = 1265198698
+
+ +
+
+KEYNOTE = 1265526374
+
+ +
+
+KEYNOTE_09 = 1265329529
+
+ +
+
+MICROSOFT_POWERPOINT = 1265660020
+
+ +
+
+NativeSize = 1265460814
+
+ +
+
+PDF = 1265656934
+
+ +
+
+PNG = 1265198704
+
+ +
+
+QUICKTIME_MOVIE = 1265463158
+
+ +
+
+SLIDE_IMAGES = 1265200487
+
+ +
+
+TIFF = 1265198708
+
+ +
+
+f1080p = 1265460792
+
+ +
+
+f2160p = 1265460788
+
+ +
+
+f360p = 1265460787
+
+ +
+
+f540p = 1265460789
+
+ +
+
+f720p = 1265460791
+
+ +
+ +
+
+class Framerate(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for which framerate to use when exporting a Keynote project as a video.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

FPS_12

FPS_2398

FPS_24

FPS_25

FPS_2997

FPS_30

FPS_50

FPS_5994

FPS_60

+
+
+FPS_12 = 1265005105
+
+ +
+
+FPS_2398 = 1265005106
+
+ +
+
+FPS_24 = 1265005107
+
+ +
+
+FPS_25 = 1265005108
+
+ +
+
+FPS_2997 = 1265005109
+
+ +
+
+FPS_30 = 1265005110
+
+ +
+
+FPS_50 = 1265005111
+
+ +
+
+FPS_5994 = 1265005112
+
+ +
+
+FPS_60 = 1265005113
+
+ +
+ +
+
+class PrintSetting(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options to use when printing slides.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

DETAILED_ERROR_HANDLING

HANDOUTS

INDIVIDUAL_SLIDES

SLIDE_WITH_NOTES

STANDARD_ERROR_HANDLING

+
+
+DETAILED_ERROR_HANDLING = 1819763828
+
+ +
+
+HANDOUTS = 1265661800
+
+ +
+
+INDIVIDUAL_SLIDES = 1265661801
+
+ +
+
+SLIDE_WITH_NOTES = 1265661806
+
+ +
+
+STANDARD_ERROR_HANDLING = 1819767668
+
+ +
+ +
+
+class Transition(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

The available options for transitions to assign to slides.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

BLINDS

CLOTHESLINE

COLOR_PANES

CONFETTI

CUBE

DISSOLVE

DOORWAY

DROP

DROPLET

FADE_AND_MOVE

FADE_THROUGH_COLOR

FALL

FLIP

FLOP

GRID

IRIS

MAGIC_MOVE

MOSAIC

MOVE_IN

NONE

OBJECT_CUBE

OBJECT_FLIP

OBJECT_POP

OBJECT_PUSH

OBJECT_REVOLVE

OBJECT_ZOOM

PAGE_FLIP

PERSPECTIVE

PIVOT

PUSH

REFLECTION

REVEAL

REVOLVING_DOOR

SCALE

SHIMMER

SPARKLE

SWAP

SWING

SWITCH

SWOOSH

TWIRL

TWIST

WIPE

+
+
+BLINDS = 1952607332
+
+ +
+
+CLOTHESLINE = 1952672879
+
+ +
+
+COLOR_PANES = 1952673900
+
+ +
+
+CONFETTI = 1952671348
+
+ +
+
+CUBE = 1952675170
+
+ +
+
+DISSOLVE = 1952737651
+
+ +
+
+DOORWAY = 1952741241
+
+ +
+
+DROP = 1952739952
+
+ +
+
+DROPLET = 1952739436
+
+ +
+
+FADE_AND_MOVE = 1952866660
+
+ +
+
+FADE_THROUGH_COLOR = 1952871523
+
+ +
+
+FALL = 1952866668
+
+ +
+
+FLIP = 1952868720
+
+ +
+
+FLOP = 1952870256
+
+ +
+
+GRID = 1952936548
+
+ +
+
+IRIS = 1953067635
+
+ +
+
+MAGIC_MOVE = 1953327734
+
+ +
+
+MOSAIC = 1953330019
+
+ +
+
+MOVE_IN = 1953330793
+
+ +
+
+NONE = 1953393004
+
+ +
+
+OBJECT_CUBE = 1953456994
+
+ +
+
+OBJECT_FLIP = 1953457776
+
+ +
+
+OBJECT_POP = 1953460336
+
+ +
+
+OBJECT_PUSH = 1953460328
+
+ +
+
+OBJECT_REVOLVE = 1953460854
+
+ +
+
+OBJECT_ZOOM = 1953462893
+
+ +
+
+PAGE_FLIP = 1953523308
+
+ +
+
+PERSPECTIVE = 1953526387
+
+ +
+
+PIVOT = 1953527412
+
+ +
+
+PUSH = 1953526632
+
+ +
+
+REFLECTION = 1953654380
+
+ +
+
+REVEAL = 1953658476
+
+ +
+
+REVOLVING_DOOR = 1953654134
+
+ +
+
+SCALE = 1953719148
+
+ +
+
+SHIMMER = 1953720429
+
+ +
+
+SPARKLE = 1953722475
+
+ +
+
+SWAP = 1953724272
+
+ +
+
+SWING = 1953724263
+
+ +
+
+SWITCH = 1953724265
+
+ +
+
+SWOOSH = 1953724275
+
+ +
+
+TWIRL = 1953789804
+
+ +
+
+TWIST = 1953789801
+
+ +
+
+WIPE = 1953984613
+
+ +
+ +
+
+documents(filter: Optional[dict] = None) XAKeynoteDocumentList[source]
+

Returns a list of documents, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned documents will have, or None

+
+
Returns:
+

The list of documents

+
+
Return type:
+

XAKeynoteDocumentList

+
+
Example 1:
+

List the name of every open Keynote document

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Keynote")
+>>> docs = app.documents()
+>>> for doc in docs:
+>>>     print(doc.name)
+Example1.key
+Example2.key
+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+make(specifier: str, properties: dict = None)[source]
+

Creates a new element of the given specifier class without adding it to any list.

+

Use XABase.XAList.push() to push the element onto a list.

+
+
Parameters:
+
    +
  • specifier (str) – The classname of the object to create

  • +
  • properties (dict) – The properties to give the object

  • +
+
+
Returns:
+

A PyXA wrapped form of the object

+
+
Return type:
+

XABase.XAObject

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+new_document(file_path: Union[str, XAPath] = './Untitled.key', theme: XAKeynoteTheme = None) XAKeynoteDocument[source]
+

Creates a new document at the specified path and with the specified theme.

+
+
Parameters:
+
    +
  • file_path (str, optional) – The path to create the document at, defaults to “./Untitled.key”

  • +
  • template (XAKeynoteTheme, optional) – The theme to initialize the document with, defaults to None

  • +
+
+
Returns:
+

The newly created document object

+
+
Return type:
+

XAKeynoteDocument

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property playing: bool
+

Whether a slideshow is currently playing.

+
+ +
+
+property properties: dict
+

All properties of the Keynote application.

+
+ +
+
+show_next() XAKeynoteApplication[source]
+

Advance one slide or animation build.

+
+ +
+
+show_previous() XAKeynoteApplication[source]
+

Go back one slide or animation build.

+
+ +
+
+property slide_switcher_visible: bool
+

Whether the slide switcher is visible.

+
+ +
+
+themes(filter: Optional[dict] = None) XAKeynoteThemeList[source]
+

Returns a list of themes, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned themes will have, or None

+
+
Returns:
+

The list of themes

+
+
Return type:
+

XAKeynoteThemeList

+
+
Example 1:
+

List the name of each theme

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Keynote")
+>>> themes = app.themes()
+>>> print(themes.name())
+['Basic White', 'Basic Black', 'Classic White', 'White', 'Black', 'Basic Color', 'Color Gradient Light', 'Color Gradient', 'Gradient', 'Showroom', 'Modern Portfolio', 'Slate', 'Photo Essay', 'Bold Color', 'Showcase', 'Briefing', 'Academy', 'Modern Type', 'Exhibition', 'Feature Story', 'Look Book', 'Classic', 'Editorial', 'Cream Paper', 'Industrial', 'Blueprint', 'Graph Paper', 'Chalkboard', 'Photo Portfolio', 'Leather Book', 'Artisan', 'Improv', 'Drafting', 'Kyoto', 'Brushed Canvas', 'Craft', 'Parchment', 'Renaissance', 'Moroccan', 'Hard Cover', 'Linen Book', 'Vintage', 'Typeset', 'Harmony', 'Formal']
+
+
+
+

New in version 0.0.2.

+
+
+ +
+ +
+
+class PyXA.apps.Keynote.XAKeynoteContainer(properties)[source]
+

Bases: XAiWorkContainer

+

A class for managing and interacting with containers in Keynote.

+
+

New in version 0.0.2.

+
+
+ +
+
+class PyXA.apps.Keynote.XAKeynoteContainerList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAiWorkContainerList

+

A wrapper around lists of containers that employs fast enumeration techniques.

+
+

New in version 0.0.5.

+
+
+ +
+
+class PyXA.apps.Keynote.XAKeynoteDocument(properties)[source]
+

Bases: XAiWorkDocument

+

A class for managing and interacting with TextEdit documents.

+
+

See also

+

XAKeynoteApplication

+
+
+

New in version 0.0.2.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

accept_slide_switcher()

Advances the slideshow to the selected slide of the slide switcher.

cancel_slide_switcher()

Dismisses the slide switcher.

export([file_path, format])

Exports the slideshow in the specified format.

hide_slide_switcher()

Hides the slide switcher.

make_image_slides(files[, set_titles, ...])

Creates slides out of image files.

move_slide_switcher_backward()

Goes back one slide in the slide switcher.

move_slide_switcher_forward()

Advances the slide switcher one slide forward.

new_slide(properties)

Creates a new slide at the end of the presentation.

save()

Saves the Keynote file.

show_slide_switcher()

Shows the slide switch within the active slideshow interface.

slide_layouts([filter])

Returns a list of slide layouts, as PyXA objects, matching the given filter.

slides([filter])

Returns a list of slides, as PyXA objects, matching the given filter.

start_from(slide)

Starts the slideshow from the specified slide.

stop()

Stops the currently playing slideshow.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

auto_loop

Whether the slideshow should play repeatedly.

auto_play

Whether the slideshow should automatically play when opening the file.

auto_restart

Whether the slideshow should restart if its inactive for the maximum idle duration.

current_slide

The currently selected slide, or the slide that would display is the presentation was started.

document_theme

The theme assigned to the document.

file

The location of the document on the disk, if one exists.

height

The height of the document in points; standard is 768; wide slide height is 1080.

id

The unique identifier for the document.

maximum_idle_duration

The duration before which the slideshow restarts due to inactivity.

modified

Whether the document has been modified since its last save.

name

The name of the document.

password_protected

Whether the document is password protected.

properties

All properties of the document.

selection

A list of the currently selected items.

slide_numbers_showing

Whether slide numbers are displayed.

width

The width of the document in points; standard is 1080; wide slide width is 1920.

+
+
+accept_slide_switcher()[source]
+

Advances the slideshow to the selected slide of the slide switcher.

+
+

New in version 0.0.3.

+
+
+ +
+
+property auto_loop: bool
+

Whether the slideshow should play repeatedly.

+
+ +
+
+property auto_play: bool
+

Whether the slideshow should automatically play when opening the file.

+
+ +
+
+property auto_restart: bool
+

Whether the slideshow should restart if its inactive for the maximum idle duration.

+
+ +
+
+cancel_slide_switcher()[source]
+

Dismisses the slide switcher.

+
+

New in version 0.0.3.

+
+
+ +
+
+property current_slide: XAKeynoteSlide
+

The currently selected slide, or the slide that would display is the presentation was started.

+
+ +
+
+property document_theme: XAKeynoteTheme
+

The theme assigned to the document.

+
+ +
+
+export(file_path: Union[str, XAPath] = None, format: ExportFormat = ExportFormat.PDF)[source]
+

Exports the slideshow in the specified format.

+
+
Parameters:
+
    +
  • file_path (Union[str, XABase.XAPath], optional) – The path to save the exported file at, defaults to None

  • +
  • format (XAKeynoteApplication.ExportFormat, optional) – The format to export the file in, defaults to XAKeynoteApplication.ExportFormat.PDF

  • +
+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+property file: str
+

The location of the document on the disk, if one exists.

+
+ +
+
+property height: int
+

The height of the document in points; standard is 768; wide slide height is 1080.

+
+ +
+
+hide_slide_switcher()[source]
+

Hides the slide switcher.

+
+

New in version 0.0.3.

+
+
+ +
+
+property id: str
+

The unique identifier for the document.

+
+ +
+
+make_image_slides(files: list[Union[str, PyXA.XABase.XAPath]], set_titles: bool = False, slide_layout: XAKeynoteSlideLayout = None) XAKeynoteDocument[source]
+

Creates slides out of image files.

+

Creates a new slide for each image file path in the files list, if the image can be found.

+
+
Parameters:
+
    +
  • files (list[Union[str, XABase.XAPath]]) – A list of paths to image files

  • +
  • set_titles (bool, optional) – Whether to set the slide titles to the image file name, defaults to False

  • +
  • slide_layout (XAKeynoteSlideLayout, optional) – The base slide layout to use for the new slides, defaults to None

  • +
+
+
Returns:
+

A reference back to this PyXA object.

+
+
Return type:
+

XAKeynoteDocument

+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+property maximum_idle_duration: int
+

The duration before which the slideshow restarts due to inactivity.

+
+ +
+
+property modified: bool
+

Whether the document has been modified since its last save.

+
+ +
+
+move_slide_switcher_backward()[source]
+

Goes back one slide in the slide switcher.

+
+

New in version 0.0.3.

+
+
+ +
+
+move_slide_switcher_forward()[source]
+

Advances the slide switcher one slide forward.

+
+

New in version 0.0.3.

+
+
+ +
+
+property name: str
+

The name of the document.

+
+ +
+
+new_slide(properties: dict) XAKeynoteSlide[source]
+

Creates a new slide at the end of the presentation.

+
+
Parameters:
+

properties (dict) – The properties to give the new slide

+
+
Returns:
+

A reference to the newly created slide

+
+
Return type:
+

XAKeynoteSlide

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+property password_protected: bool
+

Whether the document is password protected.

+
+ +
+
+property properties: dict
+

All properties of the document.

+
+ +
+
+save()[source]
+

Saves the Keynote file.

+
+

New in version 0.0.3.

+
+
+ +
+
+property selection: XAiWorkiWorkItemList
+

A list of the currently selected items.

+
+ +
+
+show_slide_switcher()[source]
+

Shows the slide switch within the active slideshow interface.

+
+

New in version 0.0.3.

+
+
+ +
+
+slide_layouts(filter: Optional[dict] = None) XAKeynoteSlideLayoutList[source]
+

Returns a list of slide layouts, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned slide layouts will have, or None

+
+
Returns:
+

The list of slide layouts

+
+
Return type:
+

XAKeynoteSlideLayoutList

+
+
Example:
+

List all slide layouts

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Keynotes")
+>>> print(app.slide_layouts())
+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+property slide_numbers_showing: bool
+

Whether slide numbers are displayed.

+
+ +
+
+slides(filter: Optional[dict] = None) XAKeynoteSlideList[source]
+

Returns a list of slides, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned slides will have, or None

+
+
Returns:
+

The list of slides

+
+
Return type:
+

XAKeynoteSlideList

+
+
Example 1:
+

List all slides

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Keynotes")
+>>> print(app.slides())
+
+
+
+
Example 2:
+

List slides after applying a filter

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Keynotes")
+>>> print(app.slides().greater_than("slideNumber", 5))
+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+start_from(slide: XAKeynoteSlide) XAKeynoteSlide[source]
+

Starts the slideshow from the specified slide.

+
+

New in version 0.0.3.

+
+
+ +
+
+stop()[source]
+

Stops the currently playing slideshow.

+
+

New in version 0.0.3.

+
+
+ +
+
+property width: int
+

The width of the document in points; standard is 1080; wide slide width is 1920.

+
+ +
+ +
+
+class PyXA.apps.Keynote.XAKeynoteDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAiWorkDocumentList

+

A wrapper around lists of themes that employs fast enumeration techniques.

+

All properties of themes can be called as methods on the wrapped list, returning a list containing each theme’s value for the property.

+
+

New in version 0.0.5.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

auto_loop()

auto_play()

auto_restart()

by_auto_loop(auto_loop)

by_auto_play(auto_play)

by_auto_restart(auto_restart)

by_current_slide(current_slide)

by_document_theme(document_theme)

by_height(height)

by_maximum_idle_duration(maximum_idle_duration)

by_password_protected(password_protected)

by_properties(properties)

by_selection(selection)

by_slide_numbers_showing(slide_numbers_showing)

by_width(width)

current_slide()

document_theme()

height()

maximum_idle_duration()

properties()

slide_numbers_showing()

width()

+
+
+auto_loop() list[bool][source]
+
+ +
+
+auto_play() list[bool][source]
+
+ +
+
+auto_restart() list[bool][source]
+
+ +
+
+by_auto_loop(auto_loop: bool) Optional[XAKeynoteDocument][source]
+
+ +
+
+by_auto_play(auto_play: bool) Optional[XAKeynoteDocument][source]
+
+ +
+
+by_auto_restart(auto_restart: bool) Optional[XAKeynoteDocument][source]
+
+ +
+
+by_current_slide(current_slide: XAKeynoteSlide) Optional[XAKeynoteDocument][source]
+
+ +
+
+by_document_theme(document_theme: XAKeynoteTheme) Optional[XAKeynoteDocument][source]
+
+ +
+
+by_height(height: int) Optional[XAKeynoteDocument][source]
+
+ +
+
+by_maximum_idle_duration(maximum_idle_duration: int) Optional[XAKeynoteDocument][source]
+
+ +
+
+by_password_protected(password_protected: bool) Optional[XAKeynoteDocument][source]
+
+ +
+
+by_properties(properties: dict) Optional[XAKeynoteDocument][source]
+
+ +
+
+by_selection(selection: XAiWorkiWorkItemList) Optional[XAKeynoteDocument][source]
+
+ +
+
+by_slide_numbers_showing(slide_numbers_showing: bool) Optional[XAKeynoteDocument][source]
+
+ +
+
+by_width(width: int) Optional[XAKeynoteDocument][source]
+
+ +
+
+current_slide() XAKeynoteSlideList[source]
+
+ +
+
+document_theme() XAKeynoteThemeList[source]
+
+ +
+
+height() list[int][source]
+
+ +
+
+maximum_idle_duration() list[int][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+
+slide_numbers_showing() list[bool][source]
+
+ +
+
+width() list[int][source]
+
+ +
+ +
+
+class PyXA.apps.Keynote.XAKeynoteSlide(properties)[source]
+

Bases: XAKeynoteContainer

+

A class for managing and interacting with Keynote slides.

+
+

See also

+

XAKeynoteApplication, iWorkApplicationBase.XAiWorkiWorkItem

+
+
+

New in version 0.0.2.

+
+

Methods:

+ + + + + + + + + + + + + + + +

add_chart(row_names, column_names, data[, ...])

_summary_

add_image(file_path)

Adds the image at the specified path to the slide.

delete()

Deletes the slide.

duplicate()

Duplicates the slide, mimicking the action of copying and pasting the slide manually.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

base_layout

The slide layout this slide is based on.

body_showing

Whether the default body text is displayed.

default_body_item

The default body container of the slide.

default_title_item

The default title container of the slide.

presenter_notes

The presenter notes for the slide.

properties

All properties of the slide.

skipped

Whether the slide is skipped.

slide_number

The index of the slide in the document.

title_showing

Whether the default slide title is displayed.

transition_properties

The transition settings applied to the slide.

+
+
+add_chart(row_names: list[str], column_names: list[str], data: list[list[Any]], type: int = 1818848818, group_by: int = 1262708594) XAiWorkChart[source]
+

_summary_

+

_extended_summary_

+
+
Parameters:
+
    +
  • row_names (list[str]) – A list of row names.

  • +
  • column_names (list[str]) – A list of column names.

  • +
  • data (list[list[Any]]) – A 2d array

  • +
  • type (int, optional) – The chart type, defaults to _KeynoteLegacyChartType.KeynoteLegacyChartTypeLine_2d.value

  • +
  • group_by (int, optional) – The grouping schema, defaults to _KeynoteLegacyChartGrouping.KeynoteLegacyChartGroupingChartRow.value

  • +
+
+
Returns:
+

A reference to the newly created chart object.

+
+
Return type:
+

iWorkApplicationBase.XAiWorkChart

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+add_image(file_path: Union[str, XAPath, XAURL]) XAiWorkImage[source]
+

Adds the image at the specified path to the slide.

+
+
Parameters:
+

file_path (Union[str, XABase.XAPath, XABase.XAURL]) – The path to the image file.

+
+
Returns:
+

The newly created image object.

+
+
Return type:
+

iWorkApplicationBase.XAiWorkImage

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+property base_layout: XAKeynoteSlideLayout
+

The slide layout this slide is based on.

+
+ +
+
+property body_showing: bool
+

Whether the default body text is displayed.

+
+ +
+
+property default_body_item: XAiWorkShape
+

The default body container of the slide.

+
+ +
+
+property default_title_item: XAiWorkShape
+

The default title container of the slide.

+
+ +
+
+delete()[source]
+

Deletes the slide.

+
+

New in version 0.0.2.

+
+
+ +
+
+duplicate() XAKeynoteSlide[source]
+

Duplicates the slide, mimicking the action of copying and pasting the slide manually.

+
+
Returns:
+

A reference to newly created (duplicate) slide object.

+
+
Return type:
+

XAKeynoteSlide

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+property presenter_notes: XAText
+

The presenter notes for the slide.

+
+ +
+
+property properties: dict
+

All properties of the slide.

+
+ +
+
+property skipped: bool
+

Whether the slide is skipped.

+
+ +
+
+property slide_number: int
+

The index of the slide in the document.

+
+ +
+
+property title_showing: bool
+

Whether the default slide title is displayed.

+
+ +
+
+property transition_properties: dict
+

The transition settings applied to the slide.

+
+ +
+ +
+
+class PyXA.apps.Keynote.XAKeynoteSlideLayout(properties)[source]
+

Bases: XAKeynoteSlide

+

A class for managing and interacting with Keynote slide layouts.

+
+

See also

+

XAKeynoteSlide

+
+
+

New in version 0.0.2.

+
+

Attributes:

+ + + + + + +

name

The name of the slide layout.

+
+
+property name: str
+

The name of the slide layout.

+
+ +
+ +
+
+class PyXA.apps.Keynote.XAKeynoteSlideLayoutList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAKeynoteSlideList

+

A wrapper around lists of themes that employs fast enumeration techniques.

+

All properties of themes can be called as methods on the wrapped list, returning a list containing each theme’s value for the property.

+
+

New in version 0.0.5.

+
+

Methods:

+ + + + + + + + + +

by_name(name)

name()

+
+
+by_name(name: str) XAKeynoteSlideLayout[source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Keynote.XAKeynoteSlideList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAKeynoteContainerList

+

A wrapper around lists of themes that employs fast enumeration techniques.

+

All properties of themes can be called as methods on the wrapped list, returning a list containing each theme’s value for the property.

+
+

New in version 0.0.5.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

base_layout()

body_showing()

by_base_layout(base_layout)

by_body_showing(body_showing)

by_default_body_item(default_body_item)

by_default_text_item(default_text_item)

by_presenter_notes(presenter_notes)

by_properties(properties)

by_skipped(skipped)

by_slide_number(slide_number)

by_title_showing(title_showing)

by_transition_properties(transition_properties)

default_body_item()

default_title_item()

presenter_notes()

properties()

skipped()

slide_number()

title_showing()

transition_properties()

+
+
+base_layout() XAKeynoteSlideLayoutList[source]
+
+ +
+
+body_showing() list[bool][source]
+
+ +
+
+by_base_layout(base_layout: XAKeynoteSlideLayout) XAKeynoteSlide[source]
+
+ +
+
+by_body_showing(body_showing: bool) XAKeynoteSlide[source]
+
+ +
+
+by_default_body_item(default_body_item: XAiWorkShape) XAKeynoteSlide[source]
+
+ +
+
+by_default_text_item(default_text_item: XAiWorkShape) XAKeynoteSlide[source]
+
+ +
+
+by_presenter_notes(presenter_notes: Union[str, XAText]) XAKeynoteSlide[source]
+
+ +
+
+by_properties(properties: dict) XAKeynoteSlide[source]
+
+ +
+
+by_skipped(skipped: bool) XAKeynoteSlide[source]
+
+ +
+
+by_slide_number(slide_number: int) XAKeynoteSlide[source]
+
+ +
+
+by_title_showing(title_showing: bool) XAKeynoteSlide[source]
+
+ +
+
+by_transition_properties(transition_properties: Union[XAKeynoteTransitionSettings, dict]) XAKeynoteSlide[source]
+
+ +
+
+default_body_item() XAiWorkShapeList[source]
+
+ +
+
+default_title_item() XAiWorkShapeList[source]
+
+ +
+
+presenter_notes() XATextList[source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+
+skipped() list[bool][source]
+
+ +
+
+slide_number() list[int][source]
+
+ +
+
+title_showing() list[bool][source]
+
+ +
+
+transition_properties() list[dict][source]
+
+ +
+ +
+
+class PyXA.apps.Keynote.XAKeynoteTheme(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with Keynote themes.

+
+

See also

+

XAKeynoteApplication

+
+
+

New in version 0.0.2.

+
+

Attributes:

+ + + + + + + + + + + + +

id

The unique identifier for the theme.

name

The name of the theme.

properties

All properties of the theme.

+
+
+property id: str
+

The unique identifier for the theme.

+
+ +
+
+property name: str
+

The name of the theme.

+
+ +
+
+property properties: dict
+

All properties of the theme.

+
+ +
+ +
+
+class PyXA.apps.Keynote.XAKeynoteThemeList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of themes that employs fast enumeration techniques.

+

All properties of themes can be called as methods on the wrapped list, returning a list containing each theme’s value for the property.

+
+

New in version 0.0.5.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_id(id)

by_name(name)

by_properties(properties)

id()

name()

properties()

+
+
+by_id(id: str) Optional[XAKeynoteTheme][source]
+
+ +
+
+by_name(name: str) Optional[XAKeynoteTheme][source]
+
+ +
+
+by_properties(properties: dict) Optional[XAKeynoteTheme][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+properties() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Keynote.XAKeynoteTransitionSettings(properties: dict, parent: XAObject = None)[source]
+

Bases: XAObject

+

Properties common to all transtions.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

automatic_transition

transition_delay

transition_duration

transition_effect

+
+
+property automatic_transition: float
+
+ +
+
+property transition_delay: float
+
+ +
+
+property transition_duration: float
+
+ +
+
+property transition_effect: Transition
+
+ +
+ +
+
+class PyXA.apps.Keynote.XAKeynoteWindow(properties)[source]
+

Bases: XAiWorkWindow

+

A class for managing and interacting with windows in Keynote.app.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + +

document

The document currently displayed in the window.

+
+
+property document: XAKeynoteDocument
+

The document currently displayed in the window.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/mail.html b/docs/reference/apps/mail.html new file mode 100644 index 0000000..380fcc0 --- /dev/null +++ b/docs/reference/apps/mail.html @@ -0,0 +1,5623 @@ + + + + + + + Mail Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Mail Module Reference

+
+

New in version 0.0.4.

+
+

Control the macOS Mail application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XAMailAccount(properties)

A class for managing and interacting with accounts in Mail.app.

XAMailAccountList(properties[, filter, ...])

A wrapper around lists of mail accounts that employs fast enumeration techniques.

XAMailApplication(properties)

A class for managing and interacting with Mail.app.

XAMailAttachment(properties)

A class for managing and interacting with message attachments in Mail.app.

XAMailAttachmentList(properties[, filter])

A wrapper around lists of attachments that employs fast enumeration techniques.

XAMailBccRecipient(properties)

A class for managing and interacting with BCC recipients in Mail.app.

XAMailBccRecipientList(properties[, filter])

A wrapper around lists of mail Bcc recipients that employs fast enumeration techniques.

XAMailCcRecipient(properties)

A class for managing and interacting with CC recipients in Mail.app.

XAMailCcRecipientList(properties[, filter])

A wrapper around lists of mail Cc recipients that employs fast enumeration techniques.

XAMailContainer(properties)

A class for managing and interacting with containers in Mail.app.

XAMailContainerList(properties[, filter])

A wrapper around lists of mail headers that employs fast enumeration techniques.

XAMailDocument(properties)

A class for managing and interacting with Mail documents.

XAMailDocumentList(properties[, filter])

A wrapper around lists of mail documents that employs fast enumeration techniques.

XAMailHeader(properties)

A class for managing and interacting with message headers in Mail.app.

XAMailHeaderList(properties[, filter])

A wrapper around lists of mail headers that employs fast enumeration techniques.

XAMailICloudAccount(properties)

A class for managing and interacting with iCloud accounts in Mail.app.

XAMailICloudAccountList(properties[, filter])

A wrapper around lists of iCloud accounts that employs fast enumeration techniques.

XAMailIMAPAccount(properties)

A class for managing and interacting with IMAP accounts in Mail.app.

XAMailIMAPAccountList(properties[, filter])

A wrapper around lists of mail documents that employs fast enumeration techniques.

XAMailMessage(properties)

A class for managing and interacting with messages in Mail.app.

XAMailMessageList(properties[, filter])

A wrapper around lists of messages that employs fast enumeration techniques.

XAMailMessageViewer(properties)

A class for managing and interacting with the message viewer window in Mail.app.

XAMailMessageViewerList(properties[, filter])

A wrapper around lists of mail signatures that employs fast enumeration techniques.

XAMailOutgoingMessage(properties)

A class for managing and interacting with outgoing messages in Mail.app.

XAMailOutgoingMessageList(properties[, filter])

A wrapper around lists of outgoing messages that employs fast enumeration techniques.

XAMailPOPAccount(properties)

A class for managing and interacting with POP accounts in Mail.app.

XAMailPOPAccountList(properties[, filter])

A wrapper around lists of mail documents that employs fast enumeration techniques.

XAMailRecipient(properties)

A class for managing and interacting with recipients in Mail.app.

XAMailRecipientList(properties[, filter, ...])

A wrapper around lists of mail recipients that employs fast enumeration techniques.

XAMailRule(properties)

A class for managing and interacting with rules in Mail.app.

XAMailRuleCondition(properties)

A class for managing and interacting with rule conditions in Mail.app.

XAMailRuleConditionList(properties[, filter])

A wrapper around lists of rule conditions that employs fast enumeration techniques.

XAMailRuleList(properties[, filter])

A wrapper around lists of rules that employs fast enumeration techniques.

XAMailSMTPServer(properties)

A class for managing and interacting with SMTP servers in Mail.app.

XAMailSMTPServerList(properties[, filter])

A wrapper around lists of SMTP servers that employs fast enumeration techniques.

XAMailSignature(properties)

A class for managing and interacting with email signatures in Mail.app.

XAMailSignatureList(properties[, filter])

A wrapper around lists of mail signatures that employs fast enumeration techniques.

XAMailToRecipient(properties)

A class for managing and interacting with the primary (to) recipients in Mail.app.

XAMailToRecipientList(properties[, filter])

A wrapper around lists of mail primary (to) recipients that employs fast enumeration techniques.

XAMailWindow(properties)

A class for managing and interacting with Mail documents.

XAMailbox(properties)

A class for managing and interacting with mailboxes in Mail.app.

XAMailboxList(properties[, filter, obj_class])

A wrapper around lists of mailboxes that employs fast enumeration techniques.

+
+
+class PyXA.apps.Mail.XAMailAccount(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with accounts in Mail.app.

+
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

account_directory

The directory where the account stores items on the disk.

account_type

The type of the account, either: "pop", "smtp", "imap", or "iCloud".

authentication

he preferred authentication scheme for the account, either: "password", "apop", "kerberos 5", "ntlm", "md5", "external", "Apple token", or "none".

delivery_account

The delivery account use when sending messages from the account.

email_addresses

The list of email addresses associated with the account.

empty_junk_messages_frequency

Number of days before junk messages are deleted (0 = delete on quit, -1 = never delete).

empty_junk_messages_on_quit

Whether messages marked as junk are deleted upon quitting Mail.app.

empty_trash_frequency

Number of days before messages in the trash are deleted (0 = delete on quit, -1 = never delete).

empty_trash_on_quit

Whether messages in the trash are permanently deleted upon quitting Mail.app.

enabled

Whether the account is enabled.

full_name

The user's full name associated with the account.

id

The unique identifier for the account.

move_deleted_messages_to_trash

Whether messages are moved to the trash mailbox upon deletion.

name

The name of the account.

password

The password for the account.

port

The port used to connect to the account.

server_name

The host name used to connect to the account.

user_name

The user name used to connect to the account.

uses_ssl

Whether SSL is enabled for this receiving account.

+

Methods:

+ + + + + + +

mailboxes([filter])

Returns a list of mail accounts matching the filter.

+
+
+property account_directory: str
+

The directory where the account stores items on the disk.

+
+ +
+
+property account_type: AccountType
+

The type of the account, either: “pop”, “smtp”, “imap”, or “iCloud”.

+
+ +
+
+property authentication: AuthenticationMethod
+

he preferred authentication scheme for the account, either: “password”, “apop”, “kerberos 5”, “ntlm”, “md5”, “external”, “Apple token”, or “none”.

+
+ +
+
+property delivery_account: XAMailSMTPServer
+

The delivery account use when sending messages from the account.

+
+ +
+
+property email_addresses: list[str]
+

The list of email addresses associated with the account.

+
+ +
+
+property empty_junk_messages_frequency: int
+

Number of days before junk messages are deleted (0 = delete on quit, -1 = never delete).

+
+ +
+
+property empty_junk_messages_on_quit: bool
+

Whether messages marked as junk are deleted upon quitting Mail.app.

+
+ +
+
+property empty_trash_frequency: int
+

Number of days before messages in the trash are deleted (0 = delete on quit, -1 = never delete).

+
+ +
+
+property empty_trash_on_quit: bool
+

Whether messages in the trash are permanently deleted upon quitting Mail.app.

+
+ +
+
+property enabled: bool
+

Whether the account is enabled.

+
+ +
+
+property full_name: str
+

The user’s full name associated with the account.

+
+ +
+
+property id: str
+

The unique identifier for the account.

+
+ +
+
+mailboxes(filter: dict = None) XAMailboxList[source]
+

Returns a list of mail accounts matching the filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+property move_deleted_messages_to_trash: bool
+

Whether messages are moved to the trash mailbox upon deletion.

+
+ +
+
+property name: str
+

The name of the account.

+
+ +
+
+property password: None
+

The password for the account.

+
+ +
+
+property port: int
+

The port used to connect to the account.

+
+ +
+
+property server_name: str
+

The host name used to connect to the account.

+
+ +
+
+property user_name: str
+

The user name used to connect to the account.

+
+ +
+
+property uses_ssl: bool
+

Whether SSL is enabled for this receiving account.

+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailAccountList(properties: dict, filter: Optional[dict] = None, object_class=None)[source]
+

Bases: XAList

+

A wrapper around lists of mail accounts that employs fast enumeration techniques.

+

All properties of accounts can be called as methods on the wrapped list, returning a list containing each account’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

account_directory()

account_type()

authentication()

by_account_directory(account_directory)

by_account_type(account_type)

by_authentication(authentication)

by_delivery_account(delivery_account)

by_email_addresses(email_addresses)

by_empty_junk_messages_frequency(...)

by_empty_junk_messages_on_quit(...)

by_empty_trash_frequency(empty_trash_frequency)

by_empty_trash_on_quit(empty_trash_on_quit)

by_enabled(enabled)

by_full_name(full_name)

by_id(id)

by_move_deleted_messages_to_trash(...)

by_name(name)

by_port(port)

by_server_name(server_name)

by_user_name(user_name)

by_uses_ssl(uses_ssl)

delivery_account()

email_addresses()

empty_junk_messages_frequency()

empty_junk_messages_on_quit()

empty_trash_frequency()

empty_trash_on_quit()

enabled()

full_name()

id()

move_deleted_messages_to_trash()

name()

port()

server_name()

user_name()

uses_ssl()

+
+
+account_directory() list[str][source]
+
+ +
+
+account_type() list[PyXA.apps.Mail.XAMailApplication.AccountType][source]
+
+ +
+
+authentication() list[PyXA.apps.Mail.XAMailApplication.AuthenticationMethod][source]
+
+ +
+
+by_account_directory(account_directory: str) Optional[XAMailAccount][source]
+
+ +
+
+by_account_type(account_type: AccountType) Optional[XAMailAccount][source]
+
+ +
+
+by_authentication(authentication: AuthenticationMethod) Optional[XAMailAccount][source]
+
+ +
+
+by_delivery_account(delivery_account: XAMailSMTPServer) Optional[XAMailAccount][source]
+
+ +
+
+by_email_addresses(email_addresses: list[str]) Optional[XAMailAccount][source]
+
+ +
+
+by_empty_junk_messages_frequency(empty_junk_messages_frequency: int) Optional[XAMailAccount][source]
+
+ +
+
+by_empty_junk_messages_on_quit(empty_junk_messages_on_quit: bool) Optional[XAMailAccount][source]
+
+ +
+
+by_empty_trash_frequency(empty_trash_frequency: int) Optional[XAMailAccount][source]
+
+ +
+
+by_empty_trash_on_quit(empty_trash_on_quit: bool) Optional[XAMailAccount][source]
+
+ +
+
+by_enabled(enabled: bool) Optional[XAMailAccount][source]
+
+ +
+
+by_full_name(full_name: str) Optional[XAMailAccount][source]
+
+ +
+
+by_id(id: str) Optional[XAMailAccount][source]
+
+ +
+
+by_move_deleted_messages_to_trash(move_deleted_messages_to_trash: bool) Optional[XAMailAccount][source]
+
+ +
+
+by_name(name: str) Optional[XAMailAccount][source]
+
+ +
+
+by_port(port: int) Optional[XAMailAccount][source]
+
+ +
+
+by_server_name(server_name: str) Optional[XAMailAccount][source]
+
+ +
+
+by_user_name(user_name: str) Optional[XAMailAccount][source]
+
+ +
+
+by_uses_ssl(uses_ssl: bool) Optional[XAMailAccount][source]
+
+ +
+
+delivery_account() XAMailSMTPServerList[source]
+
+ +
+
+email_addresses() list[list[str]][source]
+
+ +
+
+empty_junk_messages_frequency() list[int][source]
+
+ +
+
+empty_junk_messages_on_quit() list[bool][source]
+
+ +
+
+empty_trash_frequency() list[int][source]
+
+ +
+
+empty_trash_on_quit() list[bool][source]
+
+ +
+
+enabled() list[bool][source]
+
+ +
+
+full_name() list[str][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+move_deleted_messages_to_trash() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+port() list[int][source]
+
+ +
+
+server_name() list[str][source]
+
+ +
+
+user_name() list[str][source]
+
+ +
+
+uses_ssl() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailApplication(properties)[source]
+

Bases: XASBApplication

+

A class for managing and interacting with Mail.app.

+
+

New in version 0.0.4.

+
+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

AccountType(value[, names, module, ...])

Options for Mail account types.

AuthenticationMethod(value[, names, module, ...])

Options for Mail account authentication methods.

CachingPolicy(value[, names, module, ...])

Format(value[, names, module, qualname, ...])

Options for file and message formats.

HighlightColor(value[, names, module, ...])

Options for colors to use when highlighting text.

QuotingColor(value[, names, module, ...])

Options for colors to use when quoting text.

RuleQualifier(value[, names, module, ...])

Options for how Mail rules are qualified.

RuleType(value[, names, module, qualname, ...])

Types of rules in Mail.app.

ViewerColumn(value[, names, module, ...])

Columns in message viewer windows.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

accounts([filter])

Returns a list of mail accounts matching the filter.

check_for_new_mail(account)

imap_accounts([filter])

Returns a list of mail accounts matching the filter.

import_mailbox(file_path)

mailboxes([filter])

Returns a list of mail accounts matching the filter.

message_viewers([filter])

Returns a list of mail accounts matching the filter.

outgoing_messages([filter])

Returns a list of mail accounts matching the filter.

pop_accounts([filter])

Returns a list of mail accounts matching the filter.

rules([filter])

Returns a list of mail accounts matching the filter.

signatures([filter])

Returns a list of mail accounts matching the filter.

smtp_servers([filter])

Returns a list of mail accounts matching the filter.

synchronize(account)

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

always_bcc_myself

Whether the user's email address will be included in the Bcc: field of composed messages.

always_cc_myself

Whether the user's email address will be included in the Cc: field of composed messages.

application_version

The build number of Mail.app.

background_activity_count

The number of background activities currently running in Mail.

check_spelling_while_typing

Whether spelling is checked automatically while composing messages.

choose_signature_when_composing

Whether the user can choose a signature directly in a new compose window.

color_quoted_text

Whether quoted text should be colored.

default_message_format

The default format for messages being composed.

download_html_attachments

Whether images and attachments in HTML messages should be downloaded and displayed.

drafts_mailbox

The top-level drafts mailbox.

expand_group_addresses

Whether group addresses should be expanded when entered into the address fields of a new message.

fetch_interval

The number of minutes between automatic fetches for new mail (-1 = use automatically determined interval).

fetches_automatically

Whether mail will automatically be fetched at a specific interval.

fixed_width_font

The name of the font used for plain text messages.

fixed_width_font_size

The font size for plain text messages.

frontmost

Whether Mail is the active application.

highlight_selected_conversation

Whether messages in conversations should be highlighted in the Mail viewer window when not grouped.

inbox

The top-level inbox.

include_all_original_message_text

Whether all text of the original message will be quoted or only text the user selects.

junk_mailbox

The top-level junk mailbox.

level_one_quoting_color

Color for quoted text with one level of indentation.

level_three_quoting_color

Color for quoted text with three levels of indentation.

level_two_quoting_color

Color for quoted text with two levels of indentation.

message_font

The name of the font for messages.

message_font_size

The font size for messages.

message_list_font

The name of the font for the message list.

message_list_font_size

The font size for the message list.

name

The name of the application.

new_mail_sound

The name of the sound that plays when new mail is received, or "None".

outbox

The top-level outbox.

primary_email

The user's primary email address.

quote_original_message

Whether the text of the original message should be included in replies.

same_reply_format

Whether replies will be in the same text format as the message to which the user is replying.

selected_signature

The name of the currently selected signature (or "randomly", "sequentially", or "none").

selection

The list of messages currently selected by the user.

sent_mailbox

The top-level sent mailbox.

should_play_other_mail_sounds

Whether sounds will be played for actions and events other than receiving email.

trash_mailbox

The top-level trash mailbox.

use_fixed_width_font

Whether a fixed-width font should be used for plain text messages.

version

The version number of Mail.app.

+
+
+class AccountType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for Mail account types.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

ICLOUD

IMAP

POP

SMTP

UNKNOWN

+
+
+ICLOUD = 1702127988
+
+ +
+
+IMAP = 1702127981
+
+ +
+
+POP = 1702129775
+
+ +
+
+SMTP = 1702130541
+
+ +
+
+UNKNOWN = 1702131054
+
+ +
+ +
+
+class AuthenticationMethod(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for Mail account authentication methods.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

APOP

APOP

APPLE_TOKEN

Apple token

EXTERNAL

External authentication (TLS client certificate)

KERBEROS5

Kerberos V5 (GSSAPI)

MD5

CRAM-MD5

NONE

None

NTLM

NTLM

PASSWORD

Clear text password

+
+
+APOP = 1633775727
+

APOP

+
+ +
+
+APPLE_TOKEN = 1635020651
+

Apple token

+
+ +
+
+EXTERNAL = 1634039924
+

External authentication (TLS client certificate)

+
+ +
+
+KERBEROS5 = 1635281717
+

Kerberos V5 (GSSAPI)

+
+ +
+
+MD5 = 1635282276
+

CRAM-MD5

+
+ +
+
+NONE = 1667460719
+

None

+
+ +
+
+NTLM = 1635282548
+

NTLM

+
+ +
+
+PASSWORD = 1635279732
+

Clear text password

+
+ +
+ +
+
+class CachingPolicy(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Attributes:

+ + + + + + + + + + + + + + + +

ALL_MESSAGES_AND_THEIR_ATTACHMENTS

All messages and their attachments

ALL_MESSAGES_BUT_OMIT_ATTACHMENTS

All messages but omit attachments

DO_NOT_KEEP_COPIES_OF_ANY_MESSAGES

Do not use this option (deprecated).

ONLY_MESSAGES_I_HAVE_READ

Do not use this option (deprecated).

+
+
+ALL_MESSAGES_AND_THEIR_ATTACHMENTS = 2017026412
+

All messages and their attachments

+
+ +
+
+ALL_MESSAGES_BUT_OMIT_ATTACHMENTS = 2017026671
+

All messages but omit attachments

+
+ +
+
+DO_NOT_KEEP_COPIES_OF_ANY_MESSAGES = 2017029743
+

Do not use this option (deprecated). If you do, Mail will use the ‘all messages but omit attachments’ policy

+
+ +
+
+ONLY_MESSAGES_I_HAVE_READ = 2017032050
+

Do not use this option (deprecated). If you do, Mail will use the ‘all messages but omit attachments’ policy

+
+ +
+ +
+
+class Format(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for file and message formats.

+

Attributes:

+ + + + + + + + + + + + +

NATIVE

PLAIN_MESSAGE

RICH_MESSAGE

+
+
+NATIVE = 1769235821
+
+ +
+
+PLAIN_MESSAGE = 1684893812
+
+ +
+
+RICH_MESSAGE = 1684894324
+
+ +
+ +
+
+class HighlightColor(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for colors to use when highlighting text.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

BLUE

GRAY

GREEN

NONE

ORANGE

OTHER

PURPLE

RED

YELLOW

+
+
+BLUE = 1667457644
+
+ +
+
+GRAY = 1667458937
+
+ +
+
+GREEN = 1667458930
+
+ +
+
+NONE = 1667460719
+
+ +
+
+ORANGE = 1667460978
+
+ +
+
+OTHER = 1667460980
+
+ +
+
+PURPLE = 1667461237
+
+ +
+
+RED = 1667461733
+
+ +
+
+YELLOW = 1667463525
+
+ +
+ +
+
+class QuotingColor(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for colors to use when quoting text.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

BLUE

GREEN

ORANGE

OTHER

PURPLE

RED

YELLOW

+
+
+BLUE = 1667457644
+
+ +
+
+GREEN = 1667458930
+
+ +
+
+ORANGE = 1667460978
+
+ +
+
+OTHER = 1667460980
+
+ +
+
+PURPLE = 1667461237
+
+ +
+
+RED = 1667461733
+
+ +
+
+YELLOW = 1667463525
+
+ +
+ +
+
+class RuleQualifier(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for how Mail rules are qualified.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

BEGINS_WITH_VALUE

DOES_CONTAIN_VALUE

DOES_NOT_CONTAIN_VALUE

ENDS_WITH_VALUE

EQUAL_TO_VALUE

GREATER_THAN_VALUE

LESS_THAN_VALUE

NONE

Indicates no qualifier is applicable

+
+
+BEGINS_WITH_VALUE = 1920033399
+
+ +
+
+DOES_CONTAIN_VALUE = 1920033647
+
+ +
+
+DOES_NOT_CONTAIN_VALUE = 1920033902
+
+ +
+
+ENDS_WITH_VALUE = 1920034167
+
+ +
+
+EQUAL_TO_VALUE = 1920035173
+
+ +
+
+GREATER_THAN_VALUE = 1920034676
+
+ +
+
+LESS_THAN_VALUE = 1920035956
+
+ +
+
+NONE = 1920036463
+

Indicates no qualifier is applicable

+
+ +
+ +
+
+class RuleType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Types of rules in Mail.app.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

ACCOUNT

Account

ANY_RECIPIENT

Any recipient

ATTACHMENT_TYPE

Attachment Type

CC_HEADER

Cc header

FROM_HEADER

From header

HEADER_KEY

An arbitrary header key

MATCHES_EVERY_MESSAGE

Every message

MESSAGE_CONTENT

Message content

MESSAGE_IS_JUNK_MAIL

Message is junk mail

SENDER_IS_IN_MY_CONTACTS

Sender is in my contacts

SENDER_IS_IN_MY_PREVIOUS_RECIPIENTS

Sender is in my previous recipients

SENDER_IS_MEMBER_OF_GROUP

Sender is member of group

SENDER_IS_NOT_IN_MY_CONTACTS

Sender is not in my contacts

SENDER_IS_NOT_IN_MY_PREVIOUS_RECIPIENTS

sender is not in my previous recipients

SENDER_IS_NOT_MEMBER_OF_GROUP

Sender is not member of group

SENDER_IS_VIP

Sender is VIP

SUBJECT_HEADER

Subject header

TO_HEADER

To header

TO_OR_CC_HEADER

To or Cc header

+
+
+ACCOUNT = 1952539491
+

Account

+
+ +
+
+ANY_RECIPIENT = 1952542322
+

Any recipient

+
+ +
+
+ATTACHMENT_TYPE = 1952543860
+

Attachment Type

+
+ +
+
+CC_HEADER = 1952670563
+

Cc header

+
+ +
+
+FROM_HEADER = 1952871023
+

From header

+
+ +
+
+HEADER_KEY = 1952998507
+

An arbitrary header key

+
+ +
+
+MATCHES_EVERY_MESSAGE = 1952806509
+

Every message

+
+ +
+
+MESSAGE_CONTENT = 1953326435
+

Message content

+
+ +
+
+MESSAGE_IS_JUNK_MAIL = 1953327466
+

Message is junk mail

+
+ +
+
+SENDER_IS_IN_MY_CONTACTS = 1953720681
+

Sender is in my contacts

+
+ +
+
+SENDER_IS_IN_MY_PREVIOUS_RECIPIENTS = 1953718632
+

Sender is in my previous recipients

+
+ +
+
+SENDER_IS_MEMBER_OF_GROUP = 1953720685
+

Sender is member of group

+
+ +
+
+SENDER_IS_NOT_IN_MY_CONTACTS = 1953720686
+

Sender is not in my contacts

+
+ +
+
+SENDER_IS_NOT_IN_MY_PREVIOUS_RECIPIENTS = 1953390952
+

sender is not in my previous recipients

+
+ +
+
+SENDER_IS_NOT_MEMBER_OF_GROUP = 1953720679
+

Sender is not member of group

+
+ +
+
+SENDER_IS_VIP = 1953720679
+

Sender is VIP

+
+ +
+
+SUBJECT_HEADER = 1953723746
+

Subject header

+
+ +
+
+TO_HEADER = 1953787759
+

To header

+
+ +
+
+TO_OR_CC_HEADER = 1953787747
+

To or Cc header

+
+ +
+ +
+
+class ViewerColumn(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Columns in message viewer windows.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

ATTACHMENTS

Column containing the number of attachments a message contains

DATE_LAST_SAVED

Column containing the date a draft message was saved

DATE_RECEIVED

Column containing the date a message was received

DATE_SENT

Column containing the date a message was sent

FLAGS

Column containing the flags of a message

FROM

Column containing the sender's name

MAILBOX

Column containing the name of the mailbox or account a message is in

MESSAGE_COLOR

Used to indicate sorting should be done by color

MESSAGE_STATUS

Column indicating a messages status (read, unread, replied to, forwarded, etc)

NUMBER

Column containing the number of a message in a mailbox

RECIPIENTS

Column containing the recipients of a message

SIZE

Column containing the size of a message

SUBJECT

Column containing the subject of a message

+
+
+ATTACHMENTS = 1701011828
+

Column containing the number of attachments a message contains

+
+ +
+
+DATE_LAST_SAVED = 1701014643
+

Column containing the date a draft message was saved

+
+ +
+
+DATE_RECEIVED = 1701012594
+

Column containing the date a message was received

+
+ +
+
+DATE_SENT = 1701012595
+

Column containing the date a message was sent

+
+ +
+
+FLAGS = 1701013100
+

Column containing the flags of a message

+
+ +
+
+FROM = 1701013106
+

Column containing the sender’s name

+
+ +
+
+MAILBOX = 1701014882
+

Column containing the name of the mailbox or account a message is in

+
+ +
+
+MESSAGE_COLOR = 1701012332
+

Used to indicate sorting should be done by color

+
+ +
+
+MESSAGE_STATUS = 1701014899
+

Column indicating a messages status (read, unread, replied to, forwarded, etc)

+
+ +
+
+NUMBER = 1701015149
+

Column containing the number of a message in a mailbox

+
+ +
+
+RECIPIENTS = 1701016687
+

Column containing the recipients of a message

+
+ +
+
+SIZE = 1701016442
+

Column containing the size of a message

+
+ +
+
+SUBJECT = 1701016437
+

Column containing the subject of a message

+
+ +
+ +
+
+accounts(filter: dict = None) XAMailAccountList[source]
+

Returns a list of mail accounts matching the filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+property always_bcc_myself: bool
+

Whether the user’s email address will be included in the Bcc: field of composed messages.

+
+ +
+
+property always_cc_myself: bool
+

Whether the user’s email address will be included in the Cc: field of composed messages.

+
+ +
+
+property application_version: str
+

The build number of Mail.app.

+
+ +
+
+property background_activity_count: int
+

The number of background activities currently running in Mail.

+
+ +
+
+check_for_new_mail(account: XAMailAccount) XAMailApplication[source]
+
+ +
+
+property check_spelling_while_typing: bool
+

Whether spelling is checked automatically while composing messages.

+
+ +
+
+property choose_signature_when_composing: bool
+

Whether the user can choose a signature directly in a new compose window.

+
+ +
+
+property color_quoted_text: bool
+

Whether quoted text should be colored.

+
+ +
+
+property default_message_format: Format
+

The default format for messages being composed.

+
+ +
+
+property download_html_attachments: bool
+

Whether images and attachments in HTML messages should be downloaded and displayed.

+
+ +
+
+property drafts_mailbox: XAMailbox
+

The top-level drafts mailbox.

+
+ +
+
+property expand_group_addresses: bool
+

Whether group addresses should be expanded when entered into the address fields of a new message.

+
+ +
+
+property fetch_interval: int
+

The number of minutes between automatic fetches for new mail (-1 = use automatically determined interval).

+
+ +
+
+property fetches_automatically: bool
+

Whether mail will automatically be fetched at a specific interval.

+
+ +
+
+property fixed_width_font: str
+

The name of the font used for plain text messages.

+
+ +
+
+property fixed_width_font_size: int
+

The font size for plain text messages.

+
+ +
+
+property frontmost: bool
+

Whether Mail is the active application.

+
+ +
+
+property highlight_selected_conversation: bool
+

Whether messages in conversations should be highlighted in the Mail viewer window when not grouped.

+
+ +
+
+imap_accounts(filter: dict = None) XAMailAccountList[source]
+

Returns a list of mail accounts matching the filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+import_mailbox(file_path: Union[str, NSURL]) XAMailApplication[source]
+
+ +
+
+property inbox: XAMailbox
+

The top-level inbox.

+
+ +
+
+property include_all_original_message_text: bool
+

Whether all text of the original message will be quoted or only text the user selects.

+
+ +
+
+property junk_mailbox: XAMailbox
+

The top-level junk mailbox.

+
+ +
+
+property level_one_quoting_color: QuotingColor
+

Color for quoted text with one level of indentation.

+
+ +
+
+property level_three_quoting_color: QuotingColor
+

Color for quoted text with three levels of indentation.

+
+ +
+
+property level_two_quoting_color: QuotingColor
+

Color for quoted text with two levels of indentation.

+
+ +
+
+mailboxes(filter: dict = None) XAMailboxList[source]
+

Returns a list of mail accounts matching the filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+property message_font: str
+

The name of the font for messages.

+
+ +
+
+property message_font_size: float
+

The font size for messages.

+
+ +
+
+property message_list_font: str
+

The name of the font for the message list.

+
+ +
+
+property message_list_font_size: float
+

The font size for the message list.

+
+ +
+
+message_viewers(filter: dict = None) XAMailMessageViewerList[source]
+

Returns a list of mail accounts matching the filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+property new_mail_sound: str
+

The name of the sound that plays when new mail is received, or “None”.

+
+ +
+
+property outbox: XAMailbox
+

The top-level outbox.

+
+ +
+
+outgoing_messages(filter: dict = None) XAMailAccountList[source]
+

Returns a list of mail accounts matching the filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+pop_accounts(filter: dict = None) XAMailAccountList[source]
+

Returns a list of mail accounts matching the filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+property primary_email: str
+

The user’s primary email address.

+
+ +
+
+property quote_original_message: bool
+

Whether the text of the original message should be included in replies.

+
+ +
+
+rules(filter: dict = None) XAMailRuleList[source]
+

Returns a list of mail accounts matching the filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+property same_reply_format: bool
+

Whether replies will be in the same text format as the message to which the user is replying.

+
+ +
+
+property selected_signature: str
+

The name of the currently selected signature (or “randomly”, “sequentially”, or “none”).

+
+ +
+
+property selection: XAMailMessageList
+

The list of messages currently selected by the user.

+
+ +
+
+property sent_mailbox: XAMailbox
+

The top-level sent mailbox.

+
+ +
+
+property should_play_other_mail_sounds: bool
+

Whether sounds will be played for actions and events other than receiving email.

+
+ +
+
+signatures(filter: dict = None) XAMailSignatureList[source]
+

Returns a list of mail accounts matching the filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+smtp_servers(filter: dict = None) XAMailAccountList[source]
+

Returns a list of mail accounts matching the filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+synchronize(account: XAMailAccount) XAMailApplication[source]
+
+ +
+
+property trash_mailbox: XAMailbox
+

The top-level trash mailbox.

+
+ +
+
+property use_fixed_width_font: bool
+

Whether a fixed-width font should be used for plain text messages.

+
+ +
+
+property version: str
+

The version number of Mail.app.

+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailAttachment(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with message attachments in Mail.app.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + +

delete()

Permanently deletes the attachment.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

downloaded

Whether the attachment has been downloaded.

file_size

The approximate size of the attachment in bytes.

id

The unique identifier for the attachment.

mime_type

The MIME type of the attachment, e.g.

name

The name of the attachment.

+
+
+delete()[source]
+

Permanently deletes the attachment.

+
+

New in version 0.0.4.

+
+
+ +
+
+property downloaded: bool
+

Whether the attachment has been downloaded.

+
+ +
+
+property file_size: int
+

The approximate size of the attachment in bytes.

+
+ +
+
+property id: str
+

The unique identifier for the attachment.

+
+ +
+
+property mime_type: str
+

The MIME type of the attachment, e.g. text/plain.

+
+ +
+
+property name: str
+

The name of the attachment.

+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailAttachmentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of attachments that employs fast enumeration techniques.

+

All properties of attachments can be called as methods on the wrapped list, returning a list containing each attachment’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_downloaded(downloaded)

by_file_size(file_size)

by_id(id)

by_mime_type(mime_type)

by_name(name)

downloaded()

file_size()

id()

mime_type()

name()

+
+
+by_downloaded(downloaded: bool) XAMailAttachment[source]
+
+ +
+
+by_file_size(file_size: int) XAMailAttachment[source]
+
+ +
+
+by_id(id: str) XAMailAttachment[source]
+
+ +
+
+by_mime_type(mime_type: str) XAMailAttachment[source]
+
+ +
+
+by_name(name: str) XAMailAttachment[source]
+
+ +
+
+downloaded() list[bool][source]
+
+ +
+
+file_size() list[int][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+mime_type() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailBccRecipient(properties)[source]
+

Bases: XAMailRecipient

+

A class for managing and interacting with BCC recipients in Mail.app.

+
+

New in version 0.0.4.

+
+
+ +
+
+class PyXA.apps.Mail.XAMailBccRecipientList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMailRecipientList

+

A wrapper around lists of mail Bcc recipients that employs fast enumeration techniques.

+

All properties of Bcc recipients can be called as methods on the wrapped list, returning a list containing each recipients’s value for the property.

+
+

New in version 0.0.4.

+
+
+ +
+
+class PyXA.apps.Mail.XAMailCcRecipient(properties)[source]
+

Bases: XAMailRecipient

+

A class for managing and interacting with CC recipients in Mail.app.

+
+

New in version 0.0.4.

+
+
+ +
+
+class PyXA.apps.Mail.XAMailCcRecipientList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMailRecipientList

+

A wrapper around lists of mail Cc recipients that employs fast enumeration techniques.

+

All properties of Cc recipients can be called as methods on the wrapped list, returning a list containing each recipients’s value for the property.

+
+

New in version 0.0.4.

+
+
+ +
+
+class PyXA.apps.Mail.XAMailContainer(properties)[source]
+

Bases: XAMailbox

+

A class for managing and interacting with containers in Mail.app. Containers are mailboxes that contain other mailboxes.

+
+

New in version 0.0.4.

+
+
+ +
+
+class PyXA.apps.Mail.XAMailContainerList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMailboxList

+

A wrapper around lists of mail headers that employs fast enumeration techniques.

+

All properties of headers can be called as methods on the wrapped list, returning a list containing each header’s value for the property.

+
+

New in version 0.0.4.

+
+
+ +
+
+class PyXA.apps.Mail.XAMailDocument(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with Mail documents.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + +

delete()

Permanently deletes the document.

+

Attributes:

+ + + + + + + + + + + + +

file

The location of the document on the disk, if one exists.

modified

Whether the document has been modified since the last save.

name

The name of the document.

+
+
+delete()[source]
+

Permanently deletes the document.

+
+

New in version 0.0.4.

+
+
+ +
+
+property file: str
+

The location of the document on the disk, if one exists.

+
+ +
+
+property modified: bool
+

Whether the document has been modified since the last save.

+
+ +
+
+property name: str
+

The name of the document.

+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of mail documents that employs fast enumeration techniques.

+

All properties of documents can be called as methods on the wrapped list, returning a list containing each document’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_file(file)

by_modified(modified)

by_name(name)

file()

modified()

name()

+
+
+by_file(file: str) XAMailDocument[source]
+
+ +
+
+by_modified(modified: bool) XAMailDocument[source]
+
+ +
+
+by_name(name: str) XAMailDocument[source]
+
+ +
+
+file() list[str][source]
+
+ +
+
+modified() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailHeader(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with message headers in Mail.app.

+
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + +

content

The contents of the header.

name

The name of the header value.

+
+
+property content: str
+

The contents of the header.

+
+ +
+
+property name: str
+

The name of the header value.

+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailHeaderList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of mail headers that employs fast enumeration techniques.

+

All properties of headers can be called as methods on the wrapped list, returning a list containing each header’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + +

by_content(content)

by_name(name)

content()

name()

+
+
+by_content(content: str) XAMailHeader[source]
+
+ +
+
+by_name(name: str) XAMailHeader[source]
+
+ +
+
+content() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailICloudAccount(properties)[source]
+

Bases: XAMailAccount

+

A class for managing and interacting with iCloud accounts in Mail.app.

+
+

New in version 0.0.4.

+
+
+ +
+
+class PyXA.apps.Mail.XAMailICloudAccountList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMailAccountList

+

A wrapper around lists of iCloud accounts that employs fast enumeration techniques.

+

All properties of iCloud accounts can be called as methods on the wrapped list, returning a list containing each accounts’s value for the property.

+
+

New in version 0.0.4.

+
+
+ +
+
+class PyXA.apps.Mail.XAMailIMAPAccount(properties)[source]
+

Bases: XAMailAccount

+

A class for managing and interacting with IMAP accounts in Mail.app.

+
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

compact_mailboxes_when_closing

Whether an IMAP mailbox is automatically compacted when the user quits Mail.app or switches to another mailbox.

message_caching

The message caching setting for the account.

store_deleted_messages_on_server

Whether deleted messages will be stored on the IMAP server.

store_drafts_on_server

Whether draft messages will be stored on the IMAP server.

store_junk_mail_on_server

Whether junk mail will be stored on the IMAP server.

store_sent_messages_on_server

Whether sent messages will be stored on the IMAP server.

+
+
+property compact_mailboxes_when_closing: bool
+

Whether an IMAP mailbox is automatically compacted when the user quits Mail.app or switches to another mailbox.

+
+ +
+
+property message_caching: CachingPolicy
+

The message caching setting for the account.

+
+ +
+
+property store_deleted_messages_on_server: bool
+

Whether deleted messages will be stored on the IMAP server.

+
+ +
+
+property store_drafts_on_server: bool
+

Whether draft messages will be stored on the IMAP server.

+
+ +
+
+property store_junk_mail_on_server: bool
+

Whether junk mail will be stored on the IMAP server.

+
+ +
+
+property store_sent_messages_on_server: bool
+

Whether sent messages will be stored on the IMAP server.

+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailIMAPAccountList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMailAccountList

+

A wrapper around lists of mail documents that employs fast enumeration techniques.

+

All properties of documents can be called as methods on the wrapped list, returning a list containing each document’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_compact_mailboxes_when_closing(...)

by_message_caching(message_caching)

by_store_deleted_messages_on_server(...)

by_store_drafts_on_server(store_drafts_on_server)

by_store_junk_mail_on_server(...)

by_store_sent_messages_on_server(...)

compact_mailboxes_when_closing()

message_caching()

store_deleted_messages_on_server()

store_drafts_on_server()

store_junk_mail_on_server()

store_sent_messages_on_server()

+
+
+by_compact_mailboxes_when_closing(compact_mailboxes_when_closing: bool) XAMailPOPAccount[source]
+
+ +
+
+by_message_caching(message_caching: CachingPolicy) XAMailPOPAccount[source]
+
+ +
+
+by_store_deleted_messages_on_server(store_deleted_messages_on_server: bool) XAMailPOPAccount[source]
+
+ +
+
+by_store_drafts_on_server(store_drafts_on_server: bool) XAMailPOPAccount[source]
+
+ +
+
+by_store_junk_mail_on_server(store_junk_mail_on_server: bool) XAMailPOPAccount[source]
+
+ +
+
+by_store_sent_messages_on_server(store_sent_messages_on_server: bool) XAMailPOPAccount[source]
+
+ +
+
+compact_mailboxes_when_closing() list[bool][source]
+
+ +
+
+message_caching() list[PyXA.apps.Mail.XAMailApplication.CachingPolicy][source]
+
+ +
+
+store_deleted_messages_on_server() list[bool][source]
+
+ +
+
+store_drafts_on_server() list[bool][source]
+
+ +
+
+store_junk_mail_on_server() list[bool][source]
+
+ +
+
+store_sent_messages_on_server() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailMessage(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with messages in Mail.app.

+
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

all_headers

The headers of the message.

background_color

The background color of the message.

content

The contents of the message.

date_received

The date and time that the message was received.

date_sent

The date and time that the message was sent.

deleted_status

Whether the message is deleted.

flag_index

The flag on the message, or -1 if the message is not flagged.

flagged_status

Whether the message is flagged.

id

The unique identifier for the message.

junk_mail_status

Whether the message is marked as junk.

mailbox

The mailbox in which the message is located.

message_id

The unique message ID string.

message_size

The size of the message in bytes.

read_status

Whether the message has been read.

reply_to

The address that replies should be sent to.

sender

The address of the sender of the message.

source

The raw source of the message.

subject

The subject string of the message.

was_forward

Whether the message was forwarded.

was_redirected

Whether the message was redirected.

was_replied_to

Whether the message was replied to.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

bcc_recipients([filter])

Returns a list of Bcc recipients matching the filter.

cc_recpients([filter])

Returns a list of Cc recipients matching the filter.

delete()

Permanently deletes the message.

forward([open_window])

headers([filter])

Returns a list of message headers matching the filter.

mail_attachments([filter])

Returns a list of message attachments matching the filter.

open()

Opens the message in a separate window.

recipients([filter])

Returns a list of mail recipients matching the filter.

redirect([open_window])

reply([open_window, reply_all])

to_recipients([filter])

Returns a list of primary recipients matching the filter.

+
+
+property all_headers: str
+

The headers of the message.

+
+ +
+
+property background_color: HighlightColor
+

The background color of the message.

+
+ +
+
+bcc_recipients(filter: dict = None) XAMailBccRecipientList[source]
+

Returns a list of Bcc recipients matching the filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+cc_recpients(filter: dict = None) XAMailCcRecipientList[source]
+

Returns a list of Cc recipients matching the filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+property content: XAText
+

The contents of the message.

+
+ +
+
+property date_received: datetime
+

The date and time that the message was received.

+
+ +
+
+property date_sent: datetime
+

The date and time that the message was sent.

+
+ +
+
+delete()[source]
+

Permanently deletes the message.

+
+

New in version 0.0.4.

+
+
+ +
+
+property deleted_status: bool
+

Whether the message is deleted.

+
+ +
+
+property flag_index: int
+

The flag on the message, or -1 if the message is not flagged.

+
+ +
+
+property flagged_status: bool
+

Whether the message is flagged.

+
+ +
+
+forward(open_window: bool = True) XAMailOutgoingMessage[source]
+
+ +
+
+headers(filter: dict = None) XAMailHeaderList[source]
+

Returns a list of message headers matching the filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+property id: int
+

The unique identifier for the message.

+
+ +
+
+property junk_mail_status: bool
+

Whether the message is marked as junk.

+
+ +
+
+mail_attachments(filter: dict = None) XAMailAttachmentList[source]
+

Returns a list of message attachments matching the filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+property mailbox: XAMailbox
+

The mailbox in which the message is located.

+
+ +
+
+property message_id: int
+

The unique message ID string.

+
+ +
+
+property message_size: int
+

The size of the message in bytes.

+
+ +
+
+open() XAMailMessage[source]
+

Opens the message in a separate window.

+
+
Returns:
+

A reference to the message object.

+
+
Return type:
+

XAMailMessage

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+property read_status: bool
+

Whether the message has been read.

+
+ +
+
+recipients(filter: dict = None) XAMailRecipientList[source]
+

Returns a list of mail recipients matching the filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+redirect(open_window: bool = True) XAMailOutgoingMessage[source]
+
+ +
+
+reply(open_window: bool = True, reply_all: bool = False) XAMailOutgoingMessage[source]
+
+ +
+
+property reply_to: str
+

The address that replies should be sent to.

+
+ +
+
+property sender: str
+

The address of the sender of the message.

+
+ +
+
+property source: str
+

The raw source of the message.

+
+ +
+
+property subject: str
+

The subject string of the message.

+
+ +
+
+to_recipients(filter: dict = None) XAMailToRecipientList[source]
+

Returns a list of primary recipients matching the filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+property was_forward: bool
+

Whether the message was forwarded.

+
+ +
+
+property was_redirected: bool
+

Whether the message was redirected.

+
+ +
+
+property was_replied_to: bool
+

Whether the message was replied to.

+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailMessageList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of messages that employs fast enumeration techniques.

+

All properties of messages can be called as methods on the wrapped list, returning a list containing each message’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

all_headers()

background_color()

by_all_headers(all_headers)

by_background_color(background_color)

by_content(content)

by_date_received(date_received)

by_date_sent(date_sent)

by_deleted_status(deleted_status)

by_flag_index(flag_index)

by_flagged_status(flagged_status)

by_id(id)

by_junk_mail_status(junk_mail_status)

by_mailbox(mailbox)

by_message_id(message_id)

by_message_size(message_size)

by_read_status(read_status)

by_reply_to(reply_to)

by_sender(sender)

by_source(source)

by_subject(subject)

by_was_forwarded(was_forwarded)

by_was_redirected(was_redirected)

by_was_replied_to(was_replied_to)

content()

date_received()

date_sent()

deleted_status()

flag_index()

flagged_status()

id()

junk_mail_status()

mailbox()

message_id()

message_size()

read_status()

reply_to()

sender()

source()

subject()

was_forwarded()

was_redirected()

was_replied_to()

+
+
+all_headers() list[str][source]
+
+ +
+
+background_color() list[PyXA.apps.Mail.XAMailApplication.HighlightColor][source]
+
+ +
+
+by_all_headers(all_headers: str) XAMailMessage[source]
+
+ +
+
+by_background_color(background_color: HighlightColor) XAMailMessage[source]
+
+ +
+
+by_content(content: XAText) XAMailMessage[source]
+
+ +
+
+by_date_received(date_received: datetime) XAMailMessage[source]
+
+ +
+
+by_date_sent(date_sent: datetime) XAMailMessage[source]
+
+ +
+
+by_deleted_status(deleted_status: bool) XAMailMessage[source]
+
+ +
+
+by_flag_index(flag_index: int) XAMailMessage[source]
+
+ +
+
+by_flagged_status(flagged_status: bool) XAMailMessage[source]
+
+ +
+
+by_id(id: int) XAMailMessage[source]
+
+ +
+
+by_junk_mail_status(junk_mail_status: bool) XAMailMessage[source]
+
+ +
+
+by_mailbox(mailbox: XAMailbox) XAMailMessage[source]
+
+ +
+
+by_message_id(message_id: str) XAMailMessage[source]
+
+ +
+
+by_message_size(message_size: int) XAMailMessage[source]
+
+ +
+
+by_read_status(read_status: bool) XAMailMessage[source]
+
+ +
+
+by_reply_to(reply_to: str) XAMailMessage[source]
+
+ +
+
+by_sender(sender: str) XAMailMessage[source]
+
+ +
+
+by_source(source: str) XAMailMessage[source]
+
+ +
+
+by_subject(subject: str) XAMailMessage[source]
+
+ +
+
+by_was_forwarded(was_forwarded: bool) XAMailMessage[source]
+
+ +
+
+by_was_redirected(was_redirected: bool) XAMailMessage[source]
+
+ +
+
+by_was_replied_to(was_replied_to: bool) XAMailMessage[source]
+
+ +
+
+content() list[str][source]
+
+ +
+
+date_received() list[datetime.datetime][source]
+
+ +
+
+date_sent() list[datetime.datetime][source]
+
+ +
+
+deleted_status() list[bool][source]
+
+ +
+
+flag_index() list[int][source]
+
+ +
+
+flagged_status() list[bool][source]
+
+ +
+
+id() list[int][source]
+
+ +
+
+junk_mail_status() list[bool][source]
+
+ +
+
+mailbox() XAMailboxList[source]
+
+ +
+
+message_id() list[str][source]
+
+ +
+
+message_size() list[int][source]
+
+ +
+
+read_status() list[bool][source]
+
+ +
+
+reply_to() list[str][source]
+
+ +
+
+sender() list[str][source]
+
+ +
+
+source() list[str][source]
+
+ +
+
+subject() list[str][source]
+
+ +
+
+was_forwarded() list[bool][source]
+
+ +
+
+was_redirected() list[bool][source]
+
+ +
+
+was_replied_to() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailMessageViewer(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with the message viewer window in Mail.app.

+
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

drafts_mailbox

The top-level Drafts mailbox.

id

The unique identifier of the message viewer.

inbox

The top-level Inbox mailbox.

junk_mailbox

The top-level Junk mailbox.

mailbox_list_visible

Controls whether the list of mailboxes is visible or not.

outbox

The top-level Out mailbox.

preview_pane_is_visible

Controls whether the preview pane of the message viewer window is visible or not.

selected_mailboxes

List of mailboxes currently selected in the list of mailboxes.

selected_messages

List of messages currently selected.

sent_mailbox

The top-level Sent mailbox.

sort_ascending

Whether the viewer is sorted ascending or not.

sort_column

The column that is currently sorted in the viewer.

trash_mailbox

The top-level Trash mailbox.

visible_columns

List of columns that are visible.

visible_messages

List of messages currently being displayed in the viewer.

window

The window for the message viewer.

+

Methods:

+ + + + + + +

messages([filter])

Returns a list of messages matching the filter.

+
+
+property drafts_mailbox: XAMailbox
+

The top-level Drafts mailbox.

+
+ +
+
+property id: int
+

The unique identifier of the message viewer.

+
+ +
+
+property inbox: XAMailbox
+

The top-level Inbox mailbox.

+
+ +
+
+property junk_mailbox: XAMailbox
+

The top-level Junk mailbox.

+
+ +
+
+property mailbox_list_visible: bool
+

Controls whether the list of mailboxes is visible or not.

+
+ +
+
+messages(filter: dict = None) XAMailMessageList[source]
+

Returns a list of messages matching the filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+property outbox: XAMailbox
+

The top-level Out mailbox.

+
+ +
+
+property preview_pane_is_visible: bool
+

Controls whether the preview pane of the message viewer window is visible or not.

+
+ +
+
+property selected_mailboxes: XAMailboxList
+

List of mailboxes currently selected in the list of mailboxes.

+
+ +
+
+property selected_messages: XAMailMessageList
+

List of messages currently selected.

+
+ +
+
+property sent_mailbox: XAMailbox
+

The top-level Sent mailbox.

+
+ +
+
+property sort_ascending: bool
+

Whether the viewer is sorted ascending or not.

+
+ +
+
+property sort_column: ViewerColumn
+

The column that is currently sorted in the viewer.

+
+ +
+
+property trash_mailbox: XAMailbox
+

The top-level Trash mailbox.

+
+ +
+
+property visible_columns: list[str]
+

List of columns that are visible. The subject column and the message status column will always be visible.

+
+ +
+
+property visible_messages: XAMailMessageList
+

List of messages currently being displayed in the viewer.

+
+ +
+
+property window: XAMailWindow
+

The window for the message viewer.

+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailMessageViewerList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of mail signatures that employs fast enumeration techniques.

+

All properties of signatures can be called as methods on the wrapped list, returning a list containing each signature’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_drafts_mailbox(drafts_mailbox)

by_id(id)

by_inbox(inbox)

by_junk_mailbox(junk_mailbox)

by_mailbox_list_visible(mailbox_list_visible)

by_outbox(outbox)

by_preview_pane_is_visible(...)

by_selected_mailboxes(selected_mailboxes)

by_selected_messages(selected_messages)

by_sent_mailbox(sent_mailbox)

by_sort_column(sort_column)

by_sorted_ascending(sorted_ascending)

by_trash_mailbox(trash_mailbox)

by_visible_columns(visible_columns)

by_visible_messages(visible_messages)

by_window(window)

drafts_mailbox()

id()

inbox()

junk_mailbox()

mailbox_list_visible()

outbox()

preview_pane_is_visible()

selected_mailboxes()

selected_messages()

sent_mailbox()

sort_column()

sorted_ascending()

trash_mailbox()

visible_columns()

visible_messages()

window()

+
+
+by_drafts_mailbox(drafts_mailbox: XAMailbox) Optional[XAMailMessageViewer][source]
+
+ +
+
+by_id(id: int) Optional[XAMailMessageViewer][source]
+
+ +
+
+by_inbox(inbox: XAMailbox) Optional[XAMailMessageViewer][source]
+
+ +
+
+by_junk_mailbox(junk_mailbox: XAMailbox) Optional[XAMailMessageViewer][source]
+
+ +
+
+by_mailbox_list_visible(mailbox_list_visible: bool) Optional[XAMailMessageViewer][source]
+
+ +
+
+by_outbox(outbox: XAMailbox) Optional[XAMailMessageViewer][source]
+
+ +
+
+by_preview_pane_is_visible(preview_pane_is_visible: bool) Optional[XAMailMessageViewer][source]
+
+ +
+
+by_selected_mailboxes(selected_mailboxes: XAMailboxList) Optional[XAMailMessageViewer][source]
+
+ +
+
+by_selected_messages(selected_messages: XAMailMessageList) Optional[XAMailMessageViewer][source]
+
+ +
+
+by_sent_mailbox(sent_mailbox: XAMailbox) Optional[XAMailMessageViewer][source]
+
+ +
+
+by_sort_column(sort_column: ViewerColumn) Optional[XAMailMessageViewer][source]
+
+ +
+
+by_sorted_ascending(sorted_ascending: bool) Optional[XAMailMessageViewer][source]
+
+ +
+
+by_trash_mailbox(trash_mailbox: XAMailbox) Optional[XAMailMessageViewer][source]
+
+ +
+
+by_visible_columns(visible_columns: list[str]) Optional[XAMailMessageViewer][source]
+
+ +
+
+by_visible_messages(visible_messages: XAMailMessageList) Optional[XAMailMessageViewer][source]
+
+ +
+
+by_window(window: XAMailWindow) Optional[XAMailMessageViewer][source]
+
+ +
+
+drafts_mailbox() XAMailboxList[source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+inbox() XAMailboxList[source]
+
+ +
+
+junk_mailbox() XAMailboxList[source]
+
+ +
+
+mailbox_list_visible() list[bool][source]
+
+ +
+
+outbox() XAMailboxList[source]
+
+ +
+
+preview_pane_is_visible() list[bool][source]
+
+ +
+
+selected_mailboxes() list[PyXA.apps.Mail.XAMailboxList][source]
+
+ +
+
+selected_messages() list[PyXA.apps.Mail.XAMailMessageList][source]
+
+ +
+
+sent_mailbox() XAMailboxList[source]
+
+ +
+
+sort_column() list[PyXA.apps.Mail.XAMailApplication.ViewerColumn][source]
+
+ +
+
+sorted_ascending() list[bool][source]
+
+ +
+
+trash_mailbox() XAMailboxList[source]
+
+ +
+
+visible_columns() list[list[str]][source]
+
+ +
+
+visible_messages() list[PyXA.apps.Mail.XAMailMessageList][source]
+
+ +
+
+window() XASBWindowList[source]
+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailOutgoingMessage(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with outgoing messages in Mail.app.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + +

close([save])

delete()

Permanently deletes the outgoing message.

save()

send()

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

content

The contents of the message.

id

The unique identifier for the message.

message_signature

The signature of the message.

sender

The address of the message sender.

subject

The subject string of the message.

visible

Whether the message window is shown on screen.

+
+
+close(save: SaveOption = SaveOption.YES)[source]
+
+ +
+
+property content: XAText
+

The contents of the message.

+
+ +
+
+delete()[source]
+

Permanently deletes the outgoing message.

+
+

New in version 0.0.4.

+
+
+ +
+
+property id: int
+

The unique identifier for the message.

+
+ +
+
+property message_signature: XAMailSignature
+

The signature of the message.

+
+ +
+
+save()[source]
+
+ +
+
+send() bool[source]
+
+ +
+
+property sender: str
+

The address of the message sender.

+
+ +
+
+property subject: str
+

The subject string of the message.

+
+ +
+
+property visible: bool
+

Whether the message window is shown on screen.

+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailOutgoingMessageList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of outgoing messages that employs fast enumeration techniques.

+

All properties of outgoing messages can be called as methods on the wrapped list, returning a list containing each messages’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_content(content)

by_id(id)

by_message_signature(message_signature)

by_sender(sender)

by_subject(subject)

by_visible(visible)

content()

id()

message_signature()

sender()

subject()

visible()

+
+
+by_content(content: XAText) XAMailOutgoingMessage[source]
+
+ +
+
+by_id(id: int) XAMailOutgoingMessage[source]
+
+ +
+
+by_message_signature(message_signature: XAMailSignature) XAMailOutgoingMessage[source]
+
+ +
+
+by_sender(sender: str) XAMailOutgoingMessage[source]
+
+ +
+
+by_subject(subject: str) XAMailOutgoingMessage[source]
+
+ +
+
+by_visible(visible: bool) XAMailOutgoingMessage[source]
+
+ +
+
+content() XATextList[source]
+
+ +
+
+id() list[int][source]
+
+ +
+
+message_signature() XAMailSignatureList[source]
+
+ +
+
+sender() list[str][source]
+
+ +
+
+subject() list[str][source]
+
+ +
+
+visible() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailPOPAccount(properties)[source]
+

Bases: XAMailAccount

+

A class for managing and interacting with POP accounts in Mail.app.

+
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

big_message_warning_size

The max amount of bytes a message can be before Mail will prompt the user before downloading the message (-1 = do not prompt).

delayed_message_deletion_interval

The number of days before messages that have been downloaded will be deleted from the server (0 = delete immediately after downloading).

delete_mail_on_server

Whether the POP account deletes messages on the server after downloading.

delete_messages_when_moved_from_inbox

Whether messages will be deleted from the server when moved from the POP inbox.

+
+
+property big_message_warning_size: int
+

The max amount of bytes a message can be before Mail will prompt the user before downloading the message (-1 = do not prompt).

+
+ +
+
+property delayed_message_deletion_interval: int
+

The number of days before messages that have been downloaded will be deleted from the server (0 = delete immediately after downloading).

+
+ +
+
+property delete_mail_on_server: bool
+

Whether the POP account deletes messages on the server after downloading.

+
+ +
+
+property delete_messages_when_moved_from_inbox: bool
+

Whether messages will be deleted from the server when moved from the POP inbox.

+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailPOPAccountList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMailAccountList

+

A wrapper around lists of mail documents that employs fast enumeration techniques.

+

All properties of documents can be called as methods on the wrapped list, returning a list containing each document’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

big_message_warning_size()

by_big_message_warning_size(...)

by_delayed_message_deletion_interval(...)

by_delete_mail_on_server(delete_mail_on_server)

by_delete_messages_when_moved_from_inbox(...)

delayed_message_deletion_interval()

delete_mail_on_server()

delete_messages_when_moved_from_inbox()

+
+
+big_message_warning_size() list[int][source]
+
+ +
+
+by_big_message_warning_size(big_message_warning_size: int) XAMailPOPAccount[source]
+
+ +
+
+by_delayed_message_deletion_interval(delayed_message_deletion_interval: int) XAMailPOPAccount[source]
+
+ +
+
+by_delete_mail_on_server(delete_mail_on_server: bool) XAMailPOPAccount[source]
+
+ +
+
+by_delete_messages_when_moved_from_inbox(delete_messages_when_moved_from_inbox: bool) XAMailPOPAccount[source]
+
+ +
+
+delayed_message_deletion_interval() list[int][source]
+
+ +
+
+delete_mail_on_server() list[bool][source]
+
+ +
+
+delete_messages_when_moved_from_inbox() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailRecipient(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with recipients in Mail.app.

+
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + +

address

The recipient's email address.

name

The name used for display.

+
+
+property address: str
+

The recipient’s email address.

+
+ +
+
+property name: str
+

The name used for display.

+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailRecipientList(properties: dict, filter: Optional[dict] = None, object_class=None)[source]
+

Bases: XAList

+

A wrapper around lists of mail recipients that employs fast enumeration techniques.

+

All properties of recipients can be called as methods on the wrapped list, returning a list containing each recipients’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + +

address()

by_address(address)

by_name(name)

name()

+
+
+address() list[str][source]
+
+ +
+
+by_address(address: str) XAMailRecipient[source]
+
+ +
+
+by_name(name: str) XAMailRecipient[source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailRule(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with rules in Mail.app.

+
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

all_conditions_must_be_met

Whether all conditions must be met for the rule to execute.

color_message

If the rule matches, apply this color.

copy_message

If the rule matches, copy the message to the specified mailbox.

delete_message

If the rule matches, delete the message.

enabled

Whether the rule is enabled.

forward_message

If the rule matches, forward the message to the specified addresses, separated by commas.

forward_text

If the rule matches, prepend the provided text to the forwarded message.

highlight_text_using_color

Whether the color will be used to highlight the text of background of a message.

mark_flag_index

If the rule matches, mark the message with the specified flag (-1 = disabled).

mark_flagged

If the rule matches, mark the message as flagged.

mark_read

If the rule matches, mark the message as read.

move_message

If the rule matches, move the message to the specified mailbox.

name

The name of the rule.

play_sound

If the rule matches, play the sound specified by name or path.

redirect_message

If the rule matches, redirect the message to the supplied addresses, separated by commas.

reply_text

If the rule matches, reply to the message and prepend the provided text.

run_script

If the rule matches, run the supplied AppleScript file.

should_copy_message

Whether the rule has a copy action.

should_move_message

Whether the rule has a move action.

stop_evaluating_rule

If the rule matches, stop rule evaluation for the message

stop_evaluating_rules

If the rule matches, stop rule evaluation for the message

+

Methods:

+ + + + + + + + + +

delete()

Permanently deletes the rule.

rule_conditions([filter])

Returns a list of rule conditions matching the filter.

+
+
+property all_conditions_must_be_met: bool
+

Whether all conditions must be met for the rule to execute.

+
+ +
+
+property color_message: HighlightColor
+

If the rule matches, apply this color.

+
+ +
+
+property copy_message: XAMailbox
+

If the rule matches, copy the message to the specified mailbox.

+
+ +
+
+delete()[source]
+

Permanently deletes the rule.

+
+

New in version 0.0.4.

+
+
+ +
+
+property delete_message: bool
+

If the rule matches, delete the message.

+
+ +
+
+property enabled: bool
+

Whether the rule is enabled.

+
+ +
+
+property forward_message: str
+

If the rule matches, forward the message to the specified addresses, separated by commas.

+
+ +
+
+property forward_text: str
+

If the rule matches, prepend the provided text to the forwarded message.

+
+ +
+
+property highlight_text_using_color: bool
+

Whether the color will be used to highlight the text of background of a message.

+
+ +
+
+property mark_flag_index: int
+

If the rule matches, mark the message with the specified flag (-1 = disabled).

+
+ +
+
+property mark_flagged: bool
+

If the rule matches, mark the message as flagged.

+
+ +
+
+property mark_read: bool
+

If the rule matches, mark the message as read.

+
+ +
+
+property move_message: XAMailbox
+

If the rule matches, move the message to the specified mailbox.

+
+ +
+
+property name: str
+

The name of the rule.

+
+ +
+
+property play_sound: str
+

If the rule matches, play the sound specified by name or path.

+
+ +
+
+property redirect_message: str
+

If the rule matches, redirect the message to the supplied addresses, separated by commas.

+
+ +
+
+property reply_text: str
+

If the rule matches, reply to the message and prepend the provided text.

+
+ +
+
+rule_conditions(filter: dict = None) XAMailRuleConditionList[source]
+

Returns a list of rule conditions matching the filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+property run_script: str
+

If the rule matches, run the supplied AppleScript file.

+
+ +
+
+property should_copy_message: bool
+

Whether the rule has a copy action.

+
+ +
+
+property should_move_message: bool
+

Whether the rule has a move action.

+
+ +
+
+property stop_evaluating_rule: bool
+

If the rule matches, stop rule evaluation for the message

+
+ +
+
+property stop_evaluating_rules: bool
+

If the rule matches, stop rule evaluation for the message

+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailRuleCondition(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with rule conditions in Mail.app.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + +

delete()

Permanently deletes the rule condition.

+

Attributes:

+ + + + + + + + + + + + + + + +

expression

The rule expression field.

header

The rule header key.

qualifier

The qualifier for the rule.

rule_type

The type of the rule.

+
+
+delete()[source]
+

Permanently deletes the rule condition.

+
+

New in version 0.0.4.

+
+
+ +
+
+property expression: str
+

The rule expression field.

+
+ +
+
+property header: str
+

The rule header key.

+
+ +
+
+property qualifier: RuleQualifier
+

The qualifier for the rule.

+
+ +
+
+property rule_type: RuleType
+

The type of the rule.

+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailRuleConditionList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of rule conditions that employs fast enumeration techniques.

+

All properties of rule conditions can be called as methods on the wrapped list, returning a list containing each rule conditions’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_expression(expression)

by_header(header)

by_qualifier(qualifier)

by_rule_type(rule_type)

expression()

header()

qualifier()

rule_type()

+
+
+by_expression(expression: str) Optional[XAMailRuleCondition][source]
+
+ +
+
+by_header(header: str) Optional[XAMailRuleCondition][source]
+
+ +
+
+by_qualifier(qualifier: RuleQualifier) Optional[XAMailRuleCondition][source]
+
+ +
+
+by_rule_type(rule_type: RuleType) Optional[XAMailRuleCondition][source]
+
+ +
+
+expression() list[str][source]
+
+ +
+
+header() list[str][source]
+
+ +
+
+qualifier() list[PyXA.apps.Mail.XAMailApplication.RuleQualifier][source]
+
+ +
+
+rule_type() list[PyXA.apps.Mail.XAMailApplication.RuleType][source]
+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailRuleList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of rules that employs fast enumeration techniques.

+

All properties of rules can be called as methods on the wrapped list, returning a list containing each rule’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

all_conditions_must_be_met()

by_all_conditions_must_be_met(...)

by_color_message(color_message)

by_copy_message(copy_message)

by_delete_message(deleteMessage)

by_enabled(enabled)

by_forward_message(forward_message)

by_forward_text(forward_text)

by_highlight_text_using_color(...)

by_mark_flag_index(mark_flag_index)

by_mark_flagged(mark_flagged)

by_mark_read(mark_read)

by_move_message(move_message)

by_name(name)

by_play_sound(play_sound)

by_redirect_message(redirect_message)

by_reply_text(reply_text)

by_run_script(run_script)

by_should_copy_message(should_copy_message)

by_should_move_message(should_move_message)

by_stop_evaluating_rules(stop_evaluating_rules)

color_message()

copy_message()

delete_message()

enabled()

forward_message()

forward_text()

highlight_text_using_color()

mark_flag_index()

mark_flagged()

mark_read()

move_message()

name()

play_sound()

redirect_message()

reply_text()

run_script()

should_copy_message()

should_move_message()

stop_evaluating_rules()

+
+
+all_conditions_must_be_met() list[bool][source]
+
+ +
+
+by_all_conditions_must_be_met(all_conditions_must_be_met: bool) XAMailRule[source]
+
+ +
+
+by_color_message(color_message: HighlightColor) XAMailRule[source]
+
+ +
+
+by_copy_message(copy_message: XAMailbox) XAMailRule[source]
+
+ +
+
+by_delete_message(deleteMessage: bool) XAMailRule[source]
+
+ +
+
+by_enabled(enabled: bool) XAMailRule[source]
+
+ +
+
+by_forward_message(forward_message: str) XAMailRule[source]
+
+ +
+
+by_forward_text(forward_text: str) XAMailRule[source]
+
+ +
+
+by_highlight_text_using_color(highlight_text_using_color: bool) XAMailRule[source]
+
+ +
+
+by_mark_flag_index(mark_flag_index: int) XAMailRule[source]
+
+ +
+
+by_mark_flagged(mark_flagged: bool) XAMailRule[source]
+
+ +
+
+by_mark_read(mark_read: bool) XAMailRule[source]
+
+ +
+
+by_move_message(move_message: XAMailbox) XAMailRule[source]
+
+ +
+
+by_name(name: str) XAMailRule[source]
+
+ +
+
+by_play_sound(play_sound: str) XAMailRule[source]
+
+ +
+
+by_redirect_message(redirect_message: str) XAMailRule[source]
+
+ +
+
+by_reply_text(reply_text: str) XAMailRule[source]
+
+ +
+
+by_run_script(run_script: str) XAMailRule[source]
+
+ +
+
+by_should_copy_message(should_copy_message: bool) XAMailRule[source]
+
+ +
+
+by_should_move_message(should_move_message: bool) XAMailRule[source]
+
+ +
+
+by_stop_evaluating_rules(stop_evaluating_rules: bool) XAMailRule[source]
+
+ +
+
+color_message() list[PyXA.apps.Mail.XAMailApplication.HighlightColor][source]
+
+ +
+
+copy_message() XAMailboxList[source]
+
+ +
+
+delete_message() list[bool][source]
+
+ +
+
+enabled() list[bool][source]
+
+ +
+
+forward_message() list[str][source]
+
+ +
+
+forward_text() list[str][source]
+
+ +
+
+highlight_text_using_color() list[bool][source]
+
+ +
+
+mark_flag_index() list[int][source]
+
+ +
+
+mark_flagged() list[bool][source]
+
+ +
+
+mark_read() list[bool][source]
+
+ +
+
+move_message() XAMailboxList[source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+play_sound() list[str][source]
+
+ +
+
+redirect_message() list[str][source]
+
+ +
+
+reply_text() list[str][source]
+
+ +
+
+run_script() list[str][source]
+
+ +
+
+should_copy_message() list[bool][source]
+
+ +
+
+should_move_message() list[bool][source]
+
+ +
+
+stop_evaluating_rules() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailSMTPServer(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with SMTP servers in Mail.app.

+
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

account_type

The type of the account, either: "pop", "smtp", "imap", or "iCloud".

authentication

The preferred authentication scheme for the account, either: "password", "apop", "kerberos 5", "ntlm", "md5", "external", "Apple token", or "none".

enabled

Whether the account is enabled.

name

The name of the account.

password

The password for the account.

port

The port used to connect to the account.

server_name

The host name used to connect to the account.

user_name

The user name used to connect to the account.

uses_ssl

Whether SSL is enabled for this receiving account.

+
+
+property account_type: AccountType
+

The type of the account, either: “pop”, “smtp”, “imap”, or “iCloud”.

+
+ +
+
+property authentication: AuthenticationMethod
+

The preferred authentication scheme for the account, either: “password”, “apop”, “kerberos 5”, “ntlm”, “md5”, “external”, “Apple token”, or “none”.

+
+ +
+
+property enabled: bool
+

Whether the account is enabled.

+
+ +
+
+property name: str
+

The name of the account.

+
+ +
+
+property password: None
+

The password for the account.

+
+ +
+
+property port: int
+

The port used to connect to the account.

+
+ +
+
+property server_name: str
+

The host name used to connect to the account.

+
+ +
+
+property user_name: str
+

The user name used to connect to the account.

+
+ +
+
+property uses_ssl: bool
+

Whether SSL is enabled for this receiving account.

+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailSMTPServerList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of SMTP servers that employs fast enumeration techniques.

+

All properties of SMTP servers can be called as methods on the wrapped list, returning a list containing each SMTP server’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

account_type()

authentication()

by_account_type(account_type)

by_authentication(authentication)

by_enabled(enabled)

by_name(name)

by_port(port)

by_server_name(server_name)

by_user_name(user_name)

by_uses_ssl(uses_ssl)

enabled()

name()

port()

server_name()

user_name()

uses_ssl()

+
+
+account_type() list[PyXA.apps.Mail.XAMailApplication.AccountType][source]
+
+ +
+
+authentication() list[PyXA.apps.Mail.XAMailApplication.AuthenticationMethod][source]
+
+ +
+
+by_account_type(account_type: AccountType) XAMailAccount[source]
+
+ +
+
+by_authentication(authentication: AuthenticationMethod) XAMailAccount[source]
+
+ +
+
+by_enabled(enabled: bool) XAMailAccount[source]
+
+ +
+
+by_name(name: str) XAMailAccount[source]
+
+ +
+
+by_port(port: int) XAMailAccount[source]
+
+ +
+
+by_server_name(server_name: str) XAMailAccount[source]
+
+ +
+
+by_user_name(user_name: str) XAMailAccount[source]
+
+ +
+
+by_uses_ssl(uses_ssl: bool) XAMailAccount[source]
+
+ +
+
+enabled() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+port() list[int][source]
+
+ +
+
+server_name() list[str][source]
+
+ +
+
+user_name() list[str][source]
+
+ +
+
+uses_ssl() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailSignature(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with email signatures in Mail.app.

+
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + +

content

The content of the email signature.

name

The name of the signature.

+

Methods:

+ + + + + + +

delete()

Permanently deletes the signature.

+
+
+property content: XAText
+

The content of the email signature.

+
+ +
+
+delete()[source]
+

Permanently deletes the signature.

+
+

New in version 0.0.4.

+
+
+ +
+
+property name: str
+

The name of the signature.

+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailSignatureList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of mail signatures that employs fast enumeration techniques.

+

All properties of signatures can be called as methods on the wrapped list, returning a list containing each signature’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + +

by_content(content)

by_name(name)

content()

name()

+
+
+by_content(content: XAText) Optional[XAMailSignature][source]
+
+ +
+
+by_name(name: str) Optional[XAMailSignature][source]
+
+ +
+
+content() list[PyXA.XABase.XAText][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailToRecipient(properties)[source]
+

Bases: XAMailRecipient

+

A class for managing and interacting with the primary (to) recipients in Mail.app.

+
+

New in version 0.0.4.

+
+
+ +
+
+class PyXA.apps.Mail.XAMailToRecipientList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMailRecipientList

+

A wrapper around lists of mail primary (to) recipients that employs fast enumeration techniques.

+

All properties of primary recipients can be called as methods on the wrapped list, returning a list containing each recipients’s value for the property.

+
+

New in version 0.0.4.

+
+
+ +
+
+class PyXA.apps.Mail.XAMailWindow(properties)[source]
+

Bases: XASBWindow

+

A class for managing and interacting with Mail documents.

+
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + +

document

The current document.

+
+
+property document: XAMailDocument
+

The current document.

+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailbox(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with mailboxes in Mail.app.

+
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

account

The parent account of the mailbox.

container

The parent mailbox of the mailbox.

name

The name of the mailbox.

unread_count

The number of unread messages in the mailbox.

+

Methods:

+ + + + + + + + + + + + +

delete()

Permanently deletes the mailboxs.

mailboxes([filter])

Returns a list of mailboxes matching the filter.

messages([filter])

Returns a list of messages matching the filter.

+
+
+property account: XAMailAccount
+

The parent account of the mailbox.

+
+ +
+
+property container: XAMailbox
+

The parent mailbox of the mailbox.

+
+ +
+
+delete()[source]
+

Permanently deletes the mailboxs.

+
+

New in version 0.0.4.

+
+
+ +
+
+mailboxes(filter: dict = None) XAMailboxList[source]
+

Returns a list of mailboxes matching the filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+messages(filter: dict = None) XAMailMessageList[source]
+

Returns a list of messages matching the filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+property name: str
+

The name of the mailbox.

+
+ +
+
+property unread_count: int
+

The number of unread messages in the mailbox.

+
+ +
+ +
+
+class PyXA.apps.Mail.XAMailboxList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList

+

A wrapper around lists of mailboxes that employs fast enumeration techniques.

+

All properties of mailboxes can be called as methods on the wrapped list, returning a list containing each mailbox’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

account()

by_account(account)

by_container(container)

by_name(name)

by_unread_count(unread_count)

container()

name()

unread_count()

+
+
+account() XAMailAccountList[source]
+
+ +
+
+by_account(account: XAMailAccount) XAMailbox[source]
+
+ +
+
+by_container(container: XAMailContainer) XAMailbox[source]
+
+ +
+
+by_name(name: str) XAMailbox[source]
+
+ +
+
+by_unread_count(unread_count: int) XAMailbox[source]
+
+ +
+
+container() XAMailContainerList[source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+unread_count() list[str][source]
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/maps.html b/docs/reference/apps/maps.html new file mode 100644 index 0000000..cba4282 --- /dev/null +++ b/docs/reference/apps/maps.html @@ -0,0 +1,635 @@ + + + + + + + Maps Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Maps Module Reference

+
+

New in version 0.0.6.

+
+

Control the macOS Maps application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

XAMapsApplication(properties)

A class for managing and interacting with Maps.app.

XAMapsDirections(properties)

A class for interacting with directions in Maps.app.

XAMapsDirectionsList(properties[, filter])

A wrapper around a list of directions.

XAMapsSidebarLocation(properties)

A class for interacting with sidebar locations in Maps.app.

XAMapsSidebarLocationList(properties[, filter])

A wrapper around a list of sidebar locations.

XAMapsTab(properties)

A class for interacting with sidebar locations in Maps.app.

XAMapsTabList(properties[, filter])

A wrapper around a list of locations.

+
+
+class PyXA.apps.Maps.XAMapsApplication(properties)[source]
+

Bases: XAApplication

+

A class for managing and interacting with Maps.app.

+
+

See also

+

XAMapsSidebarLocation, XAMapsDirection

+
+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

directions_to(destination_address[, ...])

Queries for directions to the destination address, optionally starting from a source address.

drop_pin(latitude, longitude[, name])

Drops at pin at the specified coordinate.

new_tab()

Opens a new tab.

orient_north()

Orients the map with North facing upward.

search(query[, latitude, longitude, exact])

Searches Maps for the given query, centered at the (optional) specified location.

show_address(address)

Centers the map at the specified address.

show_coordinate(latitude, longitude)

Centers the map at the specified coordinate.

sidebar_locations()

Gets a list of sidebar locations.

tabs()

Gets a list of tabs.

toggle_sidebar()

Toggles the sidebar.

zoom_in()

Zoom in on the currently centered location of the map.

zoom_out()

Zoom out on the currently centered location of the map.

+

Attributes:

+ + + + + + +

sidebar_showing

Whether the sidebar is currently showing.

+
+
+directions_to(destination_address: str, source_address: Optional[str] = None, transport_type: Optional[Literal['d', 'driving', 'w', 'walking', 'p', 'pt', 'r', 'public transit', 'transit']] = None)[source]
+

Queries for directions to the destination address, optionally starting from a source address.

+

If no source address is provided, the current location is used.

+
+
Parameters:
+
    +
  • destination_address (str) – The address to retrieve directions to

  • +
  • source_address (Union[str, None], optional) – The address to start the directions from, defaults to None

  • +
  • transport_type (Union[Literal["d", "driving", "w", "walking", "p", "pt", "r", "public transit", "transit"], None], optional) – The type of directions to retrieve, defaults to None

  • +
+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+drop_pin(latitude: float, longitude: float, name: Optional[str] = None)[source]
+

Drops at pin at the specified coordinate.

+
+
Parameters:
+
    +
  • latitude (float) – The latitude of the coordinate at which to drop a pin

  • +
  • longitude (float) – The longitude of the coordinate at which to drop a pin

  • +
  • name (Union[str, None], optional) – The name of the pin, defaults to None

  • +
+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+new_tab()[source]
+

Opens a new tab.

+
+

New in version 0.0.6.

+
+
+ +
+
+orient_north() XAMapsApplication[source]
+

Orients the map with North facing upward.

+
+

New in version 0.0.6.

+
+
+ +
+
+search(query: str, latitude: Optional[float] = None, longitude: Optional[float] = None, exact: bool = True)[source]
+

Searches Maps for the given query, centered at the (optional) specified location.

+
+
Parameters:
+
    +
  • query (str) – The term to search for

  • +
  • latitude (Union[float, None], optional) – The latitude of the location to center the search at, defaults to None

  • +
  • longitude (Union[float, None], optional) – The longitude of the location to center the search at, defaults to None

  • +
  • exact (bool, optional) – Whether search results must be centered on the specified location versus allowing further away results, defaults to True

  • +
+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+show_address(address: str)[source]
+

Centers the map at the specified address.

+
+
Parameters:
+

address (str) – The address to display

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+show_coordinate(latitude: float, longitude: float)[source]
+

Centers the map at the specified coordinate.

+
+
Parameters:
+
    +
  • latitude (float) – The latitude of the coordinate to display

  • +
  • longitude (float) – The longitude of the coordinate to display

  • +
+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+sidebar_locations() XAMapsSidebarLocationList[source]
+

Gets a list of sidebar locations.

+
+
Returns:
+

The list of locations

+
+
Return type:
+

XAMapsSidebarLocationList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property sidebar_showing: bool
+

Whether the sidebar is currently showing.

+
+ +
+
+tabs() XAMapsTabList[source]
+

Gets a list of tabs.

+
+
Returns:
+

The list of tabs

+
+
Return type:
+

XAMapsTabList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+toggle_sidebar()[source]
+

Toggles the sidebar.

+
+

New in version 0.0.6.

+
+
+ +
+
+zoom_in() XAMapsApplication[source]
+

Zoom in on the currently centered location of the map.

+
+

New in version 0.0.6.

+
+
+ +
+
+zoom_out() XAMapsApplication[source]
+

Zoom out on the currently centered location of the map.

+
+

New in version 0.0.6.

+
+
+ +
+ +
+
+class PyXA.apps.Maps.XAMapsDirections(properties)[source]
+

Bases: XAObject

+

A class for interacting with directions in Maps.app.

+
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + +

destination_address

The ending address of the directions

duration

The duration of the currently selected route from the source address to the destination address

has_tolls

Whether the currently selected route has tolls

has_weather_warnings

Whether there are weather warnings along the currently selected route

source_address

The starting address of the directions

+
+
+destination_address: str
+

The ending address of the directions

+
+ +
+
+duration: float
+

The duration of the currently selected route from the source address to the destination address

+
+ +
+
+has_tolls: bool
+

Whether the currently selected route has tolls

+
+ +
+
+has_weather_warnings: bool
+

Whether there are weather warnings along the currently selected route

+
+ +
+
+source_address: str
+

The starting address of the directions

+
+ +
+ +
+
+class PyXA.apps.Maps.XAMapsDirectionsList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around a list of directions.

+
+

New in version 0.0.3.

+
+
+ +
+
+class PyXA.apps.Maps.XAMapsSidebarLocation(properties)[source]
+

Bases: XAObject

+

A class for interacting with sidebar locations in Maps.app.

+
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + + + + +

description

The description of the location element.

name

The name of the location.

selected

Whether the location element is currently selected.

+

Methods:

+ + + + + + +

show_directions_to()

+
+
+property description: str
+

The description of the location element.

+
+ +
+
+property name: str
+

The name of the location.

+
+ +
+
+property selected: bool
+

Whether the location element is currently selected.

+
+ +
+
+show_directions_to()[source]
+
+ +
+ +
+
+class PyXA.apps.Maps.XAMapsSidebarLocationList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around a list of sidebar locations.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + +

name()

+
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Maps.XAMapsTab(properties)[source]
+

Bases: XAObject

+

A class for interacting with sidebar locations in Maps.app.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + +

close()

+

Attributes:

+ + + + + + + + + + + + +

properties

All properties of the tab.

selected

Whether the tab is the currently selected tab.

title

The name of the tab.

+
+
+close()[source]
+
+ +
+
+property properties: dict
+

All properties of the tab.

+
+ +
+
+property selected: bool
+

Whether the tab is the currently selected tab.

+
+ +
+
+property title: str
+

The name of the tab.

+
+ +
+ +
+
+class PyXA.apps.Maps.XAMapsTabList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around a list of locations.

+
+

New in version 0.0.3.

+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/media.html b/docs/reference/apps/media.html new file mode 100644 index 0000000..b52bc58 --- /dev/null +++ b/docs/reference/apps/media.html @@ -0,0 +1,4260 @@ + + + + + + + Media Application Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Media Application Reference

+
+

New in version 0.1.0.

+
+

A base set of classes for media applications such as Music.app and TV.app.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XAMediaApplication(properties)

A class for managing and interacting with media apps.

XAMediaArtwork(properties)

An artwork in media apps.

XAMediaArtworkList(properties[, filter])

A wrapper around lists of music artworks that employs fast enumeration techniques.

XAMediaBrowserWindow(properties)

A browser window of media apps.

XAMediaBrowserWindowList(properties[, filter])

A wrapper around lists of music browser windows that employs fast enumeration techniques.

XAMediaFileTrack(properties)

A file track in media apps.

XAMediaFileTrackList(properties[, filter])

A wrapper around lists of music file tracks that employs fast enumeration techniques.

XAMediaFolderPlaylist(properties)

A folder playlist in media apps.

XAMediaFolderPlaylistList(properties[, filter])

A wrapper around lists of music folder playlists that employs fast enumeration techniques.

XAMediaItem(properties)

A generic class with methods common to the various playable media classes in media apps.

XAMediaItemList(properties[, filter, obj_class])

A wrapper around lists of music items that employs fast enumeration techniques.

XAMediaLibraryPlaylist(properties)

The library playlist in media apps.

XAMediaLibraryPlaylistList(properties[, filter])

A wrapper around lists of library playlists that employs fast enumeration techniques.

XAMediaPlaylist(properties)

A playlist in media apps.

XAMediaPlaylistList(properties[, filter, ...])

A wrapper around lists of playlists that employs fast enumeration techniques.

XAMediaPlaylistWindow(properties)

A playlist window in media apps.

XAMediaPlaylistWindowList(properties[, filter])

A wrapper around lists of music playlist windows that employs fast enumeration techniques.

XAMediaSharedTrack(properties)

A shared track in media apps.

XAMediaSharedTrackList(properties[, filter])

A wrapper around lists of music shared tracks that employs fast enumeration techniques.

XAMediaSource(properties)

A media source in media apps.

XAMediaSourceList(properties[, filter, ...])

A wrapper around lists of sources that employs fast enumeration techniques.

XAMediaTrack(properties)

A class for managing and interacting with tracks in media apps.

XAMediaTrackList(properties[, filter, obj_class])

A wrapper around lists of music tracks that employs fast enumeration techniques.

XAMediaURLTrack(properties)

A URL track in media apps.

XAMediaURLTrackList(properties[, filter])

A wrapper around lists of music URL tracks that employs fast enumeration techniques.

XAMediaUserPlaylist(properties)

A user-created playlist in media apps.

XAMediaUserPlaylistList(properties[, filter])

A wrapper around lists of music user playlists that employs fast enumeration techniques.

XAMediaVideoWindow(properties)

A video window in media apps.

XAMediaVideoWindowList(properties[, filter])

A wrapper around lists of music video windows that employs fast enumeration techniques.

XAMediaWindow(properties)

A windows of media apps.

XAMediaWindowList(properties[, filter, ...])

A wrapper around lists of windows that employs fast enumeration techniques.

+
+
+class PyXA.apps.MediaApplicationBase.XAMediaApplication(properties)[source]
+

Bases: XASBApplication, XACanOpenPath

+

A class for managing and interacting with media apps.

+
+

See also

+

XAMediaWindow, class:XAMediaSource, XAMediaPlaylist, XAMediaTrack

+
+
+

New in version 0.0.1.

+
+

Classes:

+ + + + + + + + + + + + + + + + + + + + + +

MediaKind(value[, names, module, qualname, ...])

Types of media items.

PlayerState(value[, names, module, ...])

States of the music player.

PlaylistKind(value[, names, module, ...])

Types of special playlists.

RatingKind(value[, names, module, qualname, ...])

Types of ratings for media items.

SearchFilter(value[, names, module, ...])

Filter restrictions on search results.

SourceKind(value[, names, module, qualname, ...])

Types of sources for media items.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

back_track()

Restarts the current track or returns to the previous track if playback is currently at the start.

browser_windows([filter])

Returns a list of browser windows, as PyXA objects, matching the given filter.

current_track()

Returns the currently playing (or paused but not stopped) track.

fast_forward()

Repeated skip forward in the track until resume() is called.

next_track()

Advances to the next track in the current playlist.

open_location(video_url)

Opens and plays an video stream URL or iTunes Store URL.

pause()

Pauses the current track.

play([item])

Plays the specified TV item (e.g.

playlist_windows([filter])

Returns a list of playlist windows, as PyXA objects, matching the given filter.

playlists([filter])

Returns a list of playlists, as PyXA objects, matching the given filter.

playpause()

Toggles the playing/paused state of the current track.

previous_track()

Returns to the previous track in the current playlist.

resume()

Returns to normal playback after calls to fast_forward() or rewind().

rewind()

Repeatedly skip backward in the track until resume() is called.

set_volume(new_volume)

Sets the volume of playback.

sources([filter])

Returns a list of sources, as PyXA objects, matching the given filter.

stop()

Stops playback of the current track.

tracks([filter])

Returns a list of tracks, as PyXA objects, matching the given filter.

video_windows([filter])

Returns a list of video windows, as PyXA objects, matching the given filter.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

current_playlist

The playlist containing the currently targeted track.

current_stream_title

The name of the currently streaming track.

current_stream_url

The URL of the currently streaming track.

fixed_indexing

Whether the track indices are independent of the order of the current playlist or not.

frontmost

Whether the application is active or not.

full_screen

Whether the app is fullscreen or not.

mute

Whether sound output is muted or not.

name

The name of the application.

player_position

The time elapsed in the current track.

player_state

Whether the player is playing, paused, stopped, fast forwarding, or rewinding.

selection

The selected media items.

sound_volume

The sound output volume.

version

The version of the application.

+
+
+class MediaKind(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Types of media items.

+

Attributes:

+ + + + + + + + + + + + +

MUSIC_VIDEO

A music video media item

SONG

A song media item

UNKNOWN

An unknown media item kind

+
+
+MUSIC_VIDEO = 1800823894
+

A music video media item

+
+ +
+
+SONG = 1800234067
+

A song media item

+
+ +
+
+UNKNOWN = 1800760939
+

An unknown media item kind

+
+ +
+ +
+
+class PlayerState(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

States of the music player.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

FAST_FORWARDING

The player is fast forwarding

PAUSED

The player is paused

PLAYING

The player is playing

REWINDING

The player is rewinding

STOPPED

The player is stopped

+
+
+FAST_FORWARDING = 1800426310
+

The player is fast forwarding

+
+ +
+
+PAUSED = 1800426352
+

The player is paused

+
+ +
+
+PLAYING = 1800426320
+

The player is playing

+
+ +
+
+REWINDING = 1800426322
+

The player is rewinding

+
+ +
+
+STOPPED = 1800426323
+

The player is stopped

+
+ +
+ +
+
+class PlaylistKind(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Types of special playlists.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

FOLDER

A folder

GENIUS

A smart playlist

LIBRARY

The system library playlist

MUSIC

A playlist containing music items

NONE

An unknown playlist kind

PURCHASED_MUSIC

The purchased music playlist

USER

A user-created playlist

USER_LIBRARY

The user's library

+
+
+FOLDER = 1800630342
+

A folder

+
+ +
+
+GENIUS = 1800630343
+

A smart playlist

+
+ +
+
+LIBRARY = 1800630348
+

The system library playlist

+
+ +
+
+MUSIC = 1800630362
+

A playlist containing music items

+
+ +
+
+NONE = 1800302446
+

An unknown playlist kind

+
+ +
+
+PURCHASED_MUSIC = 1800630349
+

The purchased music playlist

+
+ +
+
+USER = 1666544464
+

A user-created playlist

+
+ +
+
+USER_LIBRARY = 1665952080
+

The user’s library

+
+ +
+ +
+
+class RatingKind(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Types of ratings for media items.

+

Attributes:

+ + + + + + + + + +

COMPUTED

A computer generated rating

USER

A user-inputted rating

+
+
+COMPUTED = 1800565827
+

A computer generated rating

+
+ +
+
+USER = 1800565845
+

A user-inputted rating

+
+ +
+ +
+
+class SearchFilter(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Filter restrictions on search results.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

ALBUMS

Search albums

ALL

Search all

ARTISTS

Search artists

COMPOSERS

Search composers

DISPLAYED

Search the currently displayed playlist

NAMES

Search track names only

+
+
+ALBUMS = 1800630860
+

Search albums

+
+ +
+
+ALL = 1799449708
+

Search all

+
+ +
+
+ARTISTS = 1800630866
+

Search artists

+
+ +
+
+COMPOSERS = 1800630851
+

Search composers

+
+ +
+
+DISPLAYED = 1800630870
+

Search the currently displayed playlist

+
+ +
+
+NAMES = 1800630867
+

Search track names only

+
+ +
+ +
+
+class SourceKind(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Types of sources for media items.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

AUDIO_CD

A CD source

ITUNES_STORE

The iTunes Store source

LIBRARY

A library source

MP3_CD

An MP3 file source

RADIO_TUNER

A radio source

SHARED_LIBRARY

A shared library source

UNKNOWN

An unknown source

+
+
+AUDIO_CD = 1799439172
+

A CD source

+
+ +
+
+ITUNES_STORE = 1799967827
+

The iTunes Store source

+
+ +
+
+LIBRARY = 1800169826
+

A library source

+
+ +
+
+MP3_CD = 1800225604
+

An MP3 file source

+
+ +
+
+RADIO_TUNER = 1800697198
+

A radio source

+
+ +
+
+SHARED_LIBRARY = 1800628324
+

A shared library source

+
+ +
+
+UNKNOWN = 1800760939
+

An unknown source

+
+ +
+ +
+
+back_track() XAMediaApplication[source]
+

Restarts the current track or returns to the previous track if playback is currently at the start.

+
+
Returns:
+

A reference to the TV application object.

+
+
Return type:
+

XAMediaApplication

+
+
+ +
+

New in version 0.0.1.

+
+
+ +
+
+browser_windows(filter: Optional[dict] = None) XAMediaBrowserWindowList[source]
+

Returns a list of browser windows, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned browser windows will have, or None

+
+
Returns:
+

The list of windows

+
+
Return type:
+

XAMediaBrowserWindowList

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property current_playlist: XAMediaPlaylist
+

The playlist containing the currently targeted track.

+
+ +
+
+property current_stream_title: str
+

The name of the currently streaming track.

+
+ +
+
+property current_stream_url: str
+

The URL of the currently streaming track.

+
+ +
+
+current_track() XAMediaTrack[source]
+

Returns the currently playing (or paused but not stopped) track.

+
+

New in version 0.0.1.

+
+
+ +
+
+fast_forward() XAMediaApplication[source]
+

Repeated skip forward in the track until resume() is called.

+
+
Returns:
+

A reference to the TV application object.

+
+
Return type:
+

XAMediaApplication

+
+
+
+

See also

+

rewind(), resume()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property fixed_indexing: bool
+

Whether the track indices are independent of the order of the current playlist or not.

+
+ +
+
+property frontmost: bool
+

Whether the application is active or not.

+
+ +
+
+property full_screen: bool
+

Whether the app is fullscreen or not.

+
+ +
+
+property mute: bool
+

Whether sound output is muted or not.

+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+next_track() XAMediaApplication[source]
+

Advances to the next track in the current playlist.

+
+
Returns:
+

A reference to the TV application object.

+
+
Return type:
+

XAMediaApplication

+
+
+ +
+

New in version 0.0.1.

+
+
+ +
+
+open_location(video_url: str) XAMediaApplication[source]
+

Opens and plays an video stream URL or iTunes Store URL.

+
+
Parameters:
+

audio_url (str) – The URL of an audio stream (e.g. a web address to an MP3 file) or an item in the iTunes Store.

+
+
Returns:
+

_description_

+
+
Return type:
+

XAMediaApplication

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+pause() XAMediaApplication[source]
+

Pauses the current track.

+
+
Returns:
+

A reference to the TV application object.

+
+
Return type:
+

XAMediaApplication

+
+
+
+

See also

+

play(), playpause(), stop()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+play(item: XAMediaItem = None) XAMediaApplication[source]
+

Plays the specified TV item (e.g. track, playlist, etc.). If no item is provided, this plays the current track from its current player position.

+
+
Parameters:
+

item (_XAMediaItem, optional) – The track, playlist, or video to play, defaults to None

+
+
Returns:
+

A reference to the TV application object.

+
+
Return type:
+

XAMediaApplication

+
+
+
+

See also

+

playpause(), pause(), stop()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property player_position: float
+

The time elapsed in the current track.

+
+ +
+
+property player_state: PlayerState
+

Whether the player is playing, paused, stopped, fast forwarding, or rewinding.

+
+ +
+
+playlist_windows(filter: Optional[dict] = None) XAMediaPlaylistWindowList[source]
+

Returns a list of playlist windows, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned playlist windows will have, or None

+
+
Returns:
+

The list of windows

+
+
Return type:
+

XAMediaPlaylistWindowList

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+playlists(filter: Optional[dict] = None) XAMediaPlaylistList[source]
+

Returns a list of playlists, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned playlists will have, or None

+
+
Returns:
+

The list of playlists

+
+
Return type:
+

XAMediaPlaylistList

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+playpause() XAMediaApplication[source]
+

Toggles the playing/paused state of the current track.

+
+
Returns:
+

A reference to the TV application object.

+
+
Return type:
+

XAMediaApplication

+
+
+
+

See also

+

play(), pause(), stop()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+previous_track() XAMediaApplication[source]
+

Returns to the previous track in the current playlist.

+
+
Returns:
+

A reference to the TV application object.

+
+
Return type:
+

XAMediaApplication

+
+
+
+

See also

+

next_track(), back_track()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+resume() XAMediaApplication[source]
+

Returns to normal playback after calls to fast_forward() or rewind().

+
+
Returns:
+

A reference to the TV application object.

+
+
Return type:
+

XAMediaApplication

+
+
+
+

See also

+

fast_forward(), rewind()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+rewind() XAMediaApplication[source]
+

Repeatedly skip backward in the track until resume() is called.

+
+
Returns:
+

A reference to the TV application object.

+
+
Return type:
+

XAMediaApplication

+
+
+
+

See also

+

fast_forward(), resume()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property selection: XAMediaItemList
+

The selected media items.

+
+ +
+
+set_volume(new_volume: float) XAMediaApplication[source]
+

Sets the volume of playback.

+
+
Parameters:
+

new_volume (float) – The desired volume of playback.

+
+
Returns:
+

A reference to the TV application object.

+
+
Return type:
+

XAMediaApplication

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property sound_volume: int
+

The sound output volume.

+
+ +
+
+sources(filter: Optional[dict] = None) XAMediaSourceList[source]
+

Returns a list of sources, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned sources will have, or None

+
+
Returns:
+

The list of sources

+
+
Return type:
+

XAMediaSourceList

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+stop() XAMediaApplication[source]
+

Stops playback of the current track. Subsequent playback will start from the beginning of the track.

+
+
Returns:
+

A reference to the TV application object.

+
+
Return type:
+

XAMediaApplication

+
+
+
+

See also

+

play(), playpause(), pause()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+tracks(filter: Optional[dict] = None) XAMediaTrackList[source]
+

Returns a list of tracks, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned tracks will have, or None

+
+
Returns:
+

The list of tracks

+
+
Return type:
+

XAMediaTrackList

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property version: str
+

The version of the application.

+
+ +
+
+video_windows(filter: Optional[dict] = None) XAMediaVideoWindowList[source]
+

Returns a list of video windows, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned video windows will have, or None

+
+
Returns:
+

The list of windows

+
+
Return type:
+

XAMediaVideoWindowList

+
+
+
+

New in version 0.0.1.

+
+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaArtwork(properties)[source]
+

Bases: XAMediaItem

+

An artwork in media apps.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

data

The data for the artwork in the form of a picture.

downloaded

Whether the artwork was downloaded by media apps.

format

The data format for the artwork.

kind

The kind/purpose of the artwork.

object_description

The string description of the artwork.

raw_data

The data for the artwork in original format.

+
+
+property data: XAImage
+

The data for the artwork in the form of a picture.

+
+ +
+
+property downloaded: bool
+

Whether the artwork was downloaded by media apps.

+
+ +
+
+property format: int
+

The data format for the artwork.

+
+ +
+
+property kind: int
+

The kind/purpose of the artwork.

+
+ +
+
+property object_description: str
+

The string description of the artwork.

+
+ +
+
+property raw_data: bytes
+

The data for the artwork in original format.

+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaArtworkList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMediaItemList

+

A wrapper around lists of music artworks that employs fast enumeration techniques.

+

All properties of music artworks can be called as methods on the wrapped list, returning a list containing each artworks’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_data(data)

by_downloaded(downloaded)

by_format(format)

by_kind(kind)

by_object_description(object_description)

by_raw_data(raw_data)

data()

downloaded()

format()

kind()

object_description()

raw_data()

+
+
+by_data(data: XAImage) Optional[XAMediaArtwork][source]
+
+ +
+
+by_downloaded(downloaded: bool) Optional[XAMediaArtwork][source]
+
+ +
+
+by_format(format: int) Optional[XAMediaArtwork][source]
+
+ +
+
+by_kind(kind: int) Optional[XAMediaArtwork][source]
+
+ +
+
+by_object_description(object_description: str) Optional[XAMediaArtwork][source]
+
+ +
+
+by_raw_data(raw_data: bytes) Optional[XAMediaArtwork][source]
+
+ +
+
+data() list[PyXA.XABase.XAImage][source]
+
+ +
+
+downloaded() list[bool][source]
+
+ +
+
+format() list[int][source]
+
+ +
+
+kind() list[int][source]
+
+ +
+
+object_description() list[str][source]
+
+ +
+
+raw_data() list[bytes][source]
+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaBrowserWindow(properties)[source]
+

Bases: XAMediaWindow

+

A browser window of media apps.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + +

selection

The selected tracks.

view

The playlist currently displayed in the window.

+
+
+property selection: XAMediaTrackList
+

The selected tracks.

+
+ +
+
+property view: XAMediaPlaylist
+

The playlist currently displayed in the window.

+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaBrowserWindowList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMediaWindowList

+

A wrapper around lists of music browser windows that employs fast enumeration techniques.

+

All properties of music browser windows can be called as methods on the wrapped list, returning a list containing each windows’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + +

by_selection(selection)

by_view(view)

selection()

view()

+
+
+by_selection(selection: XAMediaTrackList) Optional[XAMediaPlaylistWindow][source]
+
+ +
+
+by_view(view: XAMediaPlaylist) Optional[XAMediaPlaylistWindow][source]
+
+ +
+
+selection() XAMediaTrackList[source]
+
+ +
+
+view() XAMediaPlaylistList[source]
+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaFileTrack(properties)[source]
+

Bases: XAMediaTrack

+

A file track in media apps.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + +

location

The location of the file represented by the track.

+
+
+property location: XAPath
+

The location of the file represented by the track.

+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaFileTrackList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMediaTrackList

+

A wrapper around lists of music file tracks that employs fast enumeration techniques.

+

All properties of music file tracks can be called as methods on the wrapped list, returning a list containing each track’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + +

by_location(location)

location()

+
+
+by_location(location: XAURL) Optional[XAMediaFileTrack][source]
+
+ +
+
+location() list[PyXA.XABase.XAURL][source]
+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaFolderPlaylist(properties)[source]
+

Bases: XAMediaUserPlaylist

+

A folder playlist in media apps.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaFolderPlaylistList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMediaUserPlaylistList

+

A wrapper around lists of music folder playlists that employs fast enumeration techniques.

+

All properties of music folder playlists can be called as methods on the wrapped list, returning a list containing each playlist’s value for the property.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaItem(properties)[source]
+

Bases: XAObject

+

A generic class with methods common to the various playable media classes in media apps.

+ +
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

container

The container of the item.

id

The ID of the item.

index

The index of the item in the internal application order.

name

The name of the item.

persistent_id

The constant unique identifier for the item.

properties

Every property of the item.

+

Methods:

+ + + + + + + + + + + + +

download()

Downloads the item into the local library.

get_clipboard_representation()

Gets a clipboard-codable representation of the music item.

reveal()

Reveals the item in the media apps window.

+
+
+property container: XAObject
+

The container of the item.

+
+ +
+
+download() XAMediaItem[source]
+

Downloads the item into the local library.

+
+
Returns:
+

A reference to the TV item object.

+
+
Return type:
+

XAMediaItem

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the music item.

+

When a music item is copied to the clipboard, the name of the music item is added to the clipboard.

+
+
Returns:
+

The name of the music item

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: int
+

The ID of the item.

+
+ +
+
+property index: int
+

The index of the item in the internal application order.

+
+ +
+
+property name: str
+

The name of the item.

+
+ +
+
+property persistent_id: str
+

The constant unique identifier for the item.

+
+ +
+
+property properties: dict
+

Every property of the item.

+
+ +
+
+reveal() XAMediaItem[source]
+

Reveals the item in the media apps window.

+
+
Returns:
+

A reference to the TV item object.

+
+
Return type:
+

XAMediaItem

+
+
+
+

See also

+

select()

+
+
+

New in version 0.0.1.

+
+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaItemList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList

+

A wrapper around lists of music items that employs fast enumeration techniques.

+

All properties of music items can be called as methods on the wrapped list, returning a list containing each item’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_container(container)

by_id(id)

by_index(index)

by_name(name)

by_persistent_id(persistent_id)

by_properties(properties)

container()

get_clipboard_representation()

Gets a clipboard-codable representation of each music item in the list.

id()

index()

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

name()

persistent_id()

properties()

+
+
+by_container(container: XAObject) Optional[XAMediaItem][source]
+
+ +
+
+by_id(id: int) Optional[XAMediaItem][source]
+
+ +
+
+by_index(index: int) Optional[XAMediaItem][source]
+
+ +
+
+by_name(name: str) Optional[XAMediaItem][source]
+
+ +
+
+by_persistent_id(persistent_id: str) Optional[XAMediaItem][source]
+
+ +
+
+by_properties(properties: dict) Optional[XAMediaItem][source]
+
+ +
+
+container() list[PyXA.XABase.XAObject][source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each music item in the list.

+

When a list of music items is copied to the clipboard, the name of each item is added to the clipboard.

+
+
Returns:
+

A list of track names

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+id() list[int][source]
+
+ +
+
+index() list[int][source]
+

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

+
+

New in version 0.1.2.

+
+
+ +
+
+name() list[str][source]
+
+ +
+
+persistent_id() list[str][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaLibraryPlaylist(properties)[source]
+

Bases: XAMediaPlaylist

+

The library playlist in media apps.

+
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + + + + + + + +

file_tracks([filter])

Returns a list of file tracks, as PyXA objects, matching the given filter.

shared_tracks([filter])

Returns a list of shared tracks, as PyXA objects, matching the given filter.

url_tracks([filter])

Returns a list of URL tracks, as PyXA objects, matching the given filter.

+
+
+file_tracks(filter: Optional[dict] = None) XAMediaFileTrackList[source]
+

Returns a list of file tracks, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned file tracks will have, or None

+
+
Returns:
+

The list of file tracks

+
+
Return type:
+

XAMediaFileTrackList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+shared_tracks(filter: Optional[dict] = None) XAMediaSharedTrackList[source]
+

Returns a list of shared tracks, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned shared tracks will have, or None

+
+
Returns:
+

The list of shared tracks

+
+
Return type:
+

XAMediaSharedTrackList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+url_tracks(filter: Optional[dict] = None) XAMediaURLTrackList[source]
+

Returns a list of URL tracks, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned URL tracks will have, or None

+
+
Returns:
+

The list of URL tracks

+
+
Return type:
+

XAMediaURLTrackList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaLibraryPlaylistList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMediaPlaylistList

+

A wrapper around lists of library playlists that employs fast enumeration techniques.

+

All properties of library playlists can be called as methods on the wrapped list, returning a list containing each playlist’s value for the property.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaPlaylist(properties)[source]
+

Bases: XAMediaItem

+

A playlist in media apps.

+ +
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + + + + + + + + + + +

artworks([filter])

Returns a list of artworks, as PyXA objects, matching the given filter.

move_to(parent_playlist)

search(query[, type])

tracks([filter])

Returns a list of tracks, as PyXA objects, matching the given filter.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

duration

The total length of all tracks in seconds.

name

The name of the playlist.

object_description

The string description of the playlist.

parent

The folder containing the playlist, if any.

size

The total size of all tracks in the playlist in bytes.

special_kind

The special playlist kind.

time

The length of all tracks in the playlist in MM:SS format.

visible

Whether the playlist is visible in the source list.

+
+
+artworks(filter: Optional[dict] = None) XAMediaArtworkList[source]
+

Returns a list of artworks, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned artworks will have, or None

+
+
Returns:
+

The list of artworks

+
+
Return type:
+

XAMediaArtworkList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property duration: int
+

The total length of all tracks in seconds.

+
+ +
+
+move_to(parent_playlist)[source]
+
+ +
+
+property name: str
+

The name of the playlist.

+
+ +
+
+property object_description: str
+

The string description of the playlist.

+
+ +
+
+property parent: XAMediaPlaylist
+

The folder containing the playlist, if any.

+
+ +
+
+search(query: str, type: Literal['all', 'artists', 'albums', 'displayed', 'tracks'] = 'displayed')[source]
+
+ +
+
+property size: int
+

The total size of all tracks in the playlist in bytes.

+
+ +
+
+property special_kind: PlaylistKind
+

The special playlist kind.

+
+ +
+
+property time: str
+

The length of all tracks in the playlist in MM:SS format.

+
+ +
+
+tracks(filter: Optional[dict] = None) XAMediaTrackList[source]
+

Returns a list of tracks, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned tracks will have, or None

+
+
Returns:
+

The list of tracks

+
+
Return type:
+

XAMediaTrackList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property visible: bool
+

Whether the playlist is visible in the source list.

+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaPlaylistList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAMediaItemList

+

A wrapper around lists of playlists that employs fast enumeration techniques.

+

All properties of playlists can be called as methods on the wrapped list, returning a list containing each playlist’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_duration(duration)

by_name(name)

by_object_description(object_description)

by_parent(parent)

by_size(size)

by_special_kind(special_kind)

by_time(time)

by_visible(visible)

duration()

name()

object_description()

parent()

size()

special_kind()

time()

visible()

+
+
+by_duration(duration: int) Optional[XAMediaPlaylist][source]
+
+ +
+
+by_name(name: str) Optional[XAMediaPlaylist][source]
+
+ +
+
+by_object_description(object_description: str) Optional[XAMediaPlaylist][source]
+
+ +
+
+by_parent(parent: XAMediaPlaylist) Optional[XAMediaPlaylist][source]
+
+ +
+
+by_size(size: int) Optional[XAMediaPlaylist][source]
+
+ +
+
+by_special_kind(special_kind: PlaylistKind) Optional[XAMediaPlaylist][source]
+
+ +
+
+by_time(time: str) Optional[XAMediaPlaylist][source]
+
+ +
+
+by_visible(visible: bool) Optional[XAMediaPlaylist][source]
+
+ +
+
+duration() list[int][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+object_description() list[str][source]
+
+ +
+
+parent() XAMediaPlaylistList[source]
+
+ +
+
+size() list[int][source]
+
+ +
+
+special_kind() list[PyXA.apps.MediaApplicationBase.XAMediaApplication.PlaylistKind][source]
+
+ +
+
+time() list[str][source]
+
+ +
+
+visible() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaPlaylistWindow(properties)[source]
+

Bases: XAMediaWindow

+

A playlist window in media apps.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + +

selection

The selected tracks.

view

The playlist currently displayed in the window.

+
+
+property selection: XAMediaTrackList
+

The selected tracks.

+
+ +
+
+property view: XAMediaPlaylist
+

The playlist currently displayed in the window.

+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaPlaylistWindowList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMediaWindowList

+

A wrapper around lists of music playlist windows that employs fast enumeration techniques.

+

All properties of music playlist windows can be called as methods on the wrapped list, returning a list containing each windows’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + +

by_selection(selection)

by_view(view)

selection()

view()

+
+
+by_selection(selection: XAMediaTrackList) Optional[XAMediaPlaylistWindow][source]
+
+ +
+
+by_view(view: XAMediaPlaylist) Optional[XAMediaPlaylistWindow][source]
+
+ +
+
+selection() XAMediaTrackList[source]
+
+ +
+
+view() XAMediaPlaylistList[source]
+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaSharedTrack(properties)[source]
+

Bases: XAMediaTrack

+

A shared track in media apps.

+
+

New in version 0.0.1.

+
+
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaSharedTrackList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMediaTrackList

+

A wrapper around lists of music shared tracks that employs fast enumeration techniques.

+

All properties of music shared tracks can be called as methods on the wrapped list, returning a list containing each track’s value for the property.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaSource(properties)[source]
+

Bases: XAMediaItem

+

A media source in media apps.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + +

capacity

The total size of the source, if it has a fixed size.

free_space

The free space on the source, if it has a fixed size.

kind

The source kind.

+

Methods:

+ + + + + + + + + + + + +

library_playlists([filter])

Returns a list of library playlists, as PyXA objects, matching the given filter.

playlists([filter])

Returns a list of playlists, as PyXA objects, matching the given filter.

user_playlists([filter])

Returns a list of user playlists, as PyXA objects, matching the given filter.

+
+
+property capacity: int
+

The total size of the source, if it has a fixed size.

+
+ +
+
+property free_space: int
+

The free space on the source, if it has a fixed size.

+
+ +
+
+property kind: SourceKind
+

The source kind.

+
+ +
+
+library_playlists(filter: Optional[dict] = None) XAMediaLibraryPlaylistList[source]
+

Returns a list of library playlists, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned library playlists will have, or None

+
+
Returns:
+

The list of library playlists

+
+
Return type:
+

XAMediaLibraryPlaylistList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+playlists(filter: Optional[dict] = None) XAMediaPlaylistList[source]
+

Returns a list of playlists, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned playlists will have, or None

+
+
Returns:
+

The list of playlists

+
+
Return type:
+

XAMediaPlaylistList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+user_playlists(filter: Optional[dict] = None) XAMediaUserPlaylistList[source]
+

Returns a list of user playlists, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned user playlists will have, or None

+
+
Returns:
+

The list of user playlists

+
+
Return type:
+

XAMediaUserPlaylistList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaSourceList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAMediaItemList

+

A wrapper around lists of sources that employs fast enumeration techniques.

+

All properties of sources can be called as methods on the wrapped list, returning a list containing each source’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_capacity(capacity)

by_free_space(free_space)

by_kind(kind)

capacity()

free_space()

kind()

+
+
+by_capacity(capacity: int) Optional[XAMediaSource][source]
+
+ +
+
+by_free_space(free_space: int) Optional[XAMediaSource][source]
+
+ +
+
+by_kind(kind: SourceKind) Optional[XAMediaSource][source]
+
+ +
+
+capacity() list[int][source]
+
+ +
+
+free_space() list[int][source]
+
+ +
+
+kind() list[PyXA.apps.MediaApplicationBase.XAMediaApplication.SourceKind][source]
+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaTrack(properties)[source]
+

Bases: XAMediaItem

+

A class for managing and interacting with tracks in media apps.

+
+

See also

+

XAMediaSharedTrack, XAMediaFileTrack, XAMediaRemoteURLTrack

+
+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

album

The name of the track's album.

album_rating

The rating of the track's album.

album_rating_kind

The album's rating kind.

bit_rate

The track's bitrate in kbps.

bookmark

The bookmark time of the track in seconds.

bookmarkable

Whether the playback position is kept in memory after stopping the track.

category

The category of the track.

comment

User-provided notes on the track.

database_id

A unique ID for the track.

date_added

The date the track was added to the current playlist.

disc_count

The number of discs in the source album.

disc_number

The index of the disc containing the track.

downloader_apple_id

The Apple ID of the person who downloaded the track.

downloader_name

The full name of the person who downloaded the track.

duration

Length of the track in seconds.

enabled

Whether the track is able to be played.

episode_id

A unique ID for the episode of the track.

episode_number

The episode number of the track.

finish

The time in seconds from the start at which the track stops playing.

genre

The music/audio genre category of the track.

grouping

The current section/chapter/movement of the track.

kind

A text description of the track.

long_description

A long description for the track.

media_kind

A description of the track's media type.

modification_date

The last modification date of the track's content.

object_description

A string description of the track.

played_count

The number of the times the track has been played.

played_date

The date the track was last played.

purchaser_apple_id

The Apple ID of the person who bought the track.

purchaser_name

The full name of the person who bought the track.

rating

The rating of the track from 0 to 100.

rating_kind

Whether the rating is user-provided or computed.

release_date

The date the track was released.

sample_rate

The sample rate of the track in Hz.

season_number

The number of the season the track belongs to.

show

The name of the show the track belongs to.

size

The size of the track in bytes.

skipped_count

The number of times the track has been skipped.

skipped_date

The date the track was last skipped.

sort_album

The string used for this track when sorting by album.

sort_name

The string used for this track when sorting by name.

sort_show

The string used for this track when sorting by show.

start

The start time of the track in seconds.

time

HH:MM:SS representation for the duration of the track.

track_count

The number of tracks in the track's album.

track_number

The index of the track within its album.

unplayed

Whether the track has been played before.

volume_adjustment

Volume adjustment setting for this track from -100 to +100.

year

The year the track was released.

+

Methods:

+ + + + + + + + + + + + +

artworks([filter])

Returns a list of artworks, as PyXA objects, matching the given filter.

play()

Plays the item.

select()

Selects the item.

+
+
+property album: str
+

The name of the track’s album.

+
+ +
+
+property album_rating: int
+

The rating of the track’s album.

+
+ +
+
+property album_rating_kind: RatingKind
+

The album’s rating kind.

+
+ +
+
+artworks(filter: Optional[dict] = None) XAMediaArtworkList[source]
+

Returns a list of artworks, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned artworks will have, or None

+
+
Returns:
+

The list of artworks

+
+
Return type:
+

XAMediaArtworkList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property bit_rate: int
+

The track’s bitrate in kbps.

+
+ +
+
+property bookmark: float
+

The bookmark time of the track in seconds.

+
+ +
+
+property bookmarkable: bool
+

Whether the playback position is kept in memory after stopping the track.

+
+ +
+
+property category: str
+

The category of the track.

+
+ +
+
+property comment: str
+

User-provided notes on the track.

+
+ +
+
+property database_id: int
+

A unique ID for the track.

+
+ +
+
+property date_added: datetime
+

The date the track was added to the current playlist.

+
+ +
+
+property disc_count: int
+

The number of discs in the source album.

+
+ +
+
+property disc_number: int
+

The index of the disc containing the track.

+
+ +
+
+property downloader_apple_id: str
+

The Apple ID of the person who downloaded the track.

+
+ +
+
+property downloader_name: str
+

The full name of the person who downloaded the track.

+
+ +
+
+property duration: float
+

Length of the track in seconds.

+
+ +
+
+property enabled: bool
+

Whether the track is able to be played.

+
+ +
+
+property episode_id: str
+

A unique ID for the episode of the track.

+
+ +
+
+property episode_number: int
+

The episode number of the track.

+
+ +
+
+property finish: float
+

The time in seconds from the start at which the track stops playing.

+
+ +
+
+property genre: str
+

The music/audio genre category of the track.

+
+ +
+
+property grouping: str
+

The current section/chapter/movement of the track.

+
+ +
+
+property kind: str
+

A text description of the track.

+
+ +
+
+property long_description: str
+

A long description for the track.

+
+ +
+
+property media_kind: MediaKind
+

A description of the track’s media type.

+
+ +
+
+property modification_date: datetime
+

The last modification date of the track’s content.

+
+ +
+
+property object_description: str
+

A string description of the track.

+
+ +
+
+play() XAMediaItem[source]
+

Plays the item.

+
+
Returns:
+

A reference to the media item object.

+
+
Return type:
+

_XAMediaItem

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property played_count: int
+

The number of the times the track has been played.

+
+ +
+
+property played_date: datetime
+

The date the track was last played.

+
+ +
+
+property purchaser_apple_id: str
+

The Apple ID of the person who bought the track.

+
+ +
+
+property purchaser_name: str
+

The full name of the person who bought the track.

+
+ +
+
+property rating: int
+

The rating of the track from 0 to 100.

+
+ +
+
+property rating_kind: RatingKind
+

Whether the rating is user-provided or computed.

+
+ +
+
+property release_date: datetime
+

The date the track was released.

+
+ +
+
+property sample_rate: int
+

The sample rate of the track in Hz.

+
+ +
+
+property season_number: int
+

The number of the season the track belongs to.

+
+ +
+
+select() XAMediaItem[source]
+

Selects the item.

+
+
Returns:
+

A reference to the media item object.

+
+
Return type:
+

XAMediaTrack

+
+
+
+

See also

+

reveal()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property show: str
+

The name of the show the track belongs to.

+
+ +
+
+property size: int
+

The size of the track in bytes.

+
+ +
+
+property skipped_count: int
+

The number of times the track has been skipped.

+
+ +
+
+property skipped_date: datetime
+

The date the track was last skipped.

+
+ +
+
+property sort_album: str
+

The string used for this track when sorting by album.

+
+ +
+
+property sort_name: str
+

The string used for this track when sorting by name.

+
+ +
+
+property sort_show: str
+

The string used for this track when sorting by show.

+
+ +
+
+property start: float
+

The start time of the track in seconds.

+
+ +
+
+property time: str
+

HH:MM:SS representation for the duration of the track.

+
+ +
+
+property track_count: int
+

The number of tracks in the track’s album.

+
+ +
+
+property track_number: int
+

The index of the track within its album.

+
+ +
+
+property unplayed: bool
+

Whether the track has been played before.

+
+ +
+
+property volume_adjustment: int
+

Volume adjustment setting for this track from -100 to +100.

+
+ +
+
+property year: int
+

The year the track was released.

+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaTrackList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAMediaItemList

+

A wrapper around lists of music tracks that employs fast enumeration techniques.

+

All properties of music tracks can be called as methods on the wrapped list, returning a list containing each track’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

album()

album_rating()

album_rating_kind()

bit_rate()

bookmark()

bookmarkable()

by_album(album)

by_album_rating(album_rating)

by_album_rating_kind(album_rating_kind)

by_bit_rate(bit_rate)

by_bookmark(bookmark)

by_bookmarkable(bookmarkable)

by_category(category)

by_comment(comment)

by_database_id(database_id)

by_date_added(date_added)

by_disc_count(disc_count)

by_disc_number(disc_number)

by_downloader_apple_id(downloader_apple_id)

by_downloader_name(downloader_name)

by_duration(duration)

by_enabled(enabled)

by_episode_id(episode_id)

by_episode_number(episode_number)

by_finish(finish)

by_genre(genre)

by_grouping(grouping)

by_kind(kind)

by_long_description(long_description)

by_media_kind(media_kind)

by_modification_date(modification_date)

by_object_description(object_description)

by_played_count(played_count)

by_played_date(played_date)

by_purchaser_apple_id(purchaser_apple_id)

by_purchaser_name(purchaser_name)

by_rating(rating)

by_rating_kind(rating_kind)

by_release_date(release_date)

by_sample_rate(sample_rate)

by_season_number(season_number)

by_show(show)

by_size(size)

by_skipped_count(skipped_count)

by_skipped_date(skipped_date)

by_sort_album(sort_album)

by_sort_name(sort_name)

by_sort_show(sort_show)

by_start(start)

by_time(time)

by_track_count(track_count)

by_track_number(track_number)

by_unplayed(unplayed)

by_volume_adjustment(volume_adjustment)

by_year(year)

category()

comment()

database_id()

date_added()

disc_count()

disc_number()

downloader_apple_id()

downloader_name()

duration()

enabled()

episode_id()

episode_number()

finish()

genre()

grouping()

kind()

long_description()

media_kind()

modification_date()

object_description()

played_count()

played_date()

purchaser_apple_id()

purchaser_name()

rating()

rating_kind()

release_date()

sample_rate()

season_number()

show()

size()

skipped_count()

skipped_date()

sort_album()

sort_name()

sort_show()

start()

time()

track_count()

track_number()

unplayed()

volume_adjustment()

year()

+
+
+album() list[str][source]
+
+ +
+
+album_rating() list[int][source]
+
+ +
+
+album_rating_kind() list[PyXA.apps.MediaApplicationBase.XAMediaApplication.RatingKind][source]
+
+ +
+
+bit_rate() list[int][source]
+
+ +
+
+bookmark() list[float][source]
+
+ +
+
+bookmarkable() list[bool][source]
+
+ +
+
+by_album(album: str) Optional[XAMediaTrack][source]
+
+ +
+
+by_album_rating(album_rating: int) Optional[XAMediaTrack][source]
+
+ +
+
+by_album_rating_kind(album_rating_kind: RatingKind) Optional[XAMediaTrack][source]
+
+ +
+
+by_bit_rate(bit_rate: int) Optional[XAMediaTrack][source]
+
+ +
+
+by_bookmark(bookmark: float) Optional[XAMediaTrack][source]
+
+ +
+
+by_bookmarkable(bookmarkable: bool) Optional[XAMediaTrack][source]
+
+ +
+
+by_category(category: str) Optional[XAMediaTrack][source]
+
+ +
+
+by_comment(comment: str) Optional[XAMediaTrack][source]
+
+ +
+
+by_database_id(database_id: int) Optional[XAMediaTrack][source]
+
+ +
+
+by_date_added(date_added: datetime) Optional[XAMediaTrack][source]
+
+ +
+
+by_disc_count(disc_count: int) Optional[XAMediaTrack][source]
+
+ +
+
+by_disc_number(disc_number: int) Optional[XAMediaTrack][source]
+
+ +
+
+by_downloader_apple_id(downloader_apple_id: str) Optional[XAMediaTrack][source]
+
+ +
+
+by_downloader_name(downloader_name: str) Optional[XAMediaTrack][source]
+
+ +
+
+by_duration(duration: float) Optional[XAMediaTrack][source]
+
+ +
+
+by_enabled(enabled: bool) Optional[XAMediaTrack][source]
+
+ +
+
+by_episode_id(episode_id: str) Optional[XAMediaTrack][source]
+
+ +
+
+by_episode_number(episode_number: int) Optional[XAMediaTrack][source]
+
+ +
+
+by_finish(finish: float) Optional[XAMediaTrack][source]
+
+ +
+
+by_genre(genre: str) Optional[XAMediaTrack][source]
+
+ +
+
+by_grouping(grouping: str) Optional[XAMediaTrack][source]
+
+ +
+
+by_kind(kind: str) Optional[XAMediaTrack][source]
+
+ +
+
+by_long_description(long_description: str) Optional[XAMediaTrack][source]
+
+ +
+
+by_media_kind(media_kind: MediaKind) Optional[XAMediaTrack][source]
+
+ +
+
+by_modification_date(modification_date: datetime) Optional[XAMediaTrack][source]
+
+ +
+
+by_object_description(object_description: str) Optional[XAMediaTrack][source]
+
+ +
+
+by_played_count(played_count: int) Optional[XAMediaTrack][source]
+
+ +
+
+by_played_date(played_date: datetime) Optional[XAMediaTrack][source]
+
+ +
+
+by_purchaser_apple_id(purchaser_apple_id: str) Optional[XAMediaTrack][source]
+
+ +
+
+by_purchaser_name(purchaser_name: str) Optional[XAMediaTrack][source]
+
+ +
+
+by_rating(rating: int) Optional[XAMediaTrack][source]
+
+ +
+
+by_rating_kind(rating_kind: RatingKind) Optional[XAMediaTrack][source]
+
+ +
+
+by_release_date(release_date: datetime) Optional[XAMediaTrack][source]
+
+ +
+
+by_sample_rate(sample_rate: int) Optional[XAMediaTrack][source]
+
+ +
+
+by_season_number(season_number: int) Optional[XAMediaTrack][source]
+
+ +
+
+by_show(show: str) Optional[XAMediaTrack][source]
+
+ +
+
+by_size(size: int) Optional[XAMediaTrack][source]
+
+ +
+
+by_skipped_count(skipped_count: int) Optional[XAMediaTrack][source]
+
+ +
+
+by_skipped_date(skipped_date: datetime) Optional[XAMediaTrack][source]
+
+ +
+
+by_sort_album(sort_album: str) Optional[XAMediaTrack][source]
+
+ +
+
+by_sort_name(sort_name: str) Optional[XAMediaTrack][source]
+
+ +
+
+by_sort_show(sort_show: str) Optional[XAMediaTrack][source]
+
+ +
+
+by_start(start: float) Optional[XAMediaTrack][source]
+
+ +
+
+by_time(time: str) Optional[XAMediaTrack][source]
+
+ +
+
+by_track_count(track_count: int) Optional[XAMediaTrack][source]
+
+ +
+
+by_track_number(track_number: int) Optional[XAMediaTrack][source]
+
+ +
+
+by_unplayed(unplayed: bool) Optional[XAMediaTrack][source]
+
+ +
+
+by_volume_adjustment(volume_adjustment: int) Optional[XAMediaTrack][source]
+
+ +
+
+by_year(year: int) Optional[XAMediaTrack][source]
+
+ +
+
+category() list[str][source]
+
+ +
+
+comment() list[str][source]
+
+ +
+
+database_id() list[int][source]
+
+ +
+
+date_added() list[datetime.datetime][source]
+
+ +
+
+disc_count() list[int][source]
+
+ +
+
+disc_number() list[int][source]
+
+ +
+
+downloader_apple_id() list[str][source]
+
+ +
+
+downloader_name() list[str][source]
+
+ +
+
+duration() list[float][source]
+
+ +
+
+enabled() list[bool][source]
+
+ +
+
+episode_id() list[str][source]
+
+ +
+
+episode_number() list[int][source]
+
+ +
+
+finish() list[float][source]
+
+ +
+
+genre() list[str][source]
+
+ +
+
+grouping() list[str][source]
+
+ +
+
+kind() list[str][source]
+
+ +
+
+long_description() list[str][source]
+
+ +
+
+media_kind() list[PyXA.apps.MediaApplicationBase.XAMediaApplication.MediaKind][source]
+
+ +
+
+modification_date() list[datetime.datetime][source]
+
+ +
+
+object_description() list[str][source]
+
+ +
+
+played_count() list[int][source]
+
+ +
+
+played_date() list[datetime.datetime][source]
+
+ +
+
+purchaser_apple_id() list[str][source]
+
+ +
+
+purchaser_name() list[str][source]
+
+ +
+
+rating() list[int][source]
+
+ +
+
+rating_kind() list[PyXA.apps.MediaApplicationBase.XAMediaApplication.RatingKind][source]
+
+ +
+
+release_date() list[datetime.datetime][source]
+
+ +
+
+sample_rate() list[int][source]
+
+ +
+
+season_number() list[int][source]
+
+ +
+
+show() list[str][source]
+
+ +
+
+size() list[int][source]
+
+ +
+
+skipped_count() list[int][source]
+
+ +
+
+skipped_date() list[datetime.datetime][source]
+
+ +
+
+sort_album() list[str][source]
+
+ +
+
+sort_name() list[str][source]
+
+ +
+
+sort_show() list[str][source]
+
+ +
+
+start() list[float][source]
+
+ +
+
+time() list[str][source]
+
+ +
+
+track_count() list[int][source]
+
+ +
+
+track_number() list[int][source]
+
+ +
+
+unplayed() list[bool][source]
+
+ +
+
+volume_adjustment() list[int][source]
+
+ +
+
+year() list[int][source]
+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaURLTrack(properties)[source]
+

Bases: XAMediaTrack

+

A URL track in media apps.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + +

address

The URL for the track.

+
+
+property address: XAURL
+

The URL for the track.

+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaURLTrackList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMediaTrackList

+

A wrapper around lists of music URL tracks that employs fast enumeration techniques.

+

All properties of music URL tracks can be called as methods on the wrapped list, returning a list containing each track’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + +

address()

by_address(address)

+
+
+address() list[str][source]
+
+ +
+
+by_address(address: str) Optional[XAMediaURLTrack][source]
+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaUserPlaylist(properties)[source]
+

Bases: XAMediaPlaylist

+

A user-created playlist in media apps.

+
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + + + + + + + +

file_tracks([filter])

Returns a list of file tracks, as PyXA objects, matching the given filter.

shared_tracks([filter])

Returns a list of shared tracks, as PyXA objects, matching the given filter.

url_tracks([filter])

Returns a list of URL tracks, as PyXA objects, matching the given filter.

+

Attributes:

+ + + + + + + + + +

shared

Whether the playlist is shared.

smart

Whether the playlist is a smart playlist.

+
+
+file_tracks(filter: Optional[dict] = None) XAMediaFileTrackList[source]
+

Returns a list of file tracks, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned file tracks will have, or None

+
+
Returns:
+

The list of file tracks

+
+
Return type:
+

XAMediaFileTrackList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property shared: bool
+

Whether the playlist is shared.

+
+ +
+
+shared_tracks(filter: Optional[dict] = None) XAMediaSharedTrackList[source]
+

Returns a list of shared tracks, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned shared tracks will have, or None

+
+
Returns:
+

The list of shared tracks

+
+
Return type:
+

XAMediaSharedTrackList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property smart: bool
+

Whether the playlist is a smart playlist.

+
+ +
+
+url_tracks(filter: Optional[dict] = None) XAMediaURLTrackList[source]
+

Returns a list of URL tracks, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned URL tracks will have, or None

+
+
Returns:
+

The list of URL tracks

+
+
Return type:
+

XAMediaURLTrackList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaUserPlaylistList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMediaPlaylistList

+

A wrapper around lists of music user playlists that employs fast enumeration techniques.

+

All properties of music user playlists can be called as methods on the wrapped list, returning a list containing each playlist’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + +

by_shared(shared)

by_smart(smart)

shared()

smart()

+
+
+by_shared(shared: bool) Optional[XAMediaUserPlaylist][source]
+
+ +
+
+by_smart(smart: bool) Optional[XAMediaUserPlaylist][source]
+
+ +
+
+shared() list[bool][source]
+
+ +
+
+smart() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaVideoWindow(properties)[source]
+

Bases: XAMediaWindow

+

A video window in media apps.

+
+

New in version 0.0.1.

+
+
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaVideoWindowList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMediaWindowList

+

A wrapper around lists of music video windows that employs fast enumeration techniques.

+

All properties of music video windows can be called as methods on the wrapped list, returning a list containing each windows’s value for the property.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaWindow(properties)[source]
+

Bases: XASBWindow, XAMediaItem

+

A windows of media apps.

+ +
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

collapseable

Whether the window can be minimized.

collapsed

Whether the window is currently minimized.

full_screen

Whether the window is currently full screen.

position

The upper left position of the window.

+
+
+property collapseable: bool
+

Whether the window can be minimized.

+
+

Deprecated since version 0.1.1: Use XAMediaWindow.miniaturizable instead.

+
+
+ +
+
+property collapsed: bool
+

Whether the window is currently minimized.

+
+

Deprecated since version 0.1.1: Use XAMediaWindow.miniaturized instead.

+
+
+ +
+
+property full_screen: bool
+

Whether the window is currently full screen.

+
+ +
+
+property position: tuple[int, int]
+

The upper left position of the window.

+
+ +
+ +
+
+class PyXA.apps.MediaApplicationBase.XAMediaWindowList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAMediaItemList

+

A wrapper around lists of windows that employs fast enumeration techniques.

+

All properties of windows can be called as methods on the wrapped list, returning a list containing each windows’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

bounds()

by_bounds(bounds)

by_closeable(closeable)

by_collapseable(collapseable)

by_collapsed(collapsed)

by_full_screen(full_screen)

by_position(position)

by_resizable(resizable)

by_visible(visible)

by_zoomable(zoomable)

by_zoomed(zoomed)

closeable()

collapseable()

collapsed()

full_screen()

position()

resizable()

visible()

zoomable()

zoomed()

+
+
+bounds() list[tuple[tuple[int, int], tuple[int, int]]][source]
+
+ +
+
+by_bounds(bounds: tuple[tuple[int, int], tuple[int, int]]) Optional[XAMediaWindow][source]
+
+ +
+
+by_closeable(closeable: bool) Optional[XAMediaWindow][source]
+
+ +
+
+by_collapseable(collapseable: bool) Optional[XAMediaWindow][source]
+
+ +
+
+by_collapsed(collapsed: bool) Optional[XAMediaWindow][source]
+
+ +
+
+by_full_screen(full_screen: bool) Optional[XAMediaWindow][source]
+
+ +
+
+by_position(position: tuple[int, int]) Optional[XAMediaWindow][source]
+
+ +
+
+by_resizable(resizable: bool) Optional[XAMediaWindow][source]
+
+ +
+
+by_visible(visible: bool) Optional[XAMediaWindow][source]
+
+ +
+
+by_zoomable(zoomable: bool) Optional[XAMediaWindow][source]
+
+ +
+
+by_zoomed(zoomed: bool) Optional[XAMediaWindow][source]
+
+ +
+
+closeable() list[bool][source]
+
+ +
+
+collapseable() list[bool][source]
+
+ +
+
+collapsed() list[bool][source]
+
+ +
+
+full_screen() list[bool][source]
+
+ +
+
+position() list[tuple[int, int]][source]
+
+ +
+
+resizable() list[bool][source]
+
+ +
+
+visible() list[bool][source]
+
+ +
+
+zoomable() list[bool][source]
+
+ +
+
+zoomed() list[bool][source]
+
+ +
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2022, Stephen Kaplan.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/messages.html b/docs/reference/apps/messages.html new file mode 100644 index 0000000..aaf4022 --- /dev/null +++ b/docs/reference/apps/messages.html @@ -0,0 +1,2055 @@ + + + + + + + Messages Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Messages Module Reference

+
+

New in version 0.0.1.

+
+

Control the macOS Messages application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XAMessagesAccount(properties)

A class for managing and interacting with accounts in Messages.app

XAMessagesAccountList(properties[, filter])

A wrapper around a list of accounts that employs fast enumeration techniques.

XAMessagesApplication(properties)

A class for managing and interacting with Messages.app

XAMessagesChat(properties)

A class for managing and interacting with chats in Messages.app

XAMessagesChatList(properties[, filter])

A wrapper around a list of chats that employs fast enumeration techniques.

XAMessagesDocument(properties)

A class for managing and interacting with documents in Messages.app.

XAMessagesDocumentList(properties[, filter])

A wrapper around a list of documents that employs fast enumeration techniques.

XAMessagesFileTransfer(properties)

A class for managing and interacting with file transfers in Messages.app

XAMessagesFileTransferList(properties[, filter])

A wrapper around a list of file transfers that employs fast enumeration techniques.

XAMessagesParticipant(properties)

A class for managing and interacting with chat participants in Messages.app

XAMessagesParticipantList(properties[, filter])

A wrapper around a list of participants that employs fast enumeration techniques.

XAMessagesWindow(properties)

A class for managing and interacting with Messages windows.

+
+
+class PyXA.apps.Messages.XAMessagesAccount(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for managing and interacting with accounts in Messages.app

+
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + + + + + + + +

chats([filter])

Returns a list of chats, as PyXA objects, matching the given filter.

get_clipboard_representation()

Gets a clipboard-codable representation of the account.

participants([filter])

Returns a list of participants, as PyXA objects, matching the given filter.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

connection_status

The connection status for the account.

enabled

Whether the account is currently enabled.

id

The unique identifier for the account.

object_description

The name of the account as defined in the Account Preferences description field.

service_type

The type of service for the account.

+
+
+chats(filter: Optional[dict] = None) XAMessagesChatList[source]
+

Returns a list of chats, as PyXA objects, matching the given filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+property connection_status: ConnectionStatus
+

The connection status for the account.

+
+ +
+
+property enabled: bool
+

Whether the account is currently enabled.

+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the account.

+

When the clipboard content is set to an account, the name of the account is added to the clipboard.

+
+
Returns:
+

The name of the account

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: str
+

The unique identifier for the account.

+
+ +
+
+property object_description: str
+

The name of the account as defined in the Account Preferences description field.

+
+ +
+
+participants(filter: Optional[dict] = None) XAMessagesParticipantList[source]
+

Returns a list of participants, as PyXA objects, matching the given filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+property service_type: ServiceType
+

The type of service for the account.

+
+ +
+ +
+
+class PyXA.apps.Messages.XAMessagesAccountList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around a list of accounts that employs fast enumeration techniques.

+

All properties of accounts can be called as methods on the wrapped list, returning a list containing each account’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_connection_status(connection_status)

by_enabled(enabled)

by_id(id)

by_object_description(object_description)

by_service_type(service_type)

connection_status()

enabled()

get_clipboard_representation()

Gets a clipboard-codable representation of each account in the list.

id()

object_description()

service_type()

+
+
+by_connection_status(connection_status: ConnectionStatus) Optional[XAMessagesAccount][source]
+
+ +
+
+by_enabled(enabled: bool) Optional[XAMessagesAccount][source]
+
+ +
+
+by_id(id: str) Optional[XAMessagesAccount][source]
+
+ +
+
+by_object_description(object_description: str) Optional[XAMessagesAccount][source]
+
+ +
+
+by_service_type(service_type: ServiceType) Optional[XAMessagesAccount][source]
+
+ +
+
+connection_status() list[PyXA.apps.Messages.XAMessagesApplication.ConnectionStatus][source]
+
+ +
+
+enabled() list[bool][source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each account in the list.

+

When the clipboard content is set to a list of accounts, each account’s object description is added to the clipboard.

+
+
Returns:
+

The list of account descriptions

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+id() list[str][source]
+
+ +
+
+object_description() list[str][source]
+
+ +
+
+service_type() list[PyXA.apps.Messages.XAMessagesApplication.ServiceType][source]
+
+ +
+ +
+
+class PyXA.apps.Messages.XAMessagesApplication(properties)[source]
+

Bases: XASBApplication

+

A class for managing and interacting with Messages.app

+ +
+

New in version 0.0.1.

+
+

Classes:

+ + + + + + + + + + + + + + + +

ConnectionStatus(value[, names, module, ...])

Options for the connection status of Messages.app to message transfer servers.

MessageDirection(value[, names, module, ...])

Options for the direction of a message.

ServiceType(value[, names, module, ...])

Options for services types supported by Messages.app.

TransferStatus(value[, names, module, ...])

Options for the transfer stage/status of a message.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + +

accounts([filter])

Returns a list of accounts, as PyXA objects, matching the given filter.

chats([filter])

Returns a list of chats, as PyXA objects, matching the given filter.

documents([filter])

Returns a list of documents, as PyXA objects, matching the given filter.

file_transfers([filter])

Returns a list of file transfers, as PyXA objects, matching the given filter.

participants([filter])

Returns a list of participants, as PyXA objects, matching the given filter.

print(object[, show_dialog])

send(message, chat)

Sends a message to the specified chat.

+

Attributes:

+ + + + + + + + + + + + +

frontmost

Whether Messages is the active application.

name

The name of the application.

version

The version of Messages.app.

+
+
+class ConnectionStatus(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for the connection status of Messages.app to message transfer servers.

+

Attributes:

+ + + + + + + + + + + + + + + +

CONNECTED

CONNECTING

DISCONNECTED

DISCONNECTING

+
+
+CONNECTED = 1668247150
+
+ +
+
+CONNECTING = 1668247143
+
+ +
+
+DISCONNECTED = 1684238190
+
+ +
+
+DISCONNECTING = 1684237927
+
+ +
+ +
+
+class MessageDirection(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for the direction of a message.

+

Attributes:

+ + + + + + + + + +

INCOMING

OUTGOING

+
+
+INCOMING = 1179937123
+
+ +
+
+OUTGOING = 1179938663
+
+ +
+ +
+
+class ServiceType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for services types supported by Messages.app.

+

Attributes:

+ + + + + + + + + +

IMESSAGE

SMS

+
+
+IMESSAGE = 1936289139
+
+ +
+
+SMS = 1936944499
+
+ +
+ +
+
+class TransferStatus(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for the transfer stage/status of a message.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

FAILED

FINALIZING

FINISHED

PREPARING

TRANSFERRING

WAITING

+
+
+FAILED = 1179939685
+
+ +
+
+FINALIZING = 1179939706
+
+ +
+
+FINISHED = 1179939686
+
+ +
+
+PREPARING = 1179939696
+
+ +
+
+TRANSFERRING = 1179939687
+
+ +
+
+WAITING = 1179939703
+
+ +
+ +
+
+accounts(filter: Optional[dict] = None) XAMessagesAccountList[source]
+

Returns a list of accounts, as PyXA objects, matching the given filter.

+
+
Example 1:
+

Print a list of all accounts

+
+
+
>>> import PyXA
+>>> messages = PyXA.Application("Messages")
+>>> print(messages.accounts())
+<<class 'PyXA.apps.Messages.XAMessagesAccountList'>[<ServiceType.IMESSAGE: 1936289139>, <ServiceType.SMS: 1936289139>, <ServiceType.IMESSAGE: 1936289139>]>
+
+
+
+
Example 2:
+

Get an account by its ID

+
+
+
>>> import PyXA
+>>> messages = PyXA.Application("Messages")
+>>> print(messages.accounts().by_id("BEC519EA-DD88-5574-BDB9-C48486D3111B"))
+<PyXA.apps.Messages.XAMessagesAccount object at 0x126de2340>
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+chats(filter: Optional[dict] = None) XAMessagesChatList[source]
+

Returns a list of chats, as PyXA objects, matching the given filter.

+
+
Example 1:
+

List all chats

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Messages")
+>>> print(app.chats())
+<<class 'PyXA.apps.Messages.XAMessagesChatList'>['iMessage;-;+11234567891', 'SMS;-;+12234567891', ...]
+
+
+
+
Example 2:
+

List the names of all named chats

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Messages")
+>>> print(app.chats().name())
+['PyXA Group', 'Dev Chat']
+
+
+
+
Example 3:
+

List the information, including participants, of every chat

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Messages")
+>>> chats = app.chats()
+>>> for chat in chats:
+>>>     print("\n")
+>>>     print("Name:", chat.name)
+>>>     print("ID:", chat.id)
+>>>     print("Account:", chat.account)
+>>>     print("Participants:", chat.participants())
+Name: None
+ID: iMessage;-;+11234567891
+Account: <PyXA.apps.Messages.XAMessagesAccount object at 0x10871e100>
+Participants: <<class 'PyXA.apps.Messages.XAMessagesParticipantList'>['+1 (123) 456-7891']>
+...
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+documents(filter: Optional[dict] = None) XAMessagesDocumentList[source]
+

Returns a list of documents, as PyXA objects, matching the given filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+file_transfers(filter: Optional[dict] = None) XAMessagesFileTransferList[source]
+

Returns a list of file transfers, as PyXA objects, matching the given filter.

+
+
Example 1:
+

List all file transfers

+
+
+
>>> import PyXA
+>>> messages = PyXA.Application("Messages")
+>>> print(messages.file_transfers())
+<<class 'PyXA.apps.Messages.XAMessagesFileTransferList'>['at_0_8BEC6B47-3B43-4D14-87C1-221C2BDED01C', 'at_0_9C0DC423-F6AB-4A98-8532-1C4D250160CD', ...]>
+
+
+
+
Example 2:
+

Get a file transfer by filename

+
+
+
>>> import PyXA
+>>> messages = PyXA.Application("Messages")
+>>> print(messages.file_transfers().by_name("Example1.png")
+<<class 'PyXA.apps.Messages.XAMessagesFileTransfer'>Example1.png>
+
+
+
+
Example 3:
+

List the file paths of file transfers

+
+
+
>>> import PyXA
+>>> messages = PyXA.Application("Messages")
+>>> print(messages.file_transfers().file_path())
+[file:///Users/exampleuser/Library/Messages/Attachments/de/14/at_0_8BEC6B47-3B43-4D14-87C1-221C2BDED01C/Example1.png, file:///Users/exampleuser/Library/Messages/Attachments/c4/04/at_0_9C0DC423-F6AB-4A98-8532-1C4D250160CD/Example2.jpg, ...]
+
+
+
+
Example 4:
+

Get the first PNG file transfer

+
+
+
>>> import PyXA
+>>> messages = PyXA.Application("Messages")
+>>> print(messages.file_transfers().containing("name", "png"))
+<<class 'PyXA.apps.Messages.XAMessagesFileTransfer'>Example1.png>
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+property frontmost: bool
+

Whether Messages is the active application.

+
+

New in version 0.0.1.

+
+
+ +
+
+property name: str
+

The name of the application.

+
+

New in version 0.0.1.

+
+
+ +
+
+participants(filter: Optional[dict] = None) XAMessagesParticipantList[source]
+

Returns a list of participants, as PyXA objects, matching the given filter.

+
+
Example 1:
+

List all participants

+
+
+
>>> import PyXA
+>>> messages = PyXA.Application("Messages")
+>>> print(messages.participants())
+<<class 'PyXA.apps.Messages.XAMessagesParticipantList'>['+1 (888) 888-8888', 'Example Person', 'Another Person', ...]>
+
+
+
+
Example 2:
+

Get a participant by full name

+
+
+
>>> import PyXA
+>>> messages = PyXA.Application("Messages")
+>>> print(messages.participants().by_full_name("Example Person"))
+<<class 'PyXA.apps.Messages.XAMessagesParticipant'>Example Person>
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+print(object: XAObject, show_dialog: bool = True)[source]
+
+ +
+
+send(message: str, chat: XAMessagesChat)[source]
+

Sends a message to the specified chat.

+
+
Parameters:
+
    +
  • message (str) – The message to send

  • +
  • chat (XAMessagesChat) – The chat to send the message to

  • +
+
+
Example 1:
+

+
+
>>> import PyXA
+>>> messages = PyXA.Application("Messages")
+>>> friend = messages.participants().by_full_name("Example Person")
+>>> chat = messages.chats().by_participants([friend])
+>>> messages.send("Testing 1 2 3", chat)
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+property version: str
+

The version of Messages.app.

+
+

New in version 0.0.1.

+
+
+ +
+ +
+
+class PyXA.apps.Messages.XAMessagesChat(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for managing and interacting with chats in Messages.app

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + +

account

The account that is participating in the chat.

id

The unique identifier for the chat.

name

The name of the chat as it appears in the chat list.

+

Methods:

+ + + + + + + + + + + + +

get_clipboard_representation()

Gets a clipboard-codable representation of the chat.

participants([filter])

Returns a list of participants, as PyXA objects, matching the given filter.

send(message)

Sends a message to the chat.

+
+
+property account: XAMessagesAccount
+

The account that is participating in the chat.

+
+

New in version 0.0.1.

+
+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the chat.

+

When the clipboard content is set to a chat, the chat’s name is added to the clipboard.

+
+
Returns:
+

The name of the chat

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: str
+

The unique identifier for the chat.

+
+

New in version 0.0.1.

+
+
+ +
+
+property name: str
+

The name of the chat as it appears in the chat list.

+
+

New in version 0.0.1.

+
+
+ +
+
+participants(filter: Optional[dict] = None) XAMessagesParticipantList[source]
+

Returns a list of participants, as PyXA objects, matching the given filter.

+
+

New in version 0.0.4.

+
+
+ +
+
+send(message)[source]
+

Sends a message to the chat.

+

_extended_summary_

+
+
Parameters:
+

message (_type_) – _description_

+
+
Example 1:
+

Send an SMS to a chat based on the chat ID

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Messages")
+>>> chat = app.chats().by_id("SMS;-;+11234567891")
+>>> chat.send("Hello!")
+
+
+
+

New in version 0.0.4.

+
+
+ +
+ +
+
+class PyXA.apps.Messages.XAMessagesChatList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around a list of chats that employs fast enumeration techniques.

+

All properties of chats can be called as methods on the wrapped list, returning a list containing each chat’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

account()

by_account(account)

by_id(id)

by_name(name)

by_participants(participants)

get_clipboard_representation()

Gets a clipboard-codable representation of each chat in the list.

id()

name()

participants()

+
+
+account() XAMessagesAccountList[source]
+
+ +
+
+by_account(account: XAMessagesAccount) XAMessagesChat[source]
+
+ +
+
+by_id(id: str) XAMessagesChat[source]
+
+ +
+
+by_name(name: str) XAMessagesChat[source]
+
+ +
+
+by_participants(participants: list[PyXA.apps.Messages.XAMessagesParticipant]) XAMessagesChat[source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each chat in the list.

+

When the clipboard content is set to a list of chats, each chat’s name is added to the clipboard.

+
+
Returns:
+

The list of chat names

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+participants() list[PyXA.apps.Messages.XAMessagesParticipantList][source]
+
+ +
+ +
+
+class PyXA.apps.Messages.XAMessagesDocument(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with documents in Messages.app.

+
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + + + + +

file

The location of the document on the disk, if one exists.

modified

Whether the document has been modified since its last save.

name

The title of the document.

+
+
+property file: str
+

The location of the document on the disk, if one exists.

+
+

New in version 0.0.4.

+
+
+ +
+
+property modified: bool
+

Whether the document has been modified since its last save.

+
+

New in version 0.0.4.

+
+
+ +
+
+property name: str
+

The title of the document.

+
+

New in version 0.0.4.

+
+
+ +
+ +
+
+class PyXA.apps.Messages.XAMessagesDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around a list of documents that employs fast enumeration techniques.

+

All properties of documents can be called as methods on the wrapped list, returning a list containing each document’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_file(file)

by_modified(modified)

by_name(name)

file()

modified()

name()

+
+
+by_file(file: str) Optional[XAMessagesDocument][source]
+
+ +
+
+by_modified(modified: bool) Optional[XAMessagesDocument][source]
+
+ +
+
+by_name(name: str) Optional[XAMessagesDocument][source]
+
+ +
+
+file() list[str][source]
+
+ +
+
+modified() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Messages.XAMessagesFileTransfer(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for managing and interacting with file transfers in Messages.app

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

account

The account on which the file transfer is taking place.

direction

The direction that the file is being sent.

file_path

The local page to the file being transferred.

file_progress

The number of bytes that have been transferred.

file_size

The total size of the file transfer in bytes.

id

The unique identifier for the file transfer.

name

The name of the file.

participant

The other participant in the file transfer.

started

The date and time that the file transfer started.

transfer_status

The current status of the file transfer.

+

Methods:

+ + + + + + +

get_clipboard_representation()

Gets a clipboard-codable representation of the file transfer.

+
+
+property account: XAMessagesAccount
+

The account on which the file transfer is taking place.

+
+ +
+
+property direction: MessageDirection
+

The direction that the file is being sent.

+
+ +
+
+property file_path: XAPath
+

The local page to the file being transferred.

+
+ +
+
+property file_progress: int
+

The number of bytes that have been transferred.

+
+ +
+
+property file_size: int
+

The total size of the file transfer in bytes.

+
+ +
+
+get_clipboard_representation() list[objc.NSURL][source]
+

Gets a clipboard-codable representation of the file transfer.

+

When the clipboard content is set to a file transfer, the path of the file transfer is added to the clipboard.

+
+
Returns:
+

The file path of the file transfer

+
+
Return type:
+

list[AppKit.NSURL]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: str
+

The unique identifier for the file transfer.

+
+ +
+
+property name: str
+

The name of the file.

+
+ +
+
+property participant: XAMessagesParticipant
+

The other participant in the file transfer.

+
+ +
+
+property started: datetime
+

The date and time that the file transfer started.

+
+ +
+
+property transfer_status: TransferStatus
+

The current status of the file transfer.

+
+ +
+ +
+
+class PyXA.apps.Messages.XAMessagesFileTransferList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around a list of file transfers that employs fast enumeration techniques.

+

All properties of file transfers can be called as methods on the wrapped list, returning a list containing each file transfer’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

account()

by_account(account)

by_direction(direction)

by_file_path(file_path)

by_file_progress(file_progress)

by_file_size(file_size)

by_id(id)

by_name(name)

by_participant(participant)

by_started(started)

by_transfer_status(transfer_status)

direction()

file_path()

file_progress()

file_size()

filter(filter[, comparison_operation, ...])

Filters the list by the given parameters.

get_clipboard_representation()

Gets a clipboard-codable representation of each file transfer in the list.

id()

name()

participant()

started()

transfer_status()

+
+
+account() XAMessagesAccountList[source]
+
+ +
+
+by_account(account: XAMessagesAccount) XAMessagesFileTransfer[source]
+
+ +
+
+by_direction(direction: MessageDirection) XAMessagesFileTransfer[source]
+
+ +
+
+by_file_path(file_path: XAPath) XAMessagesFileTransfer[source]
+
+ +
+
+by_file_progress(file_progress: int) XAMessagesFileTransfer[source]
+
+ +
+
+by_file_size(file_size: int) XAMessagesFileTransfer[source]
+
+ +
+
+by_id(id: str) XAMessagesFileTransfer[source]
+
+ +
+
+by_name(name: str) XAMessagesFileTransfer[source]
+
+ +
+
+by_participant(participant: XAMessagesParticipant) XAMessagesFileTransfer[source]
+
+ +
+
+by_started(started: bool) XAMessagesFileTransfer[source]
+
+ +
+
+by_transfer_status(transfer_status: TransferStatus) XAMessagesFileTransfer[source]
+
+ +
+
+direction() list[PyXA.apps.Messages.XAMessagesApplication.MessageDirection][source]
+
+ +
+
+file_path() list[PyXA.XABase.XAPath][source]
+
+ +
+
+file_progress() list[int][source]
+
+ +
+
+file_size() list[int][source]
+
+ +
+
+filter(filter: str, comparison_operation: Optional[str] = None, value1: Optional[Any] = None, value2: Optional[Any] = None) XAList[source]
+

Filters the list by the given parameters.

+

The filter may be either a format string, used to create an NSPredicate, or up to 4 arguments specifying the filtered property name, the comparison operation, and up to two values to compare against.

+
+
Parameters:
+
    +
  • filter (str) – A format string or a property name

  • +
  • comparison_operation (Union[str, None], optional) – The symbol or name of a comparison operation, such as > or <, defaults to None

  • +
  • value1 (Union[Any, None], optional) – The first value to compare each list item’s property value against, defaults to None

  • +
  • value2 (Union[Any, None], optional) – The second value to compare each list item’s property value against, defaults to None

  • +
+
+
Returns:
+

The filtered XAList object

+
+
Return type:
+

XAList

+
+
Example 1:
+

Get the last file sent by you (via this machine) in Messages.app

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Messages")
+>>> last_file_transfer = app.file_transfers().filter("direction", "==", app.MessageDirection.OUTGOING)[-1]
+>>> print(last_file_transfer)
+<<class 'PyXA.apps.Messages.XAMessagesFileTransfer'>Test.jpg>
+
+
+
+
Example 2:
+

Get the list of favorite photos/videos from Photos.app

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Photos")
+>>> favorites = app.media_items().filter("favorite", "==", True)
+>>> print(favorites)
+<<class 'PyXA.apps.PhotosApp.XAPhotosMediaItemList'>['CB24FE9F-E9DC-4A5C-A0B0-CC779B1CEDCE/L0/001', 'EFEB7F37-8373-4972-8E43-21612F597185/L0/001', ...]>
+
+
+
+

Note

+

For properties that appear to be boolean but fail to return expected filter results, try using the corresponding 0 or 1 value instead.

+
+
+
Example 3:
+

Provide a custom format string

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Photos")
+>>> photo = app.media_items().filter("id == 'CB24FE9F-E9DC-4A5C-A0B0-CC779B1CEDCE/L0/001'")[0]
+>>> print(photo)
+<<class 'PyXA.apps.PhotosApp.XAPhotosMediaItem'>id=CB24FE9F-E9DC-4A5C-A0B0-CC779B1CEDCE/L0/001>
+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+get_clipboard_representation() list[Union[str, objc.NSURL]][source]
+

Gets a clipboard-codable representation of each file transfer in the list.

+

When the clipboard content is set to a list of file transfers, each file transfer’s file path URL is added to the clipboard.

+
+
Returns:
+

The list of file path URLs

+
+
Return type:
+

list[AppKit.NSURL]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+participant() XAMessagesParticipantList[source]
+
+ +
+
+started() list[datetime.datetime][source]
+
+ +
+
+transfer_status() list[PyXA.apps.Messages.XAMessagesApplication.TransferStatus][source]
+
+ +
+ +
+
+class PyXA.apps.Messages.XAMessagesParticipant(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for managing and interacting with chat participants in Messages.app

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

account

The account for the participant.

first_name

The first name of the participant, taken from their contact card (if available).

full_name

The full name of the participant, taken from their contact card (if available).

handle

The participant's handle.

id

The unique identifier for the participant.

last_name

The last name of the participant, taken from their contact card (if available).

name

The name of the participant as it appears in the participant list

+

Methods:

+ + + + + + +

get_clipboard_representation()

Gets a clipboard-codable representation of the participant.

+
+
+property account: XAMessagesAccount
+

The account for the participant.

+
+

New in version 0.0.1.

+
+
+ +
+
+property first_name: str
+

The first name of the participant, taken from their contact card (if available).

+
+

New in version 0.0.1.

+
+
+ +
+
+property full_name: str
+

The full name of the participant, taken from their contact card (if available).

+
+

New in version 0.0.1.

+
+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the participant.

+

When the clipboard content is set to a participant, the full name of the participant is added to the clipboard.

+
+
Returns:
+

The participant’s full name

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property handle: str
+

The participant’s handle.

+
+

New in version 0.0.1.

+
+
+ +
+
+property id: str
+

The unique identifier for the participant.

+
+

New in version 0.0.1.

+
+
+ +
+
+property last_name: str
+

The last name of the participant, taken from their contact card (if available).

+
+

New in version 0.0.1.

+
+
+ +
+
+property name: str
+

The name of the participant as it appears in the participant list

+
+

New in version 0.0.1.

+
+
+ +
+ +
+
+class PyXA.apps.Messages.XAMessagesParticipantList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around a list of participants that employs fast enumeration techniques.

+

All properties of participants can be called as methods on the wrapped list, returning a list containing each participant’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

account()

by_account(account)

by_first_name(first_name)

by_full_name(full_name)

by_handle(handle)

by_id(id)

by_last_name(last_name)

by_name(name)

first_name()

full_name()

get_clipboard_representation()

Gets a clipboard-codable representation of each participant in the list.

handle()

id()

last_name()

name()

+
+
+account() XAMessagesAccountList[source]
+
+ +
+
+by_account(account: XAMessagesAccount) Optional[XAMessagesParticipant][source]
+
+ +
+
+by_first_name(first_name: str) Optional[XAMessagesParticipant][source]
+
+ +
+
+by_full_name(full_name: str) Optional[XAMessagesParticipant][source]
+
+ +
+
+by_handle(handle: str) Optional[XAMessagesParticipant][source]
+
+ +
+
+by_id(id: str) Optional[XAMessagesParticipant][source]
+
+ +
+
+by_last_name(last_name: str) Optional[XAMessagesParticipant][source]
+
+ +
+
+by_name(name: str) Optional[XAMessagesParticipant][source]
+
+ +
+
+first_name() list[str][source]
+
+ +
+
+full_name() list[str][source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each participant in the list.

+

When the clipboard content is set to a list of participants, each participant’s full name is added to the clipboard.

+
+
Returns:
+

The list of participant names

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+handle() list[str][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+last_name() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Messages.XAMessagesWindow(properties)[source]
+

Bases: XASBWindow

+

A class for managing and interacting with Messages windows.

+
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

bounds

The bounding rectangle of the window.

closeable

Whether the window has a close button.

document

id

The unique identifier for the window.

index

The index of the window in the front-to-back ordering.

miniaturizable

Whether the window can be minimized.

miniaturized

Whether the window is currently minimized.

name

The title of the window.

resizable

Whether the window can be resized.

visible

Whether the window is currently visible.

zoomable

Whether the window can be zoomed.

zoomed

Whether the window is currently zoomed.

+
+
+property bounds: tuple[int, int, int, int]
+

The bounding rectangle of the window.

+
+

New in version 0.0.4.

+
+
+ +
+
+property closeable: bool
+

Whether the window has a close button.

+
+

New in version 0.0.4.

+
+
+ +
+
+property document: XAMessagesDocument
+
+ +
+
+property id: int
+

The unique identifier for the window.

+
+

New in version 0.0.4.

+
+
+ +
+
+property index: int
+

The index of the window in the front-to-back ordering.

+
+

New in version 0.0.4.

+
+
+ +
+
+property miniaturizable: bool
+

Whether the window can be minimized.

+
+

New in version 0.0.4.

+
+
+ +
+
+property miniaturized: bool
+

Whether the window is currently minimized.

+
+

New in version 0.0.4.

+
+
+ +
+
+property name: str
+

The title of the window.

+
+

New in version 0.0.4.

+
+
+ +
+
+property resizable: bool
+

Whether the window can be resized.

+
+

New in version 0.0.4.

+
+
+ +
+
+property visible: bool
+

Whether the window is currently visible.

+
+

New in version 0.0.4.

+
+
+ +
+
+property zoomable: bool
+

Whether the window can be zoomed.

+
+

New in version 0.0.4.

+
+
+ +
+
+property zoomed: bool
+

Whether the window is currently zoomed.

+
+

New in version 0.0.4.

+
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/music.html b/docs/reference/apps/music.html new file mode 100644 index 0000000..14a9214 --- /dev/null +++ b/docs/reference/apps/music.html @@ -0,0 +1,2936 @@ + + + + + + + Music Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Music Module Reference

+
+

New in version 0.0.1.

+
+

Control the macOS Music application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XAMusicAirPlayDevice(properties)

An AirPlay device.

XAMusicAirPlayDeviceList(properties[, filter])

A wrapper around lists of AirPlay devices that employs fast enumeration techniques.

XAMusicApplication(properties)

A class for managing and interacting with Music.app.

XAMusicAudioCDPlaylist(properties)

An audio CD playlist in Music.app.

XAMusicAudioCDPlaylistList(properties[, filter])

A wrapper around lists of audio CD playlists that employs fast enumeration techniques.

XAMusicAudioCDTrack(properties)

An audio CD track in Music.app.

XAMusicAudioCDTrackList(properties[, filter])

A wrapper around lists of music audio CD tracks that employs fast enumeration techniques.

XAMusicEQPreset(properties)

An equalizer preset in Music.app.

XAMusicEQPresetList(properties[, filter])

A wrapper around lists of equalizer presets that employs fast enumeration techniques.

XAMusicEQWindow(properties)

An equalizer window in Music.app.

XAMusicEQWindowList(properties[, filter])

A wrapper around lists of music equalizer windows that employs fast enumeration techniques.

XAMusicEncoder(properties)

An encoder in Music.app.

XAMusicEncoderList(properties[, filter])

A wrapper around lists of encoders that employs fast enumeration techniques.

XAMusicMiniplayerWindow(properties)

A miniplayer window in Music.app.

XAMusicMiniplayerWindowList(properties[, filter])

A wrapper around lists of music miniplayer windows that employs fast enumeration techniques.

XAMusicPlaylist(properties)

A playlist in Music.app.

XAMusicPlaylistList(properties[, filter, ...])

A wrapper around lists of playlists that employs fast enumeration techniques.

XAMusicRadioTunerPlaylist(properties)

A radio playlist in Music.app.

XAMusicRadioTunerPlaylistList(properties[, ...])

A wrapper around lists of radio tuner playlists that employs fast enumeration techniques.

XAMusicSource(properties)

A media source in Music.app.

XAMusicSourceList(properties[, filter])

A wrapper around lists of sources that employs fast enumeration techniques.

XAMusicSubscriptionPlaylist(properties)

A subscription playlist from Apple Music in Music.app.

XAMusicSubscriptionPlaylistList(properties)

A wrapper around lists of subscription playlists that employs fast enumeration techniques.

XAMusicTrack(properties)

A class for managing and interacting with tracks in Music.app.

XAMusicTrackList(properties[, filter, obj_class])

A wrapper around lists of music tracks that employs fast enumeration techniques.

XAMusicUserPlaylist(properties)

A user-created playlist in Music.app.

XAMusicUserPlaylistList(properties[, filter])

A wrapper around lists of music user playlists that employs fast enumeration techniques.

XAMusicVisual(properties)

A music visual in Music.app.

XAMusicVisualList(properties[, filter])

A wrapper around lists of music visuals that employs fast enumeration techniques.

XAMusicWindow(properties)

A windows of Music.app.

XAMusicWindowList(properties[, filter, ...])

A wrapper around lists of music windows that employs fast enumeration techniques.

+
+
+class PyXA.apps.Music.XAMusicAirPlayDevice(properties)[source]
+

Bases: XAMediaItem

+

An AirPlay device.

+
+

New in version 0.0.7.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

active

Whether the device is currently being played to.

available

Whether the device is currently available.

kind

The kind of the device.

network_address

The MAC address of the device.

protected

Whether the device is password/passcode protected.

selected

Whether the device is currently selected.

sound_volume

The output volume for the device from 0 to 100.

supports_audio

Whether the device supports audio playback.

supports_video

Whether the device supports video playback.

+
+
+property active: bool
+

Whether the device is currently being played to.

+
+ +
+
+property available: bool
+

Whether the device is currently available.

+
+ +
+
+property kind: DeviceKind
+

The kind of the device.

+
+ +
+
+property network_address: str
+

The MAC address of the device.

+
+ +
+
+property protected: bool
+

Whether the device is password/passcode protected.

+
+ +
+
+property selected: bool
+

Whether the device is currently selected.

+
+ +
+
+property sound_volume: int
+

The output volume for the device from 0 to 100.

+
+ +
+
+property supports_audio: bool
+

Whether the device supports audio playback.

+
+ +
+
+property supports_video: bool
+

Whether the device supports video playback.

+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicAirPlayDeviceList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMediaItemList

+

A wrapper around lists of AirPlay devices that employs fast enumeration techniques.

+

All properties of AirPlay devices can be called as methods on the wrapped list, returning a list containing each devices’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

active()

available()

by_active(active)

by_available(available)

by_kind(kind)

by_network_address(network_address)

by_protected(protected)

by_selected(selected)

by_sound_volume(sound_volume)

by_supports_audio(supports_audio)

by_supports_video(supports_video)

kind()

network_address()

protected()

selected()

sound_volume()

supports_audio()

+
+
+active() list[bool][source]
+
+ +
+
+available() list[bool][source]
+
+ +
+
+by_active(active: bool) Optional[XAMusicAirPlayDevice][source]
+
+ +
+
+by_available(available: bool) Optional[XAMusicAirPlayDevice][source]
+
+ +
+
+by_kind(kind: DeviceKind) Optional[XAMusicAirPlayDevice][source]
+
+ +
+
+by_network_address(network_address: str) Optional[XAMusicAirPlayDevice][source]
+
+ +
+
+by_protected(protected: bool) Optional[XAMusicAirPlayDevice][source]
+
+ +
+
+by_selected(selected: bool) Optional[XAMusicAirPlayDevice][source]
+
+ +
+
+by_sound_volume(sound_volume: int) Optional[XAMusicAirPlayDevice][source]
+
+ +
+
+by_supports_audio(supports_audio: bool) Optional[XAMusicAirPlayDevice][source]
+
+ +
+
+by_supports_video(supports_video: bool) Optional[XAMusicAirPlayDevice][source]
+
+ +
+
+kind() list[PyXA.apps.Music.XAMusicApplication.DeviceKind][source]
+
+ +
+
+network_address() list[str][source]
+
+ +
+
+protected() list[bool][source]
+
+ +
+
+selected() list[bool][source]
+
+ +
+
+sound_volume() list[int][source]
+
+ +
+
+supports_audio() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicApplication(properties)[source]
+

Bases: XAMediaApplication

+

A class for managing and interacting with Music.app.

+
+

See also

+

XAMusicWindow, class:XAMusicSource, XAMusicPlaylist, XAMusicTrack

+
+
+

New in version 0.0.1.

+
+

Classes:

+ + + + + + + + + + + + + + + + + + +

DeviceKind(value[, names, module, qualname, ...])

Kinds of devices.

PrintSetting(value[, names, module, ...])

Options to use when printing.

RepeatMode(value[, names, module, qualname, ...])

Options for how to repeat playback.

ShuffleMode(value[, names, module, ...])

Options for how to shuffle playback.

iCloudStatus(value[, names, module, ...])

iCloud statuses of media items.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

add_to_playlist(urls, playlist)

airplay_devices([filter])

Returns a list of AirPlay devices, as PyXA objects, matching the given filter.

encoders([filter])

Returns a list of encoders, as PyXA objects, matching the given filter.

eq_presets([filter])

Returns a list of EQ presets, as PyXA objects, matching the given filter.

eq_windows([filter])

Returns a list of EQ windows, as PyXA objects, matching the given filter.

miniplayer_windows([filter])

Returns a list of miniplayer windows, as PyXA objects, matching the given filter.

tracks([filter])

Returns a list of tracks, as PyXA objects, matching the given filter.

visuals([filter])

Returns a list of visuals, as PyXA objects, matching the given filter.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

airplay_enabled

Whether AirPlay is currently enabled.

converting

Whether a track is currently being converted.

current_airplay_devices

The currently selected AirPlay devices.

current_encoder

The currently selected encoder.

current_eq_preset

The currently selected equalizer preset.

current_track

The currently playing (or paused but not stopped) track.

current_visual

The currently selected visual plug-in.

eq_enabled

Whether the equalizer is enabled.

shuffle_enabled

Whether songs are played in random order.

shuffle_mode

The playback shuffle mode.

song_repeat

The playback repeat mode.

visuals_enabled

Whether visuals are currently displayed.

+
+
+class DeviceKind(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Kinds of devices.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

AIRPLAY_DEVICE

An AirPlay-enabled device

AIRPORT_EXPRESS

An airport express device

APPLE_TV

An Apple TV device

BLUETOOTH_DEVICE

A BlueTooth-enabled device

COMPUTER

A computer device

HOMEPOD

A HomePod device

UNKNOWN

An unknown device

+
+
+AIRPLAY_DEVICE = 1799442511
+

An AirPlay-enabled device

+
+ +
+
+AIRPORT_EXPRESS = 1799442520
+

An airport express device

+
+ +
+
+APPLE_TV = 1799442516
+

An Apple TV device

+
+ +
+
+BLUETOOTH_DEVICE = 1799442498
+

A BlueTooth-enabled device

+
+ +
+
+COMPUTER = 1799442499
+

A computer device

+
+ +
+
+HOMEPOD = 1799442504
+

A HomePod device

+
+ +
+
+UNKNOWN = 1799442517
+

An unknown device

+
+ +
+ +
+
+class PrintSetting(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options to use when printing.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

ALBUM_LISTING

A listing of a playlist grouped by album

CD_INSERT

A printout of the playlist for jewel case inserts

DETAILED_ERROR_HANDLING

Print a detailed report of PostScript errors

STANDARD_ERROR_HANDLING

Standard PostScript error handling

TRACK_LISTING

A basic listing of tracks within a playlist

+
+
+ALBUM_LISTING = 1799449698
+

A listing of a playlist grouped by album

+
+ +
+
+CD_INSERT = 1799570537
+

A printout of the playlist for jewel case inserts

+
+ +
+
+DETAILED_ERROR_HANDLING = 1819763828
+

Print a detailed report of PostScript errors

+
+ +
+
+STANDARD_ERROR_HANDLING = 1819767668
+

Standard PostScript error handling

+
+ +
+
+TRACK_LISTING = 1800696427
+

A basic listing of tracks within a playlist

+
+ +
+ +
+
+class RepeatMode(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for how to repeat playback.

+

Attributes:

+ + + + + + + + + + + + +

ALL

All media items in the current playlist will be repeated

OFF

Playback does not repeat

ONE

The currently playing media item will be repeated

+
+
+ALL = 1799449708
+

All media items in the current playlist will be repeated

+
+ +
+
+OFF = 1800564815
+

Playback does not repeat

+
+ +
+
+ONE = 1800564785
+

The currently playing media item will be repeated

+
+ +
+ +
+
+class ShuffleMode(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for how to shuffle playback.

+

Attributes:

+ + + + + + + + + + + + +

ALBUMS

Shuffle by album

GROUPINGS

Shuffle by grouping

SONGS

Shuffle by song

+
+
+ALBUMS = 1800628289
+

Shuffle by album

+
+ +
+
+GROUPINGS = 1800628295
+

Shuffle by grouping

+
+ +
+
+SONGS = 1800628307
+

Shuffle by song

+
+ +
+ +
+
+add_to_playlist(urls: list[Union[str, objc.NSURL]], playlist)[source]
+
+ +
+
+airplay_devices(filter: Optional[dict] = None) XAMusicAirPlayDeviceList[source]
+

Returns a list of AirPlay devices, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned AirPlay devices will have, or None

+
+
Returns:
+

The list of devices

+
+
Return type:
+

XAMusicAirPlayDeviceList

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Music")
+>>> print(app.airplay_devices())
+<<class 'PyXA.apps.Music.XAMusicAirPlayDeviceList'>['ExampleUser\'s MacBook Pro']>
+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property airplay_enabled: bool
+

Whether AirPlay is currently enabled.

+
+ +
+
+property converting: bool
+

Whether a track is currently being converted.

+
+ +
+
+property current_airplay_devices: XAMusicAirPlayDeviceList
+

The currently selected AirPlay devices.

+
+ +
+
+property current_encoder: XAMusicEncoder
+

The currently selected encoder.

+
+ +
+
+property current_eq_preset: XAMusicEQPreset
+

The currently selected equalizer preset.

+
+ +
+
+property current_track: XAMusicTrack
+

The currently playing (or paused but not stopped) track.

+
+ +
+
+property current_visual: XAMusicVisual
+

The currently selected visual plug-in.

+
+ +
+
+encoders(filter: Optional[dict] = None) XAMusicEncoderList[source]
+

Returns a list of encoders, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned encoders will have, or None

+
+
Returns:
+

The list of encoders

+
+
Return type:
+

XAMusicEncoderList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property eq_enabled: bool
+

Whether the equalizer is enabled.

+
+ +
+
+eq_presets(filter: Optional[dict] = None) XAMusicEQPresetList[source]
+

Returns a list of EQ presets, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned EQ presets will have, or None

+
+
Returns:
+

The list of presets

+
+
Return type:
+

XAMusicEQPresetList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+eq_windows(filter: Optional[dict] = None) XAMusicEQWindowList[source]
+

Returns a list of EQ windows, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned EQ windows will have, or None

+
+
Returns:
+

The list of windows

+
+
Return type:
+

XAMusicEQWindowList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+class iCloudStatus(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

iCloud statuses of media items.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

DUPLICATE

A duplicate media item

ERROR

A media item unavailable due to an error

INELIGIBLE

A media item ineligible for listening

MATCHED

A matched media item

NOT_UPLOADED

A non-uploaded media item

NO_LONGER_AVAILABLE

A media item unavailable due to expiration

PURCHASED

A purchased media item

REMOVED

A removed media item

SUBSCRIPTION

A media item obtained via a subscription to Apple Music

UNKNOWN

Unknown cloud status

UPLOADED

An unloaded media item

+
+
+DUPLICATE = 1799648624
+

A duplicate media item

+
+ +
+
+ERROR = 1799713394
+

A media item unavailable due to an error

+
+ +
+
+INELIGIBLE = 1800562026
+

A media item ineligible for listening

+
+ +
+
+MATCHED = 1800233332
+

A matched media item

+
+ +
+
+NOT_UPLOADED = 1800761424
+

A non-uploaded media item

+
+ +
+
+NO_LONGER_AVAILABLE = 1800562038
+

A media item unavailable due to expiration

+
+ +
+
+PURCHASED = 1800435058
+

A purchased media item

+
+ +
+
+REMOVED = 1800562029
+

A removed media item

+
+ +
+
+SUBSCRIPTION = 1800631650
+

A media item obtained via a subscription to Apple Music

+
+ +
+
+UNKNOWN = 1800760939
+

Unknown cloud status

+
+ +
+
+UPLOADED = 1800761452
+

An unloaded media item

+
+ +
+ +
+
+miniplayer_windows(filter: Optional[dict] = None) XAMusicMiniplayerWindowList[source]
+

Returns a list of miniplayer windows, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned miniplayer windows will have, or None

+
+
Returns:
+

The list of windows

+
+
Return type:
+

XAMusicMiniplayWindowList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property shuffle_enabled: bool
+

Whether songs are played in random order.

+
+ +
+
+property shuffle_mode: ShuffleMode
+

The playback shuffle mode.

+
+ +
+
+property song_repeat: RepeatMode
+

The playback repeat mode.

+
+ +
+
+tracks(filter: Optional[dict] = None) XAMusicTrackList[source]
+

Returns a list of tracks, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned tracks will have, or None

+
+
Returns:
+

The list of tracks

+
+
Return type:
+

XAMusicTrackList

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+visuals(filter: Optional[dict] = None) XAMusicVisualList[source]
+

Returns a list of visuals, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned visuals will have, or None

+
+
Returns:
+

The list of visuals

+
+
Return type:
+

XAMusicVisualList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property visuals_enabled: bool
+

Whether visuals are currently displayed.

+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicAudioCDPlaylist(properties)[source]
+

Bases: XAMusicPlaylist

+

An audio CD playlist in Music.app.

+
+

See also

+

XAMusicLibraryPlaylist, XAMusicUserPlaylist

+
+
+

New in version 0.0.7.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

artist

The artist of the CD.

compilation

Whether the CD is a compilation album.

composer

The composer of the CD.

disc_count

The total number of discs in the CD's album.

disc_number

The index of the CD disc in the source album.

genre

The genre of the CD.

year

The year the album was recorded/released.

+

Methods:

+ + + + + + +

audio_cd_tracks([filter])

Returns a list of audio CD tracks, as PyXA objects, matching the given filter.

+
+
+property artist: str
+

The artist of the CD.

+
+ +
+
+audio_cd_tracks(filter: Optional[dict] = None) XAMusicAudioCDTrackList[source]
+

Returns a list of audio CD tracks, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned audio CD tracks will have, or None

+
+
Returns:
+

The list of audio CD tracks

+
+
Return type:
+

XAMusicAudioCDTrackList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property compilation: bool
+

Whether the CD is a compilation album.

+
+ +
+
+property composer: str
+

The composer of the CD.

+
+ +
+
+property disc_count: int
+

The total number of discs in the CD’s album.

+
+ +
+
+property disc_number: int
+

The index of the CD disc in the source album.

+
+ +
+
+property genre: str
+

The genre of the CD.

+
+ +
+
+property year: int
+

The year the album was recorded/released.

+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicAudioCDPlaylistList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMusicPlaylistList

+

A wrapper around lists of audio CD playlists that employs fast enumeration techniques.

+

All properties of audio CD playlists can be called as methods on the wrapped list, returning a list containing each playlist’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

artist()

by_artist(artist)

by_compilation(compilation)

by_composer(composer)

by_disc_count(disc_count)

by_disc_number(disc_number)

by_genre(genre)

by_year(year)

compilation()

composer()

disc_count()

disc_number()

genre()

year()

+
+
+artist() list[str][source]
+
+ +
+
+by_artist(artist: str) Optional[XAMusicAudioCDPlaylist][source]
+
+ +
+
+by_compilation(compilation: bool) Optional[XAMusicAudioCDPlaylist][source]
+
+ +
+
+by_composer(composer: str) Optional[XAMusicAudioCDPlaylist][source]
+
+ +
+
+by_disc_count(disc_count: int) Optional[XAMusicAudioCDPlaylist][source]
+
+ +
+
+by_disc_number(disc_number: int) Optional[XAMusicAudioCDPlaylist][source]
+
+ +
+
+by_genre(genre: str) Optional[XAMusicAudioCDPlaylist][source]
+
+ +
+
+by_year(year: int) Optional[XAMusicAudioCDPlaylist][source]
+
+ +
+
+compilation() list[bool][source]
+
+ +
+
+composer() list[str][source]
+
+ +
+
+disc_count() list[int][source]
+
+ +
+
+disc_number() list[int][source]
+
+ +
+
+genre() list[str][source]
+
+ +
+
+year() list[int][source]
+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicAudioCDTrack(properties)[source]
+

Bases: XAMusicTrack

+

An audio CD track in Music.app.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + +

location

The location of the file represented by the track.

+
+
+property location: XAPath
+

The location of the file represented by the track.

+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicAudioCDTrackList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMusicTrackList

+

A wrapper around lists of music audio CD tracks that employs fast enumeration techniques.

+

All properties of music audio CD tracks can be called as methods on the wrapped list, returning a list containing each track’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + +

by_location(location)

location()

+
+
+by_location(location: XAURL) Optional[XAMusicAudioCDTrack][source]
+
+ +
+
+location() list[PyXA.XABase.XAURL][source]
+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicEQPreset(properties)[source]
+

Bases: XAMediaItem

+

An equalizer preset in Music.app.

+
+

New in version 0.0.7.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

band1

The 32 Hz band level (-12.0 dB to +12.0 dB).

band10

The 16 kHz band level (-12.0 dB to +12.0 dB).

band2

The 64 Hz band level (-12.0 dB to +12.0 dB).

band3

The 125 HZ band level (-12.0 dB to +12.0 dB).

band4

The 250 Hz band level (-12.0 dB to +12.0 dB).

band5

The 500 Hz band level (-12.0 dB to +12.0 dB).

band6

The 1 kHz band level (-12.0 dB to +12.0 dB).

band7

The 2 kHz band level (-12.0 dB to +12.0 dB).

band8

The 4 kHz band level (-12.0 dB to +12.0 dB).

band9

The 8 kHz band level (-12.0 dB to +12.0 dB).

modifiable

Whether the preset can be modified.

preamp

The equalizer preamp level (-12.0 dB to +12.0 dB).

update_tracks

Whether tracks using the preset are updated when the preset is renamed or deleted.

+
+
+property band1: float
+

The 32 Hz band level (-12.0 dB to +12.0 dB).

+
+ +
+
+property band10: float
+

The 16 kHz band level (-12.0 dB to +12.0 dB).

+
+ +
+
+property band2: float
+

The 64 Hz band level (-12.0 dB to +12.0 dB).

+
+ +
+
+property band3: float
+

The 125 HZ band level (-12.0 dB to +12.0 dB).

+
+ +
+
+property band4: float
+

The 250 Hz band level (-12.0 dB to +12.0 dB).

+
+ +
+
+property band5: float
+

The 500 Hz band level (-12.0 dB to +12.0 dB).

+
+ +
+
+property band6: float
+

The 1 kHz band level (-12.0 dB to +12.0 dB).

+
+ +
+
+property band7: float
+

The 2 kHz band level (-12.0 dB to +12.0 dB).

+
+ +
+
+property band8: float
+

The 4 kHz band level (-12.0 dB to +12.0 dB).

+
+ +
+
+property band9: float
+

The 8 kHz band level (-12.0 dB to +12.0 dB).

+
+ +
+
+property modifiable: bool
+

Whether the preset can be modified.

+
+ +
+
+property preamp: float
+

The equalizer preamp level (-12.0 dB to +12.0 dB).

+
+ +
+
+property update_tracks: bool
+

Whether tracks using the preset are updated when the preset is renamed or deleted.

+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicEQPresetList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMediaItemList

+

A wrapper around lists of equalizer presets that employs fast enumeration techniques.

+

All properties of equalizer presets can be called as methods on the wrapped list, returning a list containing each preset’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

band1()

band10()

band2()

band3()

band4()

band5()

band6()

band7()

band8()

band9()

by_band1(band1)

by_band10(band10)

by_band2(band2)

by_band3(band3)

by_band4(band4)

by_band5(band5)

by_band6(band6)

by_band7(band7)

by_band8(band8)

by_band9(band9)

by_modifiable(modifiable)

by_preamp(preamp)

by_update_tracks(update_tracks)

modifiable()

preamp()

update_tracks()

+
+
+band1() list[float][source]
+
+ +
+
+band10() list[float][source]
+
+ +
+
+band2() list[float][source]
+
+ +
+
+band3() list[float][source]
+
+ +
+
+band4() list[float][source]
+
+ +
+
+band5() list[float][source]
+
+ +
+
+band6() list[float][source]
+
+ +
+
+band7() list[float][source]
+
+ +
+
+band8() list[float][source]
+
+ +
+
+band9() list[float][source]
+
+ +
+
+by_band1(band1: float) Optional[XAMusicEQPreset][source]
+
+ +
+
+by_band10(band10: float) Optional[XAMusicEQPreset][source]
+
+ +
+
+by_band2(band2: float) Optional[XAMusicEQPreset][source]
+
+ +
+
+by_band3(band3: float) Optional[XAMusicEQPreset][source]
+
+ +
+
+by_band4(band4: float) Optional[XAMusicEQPreset][source]
+
+ +
+
+by_band5(band5: float) Optional[XAMusicEQPreset][source]
+
+ +
+
+by_band6(band6: float) Optional[XAMusicEQPreset][source]
+
+ +
+
+by_band7(band7: float) Optional[XAMusicEQPreset][source]
+
+ +
+
+by_band8(band8: float) Optional[XAMusicEQPreset][source]
+
+ +
+
+by_band9(band9: float) Optional[XAMusicEQPreset][source]
+
+ +
+
+by_modifiable(modifiable: bool) Optional[XAMusicEQPreset][source]
+
+ +
+
+by_preamp(preamp: float) Optional[XAMusicEQPreset][source]
+
+ +
+
+by_update_tracks(update_tracks: bool) Optional[XAMusicEQPreset][source]
+
+ +
+
+modifiable() list[float][source]
+
+ +
+
+preamp() list[float][source]
+
+ +
+
+update_tracks() list[float][source]
+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicEQWindow(properties)[source]
+

Bases: XAMusicWindow

+

An equalizer window in Music.app.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.Music.XAMusicEQWindowList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMusicWindowList

+

A wrapper around lists of music equalizer windows that employs fast enumeration techniques.

+

All properties of music equalizer windows can be called as methods on the wrapped list, returning a list containing each windows’s value for the property.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.Music.XAMusicEncoder(properties)[source]
+

Bases: XAMediaItem

+

An encoder in Music.app.

+
+

New in version 0.0.7.

+
+

Attributes:

+ + + + + + +

format

The data format created by the encoder.

+
+
+property format: str
+

The data format created by the encoder.

+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicEncoderList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMediaItemList

+

A wrapper around lists of encoders that employs fast enumeration techniques.

+

All properties of encoders can be called as methods on the wrapped list, returning a list containing each encoders’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + +

by_format(format)

format()

+
+
+by_format(format: str) Optional[XAMusicEncoder][source]
+
+ +
+
+format() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicMiniplayerWindow(properties)[source]
+

Bases: XAMusicWindow

+

A miniplayer window in Music.app.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.Music.XAMusicMiniplayerWindowList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMusicWindowList

+

A wrapper around lists of music miniplayer windows that employs fast enumeration techniques.

+

All properties of music minipplayer windows can be called as methods on the wrapped list, returning a list containing each windows’s value for the property.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.Music.XAMusicPlaylist(properties)[source]
+

Bases: XAMediaPlaylist

+

A playlist in Music.app.

+
+

See also

+

XAMusicLibraryPlaylist, XAMusicUserPlaylist

+
+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + +

disliked

Whether the playlist is disliked.

loved

Whether the playlist is loved.

+

Methods:

+ + + + + + + + + +

search(query[, type])

tracks([filter])

Returns a list of tracks, as PyXA objects, matching the given filter.

+
+
+property disliked: bool
+

Whether the playlist is disliked.

+
+ +
+
+property loved: bool
+

Whether the playlist is loved.

+
+ +
+
+search(query: str, type: Literal['all', 'artists', 'albums', 'displayed', 'tracks'] = 'displayed')[source]
+
+ +
+
+tracks(filter: Optional[dict] = None) XAMusicTrackList[source]
+

Returns a list of tracks, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned tracks will have, or None

+
+
Returns:
+

The list of tracks

+
+
Return type:
+

XAMusicTrackList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicPlaylistList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAMediaPlaylistList

+

A wrapper around lists of playlists that employs fast enumeration techniques.

+

All properties of playlists can be called as methods on the wrapped list, returning a list containing each playlist’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + +

by_disliked(disliked)

by_loved(loved)

disliked()

loved()

+
+
+by_disliked(disliked: bool) Optional[XAMusicPlaylist][source]
+
+ +
+
+by_loved(loved: bool) Optional[XAMusicPlaylist][source]
+
+ +
+
+disliked() list[bool][source]
+
+ +
+
+loved() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicRadioTunerPlaylist(properties)[source]
+

Bases: XAMusicPlaylist

+

A radio playlist in Music.app.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + +

url_tracks([filter])

Returns a list of URL tracks, as PyXA objects, matching the given filter.

+
+
+url_tracks(filter: Optional[dict] = None) XAMediaURLTrackList[source]
+

Returns a list of URL tracks, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned URL tracks will have, or None

+
+
Returns:
+

The list of URL tracks

+
+
Return type:
+

MediaApplicationBase.XAMediaURLTrackList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicRadioTunerPlaylistList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMusicPlaylistList

+

A wrapper around lists of radio tuner playlists that employs fast enumeration techniques.

+

All properties of radio tuner playlists can be called as methods on the wrapped list, returning a list containing each playlist’s value for the property.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.Music.XAMusicSource(properties)[source]
+

Bases: XAMediaSource

+

A media source in Music.app.

+
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + + + + + + + +

audio_cd_playlists([filter])

Returns a list of audio CD playlists, as PyXA objects, matching the given filter.

radio_tuner_playlists([filter])

Returns a list of radio tuner playlists, as PyXA objects, matching the given filter.

subscription_playlists([filter])

Returns a list of subscription playlists, as PyXA objects, matching the given filter.

+
+
+audio_cd_playlists(filter: Optional[dict] = None) XAMusicAudioCDPlaylistList[source]
+

Returns a list of audio CD playlists, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned audio CD playlists will have, or None

+
+
Returns:
+

The list of audio CD playlists

+
+
Return type:
+

XAMusicAudioCDPlaylistList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+radio_tuner_playlists(filter: Optional[dict] = None) XAMusicRadioTunerPlaylistList[source]
+

Returns a list of radio tuner playlists, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned radio tuner playlists will have, or None

+
+
Returns:
+

The list of radio tuner playlists

+
+
Return type:
+

XAMusicRadioTunerPlaylistList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+subscription_playlists(filter: Optional[dict] = None) XAMusicSubscriptionPlaylistList[source]
+

Returns a list of subscription playlists, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned subscription playlists will have, or None

+
+
Returns:
+

The list of subscription playlists

+
+
Return type:
+

XAMusicSubscriptionPlaylistList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicSourceList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMediaSourceList

+

A wrapper around lists of sources that employs fast enumeration techniques.

+

All properties of sources can be called as methods on the wrapped list, returning a list containing each source’s value for the property.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.Music.XAMusicSubscriptionPlaylist(properties)[source]
+

Bases: XAMusicPlaylist

+

A subscription playlist from Apple Music in Music.app.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + +

file_tracks([filter])

Returns a list of file tracks, as PyXA objects, matching the given filter.

url_tracks([filter])

Returns a list of URL tracks, as PyXA objects, matching the given filter.

+
+
+file_tracks(filter: Optional[dict] = None) XAMediaFileTrackList[source]
+

Returns a list of file tracks, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned file tracks will have, or None

+
+
Returns:
+

The list of file tracks

+
+
Return type:
+

MediaApplicationBase.XAMediaFileTrackList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+url_tracks(filter: Optional[dict] = None) XAMediaURLTrackList[source]
+

Returns a list of URL tracks, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned URL tracks will have, or None

+
+
Returns:
+

The list of URL tracks

+
+
Return type:
+

MediaApplicationBase.XAMediaURLTrackList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicSubscriptionPlaylistList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMusicPlaylistList

+

A wrapper around lists of subscription playlists that employs fast enumeration techniques.

+

All properties of subscription playlists can be called as methods on the wrapped list, returning a list containing each playlist’s value for the property.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.Music.XAMusicTrack(properties)[source]
+

Bases: XAMediaTrack

+

A class for managing and interacting with tracks in Music.app.

+
+

See also

+

XAMusicSharedTrack, MediaApplicationBase.XAMediaFileTrack, XAMusicRemoteURLTrack

+
+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

album_artist

The album artist of the track.

album_disliked

Whether the album for the track is disliked.

album_loved

Whether the album for the track is loved.

artist

The artist/source of the track.

bpm

The tempo of the track in beats per minute.

cloud_status

The iCloud status of the track.

compilation

Whether the track is from a compilation album.

composer

The composer of the track.

disliked

Whether the track is disliked.

eq

The name of the EQ preset of the track.

gapless

Whether the track is a from a gapless album.

loved

Whether the track is loved.

lyrics

The lyrics of the track.

movement

The movement name of the track.

movement_count

The total number of movements in the work.

movement_number

The index of the movement in the work.

shufflable

Whether the track is included when shuffling.

sort_album_artist

The string used for this track when sorting by album artist.

sort_artist

The string used for this track when sorting by artist.

sort_composer

The string used for this track when sorting by composer.

work

The work name of the track.

+
+
+property album_artist: str
+

The album artist of the track.

+
+ +
+
+property album_disliked: bool
+

Whether the album for the track is disliked.

+
+ +
+
+property album_loved: bool
+

Whether the album for the track is loved.

+
+ +
+
+property artist: str
+

The artist/source of the track.

+
+ +
+
+property bpm: int
+

The tempo of the track in beats per minute.

+
+ +
+
+property cloud_status: iCloudStatus
+

The iCloud status of the track.

+
+ +
+
+property compilation: bool
+

Whether the track is from a compilation album.

+
+ +
+
+property composer: str
+

The composer of the track.

+
+ +
+
+property disliked: bool
+

Whether the track is disliked.

+
+ +
+
+property eq: str
+

The name of the EQ preset of the track.

+
+ +
+
+property gapless: bool
+

Whether the track is a from a gapless album.

+
+ +
+
+property loved: bool
+

Whether the track is loved.

+
+ +
+
+property lyrics: str
+

The lyrics of the track.

+
+ +
+
+property movement: str
+

The movement name of the track.

+
+ +
+
+property movement_count: int
+

The total number of movements in the work.

+
+ +
+
+property movement_number: int
+

The index of the movement in the work.

+
+ +
+
+property shufflable: bool
+

Whether the track is included when shuffling.

+
+ +
+
+property sort_album_artist: str
+

The string used for this track when sorting by album artist.

+
+ +
+
+property sort_artist: str
+

The string used for this track when sorting by artist.

+
+ +
+
+property sort_composer: str
+

The string used for this track when sorting by composer.

+
+ +
+
+property work: str
+

The work name of the track.

+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicTrackList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAMediaTrackList

+

A wrapper around lists of music tracks that employs fast enumeration techniques.

+

All properties of music tracks can be called as methods on the wrapped list, returning a list containing each track’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

album_artist()

album_disliked()

album_loved()

artist()

bpm()

by_album_artist(album_artist)

by_album_disliked(album_disliked)

by_album_loved(album_loved)

by_artist(artist)

by_bpm(bpm)

by_cloud_status(cloud_status)

by_compilation(compilation)

by_composer(composer)

by_disliked(disliked)

by_eq(eq)

by_gapless(gapless)

by_loved(loved)

by_lyrics(lyrics)

by_modification_date(modification_date)

by_movement(movement)

by_movement_count(movement_count)

by_movement_number(movement_number)

by_shufflable(shufflable)

by_sort_album_artist(sort_album_artist)

by_sort_artist(sort_artist)

by_sort_composer(sort_composer)

by_work(work)

cloud_status()

compilation()

composer()

disliked()

eq()

gapless()

loved()

lyrics()

movement()

movement_count()

movement_number()

shufflable()

sort_album_artist()

sort_artist()

sort_composer()

work()

+
+
+album_artist() list[str][source]
+
+ +
+
+album_disliked() list[bool][source]
+
+ +
+
+album_loved() list[bool][source]
+
+ +
+
+artist() list[str][source]
+
+ +
+
+bpm() list[int][source]
+
+ +
+
+by_album_artist(album_artist: str) Optional[XAMusicTrack][source]
+
+ +
+
+by_album_disliked(album_disliked: bool) Optional[XAMusicTrack][source]
+
+ +
+
+by_album_loved(album_loved: bool) Optional[XAMusicTrack][source]
+
+ +
+
+by_artist(artist: str) Optional[XAMusicTrack][source]
+
+ +
+
+by_bpm(bpm: int) Optional[XAMusicTrack][source]
+
+ +
+
+by_cloud_status(cloud_status: iCloudStatus) Optional[XAMusicTrack][source]
+
+ +
+
+by_compilation(compilation: bool) Optional[XAMusicTrack][source]
+
+ +
+
+by_composer(composer: str) Optional[XAMusicTrack][source]
+
+ +
+
+by_disliked(disliked: bool) Optional[XAMusicTrack][source]
+
+ +
+
+by_eq(eq: str) Optional[XAMusicTrack][source]
+
+ +
+
+by_gapless(gapless: bool) Optional[XAMusicTrack][source]
+
+ +
+
+by_loved(loved: bool) Optional[XAMusicTrack][source]
+
+ +
+
+by_lyrics(lyrics: str) Optional[XAMusicTrack][source]
+
+ +
+
+by_modification_date(modification_date: datetime) Optional[XAMusicTrack][source]
+
+ +
+
+by_movement(movement: str) Optional[XAMusicTrack][source]
+
+ +
+
+by_movement_count(movement_count: int) Optional[XAMusicTrack][source]
+
+ +
+
+by_movement_number(movement_number: int) Optional[XAMusicTrack][source]
+
+ +
+
+by_shufflable(shufflable: bool) Optional[XAMusicTrack][source]
+
+ +
+
+by_sort_album_artist(sort_album_artist: str) Optional[XAMusicTrack][source]
+
+ +
+
+by_sort_artist(sort_artist: str) Optional[XAMusicTrack][source]
+
+ +
+
+by_sort_composer(sort_composer: str) Optional[XAMusicTrack][source]
+
+ +
+
+by_work(work: str) Optional[XAMusicTrack][source]
+
+ +
+
+cloud_status() list[PyXA.apps.Music.XAMusicApplication.iCloudStatus][source]
+
+ +
+
+compilation() list[bool][source]
+
+ +
+
+composer() list[str][source]
+
+ +
+
+disliked() list[bool][source]
+
+ +
+
+eq() list[str][source]
+
+ +
+
+gapless() list[bool][source]
+
+ +
+
+loved() list[bool][source]
+
+ +
+
+lyrics() list[str][source]
+
+ +
+
+movement() list[str][source]
+
+ +
+
+movement_count() list[int][source]
+
+ +
+
+movement_number() list[int][source]
+
+ +
+
+shufflable() list[bool][source]
+
+ +
+
+sort_album_artist() list[str][source]
+
+ +
+
+sort_artist() list[str][source]
+
+ +
+
+sort_composer() list[str][source]
+
+ +
+
+work() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicUserPlaylist(properties)[source]
+

Bases: XAMusicPlaylist

+

A user-created playlist in Music.app.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + +

genius

Whether the playlist is a genius playlist.

+
+
+property genius: bool
+

Whether the playlist is a genius playlist.

+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicUserPlaylistList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMusicPlaylistList

+

A wrapper around lists of music user playlists that employs fast enumeration techniques.

+

All properties of music user playlists can be called as methods on the wrapped list, returning a list containing each playlist’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + +

by_genius(genius)

genius()

+
+
+by_genius(genius: bool) Optional[XAMusicUserPlaylist][source]
+
+ +
+
+genius() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Music.XAMusicVisual(properties)[source]
+

Bases: XAMusicPlaylist

+

A music visual in Music.app.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.Music.XAMusicVisualList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAMediaItemList

+

A wrapper around lists of music visuals that employs fast enumeration techniques.

+

All properties of music visuals can be called as methods on the wrapped list, returning a list containing each visual’s value for the property.

+
+

New in version 0.0.7.

+
+
+ +
+
+class PyXA.apps.Music.XAMusicWindow(properties)[source]
+

Bases: XAMediaWindow, XASBWindow

+

A windows of Music.app.

+
+

See also

+

XAMusicBrowserWindow, XAMusicPlaylistWindow, XAMusicVideoWindow

+
+
+

New in version 0.0.1.

+
+
+ +
+
+class PyXA.apps.Music.XAMusicWindowList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAMediaWindowList

+

A wrapper around lists of music windows that employs fast enumeration techniques.

+

All properties of music windows can be called as methods on the wrapped list, returning a list containing each windows’s value for the property.

+
+

New in version 0.0.7.

+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/notes.html b/docs/reference/apps/notes.html new file mode 100644 index 0000000..84490c4 --- /dev/null +++ b/docs/reference/apps/notes.html @@ -0,0 +1,2097 @@ + + + + + + + Notes Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Notes Module Reference

+
+

New in version 0.0.1.

+
+

Control the macOS Notes application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XANote(properties)

A class for interacting with notes in the Notes application.

XANoteAttachment(properties)

A class for interacting with attachments in the Notes application.

XANoteList(properties[, filter])

A wrapper around a list of notes.

XANotesAccount(properties)

A class for interacting with accounts in the Notes application.

XANotesAccountList(properties[, filter])

A wrapper around a list of accounts.

XANotesApplication(properties)

A class for interacting with Notes.app.

XANotesAttachmentList(properties[, filter])

A wrapper around a list of attachments.

XANotesDocument(properties)

A class for interacting with documents in Notes.app.

XANotesDocumentList(properties[, filter])

A wrapper around a list of documents.

XANotesFolder(properties)

A class for interacting with Notes folders and their contents.

XANotesFolderList(properties[, filter])

A wrapper around a list of Notes folders.

XANotesWindow(properties)

A window of Notes.app.

+
+
+class PyXA.apps.Notes.XANote(properties)[source]
+

Bases: XAObject, XAClipboardCodable, XAShowable, XADeletable

+

A class for interacting with notes in the Notes application.

+
+

See also

+

XANotesFolder

+
+
+

Changed in version 0.0.3: Added show() and show_separately()

+
+
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + +

attachments([filter])

Returns a list of attachments, as PyXA objects, matching the given filter.

get_clipboard_representation()

Gets a clipboard-codable representation of the note.

move_to(folder)

Moves the note to the specified folder.

show()

Shows the note in the main Notes window.

show_separately()

Shows the note in a separate window.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

body

The HTML content of the note.

container

The folder that the note is in.

creation_date

The date and time the note was created.

id

The unique identifier for the note.

modification_date

The date and time the note was last modified.

name

The name of the note (generally the first line of the body).

password_protected

Whether the note is password protected.

plaintext

The plaintext content of the note.

shared

Whether the note is shared.

+
+
+attachments(filter: Optional[dict] = None) XANotesAttachmentList[source]
+

Returns a list of attachments, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter attachments by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of attachments

+
+
Return type:
+

XANotesAttachmentList

+
+
Example 1:
+

List all attachments of a note

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> note = app.notes()[-4]
+>>> print(note.attachments())
+<<class 'PyXA.apps.Notes.XANotesAttachmentList'>[('Example.pdf, 'x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICAttachment/p526')]>
+
+
+
+
Example 2:
+

Save the attachments of a note to the Downloads folder

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> note = app.notes()[0]
+>>> print(note.attachments().save("/Users/exampleuser/Downloads/"))
+
+
+
+

Changed in version 0.0.3: Now returns an object of XANotesAttachmentList instead of a default list.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property body: str
+

The HTML content of the note.

+
+ +
+
+property container: XANotesFolder
+

The folder that the note is in.

+
+ +
+
+property creation_date: datetime
+

The date and time the note was created.

+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the note.

+

When the clipboard content is set to a note, the plaintext representation of the note is added to the clipboard.

+
+
Returns:
+

The plaintext representation of the note

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: str
+

The unique identifier for the note.

+
+ +
+
+property modification_date: datetime
+

The date and time the note was last modified.

+
+ +
+
+move_to(folder: XANotesFolder) XANote[source]
+

Moves the note to the specified folder.

+
+
Parameters:
+

folder (XANotesFolder) – The folder to move the note to

+
+
Returns:
+

A reference to the note object

+
+
Return type:
+

XANote

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+property name: str
+

The name of the note (generally the first line of the body).

+
+ +
+
+property password_protected: bool
+

Whether the note is password protected.

+
+ +
+
+property plaintext: str
+

The plaintext content of the note.

+
+ +
+
+property shared: bool
+

Whether the note is shared.

+
+ +
+
+show() XANote[source]
+

Shows the note in the main Notes window.

+
+
Returns:
+

A reference to the note object

+
+
Return type:
+

XANote

+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+show_separately() XANote[source]
+

Shows the note in a separate window.

+
+
Returns:
+

A reference to the note object

+
+
Return type:
+

XANote

+
+
+
+

New in version 0.0.3.

+
+
+ +
+ +
+
+class PyXA.apps.Notes.XANoteAttachment(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for interacting with attachments in the Notes application.

+
+

Changed in version 0.0.3: Added show() and show_separately()

+
+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

container

The note containing the attachment.

content_identifier

The content ID of the attachment in the note's HTML.

creation_date

The date the attachment was created.

id

The unique identifier for the attachment.

modification_date

The date the attachment was last modified.

name

The name of the attachment.

shared

Whether the attachment is shared.

url

The URL that the attachment represents, if any.

+

Methods:

+ + + + + + + + + + + + + + + + + + +

delete()

Permanently deletes the attachment.

get_clipboard_representation()

Gets a clipboard-codable representation of the attachment.

save(directory)

Saves the attachment to the specified directory.

show()

Shows the attachment in the main Notes window.

show_separately()

Shows the attachment in a separate window.

+
+
+property container: XANote
+

The note containing the attachment.

+
+ +
+
+property content_identifier: str
+

The content ID of the attachment in the note’s HTML.

+
+ +
+
+property creation_date: datetime
+

The date the attachment was created.

+
+ +
+
+delete()[source]
+

Permanently deletes the attachment.

+
+

New in version 0.0.4.

+
+
+ +
+
+get_clipboard_representation() Union[str, list[Union[objc.NSURL, str]]][source]
+

Gets a clipboard-codable representation of the attachment.

+

When the clipboard content is set to an attachment, the URL of the attachment (if one exists) and the attachment’s name are added to the clipboard.

+
+
Returns:
+

The URL and name of the attachment, or just the name of the attachment

+
+
Return type:
+

list[Union[AppKit.NSURL, str]]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: str
+

The unique identifier for the attachment.

+
+ +
+
+property modification_date: datetime
+

The date the attachment was last modified.

+
+ +
+
+property name: str
+

The name of the attachment.

+
+ +
+
+save(directory: str) XANoteAttachment[source]
+

Saves the attachment to the specified directory.

+
+
Parameters:
+

directory (str) – The directory to store the saved attachment in

+
+
Returns:
+

A reference to the attachment object

+
+
Return type:
+

XANoteAttachment

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+property shared: bool
+

Whether the attachment is shared.

+
+ +
+
+show() XANoteAttachment[source]
+

Shows the attachment in the main Notes window.

+
+
Returns:
+

A reference to the attachment object

+
+
Return type:
+

XANoteAttachment

+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+show_separately() XANoteAttachment[source]
+

Shows the attachment in a separate window.

+
+
Returns:
+

A reference to the attachment object

+
+
Return type:
+

XANoteAttachment

+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+property url: Optional[XAURL]
+

The URL that the attachment represents, if any.

+
+ +
+ +
+
+class PyXA.apps.Notes.XANoteList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around a list of notes.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

attachments()

body()

by_body(body)

by_container(container)

by_creation_date(creation_date)

by_id(id)

by_modification_date(modification_date)

by_name(name)

by_password_protected(password_protected)

by_plaintext(plaintext)

by_shared(shared)

container()

creation_date()

get_clipboard_representation()

Gets a clipboard-codable representation of each note in the list.

id()

modification_date()

name()

password_protected()

plaintext()

shared()

show_separately()

Shows each note in the list in a separate window.

+
+
+attachments() XANotesAttachmentList[source]
+
+ +
+
+body() list[str][source]
+
+ +
+
+by_body(body: str) XANote[source]
+
+ +
+
+by_container(container: XANotesFolder) XANote[source]
+
+ +
+
+by_creation_date(creation_date: datetime) XANote[source]
+
+ +
+
+by_id(id: str) XANote[source]
+
+ +
+
+by_modification_date(modification_date: datetime) XANote[source]
+
+ +
+
+by_name(name: str) XANote[source]
+
+ +
+
+by_password_protected(password_protected: bool) XANote[source]
+
+ +
+
+by_plaintext(plaintext: str) XANote[source]
+
+ +
+
+by_shared(shared: bool) XANote[source]
+
+ +
+
+container() XANotesFolderList[source]
+
+ +
+
+creation_date() list[datetime.datetime][source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each note in the list.

+

When the clipboard content is set to a list of notes, the plaintext of each note is added to the clipboard.

+
+
Returns:
+

A list of note plaintext representations

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+id() list[str][source]
+
+ +
+
+modification_date() list[datetime.datetime][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+password_protected() list[bool][source]
+
+ +
+
+plaintext() list[str][source]
+
+ +
+
+shared() list[bool][source]
+
+ +
+
+show_separately() XANoteList[source]
+

Shows each note in the list in a separate window.

+
+
Example 1:
+

Show the currently selected notes in separate windows

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> notes = app.selection.show_separately()
+
+
+
+

New in version 0.0.4.

+
+
+ +
+ +
+
+class PyXA.apps.Notes.XANotesAccount(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for interacting with accounts in the Notes application.

+
+

Changed in version 0.0.3: Added show()

+
+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

default_folder

The default folder for creating new notes.

id

The unique identifier of the account.

name

The name of the account.

upgraded

Whether the account is upgraded.

+

Methods:

+ + + + + + + + + + + + + + + +

folders([filter])

Returns a list of folders, as PyXA objects, matching the given filter.

get_clipboard_representation()

Gets a clipboard-codable representation of the account.

notes([filter])

Returns a list of notes, as PyXA objects, matching the given filter.

show()

Shows the first folder belonging to the account.

+
+
+property default_folder: XANotesFolder
+

The default folder for creating new notes.

+
+ +
+
+folders(filter: Optional[dict] = None) XANotesFolderList[source]
+

Returns a list of folders, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter folders by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of folders

+
+
Return type:
+

XANotesFolderList

+
+
Example 1:
+

List all folders belonging to an account

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> account = app.accounts()[0]
+>>> print(account.folders())
+<<class 'PyXA.apps.Notes.XANotesFolderList'>[('Imported Notes', 'x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICFolder/p3104'), ('Notes', 'x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICFolder/p3123'), ...]>
+
+
+
+

Changed in version 0.0.3: Now returns an object of XANotesFolderList instead of a default list.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the account.

+

When the clipboard content is set to an account, the account’s name are added to the clipboard.

+
+
Returns:
+

The name of the account

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: str
+

The unique identifier of the account.

+
+ +
+
+property name: str
+

The name of the account.

+
+ +
+
+notes(filter: Optional[dict] = None) XANoteList[source]
+

Returns a list of notes, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter notes by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of notes

+
+
Return type:
+

XANoteList

+
+
Example 1:
+

List all notes belonging to an account

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> account = app.accounts()[0]
+>>> print(account.notes())
+<<class 'PyXA.apps.Notes.XANoteList'>[('PyXA Stuff', 'x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICNote/p3380'), ('Important Note', 'x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICNote/p614'), ...]>
+
+
+
+

Changed in version 0.0.3: Now returns an object of XANoteList instead of a default list.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+show() XANotesAccount[source]
+

Shows the first folder belonging to the account.

+
+
Returns:
+

A reference to the account object

+
+
Return type:
+

XANotesAccount

+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+property upgraded: bool
+

Whether the account is upgraded.

+
+ +
+ +
+
+class PyXA.apps.Notes.XANotesAccountList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around a list of accounts.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_default_folder(default_folder)

by_id(id)

by_name(name)

by_upgraded(upgraded)

default_folder()

folders()

get_clipboard_representation()

Gets a clipboard-codable representation of each account in the list.

id()

name()

notes()

upgraded()

+
+
+by_default_folder(default_folder: XANotesFolder) XANotesAccount[source]
+
+ +
+
+by_id(id: str) XANotesAccount[source]
+
+ +
+
+by_name(name: str) XANotesAccount[source]
+
+ +
+
+by_upgraded(upgraded: bool) XANotesAccount[source]
+
+ +
+
+default_folder() XANotesFolderList[source]
+
+ +
+
+folders() XANotesFolderList[source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each account in the list.

+

When the clipboard content is set to a list of accounts, the name of each account is added to the clipboard.

+
+
Returns:
+

A list of account names

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+notes() XANoteList[source]
+
+ +
+
+upgraded() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Notes.XANotesApplication(properties)[source]
+

Bases: XASBApplication, XACanOpenPath, XACanPrintPath

+

A class for interacting with Notes.app.

+ +
+

Changed in version 0.0.3: Added accounts(), attachments(), and related methods

+
+
+

New in version 0.0.1.

+
+

Classes:

+ + + + + + +

FileFormat(value[, names, module, qualname, ...])

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

accounts([filter])

Returns a list of Notes accounts, as PyXA objects, matching the given filter.

attachments([filter])

Returns a list of attachments, as PyXA objects, matching the given filter.

documents([filter])

Returns a list of documents, as PyXA objects, matching the given filter.

folders([filter])

Returns a list of Notes folders, as PyXA objects, matching the given filter.

make(specifier[, properties, data])

Creates a new element of the given specifier class without adding it to any list.

new_folder([name, account])

Creates a new Notes folder with the given name.

new_note([name, body, folder])

Creates a new note with the given name and body text in the given folder.

notes([filter])

Returns a list of notes, as PyXA objects, matching the given filter.

open(file_ref)

Opens the file/website at the given filepath/URL.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

default_account

The account that new notes are created in by default.

frontmost

Whether Notes is the active application.

name

The name of the application.

selection

A list of currently selected notes.

version

The version number of Notes.app.

+
+
+class FileFormat(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Attributes:

+ + + + + + +

NATIVE

The native Notes format

+
+
+NATIVE = 1769235821
+

The native Notes format

+
+ +
+ +
+
+accounts(filter: Optional[dict] = None) XANotesAccountList[source]
+

Returns a list of Notes accounts, as PyXA objects, matching the given filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+attachments(filter: Optional[dict] = None) XANotesAttachmentList[source]
+

Returns a list of attachments, as PyXA objects, matching the given filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+property default_account: XANotesAccount
+

The account that new notes are created in by default.

+
+ +
+
+documents(filter: Optional[dict] = None) XANotesDocumentList[source]
+

Returns a list of documents, as PyXA objects, matching the given filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+folders(filter: Optional[dict] = None) XANotesFolderList[source]
+

Returns a list of Notes folders, as PyXA objects, matching the given filter.

+
+
Example 1:
+

Retrieve the name of each folder

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> print(app.folders().name())
+['ExampleFolder1', 'ExampleFolder2', 'ExampleFolder3', ...]
+
+
+
+

Changed in version 0.0.3: Now returns an object of XANotesFolderList instead of a default list.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property frontmost: bool
+

Whether Notes is the active application.

+
+ +
+
+make(specifier: str, properties: Optional[dict] = None, data: Optional[Union[XAPath, str]] = None)[source]
+

Creates a new element of the given specifier class without adding it to any list.

+

Use XABase.XAList.push() to push the element onto a list.

+
+
Parameters:
+
    +
  • specifier (str) – The classname of the object to create

  • +
  • properties (dict) – The properties to give the object

  • +
+
+
Returns:
+

A PyXA wrapped form of the object

+
+
Return type:
+

XABase.XAObject

+
+
Example 1:
+

Make a new folder and add a new note to that folder

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> new_folder = app.make("folder", {"name": "Example Folder"})
+>>> new_note = app.make("note", {"name": "Example Note"})
+>>> app.folders().push(new_folder)
+>>> new_folder.notes().push(new_note)
+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+new_folder(name: str = 'New Folder', account: XANotesAccount = None) XANotesFolder[source]
+

Creates a new Notes folder with the given name.

+
+
Parameters:
+

name (str, optional) – The name of the folder, defaults to “New Folder”

+
+
Returns:
+

A reference to the newly created folder.

+
+
Return type:
+

XANote

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> folder = app.new_folder("PyXA Notes Folder")
+>>> print(folder)
+<<class 'PyXA.apps.Notes.XANotesFolder'>PyXA Notes Folder, x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICFolder/p3389>
+
+
+
+

See also

+

XANotesFolder, new_note()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+new_note(name='New Note', body='', folder: XANotesFolder = None) XANote[source]
+

Creates a new note with the given name and body text in the given folder. +If no folder is provided, the note is created in the default Notes folder.

+
+
Parameters:
+
    +
  • name (str, optional) – The name of the note, defaults to “New Note”

  • +
  • body (str, optional) – The initial body text of the note, defaults to “”

  • +
  • folder (XANotesFolder, optional) – The folder to create the new note in, defaults to None

  • +
+
+
Returns:
+

A reference to the newly created note.

+
+
Return type:
+

XANote

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> note = app.new_note("PyXA Notes", "Example text of new note.")
+>>> print(note)
+<<class 'PyXA.apps.Notes.XANote'>PyXA Notes, x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICNote/p3388>
+
+
+
+

See also

+

XANote, new_folder()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+notes(filter: Optional[dict] = None) XANoteList[source]
+

Returns a list of notes, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter notes by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of notes

+
+
Return type:
+

XANoteList

+
+
Example 1:
+

Retrieve the name of each note

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> print(app.notes().name())
+['ExampleName1', 'ExampleName2', 'ExampleName3', ...]
+
+
+
+
Example 2:
+

Retrieve notes by using a filter

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> print(app.notes().containing("name", "fancy"))
+[('ExampleName1', 'x-coredata://213D109C-B439-42A0-96EC-380DE31393E2/ICNote/p2964'), ('ExampleName11', 'x-coredata://213D109C-B439-42A0-96EC-380DE31393E2/ICNote/p2963'), ...]
+
+
+
+
Example 3:
+

Iterate over each note

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> for note in app.notes():
+>>>     print(note.name)
+ExampleName1
+ExampleName2
+ExampleName3
+...
+
+
+
+

Changed in version 0.0.3: Now returns an object of XANoteList instead of a default list.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+open(file_ref: Union[XAPath, str]) XANote[source]
+

Opens the file/website at the given filepath/URL.

+

Child classes of XACanOpenPath should redefine this method as necessary.

+
+
Parameters:
+

target (str) – The path to a file or the URL to a website to open.

+
+
Returns:
+

A reference to the opened document or element, or None if no document/element was created or it cannot be found

+
+
Return type:
+

Any

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property selection: XANoteList
+

A list of currently selected notes.

+
+ +
+
+property version: str
+

The version number of Notes.app.

+
+ +
+ +
+
+class PyXA.apps.Notes.XANotesAttachmentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around a list of attachments.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_container(container)

by_content_identifier(content_identifier)

by_creation_date(creation_date)

by_id(id)

by_modification_date(modification_date)

by_name(name)

by_shared(shared)

by_url(url)

container()

content_identifier()

creation_date()

id()

modification_date()

name()

save(directory)

Saves all attachments in the list in the specified directory.

shared()

url()

+
+
+by_container(container: XANote) Optional[XANoteAttachment][source]
+
+ +
+
+by_content_identifier(content_identifier: str) Optional[XANoteAttachment][source]
+
+ +
+
+by_creation_date(creation_date: datetime) XANoteAttachment[source]
+
+ +
+
+by_id(id: str) Optional[XANoteAttachment][source]
+
+ +
+
+by_modification_date(modification_date: datetime) Optional[XANoteAttachment][source]
+
+ +
+
+by_name(name: str) Optional[XANoteAttachment][source]
+
+ +
+
+by_shared(shared: bool) Optional[XANoteAttachment][source]
+
+ +
+
+by_url(url: Union[str, XAURL]) Optional[XANoteAttachment][source]
+
+ +
+
+container() XANoteList[source]
+
+ +
+
+content_identifier() list[str][source]
+
+ +
+
+creation_date() list[datetime.datetime][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+modification_date() list[datetime.datetime][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+save(directory: str) XANotesAttachmentList[source]
+

Saves all attachments in the list in the specified directory.

+
+
Parameters:
+

directory (str) – The directory to store the saved attachments in

+
+
Returns:
+

A reference to the attachment list object

+
+
Return type:
+

XANotesAttachmentList

+
+
Example 1:
+

Save the attachments in currently selected notes to the downloads folder

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> app.selection.attachments().save("/Users/exampleuser/Downloads/")
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+shared() list[bool][source]
+
+ +
+
+url() list[PyXA.XABase.XAURL][source]
+
+ +
+ +
+
+class PyXA.apps.Notes.XANotesDocument(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for interacting with documents in Notes.app.

+
+

New in version 0.0.3.

+
+

Attributes:

+ + + + + + + + + + + + +

file

The location of the document on the disk, if one exists.

modified

Whether the document has been modified since the last save.

name

The name of the document.

+

Methods:

+ + + + + + +

get_clipboard_representation()

Gets a clipboard-codable representation of the document.

+
+
+property file: str
+

The location of the document on the disk, if one exists.

+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the document.

+

When the clipboard content is set to a document, the document’s name is added to the clipboard.

+
+
Returns:
+

The name of the document

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property modified: bool
+

Whether the document has been modified since the last save.

+
+ +
+
+property name: str
+

The name of the document.

+
+ +
+ +
+
+class PyXA.apps.Notes.XANotesDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around a list of documents.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + +

by_file(file)

by_modified(modified)

by_name(name)

file()

get_clipboard_representation()

Gets a clipboard-codable representation of each document in the list.

modified()

name()

+
+
+by_file(file: str) XANotesDocument[source]
+
+ +
+
+by_modified(modified: bool) XANotesDocument[source]
+
+ +
+
+by_name(name: str) XANotesDocument[source]
+
+ +
+
+file() list[str][source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each document in the list.

+

When the clipboard content is set to a list of documents, the name of each document is added to the clipboard.

+
+
Returns:
+

A list of document names

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+modified() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Notes.XANotesFolder(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for interacting with Notes folders and their contents.

+
+

See also

+

class:XANote

+
+
+

Changed in version 0.0.3: Added show()

+
+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

container

The account the folder belongs to.

id

The unique identifier for the folder.

name

The name of the folder.

shared

Whether the folder is shared.

+

Methods:

+ + + + + + + + + + + + + + + +

delete()

Permanently deletes the folder.

get_clipboard_representation()

Gets a clipboard-codable representation of the folder.

notes([filter])

Returns a list of notes, as PyXA objects, matching the given filter.

show()

Shows the folder in the main Notes window.

+
+
+property container: XANotesAccount
+

The account the folder belongs to.

+
+ +
+
+delete()[source]
+

Permanently deletes the folder.

+
+

New in version 0.0.4.

+
+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the folder.

+

When the clipboard content is set to a notes folder, the name of the folder is added to the clipboard.

+
+
Returns:
+

The name of the notes folder

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: str
+

The unique identifier for the folder.

+
+ +
+
+property name: str
+

The name of the folder.

+
+ +
+
+notes(filter: Optional[dict] = None) XANoteList[source]
+

Returns a list of notes, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter notes by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of notes

+
+
Return type:
+

XANoteList

+
+
+
+

Changed in version 0.0.3: Now returns an object of XANoteList instead of a default list.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property shared: bool
+

Whether the folder is shared.

+
+ +
+
+show() XANotesFolder[source]
+

Shows the folder in the main Notes window.

+
+

New in version 0.0.3.

+
+
+ +
+ +
+
+class PyXA.apps.Notes.XANotesFolderList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around a list of Notes folders.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_container(container)

by_id(id)

by_name(name)

by_shared(shared)

container()

folders()

get_clipboard_representation()

Gets a clipboard-codable representation of each folder in the list.

id()

name()

notes()

shared()

+
+
+by_container(container: XANotesAccount) XANotesFolder[source]
+
+ +
+
+by_id(id: str) XANotesFolder[source]
+
+ +
+
+by_name(name: str) XANotesFolder[source]
+
+ +
+
+by_shared(shared: bool) XANotesFolder[source]
+
+ +
+
+container() XANotesAccountList[source]
+
+ +
+
+folders() XANotesFolderList[source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each folder in the list.

+

When the clipboard content is set to a list of folders, the name of each folder is added to the clipboard.

+
+
Returns:
+

A list of folder names

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+notes() XANoteList[source]
+
+ +
+
+shared() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Notes.XANotesWindow(properties)[source]
+

Bases: XASBWindow

+

A window of Notes.app.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + +

document

The active document.

+
+
+property document: XANotesDocument
+

The active document.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/numbers.html b/docs/reference/apps/numbers.html new file mode 100644 index 0000000..78c36f5 --- /dev/null +++ b/docs/reference/apps/numbers.html @@ -0,0 +1,2097 @@ + + + + + + + Numbers Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Numbers Module Reference

+
+

New in version 0.0.1.

+
+

Control the macOS Notes application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XANote(properties)

A class for interacting with notes in the Notes application.

XANoteAttachment(properties)

A class for interacting with attachments in the Notes application.

XANoteList(properties[, filter])

A wrapper around a list of notes.

XANotesAccount(properties)

A class for interacting with accounts in the Notes application.

XANotesAccountList(properties[, filter])

A wrapper around a list of accounts.

XANotesApplication(properties)

A class for interacting with Notes.app.

XANotesAttachmentList(properties[, filter])

A wrapper around a list of attachments.

XANotesDocument(properties)

A class for interacting with documents in Notes.app.

XANotesDocumentList(properties[, filter])

A wrapper around a list of documents.

XANotesFolder(properties)

A class for interacting with Notes folders and their contents.

XANotesFolderList(properties[, filter])

A wrapper around a list of Notes folders.

XANotesWindow(properties)

A window of Notes.app.

+
+
+class PyXA.apps.Notes.XANote(properties)[source]
+

Bases: XAObject, XAClipboardCodable, XAShowable, XADeletable

+

A class for interacting with notes in the Notes application.

+
+

See also

+

XANotesFolder

+
+
+

Changed in version 0.0.3: Added show() and show_separately()

+
+
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + +

attachments([filter])

Returns a list of attachments, as PyXA objects, matching the given filter.

get_clipboard_representation()

Gets a clipboard-codable representation of the note.

move_to(folder)

Moves the note to the specified folder.

show()

Shows the note in the main Notes window.

show_separately()

Shows the note in a separate window.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

body

The HTML content of the note.

container

The folder that the note is in.

creation_date

The date and time the note was created.

id

The unique identifier for the note.

modification_date

The date and time the note was last modified.

name

The name of the note (generally the first line of the body).

password_protected

Whether the note is password protected.

plaintext

The plaintext content of the note.

shared

Whether the note is shared.

+
+
+attachments(filter: Optional[dict] = None) XANotesAttachmentList[source]
+

Returns a list of attachments, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter attachments by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of attachments

+
+
Return type:
+

XANotesAttachmentList

+
+
Example 1:
+

List all attachments of a note

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> note = app.notes()[-4]
+>>> print(note.attachments())
+<<class 'PyXA.apps.Notes.XANotesAttachmentList'>[('Example.pdf, 'x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICAttachment/p526')]>
+
+
+
+
Example 2:
+

Save the attachments of a note to the Downloads folder

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> note = app.notes()[0]
+>>> print(note.attachments().save("/Users/exampleuser/Downloads/"))
+
+
+
+

Changed in version 0.0.3: Now returns an object of XANotesAttachmentList instead of a default list.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property body: str
+

The HTML content of the note.

+
+ +
+
+property container: XANotesFolder
+

The folder that the note is in.

+
+ +
+
+property creation_date: datetime
+

The date and time the note was created.

+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the note.

+

When the clipboard content is set to a note, the plaintext representation of the note is added to the clipboard.

+
+
Returns:
+

The plaintext representation of the note

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: str
+

The unique identifier for the note.

+
+ +
+
+property modification_date: datetime
+

The date and time the note was last modified.

+
+ +
+
+move_to(folder: XANotesFolder) XANote[source]
+

Moves the note to the specified folder.

+
+
Parameters:
+

folder (XANotesFolder) – The folder to move the note to

+
+
Returns:
+

A reference to the note object

+
+
Return type:
+

XANote

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+property name: str
+

The name of the note (generally the first line of the body).

+
+ +
+
+property password_protected: bool
+

Whether the note is password protected.

+
+ +
+
+property plaintext: str
+

The plaintext content of the note.

+
+ +
+
+property shared: bool
+

Whether the note is shared.

+
+ +
+
+show() XANote[source]
+

Shows the note in the main Notes window.

+
+
Returns:
+

A reference to the note object

+
+
Return type:
+

XANote

+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+show_separately() XANote[source]
+

Shows the note in a separate window.

+
+
Returns:
+

A reference to the note object

+
+
Return type:
+

XANote

+
+
+
+

New in version 0.0.3.

+
+
+ +
+ +
+
+class PyXA.apps.Notes.XANoteAttachment(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for interacting with attachments in the Notes application.

+
+

Changed in version 0.0.3: Added show() and show_separately()

+
+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

container

The note containing the attachment.

content_identifier

The content ID of the attachment in the note's HTML.

creation_date

The date the attachment was created.

id

The unique identifier for the attachment.

modification_date

The date the attachment was last modified.

name

The name of the attachment.

shared

Whether the attachment is shared.

url

The URL that the attachment represents, if any.

+

Methods:

+ + + + + + + + + + + + + + + + + + +

delete()

Permanently deletes the attachment.

get_clipboard_representation()

Gets a clipboard-codable representation of the attachment.

save(directory)

Saves the attachment to the specified directory.

show()

Shows the attachment in the main Notes window.

show_separately()

Shows the attachment in a separate window.

+
+
+property container: XANote
+

The note containing the attachment.

+
+ +
+
+property content_identifier: str
+

The content ID of the attachment in the note’s HTML.

+
+ +
+
+property creation_date: datetime
+

The date the attachment was created.

+
+ +
+
+delete()[source]
+

Permanently deletes the attachment.

+
+

New in version 0.0.4.

+
+
+ +
+
+get_clipboard_representation() Union[str, list[Union[objc.NSURL, str]]][source]
+

Gets a clipboard-codable representation of the attachment.

+

When the clipboard content is set to an attachment, the URL of the attachment (if one exists) and the attachment’s name are added to the clipboard.

+
+
Returns:
+

The URL and name of the attachment, or just the name of the attachment

+
+
Return type:
+

list[Union[AppKit.NSURL, str]]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: str
+

The unique identifier for the attachment.

+
+ +
+
+property modification_date: datetime
+

The date the attachment was last modified.

+
+ +
+
+property name: str
+

The name of the attachment.

+
+ +
+
+save(directory: str) XANoteAttachment[source]
+

Saves the attachment to the specified directory.

+
+
Parameters:
+

directory (str) – The directory to store the saved attachment in

+
+
Returns:
+

A reference to the attachment object

+
+
Return type:
+

XANoteAttachment

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+property shared: bool
+

Whether the attachment is shared.

+
+ +
+
+show() XANoteAttachment[source]
+

Shows the attachment in the main Notes window.

+
+
Returns:
+

A reference to the attachment object

+
+
Return type:
+

XANoteAttachment

+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+show_separately() XANoteAttachment[source]
+

Shows the attachment in a separate window.

+
+
Returns:
+

A reference to the attachment object

+
+
Return type:
+

XANoteAttachment

+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+property url: Optional[XAURL]
+

The URL that the attachment represents, if any.

+
+ +
+ +
+
+class PyXA.apps.Notes.XANoteList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around a list of notes.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

attachments()

body()

by_body(body)

by_container(container)

by_creation_date(creation_date)

by_id(id)

by_modification_date(modification_date)

by_name(name)

by_password_protected(password_protected)

by_plaintext(plaintext)

by_shared(shared)

container()

creation_date()

get_clipboard_representation()

Gets a clipboard-codable representation of each note in the list.

id()

modification_date()

name()

password_protected()

plaintext()

shared()

show_separately()

Shows each note in the list in a separate window.

+
+
+attachments() XANotesAttachmentList[source]
+
+ +
+
+body() list[str][source]
+
+ +
+
+by_body(body: str) XANote[source]
+
+ +
+
+by_container(container: XANotesFolder) XANote[source]
+
+ +
+
+by_creation_date(creation_date: datetime) XANote[source]
+
+ +
+
+by_id(id: str) XANote[source]
+
+ +
+
+by_modification_date(modification_date: datetime) XANote[source]
+
+ +
+
+by_name(name: str) XANote[source]
+
+ +
+
+by_password_protected(password_protected: bool) XANote[source]
+
+ +
+
+by_plaintext(plaintext: str) XANote[source]
+
+ +
+
+by_shared(shared: bool) XANote[source]
+
+ +
+
+container() XANotesFolderList[source]
+
+ +
+
+creation_date() list[datetime.datetime][source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each note in the list.

+

When the clipboard content is set to a list of notes, the plaintext of each note is added to the clipboard.

+
+
Returns:
+

A list of note plaintext representations

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+id() list[str][source]
+
+ +
+
+modification_date() list[datetime.datetime][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+password_protected() list[bool][source]
+
+ +
+
+plaintext() list[str][source]
+
+ +
+
+shared() list[bool][source]
+
+ +
+
+show_separately() XANoteList[source]
+

Shows each note in the list in a separate window.

+
+
Example 1:
+

Show the currently selected notes in separate windows

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> notes = app.selection.show_separately()
+
+
+
+

New in version 0.0.4.

+
+
+ +
+ +
+
+class PyXA.apps.Notes.XANotesAccount(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for interacting with accounts in the Notes application.

+
+

Changed in version 0.0.3: Added show()

+
+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

default_folder

The default folder for creating new notes.

id

The unique identifier of the account.

name

The name of the account.

upgraded

Whether the account is upgraded.

+

Methods:

+ + + + + + + + + + + + + + + +

folders([filter])

Returns a list of folders, as PyXA objects, matching the given filter.

get_clipboard_representation()

Gets a clipboard-codable representation of the account.

notes([filter])

Returns a list of notes, as PyXA objects, matching the given filter.

show()

Shows the first folder belonging to the account.

+
+
+property default_folder: XANotesFolder
+

The default folder for creating new notes.

+
+ +
+
+folders(filter: Optional[dict] = None) XANotesFolderList[source]
+

Returns a list of folders, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter folders by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of folders

+
+
Return type:
+

XANotesFolderList

+
+
Example 1:
+

List all folders belonging to an account

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> account = app.accounts()[0]
+>>> print(account.folders())
+<<class 'PyXA.apps.Notes.XANotesFolderList'>[('Imported Notes', 'x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICFolder/p3104'), ('Notes', 'x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICFolder/p3123'), ...]>
+
+
+
+

Changed in version 0.0.3: Now returns an object of XANotesFolderList instead of a default list.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the account.

+

When the clipboard content is set to an account, the account’s name are added to the clipboard.

+
+
Returns:
+

The name of the account

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: str
+

The unique identifier of the account.

+
+ +
+
+property name: str
+

The name of the account.

+
+ +
+
+notes(filter: Optional[dict] = None) XANoteList[source]
+

Returns a list of notes, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter notes by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of notes

+
+
Return type:
+

XANoteList

+
+
Example 1:
+

List all notes belonging to an account

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> account = app.accounts()[0]
+>>> print(account.notes())
+<<class 'PyXA.apps.Notes.XANoteList'>[('PyXA Stuff', 'x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICNote/p3380'), ('Important Note', 'x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICNote/p614'), ...]>
+
+
+
+

Changed in version 0.0.3: Now returns an object of XANoteList instead of a default list.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+show() XANotesAccount[source]
+

Shows the first folder belonging to the account.

+
+
Returns:
+

A reference to the account object

+
+
Return type:
+

XANotesAccount

+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+property upgraded: bool
+

Whether the account is upgraded.

+
+ +
+ +
+
+class PyXA.apps.Notes.XANotesAccountList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around a list of accounts.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_default_folder(default_folder)

by_id(id)

by_name(name)

by_upgraded(upgraded)

default_folder()

folders()

get_clipboard_representation()

Gets a clipboard-codable representation of each account in the list.

id()

name()

notes()

upgraded()

+
+
+by_default_folder(default_folder: XANotesFolder) XANotesAccount[source]
+
+ +
+
+by_id(id: str) XANotesAccount[source]
+
+ +
+
+by_name(name: str) XANotesAccount[source]
+
+ +
+
+by_upgraded(upgraded: bool) XANotesAccount[source]
+
+ +
+
+default_folder() XANotesFolderList[source]
+
+ +
+
+folders() XANotesFolderList[source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each account in the list.

+

When the clipboard content is set to a list of accounts, the name of each account is added to the clipboard.

+
+
Returns:
+

A list of account names

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+notes() XANoteList[source]
+
+ +
+
+upgraded() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Notes.XANotesApplication(properties)[source]
+

Bases: XASBApplication, XACanOpenPath, XACanPrintPath

+

A class for interacting with Notes.app.

+ +
+

Changed in version 0.0.3: Added accounts(), attachments(), and related methods

+
+
+

New in version 0.0.1.

+
+

Classes:

+ + + + + + +

FileFormat(value[, names, module, qualname, ...])

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

accounts([filter])

Returns a list of Notes accounts, as PyXA objects, matching the given filter.

attachments([filter])

Returns a list of attachments, as PyXA objects, matching the given filter.

documents([filter])

Returns a list of documents, as PyXA objects, matching the given filter.

folders([filter])

Returns a list of Notes folders, as PyXA objects, matching the given filter.

make(specifier[, properties, data])

Creates a new element of the given specifier class without adding it to any list.

new_folder([name, account])

Creates a new Notes folder with the given name.

new_note([name, body, folder])

Creates a new note with the given name and body text in the given folder.

notes([filter])

Returns a list of notes, as PyXA objects, matching the given filter.

open(file_ref)

Opens the file/website at the given filepath/URL.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

default_account

The account that new notes are created in by default.

frontmost

Whether Notes is the active application.

name

The name of the application.

selection

A list of currently selected notes.

version

The version number of Notes.app.

+
+
+class FileFormat(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Attributes:

+ + + + + + +

NATIVE

The native Notes format

+
+
+NATIVE = 1769235821
+

The native Notes format

+
+ +
+ +
+
+accounts(filter: Optional[dict] = None) XANotesAccountList[source]
+

Returns a list of Notes accounts, as PyXA objects, matching the given filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+attachments(filter: Optional[dict] = None) XANotesAttachmentList[source]
+

Returns a list of attachments, as PyXA objects, matching the given filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+property default_account: XANotesAccount
+

The account that new notes are created in by default.

+
+ +
+
+documents(filter: Optional[dict] = None) XANotesDocumentList[source]
+

Returns a list of documents, as PyXA objects, matching the given filter.

+
+

New in version 0.0.3.

+
+
+ +
+
+folders(filter: Optional[dict] = None) XANotesFolderList[source]
+

Returns a list of Notes folders, as PyXA objects, matching the given filter.

+
+
Example 1:
+

Retrieve the name of each folder

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> print(app.folders().name())
+['ExampleFolder1', 'ExampleFolder2', 'ExampleFolder3', ...]
+
+
+
+

Changed in version 0.0.3: Now returns an object of XANotesFolderList instead of a default list.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property frontmost: bool
+

Whether Notes is the active application.

+
+ +
+
+make(specifier: str, properties: Optional[dict] = None, data: Optional[Union[XAPath, str]] = None)[source]
+

Creates a new element of the given specifier class without adding it to any list.

+

Use XABase.XAList.push() to push the element onto a list.

+
+
Parameters:
+
    +
  • specifier (str) – The classname of the object to create

  • +
  • properties (dict) – The properties to give the object

  • +
+
+
Returns:
+

A PyXA wrapped form of the object

+
+
Return type:
+

XABase.XAObject

+
+
Example 1:
+

Make a new folder and add a new note to that folder

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> new_folder = app.make("folder", {"name": "Example Folder"})
+>>> new_note = app.make("note", {"name": "Example Note"})
+>>> app.folders().push(new_folder)
+>>> new_folder.notes().push(new_note)
+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+new_folder(name: str = 'New Folder', account: XANotesAccount = None) XANotesFolder[source]
+

Creates a new Notes folder with the given name.

+
+
Parameters:
+

name (str, optional) – The name of the folder, defaults to “New Folder”

+
+
Returns:
+

A reference to the newly created folder.

+
+
Return type:
+

XANote

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> folder = app.new_folder("PyXA Notes Folder")
+>>> print(folder)
+<<class 'PyXA.apps.Notes.XANotesFolder'>PyXA Notes Folder, x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICFolder/p3389>
+
+
+
+

See also

+

XANotesFolder, new_note()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+new_note(name='New Note', body='', folder: XANotesFolder = None) XANote[source]
+

Creates a new note with the given name and body text in the given folder. +If no folder is provided, the note is created in the default Notes folder.

+
+
Parameters:
+
    +
  • name (str, optional) – The name of the note, defaults to “New Note”

  • +
  • body (str, optional) – The initial body text of the note, defaults to “”

  • +
  • folder (XANotesFolder, optional) – The folder to create the new note in, defaults to None

  • +
+
+
Returns:
+

A reference to the newly created note.

+
+
Return type:
+

XANote

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> note = app.new_note("PyXA Notes", "Example text of new note.")
+>>> print(note)
+<<class 'PyXA.apps.Notes.XANote'>PyXA Notes, x-coredata://224D909C-B449-42B0-96EC-380EE22332E2/ICNote/p3388>
+
+
+
+

See also

+

XANote, new_folder()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+notes(filter: Optional[dict] = None) XANoteList[source]
+

Returns a list of notes, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter notes by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of notes

+
+
Return type:
+

XANoteList

+
+
Example 1:
+

Retrieve the name of each note

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> print(app.notes().name())
+['ExampleName1', 'ExampleName2', 'ExampleName3', ...]
+
+
+
+
Example 2:
+

Retrieve notes by using a filter

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> print(app.notes().containing("name", "fancy"))
+[('ExampleName1', 'x-coredata://213D109C-B439-42A0-96EC-380DE31393E2/ICNote/p2964'), ('ExampleName11', 'x-coredata://213D109C-B439-42A0-96EC-380DE31393E2/ICNote/p2963'), ...]
+
+
+
+
Example 3:
+

Iterate over each note

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> for note in app.notes():
+>>>     print(note.name)
+ExampleName1
+ExampleName2
+ExampleName3
+...
+
+
+
+

Changed in version 0.0.3: Now returns an object of XANoteList instead of a default list.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+open(file_ref: Union[XAPath, str]) XANote[source]
+

Opens the file/website at the given filepath/URL.

+

Child classes of XACanOpenPath should redefine this method as necessary.

+
+
Parameters:
+

target (str) – The path to a file or the URL to a website to open.

+
+
Returns:
+

A reference to the opened document or element, or None if no document/element was created or it cannot be found

+
+
Return type:
+

Any

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property selection: XANoteList
+

A list of currently selected notes.

+
+ +
+
+property version: str
+

The version number of Notes.app.

+
+ +
+ +
+
+class PyXA.apps.Notes.XANotesAttachmentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around a list of attachments.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_container(container)

by_content_identifier(content_identifier)

by_creation_date(creation_date)

by_id(id)

by_modification_date(modification_date)

by_name(name)

by_shared(shared)

by_url(url)

container()

content_identifier()

creation_date()

id()

modification_date()

name()

save(directory)

Saves all attachments in the list in the specified directory.

shared()

url()

+
+
+by_container(container: XANote) Optional[XANoteAttachment][source]
+
+ +
+
+by_content_identifier(content_identifier: str) Optional[XANoteAttachment][source]
+
+ +
+
+by_creation_date(creation_date: datetime) XANoteAttachment[source]
+
+ +
+
+by_id(id: str) Optional[XANoteAttachment][source]
+
+ +
+
+by_modification_date(modification_date: datetime) Optional[XANoteAttachment][source]
+
+ +
+
+by_name(name: str) Optional[XANoteAttachment][source]
+
+ +
+
+by_shared(shared: bool) Optional[XANoteAttachment][source]
+
+ +
+
+by_url(url: Union[str, XAURL]) Optional[XANoteAttachment][source]
+
+ +
+
+container() XANoteList[source]
+
+ +
+
+content_identifier() list[str][source]
+
+ +
+
+creation_date() list[datetime.datetime][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+modification_date() list[datetime.datetime][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+save(directory: str) XANotesAttachmentList[source]
+

Saves all attachments in the list in the specified directory.

+
+
Parameters:
+

directory (str) – The directory to store the saved attachments in

+
+
Returns:
+

A reference to the attachment list object

+
+
Return type:
+

XANotesAttachmentList

+
+
Example 1:
+

Save the attachments in currently selected notes to the downloads folder

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> app.selection.attachments().save("/Users/exampleuser/Downloads/")
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+shared() list[bool][source]
+
+ +
+
+url() list[PyXA.XABase.XAURL][source]
+
+ +
+ +
+
+class PyXA.apps.Notes.XANotesDocument(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for interacting with documents in Notes.app.

+
+

New in version 0.0.3.

+
+

Attributes:

+ + + + + + + + + + + + +

file

The location of the document on the disk, if one exists.

modified

Whether the document has been modified since the last save.

name

The name of the document.

+

Methods:

+ + + + + + +

get_clipboard_representation()

Gets a clipboard-codable representation of the document.

+
+
+property file: str
+

The location of the document on the disk, if one exists.

+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the document.

+

When the clipboard content is set to a document, the document’s name is added to the clipboard.

+
+
Returns:
+

The name of the document

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property modified: bool
+

Whether the document has been modified since the last save.

+
+ +
+
+property name: str
+

The name of the document.

+
+ +
+ +
+
+class PyXA.apps.Notes.XANotesDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around a list of documents.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + +

by_file(file)

by_modified(modified)

by_name(name)

file()

get_clipboard_representation()

Gets a clipboard-codable representation of each document in the list.

modified()

name()

+
+
+by_file(file: str) XANotesDocument[source]
+
+ +
+
+by_modified(modified: bool) XANotesDocument[source]
+
+ +
+
+by_name(name: str) XANotesDocument[source]
+
+ +
+
+file() list[str][source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each document in the list.

+

When the clipboard content is set to a list of documents, the name of each document is added to the clipboard.

+
+
Returns:
+

A list of document names

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+modified() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Notes.XANotesFolder(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for interacting with Notes folders and their contents.

+
+

See also

+

class:XANote

+
+
+

Changed in version 0.0.3: Added show()

+
+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

container

The account the folder belongs to.

id

The unique identifier for the folder.

name

The name of the folder.

shared

Whether the folder is shared.

+

Methods:

+ + + + + + + + + + + + + + + +

delete()

Permanently deletes the folder.

get_clipboard_representation()

Gets a clipboard-codable representation of the folder.

notes([filter])

Returns a list of notes, as PyXA objects, matching the given filter.

show()

Shows the folder in the main Notes window.

+
+
+property container: XANotesAccount
+

The account the folder belongs to.

+
+ +
+
+delete()[source]
+

Permanently deletes the folder.

+
+

New in version 0.0.4.

+
+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the folder.

+

When the clipboard content is set to a notes folder, the name of the folder is added to the clipboard.

+
+
Returns:
+

The name of the notes folder

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: str
+

The unique identifier for the folder.

+
+ +
+
+property name: str
+

The name of the folder.

+
+ +
+
+notes(filter: Optional[dict] = None) XANoteList[source]
+

Returns a list of notes, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter notes by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of notes

+
+
Return type:
+

XANoteList

+
+
+
+

Changed in version 0.0.3: Now returns an object of XANoteList instead of a default list.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property shared: bool
+

Whether the folder is shared.

+
+ +
+
+show() XANotesFolder[source]
+

Shows the folder in the main Notes window.

+
+

New in version 0.0.3.

+
+
+ +
+ +
+
+class PyXA.apps.Notes.XANotesFolderList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around a list of Notes folders.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_container(container)

by_id(id)

by_name(name)

by_shared(shared)

container()

folders()

get_clipboard_representation()

Gets a clipboard-codable representation of each folder in the list.

id()

name()

notes()

shared()

+
+
+by_container(container: XANotesAccount) XANotesFolder[source]
+
+ +
+
+by_id(id: str) XANotesFolder[source]
+
+ +
+
+by_name(name: str) XANotesFolder[source]
+
+ +
+
+by_shared(shared: bool) XANotesFolder[source]
+
+ +
+
+container() XANotesAccountList[source]
+
+ +
+
+folders() XANotesFolderList[source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each folder in the list.

+

When the clipboard content is set to a list of folders, the name of each folder is added to the clipboard.

+
+
Returns:
+

A list of folder names

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+notes() XANoteList[source]
+
+ +
+
+shared() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Notes.XANotesWindow(properties)[source]
+

Bases: XASBWindow

+

A window of Notes.app.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + +

document

The active document.

+
+
+property document: XANotesDocument
+

The active document.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/omnioutliner.html b/docs/reference/apps/omnioutliner.html new file mode 100644 index 0000000..a534792 --- /dev/null +++ b/docs/reference/apps/omnioutliner.html @@ -0,0 +1,4181 @@ + + + + + + + OmniOutliner Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

OmniOutliner Module Reference

+
+

New in version 0.0.9.

+
+

Control OmniOutliner using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XAOmniOutlinerAncestor(properties)

The rows that this row is contained by, from the top level on down.

XAOmniOutlinerAncestorList(properties[, filter])

A wrapper around lists of ancestor rows that employs fast enumeration techniques.

XAOmniOutlinerApplication(properties)

A class for managing and interacting with OmniOutliner.app.

XAOmniOutlinerArchiveData(properties)

A archive data object.

XAOmniOutlinerAttribute(properties)

An attribute of a style.

XAOmniOutlinerAttributeList(properties[, filter])

A wrapper around lists of attributes that employs fast enumeration techniques.

XAOmniOutlinerCell(properties)

A cell object in OmniOutliner.app.

XAOmniOutlinerCellList(properties[, filter])

A wrapper around lists of cells that employs fast enumeration techniques.

XAOmniOutlinerChild(properties)

For a document, the top level rows.

XAOmniOutlinerChildList(properties[, filter])

A wrapper around lists of child rows that employs fast enumeration techniques.

XAOmniOutlinerColumFormat(properties)

A column format in OmniOutliner.app.

XAOmniOutlinerColumn(properties)

A column in OmniOutliner.app.

XAOmniOutlinerColumnList(properties[, ...])

A wrapper around lists of OmniOutliner columns that employs fast enumeration techniques.

XAOmniOutlinerConduitSettingDomain(properties)

A group of custom settings from one external source.

XAOmniOutlinerConduitSettingDomainList(...)

A wrapper around lists of conduit setting domains that employs fast enumeration techniques.

XAOmniOutlinerDocument(properties)

A document in OmniOutliner.app.

XAOmniOutlinerDocumentList(properties[, filter])

A wrapper around lists of OmniOutliner documents that employs fast enumeration techniques.

XAOmniOutlinerDocumentType(properties)

A document type in OmniOutliner.app.

XAOmniOutlinerDocumentTypeList(properties[, ...])

A wrapper around lists of document types that employs fast enumeration techniques.

XAOmniOutlinerEnumeration(properties)

An enumeration in OmniOutliner.app.

XAOmniOutlinerEnumerationList(properties[, ...])

A wrapper around lists of enumerations that employs fast enumeration techniques.

XAOmniOutlinerFileAttachment(properties)

A file attachment object in OmniOutliner.app.

XAOmniOutlinerFileAttachmentList(properties)

A wrapper around lists of file attachments that employs fast enumeration techniques.

XAOmniOutlinerFollowingSibling(properties)

The row which follows this row.

XAOmniOutlinerFollowingSiblingList(properties)

A wrapper around lists of following siblings that employs fast enumeration techniques.

XAOmniOutlinerGenericColor(properties)

A generic color value.

XAOmniOutlinerLeaf(properties)

The leaf rows underneath a document or row.

XAOmniOutlinerLeafList(properties[, filter])

A wrapper around lists of leaf rows that employs fast enumeration techniques.

XAOmniOutlinerLevelStyle(properties)

A level style object in a document.

XAOmniOutlinerLevelStyleList(properties[, ...])

A wrapper around lists of level styles that employs fast enumeration techniques.

XAOmniOutlinerNamedStyle(properties)

A named style object.

XAOmniOutlinerNamedStyleList(properties[, ...])

A wrapper around lists of named styles that employs fast enumeration techniques.

XAOmniOutlinerPNGData(properties)

A PNG data object.

XAOmniOutlinerPathComponent(properties)

A list of rows up to and including the given row.

XAOmniOutlinerPathComponentList(properties)

A wrapper around lists of path components that employs fast enumeration techniques.

XAOmniOutlinerPoint(properties)

A point value.

XAOmniOutlinerPrecedingSibling(properties)

The row which precedes this row.

XAOmniOutlinerPrecedingSiblingList(properties)

A wrapper around lists of preceding siblings that employs fast enumeration techniques.

XAOmniOutlinerPreference(properties)

A row object in OmniOutliner.app.

XAOmniOutlinerPreferenceList(properties[, ...])

A wrapper around lists of preferences that employs fast enumeration techniques.

XAOmniOutlinerReadableDocumentType(properties)

A readable document type in OmniOutliner.app.

XAOmniOutlinerReadableDocumentTypeList(...)

A wrapper around lists of readable document types that employs fast enumeration techniques.

XAOmniOutlinerRichText(properties)

A row object in OmniOutliner.app.

XAOmniOutlinerRichTextList(properties[, filter])

A wrapper around lists of rich texts that employs fast enumeration techniques.

XAOmniOutlinerRow(properties)

A row object in OmniOutliner.app.

XAOmniOutlinerRowList(properties[, filter, ...])

A wrapper around lists of rows that employs fast enumeration techniques.

XAOmniOutlinerSection(properties)

The sections underneath the document or row.

XAOmniOutlinerSectionList(properties[, filter])

A wrapper around lists of sections that employs fast enumeration techniques.

XAOmniOutlinerSelectedColumn(properties)

A style object in OmniOutliner.app.

XAOmniOutlinerSelectedColumnList(properties)

A wrapper around lists of selected columns that employs fast enumeration techniques.

XAOmniOutlinerSelectedRow(properties)

The sections underneath the document or row.

XAOmniOutlinerSelectedRowList(properties[, ...])

A wrapper around lists of selected rows that employs fast enumeration techniques.

XAOmniOutlinerStyle(properties)

A style object in OmniOutliner.app.

XAOmniOutlinerStyleList(properties[, ...])

A wrapper around lists of OmniOutliner styles that employs fast enumeration techniques.

XAOmniOutlinerTIFFData(properties)

A TIFF data object.

XAOmniOutlinerWindow(properties)

A window of OmniOutliner.app.

XAOmniOutlinerWritableDocumentType(properties)

A writable document type in OmniOutliner.app.

XAOmniOutlinerWritableDocumentTypeList(...)

A wrapper around lists of writable document types that employs fast enumeration techniques.

XAOmniOutlinerXslTransform(properties)

This class represents an available XSL transformation that may be applied when loading or saving documents.

XAOmniOutlinerXslTransformList(properties[, ...])

A wrapper around lists of XSL transforms that employs fast enumeration techniques.

+
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerAncestor(properties)[source]
+

Bases: XAOmniOutlinerRow

+

The rows that this row is contained by, from the top level on down.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerAncestorList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAOmniOutlinerRowList

+

A wrapper around lists of ancestor rows that employs fast enumeration techniques.

+

All properties of ancestor rows can be called as methods on the wrapped list, returning a list containing each ancestor row’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerApplication(properties)[source]
+

Bases: XASBApplication, XACanOpenPath, XACanPrintPath

+

A class for managing and interacting with OmniOutliner.app.

+
+

New in version 0.0.9.

+
+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

Alignment(value[, names, module, qualname, ...])

Text alignment types.

CheckboxState(value[, names, module, ...])

Checkbox states.

ColumnSummaryType(value[, names, module, ...])

Column summary types.

ColumnType(value[, names, module, qualname, ...])

Column types.

DisplayType(value[, names, module, ...])

Note display types.

FormatStyle(value[, names, module, ...])

Format styles.

SortOrder(value[, names, module, qualname, ...])

Sort order directions.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

build_number

The build number of the application, for example 63.1 or 63.

frontmost

Whether OmniOutliner is the active application.

imported_files_should_store_compressed

Controls whether OmniOutliner will default imported files to being stored in a compressed format.

name

The name of the application.

prompt_on_file_format_upgrade

Controls whether OmniOutliner will prompt the user when updating a older file format to a newer one.

version

The version of OmniOutliner.app.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + +

document_types([filter])

Returns a list of document types, as PyXA objects, matching the given filter.

documents([filter])

Returns a list of documents, as PyXA objects, matching the given filter.

preferences([filter])

Returns a list of preferences, as PyXA objects, matching the given filter.

readable_document_types([filter])

Returns a list of readable document types, as PyXA objects, matching the given filter.

test()

writable_document_types([filter])

Returns a list of writable document types, as PyXA objects, matching the given filter.

xsl_transforms([filter])

Returns a list of XSL transforms, as PyXA objects, matching the given filter.

+
+
+class Alignment(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Text alignment types.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

CENTER

JUSTIFIED

LEFT

NATURAL

RIGHT

+
+
+CENTER = 1330929969
+
+ +
+
+JUSTIFIED = 1330929971
+
+ +
+
+LEFT = 1330929968
+
+ +
+
+NATURAL = 1330929972
+
+ +
+
+RIGHT = 1330929970
+
+ +
+ +
+
+class CheckboxState(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Checkbox states.

+

Attributes:

+ + + + + + + + + + + + + + + +

CHECKED

Checkbox checked

INDETERMINATE

Indeterminate checkbox state

NONE

No checkbox state

UNCHECKED

Checkbox unchecked

+
+
+CHECKED = 1330598706
+

Checkbox checked

+
+ +
+
+INDETERMINATE = 1330598705
+

Indeterminate checkbox state

+
+ +
+
+NONE = 1330605679
+

No checkbox state

+
+ +
+
+UNCHECKED = 1330598704
+

Checkbox unchecked

+
+ +
+ +
+
+class ColumnSummaryType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Column summary types.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

AVERAGE

CALCULATED

HIDDEN

MAXIMUM

MINIMUM

NONE

TOTAL

+
+
+AVERAGE = 1332964662
+
+ +
+
+CALCULATED = 1332964658
+
+ +
+
+HIDDEN = 1332964657
+
+ +
+
+MAXIMUM = 1332964660
+
+ +
+
+MINIMUM = 1332964661
+
+ +
+
+NONE = 1330605679
+
+ +
+
+TOTAL = 1332964659
+
+ +
+ +
+
+class ColumnType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Column types.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

CHECKBOX

DATETIME

DURATION

NUMERIC

POPUP

STYLED_TEXT

+
+
+CHECKBOX = 1331917873
+
+ +
+
+DATETIME = 1331917874
+
+ +
+
+DURATION = 1331917875
+
+ +
+
+NUMERIC = 1331917877
+
+ +
+
+POPUP = 1331917876
+
+ +
+
+STYLED_TEXT = 1331917872
+
+ +
+ +
+
+class DisplayType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Note display types.

+

Attributes:

+ + + + + + + + + +

INLINE

Inline display type

OUT_OF_LINE

Out of line display type

+
+
+INLINE = 1332634673
+

Inline display type

+
+ +
+
+OUT_OF_LINE = 1332634674
+

Out of line display type

+
+ +
+ +
+
+class FormatStyle(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Format styles.

+

Attributes:

+ + + + + + + + + + + + + + + +

FULL

LONG

MEDIUM

SHORT

+
+
+FULL = 1330595398
+
+ +
+
+LONG = 1330595404
+
+ +
+
+MEDIUM = 1330595405
+
+ +
+
+SHORT = 1330595411
+
+ +
+ +
+
+class SortOrder(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Sort order directions.

+

Attributes:

+ + + + + + + + + + + + +

ASCENDING

Ascending sort order

DESCENDING

Descending sort order

NONE

No sort direction

+
+
+ASCENDING = 1330606897
+

Ascending sort order

+
+ +
+
+DESCENDING = 1330606898
+

Descending sort order

+
+ +
+
+NONE = 1330605679
+

No sort direction

+
+ +
+ +
+
+property build_number: str
+

The build number of the application, for example 63.1 or 63. Major and minor versions are separated by a dot, so 63.10 comes after 63.1.

+
+ +
+
+document_types(filter: Optional[dict] = None) XAOmniOutlinerDocumentTypeList[source]
+

Returns a list of document types, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+documents(filter: dict = None) XAOmniOutlinerDocumentList[source]
+

Returns a list of documents, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+property frontmost: bool
+

Whether OmniOutliner is the active application.

+
+ +
+
+property imported_files_should_store_compressed: bool
+

Controls whether OmniOutliner will default imported files to being stored in a compressed format.

+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+preferences(filter: Optional[dict] = None) XAOmniOutlinerPreferenceList[source]
+

Returns a list of preferences, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+property prompt_on_file_format_upgrade: bool
+

Controls whether OmniOutliner will prompt the user when updating a older file format to a newer one.

+
+ +
+
+readable_document_types(filter: Optional[dict] = None) XAOmniOutlinerReadableDocumentTypeList[source]
+

Returns a list of readable document types, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+test()[source]
+
+ +
+
+property version: str
+

The version of OmniOutliner.app.

+
+ +
+
+writable_document_types(filter: Optional[dict] = None) XAOmniOutlinerWritableDocumentTypeList[source]
+

Returns a list of writable document types, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+xsl_transforms(filter: Optional[dict] = None) XAOmniOutlinerXslTransformList[source]
+

Returns a list of XSL transforms, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerArchiveData(properties)[source]
+

Bases: XAObject

+

A archive data object.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerAttribute(properties)[source]
+

Bases: XAObject

+

An attribute of a style.

+
+

New in version 0.0.9.

+
+

Methods:

+ + + + + + +

clear()

Clears a locally set value for a style attribute.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

default_value

The default value of the attribute in its style.

defining_style

The style responsible for the effective value in this attributes's style.

has_local_value

If true, the containing style defines a local value for this attribute.

name

The name of the attribute.

style

The style to which the attribute refers.

value

The value of the attribute in its style.

+
+
+clear()[source]
+

Clears a locally set value for a style attribute.

+
+

New in version 0.0.9.

+
+
+ +
+
+property default_value: Optional[Union[XAOmniOutlinerGenericColor, XAColor, str, XAURL, float, list[float], int, bool, XAOmniOutlinerPoint]]
+

The default value of the attribute in its style.

+
+ +
+
+property defining_style: XAOmniOutlinerStyle
+

The style responsible for the effective value in this attributes’s style. This processes the local values, inherited styles and cascade chain.

+
+ +
+
+property has_local_value: bool
+

If true, the containing style defines a local value for this attribute.

+
+ +
+
+property name: str
+

The name of the attribute.

+
+ +
+
+property style: XAOmniOutlinerStyle
+

The style to which the attribute refers.

+
+ +
+
+property value: Optional[Union[XAOmniOutlinerGenericColor, XAColor, str, XAURL, float, list[float], int, bool, XAOmniOutlinerPoint]]
+

The value of the attribute in its style.

+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerAttributeList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of attributes that employs fast enumeration techniques.

+

All properties of attributes can be called as methods on the wrapped list, returning a list containing each attribute’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerCell(properties)[source]
+

Bases: XAObject

+

A cell object in OmniOutliner.app.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

column

Column that this cell is in.

id

The unique identifier of the cell within the containing row.

name

The name of the cell.

row

Row that this cell is in.

state

State of the cell.

text

Text of the cell.

value

Contents of the cell, whatever the type.

+

Methods:

+ + + + + + +

replace(replacement[, regex_to_find, ...])

Replaces the contents of the cell.

+
+
+property column: XAOmniOutlinerColumn
+

Column that this cell is in.

+
+ +
+
+property id: str
+

The unique identifier of the cell within the containing row. This identifier is the same as the identifier of the cell’s column.

+
+ +
+
+property name: str
+

The name of the cell. This is the same as the name of the cell’s column.

+
+ +
+
+replace(replacement: str, regex_to_find: Optional[str] = None, string_to_find: Optional[str] = None)[source]
+

Replaces the contents of the cell.

+
+
Parameters:
+
    +
  • replacement (str) – The replacement string

  • +
  • regex_to_find (Union[str, None], optional) – The regular expression to find and replace, defaults to None

  • +
  • string_to_find (Union[str, None], optional) – The string to find and replace, defaults to None

  • +
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+property row: XAOmniOutlinerRow
+

Row that this cell is in.

+
+ +
+
+property state: CheckboxState
+

State of the cell. This is only valid on checkbox columns.

+
+ +
+
+property text: XAOmniOutlinerRichText
+

Text of the cell. This is only valid on text columns.

+
+ +
+
+property value: Union[str, datetime, int, float, XAOmniOutlinerEnumeration, CheckboxState]
+

Contents of the cell, whatever the type.

+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerCellList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of cells that employs fast enumeration techniques.

+

All properties of cells can be called as methods on the wrapped list, returning a list containing each cell’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerChild(properties)[source]
+

Bases: XAOmniOutlinerRow

+

For a document, the top level rows. For a row, the rows one level below this one.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerChildList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAOmniOutlinerRowList

+

A wrapper around lists of child rows that employs fast enumeration techniques.

+

All properties of child rows can be called as methods on the wrapped list, returning a list containing each child row’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerColumFormat(properties)[source]
+

Bases: XAObject

+

A column format in OmniOutliner.app.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

calendar

The calendar to use for date formats.

currency

The ISO currency identifier (such as "USD" or "JPY") for columns with a currency format.

date_style

The style of date format to use, based off the user's preference.

format

The ICU format string.

id

The identifier for built-in formats.

locale

The locale identifier (such as "en_US" or "ja_JP") for formats.

time_style

The style of time format to use, based off the user's preference.

timezone

The time zone to use for date formats.

+
+
+property calendar: str
+

The calendar to use for date formats.

+
+ +
+
+property currency
+

The ISO currency identifier (such as “USD” or “JPY”) for columns with a currency format. Must be used with an id of “currency.

+
+ +
+
+property date_style: FormatStyle
+

The style of date format to use, based off the user’s preference.

+
+ +
+
+property format: str
+

The ICU format string.

+
+ +
+
+property id: str
+

The identifier for built-in formats.

+
+ +
+
+property locale: str
+

The locale identifier (such as “en_US” or “ja_JP”) for formats.

+
+ +
+
+property time_style: FormatStyle
+

The style of time format to use, based off the user’s preference.

+
+ +
+
+property timezone: str
+

The time zone to use for date formats.

+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerColumn(properties)[source]
+

Bases: XAObject

+

A column in OmniOutliner.app.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

alignment

Default alignment for cells of the column.

background_color

The background color of the column.

column_format

All aspects of the column's format.

column_style

The style of the column.

column_type

This is the type of the column.

document

The document containing the column.

format_string

The format string for formatted columns.

id

An identifier for the column that is unique within the document.

index

The index of the column in the document.

name

The name of the column.

sort_order

The sort order of the column.

summary_type

This is the summary type of the column.

title

The title of the column.

visible

Whether the column is visible or not.

width

The width of the column in pixels.

+

Methods:

+ + + + + + + + + +

enumerations([filter])

Returns a list of enumerations, as PyXA objects, matching the given filter.

move_to(destination)

Moves the column to the specified document.

+
+
+property alignment: Alignment
+

Default alignment for cells of the column.

+
+ +
+
+property background_color: XAColor
+

The background color of the column.

+
+ +
+
+property column_format: XAOmniOutlinerColumFormat
+

All aspects of the column’s format.

+
+ +
+
+property column_style: XAOmniOutlinerStyle
+

The style of the column. This is used as the default style for values in the column (but is overriden by any style attributes defined on rows).

+
+ +
+
+property column_type: ColumnType
+

This is the type of the column.

+
+ +
+
+property document: XAOmniOutlinerDocument
+

The document containing the column.

+
+ +
+
+enumerations(filter: Optional[dict] = None) XAOmniOutlinerEnumerationList[source]
+

Returns a list of enumerations, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+property format_string: str
+

The format string for formatted columns. Depends on the type of the column.

+
+ +
+
+property id: str
+

An identifier for the column that is unique within the document.

+
+ +
+
+property index: int
+

The index of the column in the document. This includes hidden columns.

+
+ +
+
+move_to(destination: XAOmniOutlinerDocument)[source]
+

Moves the column to the specified document.

+
+
Parameters:
+

destination (XAOmniOutlinerDocument) – The document to move the column to

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+property name: str
+

The name of the column. This is currently the same as the title, but in the future the title may be styled while the name will always be a plain string.

+
+ +
+
+property sort_order: SortOrder
+

The sort order of the column.

+
+ +
+
+property summary_type: ColumnSummaryType
+

This is the summary type of the column.

+
+ +
+
+property title: str
+

The title of the column.

+
+ +
+
+property visible: bool
+

Whether the column is visible or not.

+
+ +
+
+property width: int
+

The width of the column in pixels.

+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerColumnList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList

+

A wrapper around lists of OmniOutliner columns that employs fast enumeration techniques.

+

All properties of columns can be called as methods on the wrapped list, returning a list containing each column’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerConduitSettingDomain(properties)[source]
+

Bases: XAObject

+

A group of custom settings from one external source. Note that conduit setting domains should only be referenced by ‘id’. The first time one is referenced it will be created. Any other type of access (by index, every, etc.) will produce an error.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

container

The row or document containing this group of conduit settings.

external_id

Identifies the conduit externally to OmniOutliner.

id

The unique identifier of the domain.

settings

Values must be strings or 'missing value' (removes value).

+
+
+property container: XAObject
+

The row or document containing this group of conduit settings.

+
+ +
+
+property external_id: str
+

Identifies the conduit externally to OmniOutliner. This might be a record identifier in an external database. This will not get copied when duplicating the row, or if a ‘save as’ or ‘save to’ operation is performed instead of a normal ‘save’.

+
+ +
+
+property id: str
+

The unique identifier of the domain. These should typically be in the reverse-DNS style of bundle identifiers (“com.mycompany.myproduct”).

+
+ +
+
+property settings: list[Optional[str]]
+

Values must be strings or ‘missing value’ (removes value). To set a single entry, concatenate the current value with the changes and then re-set it. Concatenating an empty and non-empty record crashes AppleScript, so ‘missing value’ will be returned.

+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerConduitSettingDomainList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of conduit setting domains that employs fast enumeration techniques.

+

All properties of conduit setting domains can be called as methods on the wrapped list, returning a list containing each domain’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerDocument(properties)[source]
+

Bases: XAObject, XACloseable, XAPrintable

+

A document in OmniOutliner.app.

+
+

New in version 0.0.9.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

add(items)

Adds objects to the document.

add_to(destination)

Adds the document to a location.

children([filter])

Returns a list of children, as PyXA objects, matching the given filter.

collapse_all([items])

Collapse the entire outline of an object.

columns([filter])

Returns a list of columns, as PyXA objects, matching the given filter.

expand_all([items])

Expand the entire outline of an object.

export(file[, type])

Exports the document to the specified location and file type.

group([rows])

Increase the outline level of a list of rows by creating a new parent row for them and moving under that new row.

hoist([rows])

Hide all rows in the outline, except for the descendants of the row passed to this command.

leaves([filter])

Returns a list of leaves, as PyXA objects, matching the given filter.

level_styles([filter])

Returns a list of level styles, as PyXA objects, matching the given filter.

named_styles([filter])

Returns a list of named styles, as PyXA objects, matching the given filter.

pbcopy(items[, type, clipboard_name])

Copies one or more nodes to the clipboard.

pbpaste(location[, clipboard_name])

Pastes nodes from the clipboard.

redo()

Redoes the most recent undo operation.

remove(items)

Remove objects from the document.

remove_from(container)

Adds the document to a location.

rows([filter])

Returns a list of rows, as PyXA objects, matching the given filter.

sections([filter])

Returns a list of sections, as PyXA objects, matching the given filter.

select([items, extend])

Selects one or more objects.

selected_columns([filter])

Returns a list of selected columns, as PyXA objects, matching the given filter.

selected_rows([filter])

Returns a list of selected rows, as PyXA objects, matching the given filter.

undo()

Undoes the most recent change.

ungroup([rows])

Decrease the outline level of all children of a row, moving them left one step.

unhoist([documents, unhoist_all])

Show rows hidden in the last hoist operation on a document.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

alternate_color

The background color of every other row.

background_color

The background color of the document.

canredo

Whether the document can redo the most recently undone command.

canundo

Whether the document can undo the most recent command.

children_are_sections

This is always true for documents.

column_title_style

The style of column titles.

editable

This lets you know whether the document is editable.

file

The location of the file on disk, if it has one.

folded_editing_enabled

Whether folded editing of item and inline note text is enabled.

has_subtopics

Whether the document has any subtopics.

horizontal_grid_color

The color of hairline dividers between rows.

id

An identifier unique to the document.

modified

Whether the document has been modified since it was last saved.

name

The name of the document.

note_column

The column of the document that contains the notes for the rows.

note_display

Whether notes are displayed inline.

notescolumnid

The note column id for newly created documents.

save_identifier

A string that changes each time the document is saved.

save_identifier_enabled

Controls whether a save identifier will be emitted in the archived document each time the document is saved.

sorting_postponed

Whether sorting is currently postponed for the document.

status_sort_order

The sort order used for the status checkbox in the topic column.

status_visible

Whether the status checkbox is visible in the outline column.

store_compressed

Whether xml should be compressed when saved.

style

The default style for the document.

title

This is the title of the document.

topic_column

The column of the document that displays the hierarchy of rows.

topiccolumnid

The topic column id for newly created documents.

undo_enabled

Controls whether undo is currently enabled in the document.

vertical_grid_color

The color hairline dividers between columns.

visible

Whether the interface for the document is visible.

writes_wrapper

If set to true, this indicates that the document will write itself as a file wrapper (folder).

+
+
+add(items: Union[XAObject, list[PyXA.XABase.XAObject]])[source]
+

Adds objects to the document.

+
+
Parameters:
+

items (Union[XABase.XAObject, list[XABase.XAObject]]) – The object(s) to add

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+add_to(destination: XAObject)[source]
+

Adds the document to a location.

+
+
Parameters:
+

destination (XABase.XAObject) – The container to which to add the document

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+property alternate_color: XAColor
+

The background color of every other row.

+
+ +
+
+property background_color: XAColor
+

The background color of the document.

+
+ +
+
+property canredo: bool
+

Whether the document can redo the most recently undone command.

+
+ +
+
+property canundo: bool
+

Whether the document can undo the most recent command.

+
+ +
+
+children(filter: Optional[dict] = None) XAOmniOutlinerChildList[source]
+

Returns a list of children, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+property children_are_sections: bool
+

This is always true for documents. This is here to make it easier to deal with mixed lists of rows and documents.

+
+ +
+
+collapse_all(items: Optional[Union[XAOmniOutlinerDocument, XAOmniOutlinerRow, XAOmniOutlinerDocumentList, XAOmniOutlinerRowList, list[PyXA.apps.OmniOutliner.XAOmniOutlinerDocument], list[PyXA.apps.OmniOutliner.XAOmniOutlinerRow]]] = None)[source]
+

Collapse the entire outline of an object.

+
+

New in version 0.0.9.

+
+
+ +
+
+property column_title_style: XAOmniOutlinerStyle
+

The style of column titles.

+
+ +
+
+columns(filter: Optional[dict] = None) XAOmniOutlinerColumnList[source]
+

Returns a list of columns, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+property editable: bool
+

This lets you know whether the document is editable. For example, the release notes document is not editable, so your script may want to avoid trying to edit it.

+
+ +
+
+expand_all(items: Optional[Union[XAOmniOutlinerDocument, XAOmniOutlinerRow, XAOmniOutlinerDocumentList, XAOmniOutlinerRowList, list[PyXA.apps.OmniOutliner.XAOmniOutlinerDocument], list[PyXA.apps.OmniOutliner.XAOmniOutlinerRow]]] = None)[source]
+

Expand the entire outline of an object.

+
+

New in version 0.0.9.

+
+
+ +
+
+export(file: Union[str, XAPath], type: Optional[str] = None)[source]
+

Exports the document to the specified location and file type. Unlike the “save” command, this will never set the name of the document or change its modified flag.

+
+
Parameters:
+
    +
  • file (Union[str, XABase.XAPath]) – Where to place the exported document

  • +
  • type (Union[str, None], optional) – The name of a writable file type to use when writing the document. Defaults to the appropriate type for the path extension on the export destination, defaults to None

  • +
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+property file: XAPath
+

The location of the file on disk, if it has one.

+
+ +
+
+property folded_editing_enabled: bool
+

Whether folded editing of item and inline note text is enabled.

+
+ +
+
+group(rows: Optional[Union[XAOmniOutlinerRow, XAOmniOutlinerRowList, list[PyXA.apps.OmniOutliner.XAOmniOutlinerRow]]] = None)[source]
+

Increase the outline level of a list of rows by creating a new parent row for them and moving under that new row.

+
+
Parameters:
+

rows (Union[XAOmniOutlinerRow, XAOmniOutlinerRowList, list[XAOmniOutlinerRow], None], optional) – The rows to group, defaults to None

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+property has_subtopics: bool
+

Whether the document has any subtopics.

+
+ +
+
+hoist(rows: Optional[Union[XAOmniOutlinerRow, XAOmniOutlinerRowList, list[PyXA.apps.OmniOutliner.XAOmniOutlinerRow]]] = None)[source]
+

Hide all rows in the outline, except for the descendants of the row passed to this command.

+
+
Parameters:
+

rows (Union[XAOmniOutlinerRow, XAOmniOutlinerRowList, list[XAOmniOutlinerRow], None], optional) – The rows to hoist, defaults to None

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+property horizontal_grid_color: XAColor
+

The color of hairline dividers between rows.

+
+ +
+
+property id: str
+

An identifier unique to the document.

+
+ +
+
+leaves(filter: Optional[dict] = None) XAOmniOutlinerLeafList[source]
+

Returns a list of leaves, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+level_styles(filter: Optional[dict] = None) XAOmniOutlinerLevelStyleList[source]
+

Returns a list of level styles, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+property modified: bool
+

Whether the document has been modified since it was last saved.

+
+ +
+
+property name: str
+

The name of the document.

+
+ +
+
+named_styles(filter: Optional[dict] = None) XAOmniOutlinerNamedStyleList[source]
+

Returns a list of named styles, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+property note_column: XAOmniOutlinerColumn
+

The column of the document that contains the notes for the rows.

+
+ +
+
+property note_display: DisplayType
+

Whether notes are displayed inline.

+
+ +
+
+property notescolumnid: str
+

The note column id for newly created documents.

+
+ +
+
+pbcopy(items: list[PyXA.XABase.XAObject], type: Optional[Union[str, list[str]]] = None, clipboard_name: Optional[str] = None)[source]
+

Copies one or more nodes to the clipboard.

+
+
Parameters:
+
    +
  • items (list[XABase.XAObject]) – The list of items to copy to the clipboard

  • +
  • type (Union[str, list[str], None], optional) – The list of type identifier to use when copying the trees. If omitted, all writable clipboard types are used, defaults to None

  • +
  • clipboard_name (Union[str, None], optional) – The name of the clipboard to copy to, defaults to None

  • +
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+pbpaste(location: XAObject, clipboard_name: Optional[str] = None)[source]
+

Pastes nodes from the clipboard.

+
+
Parameters:
+
    +
  • location (XABase.XAObject) – The location at which to paste the nodes

  • +
  • clipboard_name (Union[str, None], optional) – The name of the clipboard to paste from, defaults to None

  • +
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+redo()[source]
+

Redoes the most recent undo operation.

+
+

New in version 0.0.9.

+
+
+ +
+
+remove(items: Union[XAObject, list[PyXA.XABase.XAObject]])[source]
+

Remove objects from the document.

+
+
Parameters:
+

items (Union[XABase.XAObject, list[XABase.XAObject]]) – The object(s) to remove

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+remove_from(container: XAObject)[source]
+

Adds the document to a location.

+
+
Parameters:
+

container (XABase.XAObject) – The container from which to remove the document

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+rows(filter: Optional[dict] = None) XAOmniOutlinerRowList[source]
+

Returns a list of rows, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+property save_identifier: str
+

A string that changes each time the document is saved. If the save identifier is disabled, then this returns ‘missing value’.

+
+ +
+
+property save_identifier_enabled: bool
+

Controls whether a save identifier will be emitted in the archived document each time the document is saved. This is useful for external tools that need to quickly determine whether the document has changed without relying on the file modification time.

+
+ +
+
+sections(filter: Optional[dict] = None) XAOmniOutlinerSectionList[source]
+

Returns a list of sections, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+select(items: Optional[Union[XAObject, list[PyXA.XABase.XAObject]]] = None, extend: bool = False)[source]
+

Selects one or more objects.

+
+
Parameters:
+
    +
  • items (Union[XABase.XAObject, list[XABase.XAObject], None]) – An object or list of objects to select

  • +
  • extend (bool, optional) – Whether the selection is replaced or extended, defaults to False

  • +
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+selected_columns(filter: Optional[dict] = None) XAOmniOutlinerSelectedColumnList[source]
+

Returns a list of selected columns, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+selected_rows(filter: Optional[dict] = None) XAOmniOutlinerSelectedRowList[source]
+

Returns a list of selected rows, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+property sorting_postponed: bool
+

Whether sorting is currently postponed for the document.

+
+ +
+
+property status_sort_order: SortOrder
+

The sort order used for the status checkbox in the topic column.

+
+ +
+
+property status_visible: bool
+

Whether the status checkbox is visible in the outline column.

+
+ +
+
+property store_compressed: bool
+

Whether xml should be compressed when saved.

+
+ +
+
+property style: XAOmniOutlinerStyle
+

The default style for the document.

+
+ +
+
+property title: str
+

This is the title of the document.

+
+ +
+
+property topic_column: XAOmniOutlinerColumn
+

The column of the document that displays the hierarchy of rows.

+
+ +
+
+property topiccolumnid: str
+

The topic column id for newly created documents.

+
+ +
+
+undo()[source]
+

Undoes the most recent change.

+
+

New in version 0.0.9.

+
+
+ +
+
+property undo_enabled: bool
+

Controls whether undo is currently enabled in the document. This should be used very carefully. If it is set to ‘false’, all previously registered undo events will be removed and any further modifications to the document will not record undo operations.

+
+ +
+
+ungroup(rows: Optional[Union[XAOmniOutlinerRow, XAOmniOutlinerRowList, list[PyXA.apps.OmniOutliner.XAOmniOutlinerRow]]] = None)[source]
+

Decrease the outline level of all children of a row, moving them left one step.

+
+
Parameters:
+

rows (Union[XAOmniOutlinerRow, XAOmniOutlinerRowList, list[XAOmniOutlinerRow], None], optional) – The rows to ungroup, defaults to None

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+unhoist(documents: Optional[Union[XAOmniOutlinerDocument, XAOmniOutlinerDocumentList, list[PyXA.apps.OmniOutliner.XAOmniOutlinerDocument]]] = None, unhoist_all: bool = False)[source]
+

Show rows hidden in the last hoist operation on a document.

+
+
Parameters:
+
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+property vertical_grid_color: XAColor
+

The color hairline dividers between columns.

+
+ +
+
+property visible: bool
+

Whether the interface for the document is visible. Note that miniaturized counts as visible. Mostly this isn’t useful to third parties right now.

+
+ +
+
+property writes_wrapper: bool
+

If set to true, this indicates that the document will write itself as a file wrapper (folder).

+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of OmniOutliner documents that employs fast enumeration techniques.

+

All properties of documents can be called as methods on the wrapped list, returning a list containing each document’s value for the property.

+
+

New in version 0.0.9.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

alternate_color()

background_color()

canredo()

canundo()

children_are_sections()

column_title_style()

editable()

file()

folded_editing_enabled()

has_subtopics()

horizontal_grid_color()

id()

modified()

name()

note_column()

note_display()

notecolumnid()

save_identifier()

save_identifier_enabled()

sorting_postponed()

status_sort_order()

status_visible()

store_compressed()

style()

title()

topic_column()

topiccolumnid()

undo_enabled()

verticalGridColor()

visible()

writes_wrapper()

+
+
+alternate_color() list[PyXA.XABase.XAColor][source]
+
+ +
+
+background_color() list[PyXA.XABase.XAColor][source]
+
+ +
+
+canredo() list[bool][source]
+
+ +
+
+canundo() list[bool][source]
+
+ +
+
+children_are_sections() list[bool][source]
+
+ +
+
+column_title_style() XAOmniOutlinerStyleList[source]
+
+ +
+
+editable() list[bool][source]
+
+ +
+
+file() list[PyXA.XABase.XAPath][source]
+
+ +
+
+folded_editing_enabled() list[bool][source]
+
+ +
+
+has_subtopics() list[bool][source]
+
+ +
+
+horizontal_grid_color() list[PyXA.XABase.XAColor][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+modified() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+note_column() XAOmniOutlinerColumnList[source]
+
+ +
+
+note_display() list[PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.DisplayType][source]
+
+ +
+
+notecolumnid() list[str][source]
+
+ +
+
+save_identifier() list[str][source]
+
+ +
+
+save_identifier_enabled() list[bool][source]
+
+ +
+
+sorting_postponed() list[bool][source]
+
+ +
+
+status_sort_order() list[PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.SortOrder][source]
+
+ +
+
+status_visible() list[bool][source]
+
+ +
+
+store_compressed() list[bool][source]
+
+ +
+
+style() XAOmniOutlinerStyleList[source]
+
+ +
+
+title() list[str][source]
+
+ +
+
+topic_column() XAOmniOutlinerColumnList[source]
+
+ +
+
+topiccolumnid() list[str][source]
+
+ +
+
+undo_enabled() list[bool][source]
+
+ +
+
+verticalGridColor() list[PyXA.XABase.XAColor][source]
+
+ +
+
+visible() list[bool][source]
+
+ +
+
+writes_wrapper() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentType(properties)[source]
+

Bases: XAObject

+

A document type in OmniOutliner.app.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + + + + + + + +

display_name

A user-presentable display name for this document type.

file_extensions

File extensions for this document type.

uti

The Uniform Type Identifier for this document type.

+
+
+property display_name: str
+

A user-presentable display name for this document type.

+
+ +
+
+property file_extensions: list[str]
+

File extensions for this document type.

+
+ +
+
+property uti: str
+

The Uniform Type Identifier for this document type.

+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentTypeList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList

+

A wrapper around lists of document types that employs fast enumeration techniques.

+

All properties of document types can be called as methods on the wrapped list, returning a list containing each types’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerEnumeration(properties)[source]
+

Bases: XAObject

+

An enumeration in OmniOutliner.app.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + + + + + + + +

id

An identifier for the enumeration that is unique within the column.

index

The index of the enumeration member in the column.

name

The name of the enumeration.

+

Methods:

+ + + + + + +

move_to(destination)

Moves the enumeration to a new column.

+
+
+property id: str
+

An identifier for the enumeration that is unique within the column.

+
+ +
+
+property index: str
+

The index of the enumeration member in the column.

+
+ +
+
+move_to(destination: XAOmniOutlinerColumn)[source]
+

Moves the enumeration to a new column.

+
+
Parameters:
+

destination (XAOmniOutlinerColumn) – The column to move the enumeration to

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+property name: str
+

The name of the enumeration.

+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerEnumerationList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of enumerations that employs fast enumeration techniques.

+

All properties of enumerations can be called as methods on the wrapped list, returning a list containing each enumeration’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerFileAttachment(properties)[source]
+

Bases: XAText

+

A file attachment object in OmniOutliner.app.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + + + + +

embdedded

If true, the attached file will reside inside the document on the next save.

file_name

The path to the file for the attachment, if the attachment resides outside the document.

+
+
+property embdedded: bool
+

If true, the attached file will reside inside the document on the next save.

+
+ +
+
+property file_name: str
+

The path to the file for the attachment, if the attachment resides outside the document.

+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerFileAttachmentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XATextList

+

A wrapper around lists of file attachments that employs fast enumeration techniques.

+

All properties of file attachments can be called as methods on the wrapped list, returning a list containing attachments texts’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerFollowingSibling(properties)[source]
+

Bases: XAOmniOutlinerRow

+

The row which follows this row.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerFollowingSiblingList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAOmniOutlinerRowList

+

A wrapper around lists of following siblings that employs fast enumeration techniques.

+

All properties of following siblings can be called as methods on the wrapped list, returning a list containing each siblings’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor(properties)[source]
+

Bases: XAObject

+

A generic color value.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

a

archive

If the color cannot be represented in any other format, a binary archive is placed in this property.

b

If the color is in a RGB color space, this is the calibrated floating point blue component, from zero to one.

c

If the color is in a CMYK color space, this is the device-specific floating point cyan component, from zero to one.

catalog

If the color is in a catalog color space, this is the name of the catalog.

g

If the color is in a RGB color space, this is the calibrated floating point green component, from zero to one.

h

If the color is in a HSV color space, this is the calibrated floating point hue component, from zero to one.

k

If the color is in a CMYK color space, this is the device-specific floating point black component, from zero to one.

m

If the color is in a CMYK color space, this is the device-specific floating point magenta component, from zero to one.

name

If the color is in a catalog color space, this is the name of color with in the catalog.

png

If the color is in a pattern color space, this is PNG data for the image representing the pattern.

r

If the color is in a RGB color space, this is the calibrated floating point red component, from zero to one.

s

If the color is in a HSV color space, this is the calibrated floating point saturation component, from zero to one.

tiff

If the color is in a pattern color space, this is TIFF data for the image representing the pattern.

v

If the color is in a HSV color space, this is the calibrated floating point value component, from zero to on.

w

If the color is in a White color space, this is the calibrated floating point white component, from zero to one, with zero being totally black and one being totally white.

y

If the color is in a CMYK color space, this is the device-specific floating point yellow component, from zero to one.

+
+
+property a: float
+
+ +
+
+property archive: XAOmniOutlinerArchiveData
+

If the color cannot be represented in any other format, a binary archive is placed in this property.

+
+ +
+
+property b: float
+

If the color is in a RGB color space, this is the calibrated floating point blue component, from zero to one.

+
+ +
+
+property c: float
+

If the color is in a CMYK color space, this is the device-specific floating point cyan component, from zero to one. There is currently no support for calibrated CYMK color spaces.

+
+ +
+
+property catalog: str
+

If the color is in a catalog color space, this is the name of the catalog.

+
+ +
+
+property g: float
+

If the color is in a RGB color space, this is the calibrated floating point green component, from zero to one.

+
+ +
+
+property h: float
+

If the color is in a HSV color space, this is the calibrated floating point hue component, from zero to one.

+
+ +
+
+property k: float
+

If the color is in a CMYK color space, this is the device-specific floating point black component, from zero to one. There is currently no support for calibrated CYMK color spaces.

+
+ +
+
+property m: float
+

If the color is in a CMYK color space, this is the device-specific floating point magenta component, from zero to one. There is currently no support for calibrated CYMK color spaces.

+
+ +
+
+property name: str
+

If the color is in a catalog color space, this is the name of color with in the catalog.

+
+ +
+
+property png: XAOmniOutlinerPNGData
+

If the color is in a pattern color space, this is PNG data for the image representing the pattern.

+
+ +
+
+property r: float
+

If the color is in a RGB color space, this is the calibrated floating point red component, from zero to one.

+
+ +
+
+property s: float
+

If the color is in a HSV color space, this is the calibrated floating point saturation component, from zero to one.

+
+ +
+
+property tiff: XAOmniOutlinerTIFFData
+

If the color is in a pattern color space, this is TIFF data for the image representing the pattern.

+
+ +
+
+property v: float
+

If the color is in a HSV color space, this is the calibrated floating point value component, from zero to on.

+
+ +
+
+property w: float
+

If the color is in a White color space, this is the calibrated floating point white component, from zero to one, with zero being totally black and one being totally white.

+
+ +
+
+property y: float
+

If the color is in a CMYK color space, this is the device-specific floating point yellow component, from zero to one. There is currently no support for calibrated CYMK color spaces.

+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerLeaf(properties)[source]
+

Bases: XAOmniOutlinerRow

+

The leaf rows underneath a document or row. Note that a row is not its own leaf, so if you access this on a single row with no children, that row will not be returned (use the command ‘bottom rows’ for that).

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerLeafList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAOmniOutlinerRowList

+

A wrapper around lists of leaf rows that employs fast enumeration techniques.

+

All properties of leaf rows can be called as methods on the wrapped list, returning a list containing each leaf row’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerLevelStyle(properties)[source]
+

Bases: XAObject

+

A level style object in a document.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerLevelStyleList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAOmniOutlinerStyleList

+

A wrapper around lists of level styles that employs fast enumeration techniques.

+

All properties of level styles can be called as methods on the wrapped list, returning a list containing each style’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerNamedStyle(properties)[source]
+

Bases: XAOmniOutlinerStyle

+

A named style object.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + + + + +

id

An identifier for the named style that is unique within its document.

name

The name of the style.

+
+
+property id: str
+

An identifier for the named style that is unique within its document. Currently this identifier is not persistent between two different sessions of editing the document.

+
+ +
+
+property name: str
+

The name of the style. Must be unique within the containing document.

+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerNamedStyleList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAOmniOutlinerStyleList

+

A wrapper around lists of named styles that employs fast enumeration techniques.

+

All properties of named styles can be called as methods on the wrapped list, returning a list containing each styles’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerPNGData(properties)[source]
+

Bases: XAObject

+

A PNG data object.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerPathComponent(properties)[source]
+

Bases: XAOmniOutlinerRow

+

A list of rows up to and including the given row.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerPathComponentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAOmniOutlinerRowList

+

A wrapper around lists of path components that employs fast enumeration techniques.

+

All properties of path components can be called as methods on the wrapped list, returning a list containing each path component’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerPoint(properties)[source]
+

Bases: XAObject

+

A point value.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + + + + +

x

The x coordinate of the point.

y

The x coordinate of the point.

+
+
+property x: float
+

The x coordinate of the point.

+
+ +
+
+property y: float
+

The x coordinate of the point.

+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerPrecedingSibling(properties)[source]
+

Bases: XAOmniOutlinerRow

+

The row which precedes this row.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerPrecedingSiblingList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAOmniOutlinerRowList

+

A wrapper around lists of preceding siblings that employs fast enumeration techniques.

+

All properties of preceding siblings can be called as methods on the wrapped list, returning a list containing each siblings’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerPreference(properties)[source]
+

Bases: XAObject

+

A row object in OmniOutliner.app.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + + + + + + + +

default_value

The default value of the preference.

id

The identifier of the preference.

value

The current value of the preference.

+
+
+property default_value: Optional[Union[str, float, int, bool]]
+

The default value of the preference.

+
+ +
+
+property id: str
+

The identifier of the preference.

+
+ +
+
+property value: Optional[Union[str, float, int, bool]]
+

The current value of the preference.

+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerPreferenceList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of preferences that employs fast enumeration techniques.

+

All properties of preferences can be called as methods on the wrapped list, returning a list containing each preference’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerReadableDocumentType(properties)[source]
+

Bases: XAOmniOutlinerDocumentType

+

A readable document type in OmniOutliner.app.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerReadableDocumentTypeList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAOmniOutlinerDocumentTypeList

+

A wrapper around lists of readable document types that employs fast enumeration techniques.

+

All properties of document types can be called as methods on the wrapped list, returning a list containing each types’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerRichText(properties)[source]
+

Bases: XAText, XADeletable

+

A row object in OmniOutliner.app.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + +

alignment

Alignment of the text.

baseline_offset

Number of pixels shifted above or below the normal baseline.

style

The style of the text.

superscript

The superscript level of the text.

underlined

Is the first character underlined?

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

bold()

Bolds the text.

file_attachments([filter])

Returns a list of file attachments, as PyXA objects, matching the given filter.

italicize()

Italicizes the text.

replace(replacement[, regex_to_find, ...])

Replaces the text.

unbold()

Unbolds the text.

underline()

Underlines the text.

unitalicize()

Unitalicizes the text.

ununderline()

Ununderlines the text.

+
+
+property alignment: Alignment
+

Alignment of the text.

+
+ +
+
+property baseline_offset: float
+

Number of pixels shifted above or below the normal baseline.

+
+ +
+
+bold()[source]
+

Bolds the text.

+
+

New in version 0.0.9.

+
+
+ +
+
+file_attachments(filter: Optional[dict] = None) XAOmniOutlinerFileAttachmentList[source]
+

Returns a list of file attachments, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+italicize()[source]
+

Italicizes the text.

+
+

New in version 0.0.9.

+
+
+ +
+
+replace(replacement: str, regex_to_find: Optional[str] = None, string_to_find: Optional[str] = None)[source]
+

Replaces the text.

+
+
Parameters:
+
    +
  • replacement (str) – The replacement strng

  • +
  • regex_to_find (Union[str, None], optional) – Regular expression to find and replace, defaults to None

  • +
  • string_to_find (Union[str, None], optional) – String to find and replace, defaults to None

  • +
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+property style: XAOmniOutlinerStyle
+

The style of the text.

+
+ +
+
+property superscript: int
+

The superscript level of the text.

+
+ +
+
+unbold()[source]
+

Unbolds the text.

+
+

New in version 0.0.9.

+
+
+ +
+
+underline()[source]
+

Underlines the text.

+
+

New in version 0.0.9.

+
+
+ +
+
+property underlined: bool
+

Is the first character underlined?

+
+ +
+
+unitalicize()[source]
+

Unitalicizes the text.

+
+

New in version 0.0.9.

+
+
+ +
+
+ununderline()[source]
+

Ununderlines the text.

+
+

New in version 0.0.9.

+
+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerRichTextList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XATextList

+

A wrapper around lists of rich texts that employs fast enumeration techniques.

+

All properties of rich texts can be called as methods on the wrapped list, returning a list containing each texts’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerRow(properties)[source]
+

Bases: XAObject

+

A row object in OmniOutliner.app.

+
+

New in version 0.0.9.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

add(items)

Adds objects to the row.

add_to(destination)

Adds the row to a location.

ancestors([filter])

Returns a list of ancestors, as PyXA objects, matching the given filter.

cells([filter])

Returns a list of cells, as PyXA objects, matching the given filter.

children([filter])

Returns a list of children, as PyXA objects, matching the given filter.

collapse_all([items])

Collapses a row or list of rows.

conduit_setting_domains([filter])

Returns a list of conduit setting domains, as PyXA objects, matching the given filter.

expand_all([items])

Expands a row or list of rows.

following_siblings([filter])

Returns a list of following siblings, as PyXA objects, matching the given filter.

group([rows])

Increase the outline level of a list of rows by creating a new parent row for them and moving under that new row.

hoist([rows])

Hide all rows in the outline, except for the descendants of the row passed to this command.

import_file(file)

Imports a file, as rows, to a specified location.

indent()

Indents the row.

leaves([filter])

Returns a list of leaves, as PyXA objects, matching the given filter.

outdent()

Outdents the row.

paragraphs([filter])

Returns a list of paragraphs, as PyXA objects, matching the given filter.

pbcopy(items[, type, clipboard_name])

Copies one or more nodes to the clipboard.

pbpaste(location[, clipboard_name])

Pastes nodes from the clipboard.

preceding_siblings([filter])

Returns a list of preceding siblings, as PyXA objects, matching the given filter.

remove(items)

Remove objects from the row.

remove_from(container)

Removes the row from a location.

rowpath([filter])

Returns a row path, or list of path components as PyXA objects, matching the given filter.

rows([filter])

Returns a list of rows, as PyXA objects, matching the given filter.

sections([filter])

Returns a list of sections, as PyXA objects, matching the given filter.

selected_rows([filter])

Returns a list of selected rows, as PyXA objects, matching the given filter.

ungroup([rows])

Decrease the outline level of all children of a row, moving them left one step.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

children_are_sections

Whether the row's children are treated as separate sections.

document

The document containing the row.

expanded

Whether the row's subtopics are visible.

has_subtopics

Whether the row has any subtopics.

id

An identifier for the row that is unique within the document.

index

The index of the row among its siblings.

level

How 'deep' this item is.

name

The name of the row (just a plain string version of the topic).

note

Contents of the note column.

note_cell

The cell for the note column in the row.

note_expanded

Whether inline note is currently displayed.

parent

The row that contains this row.

selected

This is true if the row is selected.

state

The state of the check box for this row.

style

The style of the row.

topic

Contents of the outline column.

topic_cell

The cell for the topic column in the row.

visible

Whether this row is in the outline view.

+
+
+add(items: Union[XAObject, list[PyXA.XABase.XAObject]])[source]
+

Adds objects to the row.

+
+
Parameters:
+

items (Union[XABase.XAObject, list[XABase.XAObject]]) – The object(s) to add

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+add_to(destination: XAObject)[source]
+

Adds the row to a location.

+
+
Parameters:
+

destination (XABase.XAObject) – The container to which to add the row

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+ancestors(filter: Optional[dict] = None) XAOmniOutlinerAncestorList[source]
+

Returns a list of ancestors, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+cells(filter: Optional[dict] = None) XAOmniOutlinerCellList[source]
+

Returns a list of cells, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+children(filter: Optional[dict] = None) XAOmniOutlinerChildList[source]
+

Returns a list of children, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+property children_are_sections: bool
+

Whether the row’s children are treated as separate sections.

+
+ +
+
+collapse_all(items: Optional[Union[XAOmniOutlinerRow, list[PyXA.apps.OmniOutliner.XAOmniOutlinerRow], XAOmniOutlinerRowList]] = None)[source]
+

Collapses a row or list of rows.

+
+
Parameters:
+

items (Union[XAOmniOutlinerRow, list[XAOmniOutlinerRow], XAOmniOutlinerRowList, None], optional) – The row(s) to collapse, defaults to None

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+conduit_setting_domains(filter: Optional[dict] = None) XAOmniOutlinerConduitSettingDomainList[source]
+

Returns a list of conduit setting domains, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+property document: XAOmniOutlinerDocument
+

The document containing the row.

+
+ +
+
+expand_all(items: Optional[Union[XAOmniOutlinerRow, list[PyXA.apps.OmniOutliner.XAOmniOutlinerRow], XAOmniOutlinerRowList]] = None)[source]
+

Expands a row or list of rows.

+
+
Parameters:
+

items (Union[XAOmniOutlinerRow, list[XAOmniOutlinerRow], XAOmniOutlinerRowList, None], optional) – The row(s) to expand, defaults to None

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+property expanded: bool
+

Whether the row’s subtopics are visible.

+
+ +
+
+following_siblings(filter: Optional[dict] = None) XAOmniOutlinerFollowingSiblingList[source]
+

Returns a list of following siblings, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+group(rows: Optional[Union[XAOmniOutlinerRow, XAOmniOutlinerRowList, list[PyXA.apps.OmniOutliner.XAOmniOutlinerRow]]] = None)[source]
+

Increase the outline level of a list of rows by creating a new parent row for them and moving under that new row.

+
+
Parameters:
+

rows (Union[XAOmniOutlinerRow, XAOmniOutlinerRowList, list[XAOmniOutlinerRow], None], optional) – The rows to group, defaults to None

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+property has_subtopics: bool
+

Whether the row has any subtopics.

+
+ +
+
+hoist(rows: Optional[Union[XAOmniOutlinerRow, XAOmniOutlinerRowList, list[PyXA.apps.OmniOutliner.XAOmniOutlinerRow]]] = None)[source]
+

Hide all rows in the outline, except for the descendants of the row passed to this command.

+
+
Parameters:
+

rows (Union[XAOmniOutlinerRow, XAOmniOutlinerRowList, list[XAOmniOutlinerRow], None], optional) – The rows to hoist, defaults to None

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+property id: str
+

An identifier for the row that is unique within the document.

+
+ +
+
+import_file(file: Union[str, XAPath])[source]
+

Imports a file, as rows, to a specified location. Returns the list of imported rows.

+
+
Parameters:
+

file (Union[str, XABase.XAPath]) – The file to import

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+indent()[source]
+

Indents the row.

+
+

New in version 0.0.9.

+
+
+ +
+
+property index: int
+

The index of the row among its siblings.

+
+ +
+
+leaves(filter: Optional[dict] = None) XAOmniOutlinerLeafList[source]
+

Returns a list of leaves, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+property level: int
+

How ‘deep’ this item is. Top-level rows are level 1, subtopics of those rows are level 2, and so on.

+
+ +
+
+property name: str
+

The name of the row (just a plain string version of the topic).

+
+ +
+
+property note: XAOmniOutlinerRichText
+

Contents of the note column.

+
+ +
+
+property note_cell: XAOmniOutlinerCell
+

The cell for the note column in the row.

+
+ +
+
+property note_expanded: bool
+

Whether inline note is currently displayed.

+
+ +
+
+outdent()[source]
+

Outdents the row.

+
+

New in version 0.0.9.

+
+
+ +
+
+paragraphs(filter: Optional[dict] = None) XAParagraphList[source]
+

Returns a list of paragraphs, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+property parent: XAOmniOutlinerRow
+

The row that contains this row.

+
+ +
+
+pbcopy(items: list[PyXA.XABase.XAObject], type: Optional[Union[str, list[str]]] = None, clipboard_name: Optional[str] = None)[source]
+

Copies one or more nodes to the clipboard.

+
+
Parameters:
+
    +
  • items (list[XABase.XAObject]) – The list of items to copy to the clipboard

  • +
  • type (Union[str, list[str], None], optional) – The list of type identifier to use when copying the trees. If omitted, all writable clipboard types are used, defaults to None

  • +
  • clipboard_name (Union[str, None], optional) – The name of the clipboard to copy to, defaults to None

  • +
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+pbpaste(location: XAObject, clipboard_name: Optional[str] = None)[source]
+

Pastes nodes from the clipboard.

+
+
Parameters:
+
    +
  • location (XABase.XAObject) – The location at which to paste the nodes

  • +
  • clipboard_name (Union[str, None], optional) – The name of the clipboard to paste from, defaults to None

  • +
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+preceding_siblings(filter: Optional[dict] = None) XAOmniOutlinerPrecedingSiblingList[source]
+

Returns a list of preceding siblings, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+remove(items: Union[XAObject, list[PyXA.XABase.XAObject]])[source]
+

Remove objects from the row.

+
+
Parameters:
+

items (Union[XABase.XAObject, list[XABase.XAObject]]) – The object(s) to remove

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+remove_from(container: XAObject)[source]
+

Removes the row from a location.

+
+
Parameters:
+

container (XABase.XAObject) – The container from which to remove the row

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+rowpath(filter: Optional[dict] = None) XAOmniOutlinerPathComponentList[source]
+

Returns a row path, or list of path components as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+rows(filter: Optional[dict] = None) XAOmniOutlinerRowList[source]
+

Returns a list of rows, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+sections(filter: Optional[dict] = None) XAOmniOutlinerSectionList[source]
+

Returns a list of sections, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+property selected: bool
+

This is true if the row is selected. Note that attempts to set this while the row is not visible (collapsed parent, hoisted root isn’t an ancestor, etc.) will silently do nothing.

+
+ +
+
+selected_rows(filter: Optional[dict] = None) XAOmniOutlinerSelectedRowList[source]
+

Returns a list of selected rows, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+property state: CheckboxState
+

The state of the check box for this row.

+
+ +
+
+property style: XAOmniOutlinerStyle
+

The style of the row.

+
+ +
+
+property topic: XAOmniOutlinerRichText
+

Contents of the outline column.

+
+ +
+
+property topic_cell: XAOmniOutlinerCell
+

The cell for the topic column in the row.

+
+ +
+
+ungroup(rows: Optional[Union[XAOmniOutlinerRow, XAOmniOutlinerRowList, list[PyXA.apps.OmniOutliner.XAOmniOutlinerRow]]] = None)[source]
+

Decrease the outline level of all children of a row, moving them left one step.

+
+
Parameters:
+

rows (Union[XAOmniOutlinerRow, XAOmniOutlinerRowList, list[XAOmniOutlinerRow], None], optional) – The rows to ungroup, defaults to None

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+property visible: bool
+

Whether this row is in the outline view. It must be a descendent of the current root item taking hoisting into account, with no collapsed ancestors below the current root. Hoisted rows are visible in the outline and so are considered visible.

+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerRowList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList

+

A wrapper around lists of rows that employs fast enumeration techniques.

+

All properties of rows can be called as methods on the wrapped list, returning a list containing each row’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerSection(properties)[source]
+

Bases: XAOmniOutlinerRow

+

The sections underneath the document or row. Note that a row is not a section of itself, so if you access this on a single row, an empty list will be returned.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerSectionList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAOmniOutlinerRowList

+

A wrapper around lists of sections that employs fast enumeration techniques.

+

All properties of sections can be called as methods on the wrapped list, returning a list containing each section’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerSelectedColumn(properties)[source]
+

Bases: XAObject

+

A style object in OmniOutliner.app.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerSelectedColumnList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAOmniOutlinerColumnList

+

A wrapper around lists of selected columns that employs fast enumeration techniques.

+

All properties of columns can be called as methods on the wrapped list, returning a list containing each column’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerSelectedRow(properties)[source]
+

Bases: XAOmniOutlinerRow

+

The sections underneath the document or row. Note that a row is not a section of itself, so if you access this on a single row, an empty list will be returned.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerSelectedRowList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAOmniOutlinerRowList

+

A wrapper around lists of selected rows that employs fast enumeration techniques.

+

All properties of selected rows can be called as methods on the wrapped list, returning a list containing each selected row’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerStyle(properties)[source]
+

Bases: XAObject

+

A style object in OmniOutliner.app.

+
+

New in version 0.0.9.

+
+

Methods:

+ + + + + + + + + +

attributes([filter])

Returns a list of attributes, as PyXA objects, matching the given filter.

named_styles([filter])

Returns a list of named styles, as PyXA objects, matching the given filter.

+

Attributes:

+ + + + + + + + + +

container

The object owning the style.

font

The name of the font of the style.

+
+
+attributes(filter: Optional[dict] = None) XAOmniOutlinerAttributeList[source]
+

Returns a list of attributes, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+
+property container: XAObject
+

The object owning the style.

+
+ +
+
+property font: str
+

The name of the font of the style.

+
+ +
+
+named_styles(filter: Optional[dict] = None) XAOmniOutlinerNamedStyleList[source]
+

Returns a list of named styles, as PyXA objects, matching the given filter.

+
+

New in version 0.0.9.

+
+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerStyleList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList

+

A wrapper around lists of OmniOutliner styles that employs fast enumeration techniques.

+

All properties of styles can be called as methods on the wrapped list, returning a list containing each style’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerTIFFData(properties)[source]
+

Bases: XAObject

+

A TIFF data object.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerWindow(properties)[source]
+

Bases: XASBWindow

+

A window of OmniOutliner.app.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + +

document

The document whose contents are currently displayed in the window.

+
+
+property document: XAOmniOutlinerDocument
+

The document whose contents are currently displayed in the window.

+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerWritableDocumentType(properties)[source]
+

Bases: XAOmniOutlinerDocumentType

+

A writable document type in OmniOutliner.app.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerWritableDocumentTypeList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAOmniOutlinerDocumentTypeList

+

A wrapper around lists of writable document types that employs fast enumeration techniques.

+

All properties of document types can be called as methods on the wrapped list, returning a list containing each types’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerXslTransform(properties)[source]
+

Bases: XAObject

+

This class represents an available XSL transformation that may be applied when loading or saving documents.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

directory_extension

The prefered file extension for file-system representations of wrapped file documents handled by this plugin.

directory_index_file_name

When writing a document with attachments, this specifies the name of the index file written inside the directory containing the transformed XML.

display_name

The human readable name for the transform.

file_extension

The preferred file extension for file-system representations of flat file documents handled by this plugin.

id

A unique identifier for the transform to be used as the 'as' parameter of the 'save' command.

is_export

Returns true if the source format is a native format for OmniOutliner.

is_import

Returns true if the result format is a native format for OmniOutliner.

parameter_names

Names of all XSL parameters set on this transform.

result_format

A description of the data type produced by this transform.

source_format

A description of the data type consumed by this transform.

stylesheet

The XSL source for the transform.

write_attachments

When writing a document with attachments, this specifies whether the attachments will be written to the output location.

+

Methods:

+ + + + + + + + + +

get_parameter(parameter_name)

Gets the XPath expression currently set for a XSL parameter

set_parameter(parameter_name, value)

Sets the XPath expression for a parameter.

+
+
+property directory_extension: str
+

The prefered file extension for file-system representations of wrapped file documents handled by this plugin.

+
+ +
+
+property directory_index_file_name: str
+

When writing a document with attachments, this specifies the name of the index file written inside the directory containing the transformed XML.

+
+ +
+
+property display_name: str
+

The human readable name for the transform.

+
+ +
+
+property file_extension: str
+

The preferred file extension for file-system representations of flat file documents handled by this plugin.

+
+ +
+
+get_parameter(parameter_name: str) str[source]
+

Gets the XPath expression currently set for a XSL parameter

+
+
Parameters:
+

parameter_name (str) – The name of the parameter

+
+
Returns:
+

The XPath expression currently set for the parameter

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+property id: str
+

A unique identifier for the transform to be used as the ‘as’ parameter of the ‘save’ command.

+
+ +
+
+property is_export: bool
+

Returns true if the source format is a native format for OmniOutliner.

+
+ +
+
+property is_import: bool
+

Returns true if the result format is a native format for OmniOutliner.

+
+ +
+
+property parameter_names: str
+

Names of all XSL parameters set on this transform.

+
+ +
+
+property result_format: str
+

A description of the data type produced by this transform. For XML data types, this is the DTD public identifier.

+
+ +
+
+set_parameter(parameter_name: str, value: str)[source]
+

Sets the XPath expression for a parameter. Note that to set a string constant you must quote the string. For example “foo” means “element foo” but “‘foo’” means “constant string ‘foo’”.

+
+
Parameters:
+
    +
  • parameter_name (str) – The name of the parameter

  • +
  • value (str) – The value of the parameter

  • +
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+property source_format: str
+

A description of the data type consumed by this transform. For XML data types, this is the DTD public identifier.

+
+ +
+
+property stylesheet: str
+

The XSL source for the transform.

+
+ +
+
+property write_attachments: bool
+

When writing a document with attachments, this specifies whether the attachments will be written to the output location.

+
+ +
+ +
+
+class PyXA.apps.OmniOutliner.XAOmniOutlinerXslTransformList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of XSL transforms that employs fast enumeration techniques.

+

All properties of XSL transforms can be called as methods on the wrapped list, returning a list containing each transforms’s value for the property.

+
+

New in version 0.0.9.

+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/pages.html b/docs/reference/apps/pages.html new file mode 100644 index 0000000..a67288d --- /dev/null +++ b/docs/reference/apps/pages.html @@ -0,0 +1,1839 @@ + + + + + + + Pages Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Pages Module Reference

+
+

New in version 0.0.6.

+
+

Control the macOS Pages application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XAPagesApplication(properties)

A class for managing and interacting with Pages.app.

XAPagesContainer(properties)

A class for managing and interacting with containers in Pages.

XAPagesContainerList(properties[, filter, ...])

A wrapper around lists of containers that employs fast enumeration techniques.

XAPagesDocument(properties)

A class for managing and interacting with Pages documents.

XAPagesDocumentList(properties[, filter])

A wrapper around lists of themes that employs fast enumeration techniques.

XAPagesPage(properties)

A class for managing and interacting with pages in Pages documents.

XAPagesPageList(properties[, filter])

A wrapper around lists of pages that employs fast enumeration techniques.

XAPagesPlaceholderText(properties)

A placeholder text in Pages.app.

XAPagesPlaceholderTextList(properties[, filter])

A wrapper around lists of placeholder texts that employs fast enumeration techniques.

XAPagesSection(properties)

A class for managing and interacting with sections in Pages.

XAPagesSectionList(properties[, filter])

A wrapper around lists of sections that employs fast enumeration techniques.

XAPagesTemplate(properties)

A class for managing and interacting with Pages templates.

XAPagesTemplateList(properties[, filter])

A wrapper around lists of templates that employs fast enumeration techniques.

XAPagesWindow(properties)

A class for managing and interacting with windows in Pages.app.

+
+
+class PyXA.apps.Pages.XAPagesApplication(properties)[source]
+

Bases: XAiWorkApplication

+

A class for managing and interacting with Pages.app.

+ +
+

New in version 0.0.6.

+
+

Classes:

+ + + + + + +

ExportFormat(value[, names, module, ...])

Options for what format to export a Pages project as.

+

Methods:

+ + + + + + + + + + + + + + + +

documents([filter])

Returns a list of documents, as PyXA objects, matching the given filter.

make(specifier[, properties])

Creates a new element of the given specifier class without adding it to any list.

new_document([file_path, template])

Creates a new document at the specified path and with the specified template.

templates([filter])

Returns a list of templates, as PyXA objects, matching the given filter.

+
+
+class ExportFormat(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for what format to export a Pages project as.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

EPUB

EPUB format

MICROSOFT_WORD

MS Word format

PAGES_09

Pages 09 format

PDF

PDF format

PLAINTEXT

Plaintext format

Pages

The Pages native file format

RTF

RTF format

+
+
+EPUB = 1348825205
+

EPUB format

+
+ +
+
+MICROSOFT_WORD = 1350005348
+

MS Word format

+
+ +
+
+PAGES_09 = 1347445095
+

Pages 09 format

+
+ +
+
+PDF = 1349543014
+

PDF format

+
+ +
+
+PLAINTEXT = 1349810278
+

Plaintext format

+
+ +
+
+Pages = 1348953702
+

The Pages native file format

+
+ +
+
+RTF = 1349678182
+

RTF format

+
+ +
+ +
+
+documents(filter: Optional[dict] = None) XAPagesDocumentList[source]
+

Returns a list of documents, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned documents will have, or None

+
+
Returns:
+

The list of documents

+
+
Return type:
+

XAPagesDocumentList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+make(specifier: str, properties: dict = None)[source]
+

Creates a new element of the given specifier class without adding it to any list.

+

Use XABase.XAList.push() to push the element onto a list.

+
+
Parameters:
+
    +
  • specifier (str) – The classname of the object to create

  • +
  • properties (dict) – The properties to give the object

  • +
+
+
Returns:
+

A PyXA wrapped form of the object

+
+
Return type:
+

XABase.XAObject

+
+
Example 1:
+

Making a new document

+
+
+
>>> import PyXA
+>>> pages = PyXA.Application("Pages")
+>>> new_doc = pages.make("document", {"bodyText": "This is a whole new document!"})
+>>> pages.documents().push(new_doc)
+
+
+
+
Example 3:
+

Making new elements on a page

+
+
+
>>> import PyXA
+>>> pages = PyXA.Application("Pages")
+>>> new_line = pages.make("line", {"startPoint": (100, 100), "endPoint": (200, 200)})
+>>> pages.documents()[0].pages()[0].lines().push(new_line)
+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+new_document(file_path: Union[str, XAPath] = './Untitled.pages', template: XAPagesTemplate = None) XAPagesDocument[source]
+

Creates a new document at the specified path and with the specified template.

+
+
Parameters:
+
    +
  • file_path (str, optional) – The path to create the document at, defaults to “./Untitled.key”

  • +
  • template (XAPagesPage, optional) – The template to initialize the document with, defaults to None

  • +
+
+
Returns:
+

The newly created document object

+
+
Return type:
+

XAPagesDocument

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+templates(filter: Optional[dict] = None) XAPagesTemplateList[source]
+

Returns a list of templates, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned templates will have, or None

+
+
Returns:
+

The list of templates

+
+
Return type:
+

XAPagesTemplateList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+ +
+
+class PyXA.apps.Pages.XAPagesContainer(properties)[source]
+

Bases: XAiWorkContainer

+

A class for managing and interacting with containers in Pages.

+
+

New in version 0.0.8.

+
+
+ +
+
+class PyXA.apps.Pages.XAPagesContainerList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAiWorkContainerList

+

A wrapper around lists of containers that employs fast enumeration techniques.

+
+

New in version 0.0.8.

+
+
+ +
+
+class PyXA.apps.Pages.XAPagesDocument(properties)[source]
+

Bases: XAiWorkDocument

+

A class for managing and interacting with Pages documents.

+
+

See also

+

XAPagesApplication

+
+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

audio_clips([filter])

Returns a list of audio clips, as PyXA objects, matching the given filter.

charts([filter])

Returns a list of charts, as PyXA objects, matching the given filter.

export([file_path, format])

Exports the document in the specified format.

groups([filter])

Returns a list of groups, as PyXA objects, matching the given filter.

images([filter])

Returns a list of images, as PyXA objects, matching the given filter.

iwork_items([filter])

Returns a list of iWork items, as PyXA objects, matching the given filter.

lines([filter])

Returns a list of lines, as PyXA objects, matching the given filter.

movies([filter])

Returns a list of movies, as PyXA objects, matching the given filter.

new_page(text)

Creates a new page at the end of the document.

pages([filter])

Returns a list of pages, as PyXA objects, matching the given filter.

placeholder_texts([filter])

Returns a list of placeholder texts, as PyXA objects, matching the given filter.

sections([filter])

Returns a list of sections, as PyXA objects, matching the given filter.

shapes([filter])

Returns a list of shapes, as PyXA objects, matching the given filter.

tables([filter])

Returns a list of tables, as PyXA objects, matching the given filter.

text_items([filter])

Returns a list of text items, as PyXA objects, matching the given filter.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

body_text

The document body text.

current_page

The current page of the document.

document_body

Whether the document has body text.

document_template

The template assigned to the document.

facing_pages

Whether the document has facing pages.

properties

All properties of the document.

+
+
+audio_clips(filter: Optional[dict] = None) XAiWorkAudioClipList[source]
+

Returns a list of audio clips, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned audio clips will have, or None

+
+
Returns:
+

The list of audio clips

+
+
Return type:
+

iWorkApplicationBase.XAiWorkAudioClipList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property body_text: XAText
+

The document body text.

+
+ +
+
+charts(filter: Optional[dict] = None) XAiWorkChartList[source]
+

Returns a list of charts, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned charts will have, or None

+
+
Returns:
+

The list of charts

+
+
Return type:
+

iWorkApplicationBase.XAiWorkChartList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property current_page: XAPagesPage
+

The current page of the document.

+
+ +
+
+property document_body: bool
+

Whether the document has body text.

+
+ +
+
+property document_template: XAPagesTemplate
+

The template assigned to the document.

+
+ +
+
+export(file_path: Union[str, NSURL] = None, format: ExportFormat = ExportFormat.PDF)[source]
+

Exports the document in the specified format.

+
+
Parameters:
+
    +
  • file_path (Union[str, AppKit.NSURL], optional) – The path to save the exported file at, defaults to None

  • +
  • format (XAPagesApplication.ExportFormat, optional) – The format to export the file in, defaults to XAPagesApplication.ExportFormat.PDF

  • +
+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+property facing_pages: bool
+

Whether the document has facing pages.

+
+ +
+
+groups(filter: Optional[dict] = None) XAiWorkGroupList[source]
+

Returns a list of groups, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned groups will have, or None

+
+
Returns:
+

The list of groups

+
+
Return type:
+

iWorkApplicationBase.XAiWorkGroupList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+images(filter: Optional[dict] = None) XAiWorkImageList[source]
+

Returns a list of images, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned images will have, or None

+
+
Returns:
+

The list of images

+
+
Return type:
+

iWorkApplicationBase.XAiWorkImageList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+iwork_items(filter: Optional[dict] = None) XAiWorkiWorkItemList[source]
+

Returns a list of iWork items, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned iWork items will have, or None

+
+
Returns:
+

The list of iWork items

+
+
Return type:
+

iWorkApplicationBase.XAiWorkiWorkItemList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+lines(filter: Optional[dict] = None) XAiWorkLineList[source]
+

Returns a list of lines, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned lines will have, or None

+
+
Returns:
+

The list of lines

+
+
Return type:
+

iWorkApplicationBase.XAiWorkLineList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+movies(filter: Optional[dict] = None) XAiWorkMovieList[source]
+

Returns a list of movies, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned movies will have, or None

+
+
Returns:
+

The list of movies

+
+
Return type:
+

iWorkApplicationBase.XAiWorkMovieList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+new_page(text: Union[str, XAText]) XAPagesPage[source]
+

Creates a new page at the end of the document.

+
+
Parameters:
+

text (Union[str, XABase.XAText]) – The text to initialize the new page with

+
+
Returns:
+

A reference to the newly created page object

+
+
Return type:
+

XAPagesPage

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+pages(filter: Optional[dict] = None) XAPagesPageList[source]
+

Returns a list of pages, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned pages will have, or None

+
+
Returns:
+

The list of pages

+
+
Return type:
+

XAPagesPageList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+placeholder_texts(filter: Optional[dict] = None) XAPagesPlaceholderTextList[source]
+

Returns a list of placeholder texts, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned placeholder texts will have, or None

+
+
Returns:
+

The list of placeholder texts

+
+
Return type:
+

XAPagesPlaceholderTextList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property properties: dict
+

All properties of the document.

+
+ +
+
+sections(filter: Optional[dict] = None) XAPagesSectionList[source]
+

Returns a list of sections, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned sections will have, or None

+
+
Returns:
+

The list of sections

+
+
Return type:
+

XAPagesSectionList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+shapes(filter: Optional[dict] = None) XAiWorkShapeList[source]
+

Returns a list of shapes, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned shapes will have, or None

+
+
Returns:
+

The list of shapes

+
+
Return type:
+

iWorkApplicationBase.XAiWorkShapeList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+tables(filter: Optional[dict] = None) XAiWorkTableList[source]
+

Returns a list of tables, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned tables will have, or None

+
+
Returns:
+

The list of tables

+
+
Return type:
+

iWorkApplicationBase.XAiWorkTableList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+text_items(filter: Optional[dict] = None) XAiWorkTextItemList[source]
+

Returns a list of text items, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned text items will have, or None

+
+
Returns:
+

The list of text items

+
+
Return type:
+

iWorkApplicationBase.XAiWorkTextItemList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+ +
+
+class PyXA.apps.Pages.XAPagesDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAiWorkDocumentList

+

A wrapper around lists of themes that employs fast enumeration techniques.

+

All properties of themes can be called as methods on the wrapped list, returning a list containing each theme’s value for the property.

+
+

New in version 0.0.5.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

audio_clips([filter])

body_text()

by_body_text(body_text)

by_current_page(current_page)

by_document_body(document_body)

by_document_template(document_template)

by_facing_pages(facing_pages)

by_file(file)

by_id(id)

by_modified(modified)

by_name(name)

by_properties(properties)

charts([filter])

current_page()

document_body()

document_template()

facing_pages()

file()

groups([filter])

id()

images([filter])

iwork_items([filter])

lines([filter])

modified()

movies([filter])

name()

pages([filter])

placeholder_texts([filter])

properties()

sections([filter])

shapes([filter])

tables([filter])

text_items([filter])

+
+
+audio_clips(filter: Optional[dict] = None) XAiWorkAudioClipList[source]
+
+ +
+
+body_text() XATextList[source]
+
+ +
+
+by_body_text(body_text: Union[str, XAText]) Optional[XAPagesDocument][source]
+
+ +
+
+by_current_page(current_page: XAPagesPage) Optional[XAPagesDocument][source]
+
+ +
+
+by_document_body(document_body: bool) Optional[XAPagesDocument][source]
+
+ +
+
+by_document_template(document_template: XAPagesTemplate) Optional[XAPagesDocument][source]
+
+ +
+
+by_facing_pages(facing_pages: bool) Optional[XAPagesDocument][source]
+
+ +
+
+by_file(file: Union[str, XAPath]) Optional[XAPagesDocument][source]
+
+ +
+
+by_id(id: str) Optional[XAPagesDocument][source]
+
+ +
+
+by_modified(modified: bool) Optional[XAPagesDocument][source]
+
+ +
+
+by_name(name: str) Optional[XAPagesDocument][source]
+
+ +
+
+by_properties(properties: dict) Optional[XAPagesDocument][source]
+
+ +
+
+charts(filter: Optional[dict] = None) XAiWorkChartList[source]
+
+ +
+
+current_page() XAPagesPageList[source]
+
+ +
+
+document_body() list[bool][source]
+
+ +
+
+document_template() XAPagesTemplateList[source]
+
+ +
+
+facing_pages() list[bool][source]
+
+ +
+
+file() list[PyXA.XABase.XAPath][source]
+
+ +
+
+groups(filter: Optional[dict] = None) XAiWorkGroupList[source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+images(filter: Optional[dict] = None) XAiWorkImageList[source]
+
+ +
+
+iwork_items(filter: Optional[dict] = None) XAiWorkiWorkItemList[source]
+
+ +
+
+lines(filter: Optional[dict] = None) XAiWorkLineList[source]
+
+ +
+
+modified() list[bool][source]
+
+ +
+
+movies(filter: Optional[dict] = None) XAiWorkMovieList[source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+pages(filter: Optional[dict] = None) XAPagesPageList[source]
+
+ +
+
+placeholder_texts(filter: Optional[dict] = None) XAPagesPlaceholderTextList[source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+
+sections(filter: Optional[dict] = None) XAPagesSectionList[source]
+
+ +
+
+shapes(filter: Optional[dict] = None) XAiWorkShapeList[source]
+
+ +
+
+tables(filter: Optional[dict] = None) XAiWorkTableList[source]
+
+ +
+
+text_items(filter: Optional[dict] = None) XAiWorkTextItemList[source]
+
+ +
+ +
+
+class PyXA.apps.Pages.XAPagesPage(properties)[source]
+

Bases: XAPagesContainer

+

A class for managing and interacting with pages in Pages documents.

+
+

See also

+

XAPagesApplication, iWorkApplicationBase.XAiWorkiWorkItem

+
+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + +

add_image(file_path)

Adds the image at the specified path to the page.

+

Attributes:

+ + + + + + + + + +

body_text

The page body text.

properties

All properties of the page.

+
+
+add_image(file_path: Union[str, XAPath, XAImage]) XAiWorkImage[source]
+

Adds the image at the specified path to the page.

+
+
Parameters:
+

file_path (Union[str, XABase.XAPath, XABase.XAImage]) – The path to the image file

+
+
Returns:
+

The newly created image object

+
+
Return type:
+

iWorkApplicationBase.XAiWorkImage

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property body_text: XAText
+

The page body text.

+
+ +
+
+property properties: dict
+

All properties of the page.

+
+ +
+ +
+
+class PyXA.apps.Pages.XAPagesPageList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAPagesContainerList

+

A wrapper around lists of pages that employs fast enumeration techniques.

+

All properties of pages can be called as methods on the wrapped list, returning a list containing each page’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + +

body_text()

by_body_text(body_text)

by_properties(properties)

properties()

+
+
+body_text() XATextList[source]
+
+ +
+
+by_body_text(body_text: Union[str, XAText]) Optional[XAPagesPage][source]
+
+ +
+
+by_properties(properties: dict) Optional[XAPagesPage][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+ +
+
+class PyXA.apps.Pages.XAPagesPlaceholderText(properties)[source]
+

Bases: XAText

+

A placeholder text in Pages.app.

+
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + +

tag

The placeholder text's script tag.

+
+
+property tag: str
+

The placeholder text’s script tag.

+
+ +
+ +
+
+class PyXA.apps.Pages.XAPagesPlaceholderTextList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XATextList

+

A wrapper around lists of placeholder texts that employs fast enumeration techniques.

+

All properties of placeholder texts can be called as methods on the wrapped list, returning a list containing each text’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + +

by_tag(tag)

tag()

+
+
+by_tag(tag: str) Optional[XAPagesPlaceholderText][source]
+
+ +
+
+tag() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Pages.XAPagesSection(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with sections in Pages.

+
+

See also

+

XAPagesApplication, iWorkApplicationBase.XAiWorkiWorkItem

+
+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

audio_clips([filter])

Returns a list of audio clips, as PyXA objects, matching the given filter.

charts([filter])

Returns a list of charts, as PyXA objects, matching the given filter.

groups([filter])

Returns a list of groups, as PyXA objects, matching the given filter.

images([filter])

Returns a list of images, as PyXA objects, matching the given filter.

iwork_items([filter])

Returns a list of iWork items, as PyXA objects, matching the given filter.

lines([filter])

Returns a list of lines, as PyXA objects, matching the given filter.

movies([filter])

Returns a list of movies, as PyXA objects, matching the given filter.

pages([filter])

Returns a list of pages, as PyXA objects, matching the given filter.

shapes([filter])

Returns a list of shapes, as PyXA objects, matching the given filter.

tables([filter])

Returns a list of tables, as PyXA objects, matching the given filter.

text_items([filter])

Returns a list of text_items, as PyXA objects, matching the given filter.

+

Attributes:

+ + + + + + +

body_text

The section body text.

+
+
+audio_clips(filter: Optional[dict] = None) XAiWorkAudioClipList[source]
+

Returns a list of audio clips, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned audio clips will have, or None

+
+
Returns:
+

The list of audio clips

+
+
Return type:
+

iWorkApplicationBase.XAiWorkAudioClipList

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+property body_text: XAText
+

The section body text.

+
+ +
+
+charts(filter: Optional[dict] = None) XAiWorkChartList[source]
+

Returns a list of charts, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned charts will have, or None

+
+
Returns:
+

The list of charts

+
+
Return type:
+

iWorkApplicationBase.XAiWorkChartList

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+groups(filter: Optional[dict] = None) XAiWorkGroupList[source]
+

Returns a list of groups, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned groups will have, or None

+
+
Returns:
+

The list of groups

+
+
Return type:
+

iWorkApplicationBase.XAiWorkGroupList

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+images(filter: Optional[dict] = None) XAiWorkImageList[source]
+

Returns a list of images, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned images will have, or None

+
+
Returns:
+

The list of images

+
+
Return type:
+

iWorkApplicationBase.XAiWorkImageList

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+iwork_items(filter: Optional[dict] = None) XAiWorkiWorkItemList[source]
+

Returns a list of iWork items, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned iWork items will have, or None

+
+
Returns:
+

The list of iWork items

+
+
Return type:
+

iWorkApplicationBase.XAiWorkiWorkItemList

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+lines(filter: Optional[dict] = None) XAiWorkLineList[source]
+

Returns a list of lines, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned lines will have, or None

+
+
Returns:
+

The list of lines

+
+
Return type:
+

iWorkApplicationBase.XAiWorkLineList

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+movies(filter: Optional[dict] = None) XAiWorkMovieList[source]
+

Returns a list of movies, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned movies will have, or None

+
+
Returns:
+

The list of movies

+
+
Return type:
+

iWorkApplicationBase.XAiWorkMovieList

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+pages(filter: Optional[dict] = None) XAPagesPageList[source]
+

Returns a list of pages, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned pages will have, or None

+
+
Returns:
+

The list of pages

+
+
Return type:
+

XAPagesPageList

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+shapes(filter: Optional[dict] = None) XAiWorkShapeList[source]
+

Returns a list of shapes, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned shapes will have, or None

+
+
Returns:
+

The list of shapes

+
+
Return type:
+

iWorkApplicationBase.XAiWorkShapeList

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+tables(filter: Optional[dict] = None) XAiWorkTableList[source]
+

Returns a list of tables, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned tables will have, or None

+
+
Returns:
+

The list of tables

+
+
Return type:
+

iWorkApplicationBase.XAiWorkTableList

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+text_items(filter: Optional[dict] = None) XAiWorkTextItemList[source]
+

Returns a list of text_items, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned text_items will have, or None

+
+
Returns:
+

The list of text_items

+
+
Return type:
+

iWorkApplicationBase.XAiWorkTextItemList

+
+
+
+

New in version 0.0.2.

+
+
+ +
+ +
+
+class PyXA.apps.Pages.XAPagesSectionList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of sections that employs fast enumeration techniques.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

audio_clips([filter])

body_text()

by_body_text(body_text)

charts([filter])

groups([filter])

images([filter])

iwork_items([filter])

lines([filter])

movies([filter])

pages([filter])

shapes([filter])

tables([filter])

text_items([filter])

+
+
+audio_clips(filter: Optional[dict] = None) XAiWorkAudioClipList[source]
+
+ +
+
+body_text() XATextList[source]
+
+ +
+
+by_body_text(body_text: Union[str, XAText]) Optional[XAPagesSection][source]
+
+ +
+
+charts(filter: Optional[dict] = None) XAiWorkChartList[source]
+
+ +
+
+groups(filter: Optional[dict] = None) XAiWorkGroupList[source]
+
+ +
+
+images(filter: Optional[dict] = None) XAiWorkImageList[source]
+
+ +
+
+iwork_items(filter: Optional[dict] = None) XAiWorkiWorkItemList[source]
+
+ +
+
+lines(filter: Optional[dict] = None) XAiWorkLineList[source]
+
+ +
+
+movies(filter: Optional[dict] = None) XAiWorkMovieList[source]
+
+ +
+
+pages(filter: Optional[dict] = None) XAPagesPageList[source]
+
+ +
+
+shapes(filter: Optional[dict] = None) XAiWorkShapeList[source]
+
+ +
+
+tables(filter: Optional[dict] = None) XAiWorkTableList[source]
+
+ +
+
+text_items(filter: Optional[dict] = None) XAiWorkTextItemList[source]
+
+ +
+ +
+
+class PyXA.apps.Pages.XAPagesTemplate(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with Pages templates.

+
+

See also

+

XAPagesApplication

+
+
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + +

id

The unique identifier for the template.

name

The localized name of the template.

+
+
+property id: str
+

The unique identifier for the template.

+
+ +
+
+property name: str
+

The localized name of the template.

+
+ +
+ +
+
+class PyXA.apps.Pages.XAPagesTemplateList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of templates that employs fast enumeration techniques.

+

All properties of templates can be called as methods on the wrapped list, returning a list containing each template’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + +

by_id(id)

by_name(name)

id()

name()

+
+
+by_id(id: str) Optional[XAPagesTemplate][source]
+
+ +
+
+by_name(name: str) Optional[XAPagesTemplate][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Pages.XAPagesWindow(properties)[source]
+

Bases: XAiWorkWindow

+

A class for managing and interacting with windows in Pages.app.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + +

document

The document currently displayed in the window.

+
+
+property document: XAPagesDocument
+

The document currently displayed in the window.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/photos.html b/docs/reference/apps/photos.html new file mode 100644 index 0000000..30a40a8 --- /dev/null +++ b/docs/reference/apps/photos.html @@ -0,0 +1,1658 @@ + + + + + + + Photos Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Photos Module Reference

+
+

New in version 0.0.2.

+
+

Control the macOS Photos application using JXA-like syntax.

+
+

Todo

+
    +
  • Add support for folders and containers

  • +
  • Add image operations such as rotate, flip

  • +
  • Add ability to add new albums

  • +
  • Add ability to move photos to albums/folders

  • +
+
+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XAPhotosAlbum(properties)

An album in Photos.app.

XAPhotosAlbumList(properties[, filter])

A wrapper around lists of albums that employs fast enumeration techniques.

XAPhotosApplication(properties)

A class for managing and interacting with Photos.app.

XAPhotosContainer(properties)

A class for...

XAPhotosContainerList(properties[, filter, ...])

A wrapper around lists of containers that employs fast enumeration techniques.

XAPhotosFolder(properties)

A folder in Photos.app.

XAPhotosFolderList(properties[, filter])

A wrapper around lists of folders that employs fast enumeration techniques.

XAPhotosMediaItem(properties)

A photo or video in Photos.app.

XAPhotosMediaItemList(properties[, filter])

A wrapper around lists of media items that employs fast enumeration techniques.

+
+
+class PyXA.apps.PhotosApp.XAPhotosAlbum(properties)[source]
+

Bases: XAPhotosContainer

+

An album in Photos.app.

+
+

New in version 0.0.2.

+
+

Methods:

+ + + + + + +

media_items([filter])

Returns a list of media items, as PyXA objects, matching the given filter.

+
+
+media_items(filter: Optional[dict] = None) XAPhotosMediaItemList[source]
+

Returns a list of media items, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned media items will have, or None

+
+
Returns:
+

The list of media items

+
+
Return type:
+

XAPhotosMediaItemList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+ +
+
+class PyXA.apps.PhotosApp.XAPhotosAlbumList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAPhotosContainerList

+

A wrapper around lists of albums that employs fast enumeration techniques.

+

All properties of albums can be called as methods on the wrapped list, returning a list containing each album’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + +

push(container)

Appends the object referenced by the provided PyXA wrapper to the end of the list.

+
+
+push(container: XAPhotosContainer)[source]
+

Appends the object referenced by the provided PyXA wrapper to the end of the list.

+
+

New in version 0.0.3.

+
+
+ +
+ +
+
+class PyXA.apps.PhotosApp.XAPhotosApplication(properties)[source]
+

Bases: XASBApplication, XACanOpenPath

+

A class for managing and interacting with Photos.app.

+
+

New in version 0.0.2.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

add(media_items, album)

Adds the given list of media items to the specified album.

albums([filter])

Returns a list of albums, as PyXA objects, matching the given filter.

containers([filter])

Returns a list of containers, as PyXA objects, matching the given filter.

export(media_items, destination_path[, ...])

Exports a list of media items to the specified folder.

folders([filter])

Returns a list of folders, as PyXA objects, matching the given filter.

import_files(files[, destination_album, ...])

Imports a list of files into the specified album.

make(specifier[, properties])

Creates a new element of the given specifier class without adding it to any list.

media_items([filter])

Returns a list of media items, as PyXA objects, matching the given filter.

next_slide()

Skips to the next slide in the currently playing slideshow.

open(path)

Imports the file at the given filepath without adding it to any particular album.

pause_slideshow()

Pauses the currently playing slideshow.

previous_slide()

Skips to the previous slide in the currently playing slideshow.

resume_slideshow()

Resumes the currently playing slideshow (from a paused state).

search(query)

Searches for items matching the given search string.

start_slideshow(item_list)

Starts an ad-hoc slideshow from the given list of media items, an album, or a folder.

stop_slideshow()

Stops the currently playing slideshow.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

favorites_album

Favorited media items album.

frontmost

Whether Photos is the frontmost application.

library_path

The path to the Photos library container.

name

The name of the application.

properties

All properties of the application.

recently_deleted_album

The set of recently deleted media items.

selection

The currently selected media items in the application.

slideshow_running

Returns true if a slideshow is currently running.

version

The version of Photos.app.

+
+
+add(media_items: Union[XAPhotosMediaItemList, list[PyXA.apps.PhotosApp.XAPhotosMediaItem]], album: XAPhotosAlbum) XAPhotosApplication[source]
+

Adds the given list of media items to the specified album.

+
+
Parameters:
+
+
+
Returns:
+

The Photos application object

+
+
Return type:
+

XAPhotosApplication

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+albums(filter: Optional[dict] = None) XAPhotosAlbumList[source]
+

Returns a list of albums, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned albums will have, or None

+
+
Returns:
+

The list of albums

+
+
Return type:
+

XAPhotosAlbumList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+containers(filter: Optional[dict] = None) XAPhotosContainerList[source]
+

Returns a list of containers, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned containers will have, or None

+
+
Returns:
+

The list of containers

+
+
Return type:
+

XAPhotosContainerList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+export(media_items: Union[XAPhotosMediaItemList, list[PyXA.apps.PhotosApp.XAPhotosMediaItem]], destination_path: Union[str, NSURL], use_originals: bool = False) XAPhotosApplication[source]
+

Exports a list of media items to the specified folder.

+
+
Parameters:
+
    +
  • media_items (Union[XAPhotosMediaItemList, list[XAPhotosMediaItem]]) – The media items to export

  • +
  • destination_path (Union[str, NSURL]) – The folder to store the exported files in

  • +
  • use_originals (bool, optional) – Whether to export the original files or rendered jpgs, defaults to False

  • +
+
+
Returns:
+

The Photos application object

+
+
Return type:
+

XAPhotosApplication

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property favorites_album: XAPhotosAlbum
+

Favorited media items album.

+
+ +
+
+folders(filter: Optional[dict] = None) XAPhotosFolderList[source]
+

Returns a list of folders, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned folders will have, or None

+
+
Returns:
+

The list of folders

+
+
Return type:
+

XAPhotosFolderList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property frontmost: bool
+

Whether Photos is the frontmost application.

+
+ +
+
+import_files(files: list[Union[str, objc.NSURL]], destination_album: Optional[XAPhotosAlbum] = None, skip_duplicate_checking: bool = False) XAPhotosMediaItemList[source]
+

Imports a list of files into the specified album.

+
+
Parameters:
+
    +
  • files (list[Union[str, NSURL]]) – The files to import

  • +
  • destination_album (Union[XAPhotosAlbum, None], optional) – The album to import items into, defaults to None

  • +
  • skip_duplicate_checking (bool, optional) – Whether the skip checking duplicates and import everything, defaults to False

  • +
+
+
Returns:
+

The list of imported media items

+
+
Return type:
+

XAPhotosMediaItemList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property library_path: XAPath
+

The path to the Photos library container.

+
+ +
+
+make(specifier: str, properties: dict = None)[source]
+

Creates a new element of the given specifier class without adding it to any list.

+

Use XABase.XAList.push() to push the element onto a list.

+
+
Parameters:
+
    +
  • specifier (str) – The classname of the object to create

  • +
  • properties (dict) – The properties to give the object

  • +
+
+
Returns:
+

A PyXA wrapped form of the object

+
+
Return type:
+

XABase.XAObject

+
+
Example 1:
+

Make a new album

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Photos")
+>>> new_album = app.make("album", {"name": "PyXA"})
+>>> app.albums().push(new_album)
+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+media_items(filter: Optional[dict] = None) XAPhotosMediaItemList[source]
+

Returns a list of media items, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned media items will have, or None

+
+
Returns:
+

The list of media items

+
+
Return type:
+

XAPhotosMediaItemList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+next_slide() XAPhotosApplication[source]
+

Skips to the next slide in the currently playing slideshow.

+
+
Returns:
+

The Photos application object

+
+
Return type:
+

XAPhotosApplication

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+open(path: Union[str, XAPath, list[Union[str, PyXA.XABase.XAPath]]]) XAPhotosApplication[source]
+

Imports the file at the given filepath without adding it to any particular album.

+
+
Parameters:
+

target (Union[str, XABase.XAPath, list[str, list[XABase.XAPath]]]) – The path to a file to import into photos.

+
+
Returns:
+

The Photos application object

+
+
Return type:
+

XAPhotosApplication

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+pause_slideshow() XAPhotosApplication[source]
+

Pauses the currently playing slideshow.

+
+
Returns:
+

The Photos application object

+
+
Return type:
+

XAPhotosApplication

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+previous_slide() XAPhotosApplication[source]
+

Skips to the previous slide in the currently playing slideshow.

+
+
Returns:
+

The Photos application object

+
+
Return type:
+

XAPhotosApplication

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property properties: dict
+

All properties of the application.

+
+ +
+
+property recently_deleted_album: XAPhotosAlbum
+

The set of recently deleted media items.

+
+ +
+
+resume_slideshow() XAPhotosApplication[source]
+

Resumes the currently playing slideshow (from a paused state).

+
+
Returns:
+

The Photos application object

+
+
Return type:
+

XAPhotosApplication

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+search(query: str) XAPhotosMediaItemList[source]
+

Searches for items matching the given search string.

+
+
Parameters:
+

query (str) – The string to search

+
+
Returns:
+

A list of media items matching the search query

+
+
Return type:
+

XAPhotosMediaItemList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property selection: XAPhotosMediaItemList
+

The currently selected media items in the application.

+
+ +
+
+property slideshow_running: bool
+

Returns true if a slideshow is currently running.

+
+ +
+
+start_slideshow(item_list: Union[XAPhotosMediaItemList, XAPhotosAlbum, XAPhotosFolder]) XAPhotosApplication[source]
+

Starts an ad-hoc slideshow from the given list of media items, an album, or a folder.

+
+
Parameters:
+

item_list (Union['XAPhotosMediaItemList', 'XAPhotosAlbum', 'XAPhotosFolder']) – The list of media items, an album, or a folder to create a slideshow from

+
+
Returns:
+

The Photos application object

+
+
Return type:
+

XAPhotosApplication

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+stop_slideshow() XAPhotosApplication[source]
+

Stops the currently playing slideshow.

+
+
Returns:
+

The Photos application object

+
+
Return type:
+

XAPhotosApplication

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property version: str
+

The version of Photos.app.

+
+ +
+ +
+
+class PyXA.apps.PhotosApp.XAPhotosContainer(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for…

+

Methods:

+ + + + + + + + + +

get_clipboard_representation()

Gets a clipboard-codable representation of the container.

spotlight()

Shows the container in the front window of Photos.app.

+

Attributes:

+ + + + + + + + + + + + + + + +

id

The unique ID of this container.

name

The name of this container.

parent

This container's parent folder, if any.

properties

All properties of the container.

+
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the container.

+

When the clipboard content is set to a container, the containers’s name is added to the clipboard.

+
+
Returns:
+

The container’s name

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: str
+

The unique ID of this container.

+
+ +
+
+property name: str
+

The name of this container.

+
+ +
+
+property parent: XAPhotosFolder
+

This container’s parent folder, if any.

+
+ +
+
+property properties: dict
+

All properties of the container.

+
+ +
+
+spotlight() XAPhotosContainer[source]
+

Shows the container in the front window of Photos.app.

+
+
Returns:
+

The container object

+
+
Return type:
+

XAPhotosContainer

+
+
+
+

New in version 0.0.6.

+
+
+ +
+ +
+
+class PyXA.apps.PhotosApp.XAPhotosContainerList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around lists of containers that employs fast enumeration techniques.

+

All properties of containers can be called as methods on the wrapped list, returning a list containing each container’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_id(id)

by_name(name)

by_parent(parent)

by_properties(properties)

get_clipboard_representation()

Gets a clipboard-codable representation of each container in the list.

id()

name()

parent()

properties()

+
+
+by_id(id: str) Optional[XAPhotosContainer][source]
+
+ +
+
+by_name(name: str) Optional[XAPhotosContainer][source]
+
+ +
+
+by_parent(parent: XAPhotosFolder) Optional[XAPhotosContainer][source]
+
+ +
+
+by_properties(properties: dict) Optional[XAPhotosContainer][source]
+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of each container in the list.

+

When the clipboard content is set to a list of containers, each containers’s name is added to the clipboard.

+
+
Returns:
+

The container’s name

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+parent() XAPhotosFolderList[source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+ +
+
+class PyXA.apps.PhotosApp.XAPhotosFolder(properties)[source]
+

Bases: XAPhotosContainer

+

A folder in Photos.app.

+
+

New in version 0.0.2.

+
+

Methods:

+ + + + + + + + + + + + +

albums([filter])

Returns a list of albums, as PyXA objects, matching the given filter.

containers([filter])

Returns a list of containers, as PyXA objects, matching the given filter.

folders([filter])

Returns a list of folders, as PyXA objects, matching the given filter.

+
+
+albums(filter: Optional[dict] = None) XAPhotosAlbumList[source]
+

Returns a list of albums, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned albums will have, or None

+
+
Returns:
+

The list of albums

+
+
Return type:
+

XAPhotosAlbumList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+containers(filter: Optional[dict] = None) XAPhotosContainerList[source]
+

Returns a list of containers, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned containers will have, or None

+
+
Returns:
+

The list of containers

+
+
Return type:
+

XAPhotosContainerList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+folders(filter: Optional[dict] = None) XAPhotosFolderList[source]
+

Returns a list of folders, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned folders will have, or None

+
+
Returns:
+

The list of folders

+
+
Return type:
+

XAPhotosFolderList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+ +
+
+class PyXA.apps.PhotosApp.XAPhotosFolderList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAPhotosContainerList

+

A wrapper around lists of folders that employs fast enumeration techniques.

+

All properties of folders can be called as methods on the wrapped list, returning a list containing each folder’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + +

push(container)

Appends the object referenced by the provided PyXA wrapper to the end of the list.

+
+
+push(container: XAPhotosContainer)[source]
+

Appends the object referenced by the provided PyXA wrapper to the end of the list.

+
+

New in version 0.0.3.

+
+
+ +
+ +
+
+class PyXA.apps.PhotosApp.XAPhotosMediaItem(properties)[source]
+

Bases: XAObject, XAClipboardCodable, XAImageLike

+

A photo or video in Photos.app.

+
+

New in version 0.0.2.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

altitude

The GPS altitude in meters.

creation_date

The creation date of the media item.

duration

The duration of the media item.

favorite

Whether the media item has been favorited.

file_path

The path to the main file for the media item.

filename

The name of the file on disk.

height

The height of the media item in pixels.

id

The unique ID of the media item.

is_burst

Whether the media item is a burst photo.

is_hidden

Whether the media item is hidden.

is_photo

Whether the media item is a photo.

is_video

Whether the media item is a video.

keywords

A list of keywords to associate with a media item.

location

The GPS latitude and longitude, in an ordered list of 2 numbers or missing values.

modification_date

The last modification date of the media item.

name

The name (title) of the media item.

object_description

A description of the media item.

properties

All properties of the media item.

size

The selected media item file size.

width

The width of the media item in pixels.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

duplicate()

Duplicates the media item.

get_clipboard_representation()

Gets a clipboard-codable representation of the media item.

get_image_representation()

Gets a representation of the object that can be used to initialize an XAImage object.

reveal_in_finder()

Opens a Finder window or tab focused on the media item's containing folder with the media item selected.

show_in_preview()

Opens the media item in Preview.app.

spotlight()

Shows the media item in the front window of Photos.app.

+
+
+property altitude: float
+

The GPS altitude in meters.

+
+ +
+
+property creation_date: datetime
+

The creation date of the media item.

+
+ +
+
+duplicate() XAPhotosMediaItem[source]
+

Duplicates the media item.

+
+
Returns:
+

The newly created media item object

+
+
Return type:
+

XAPhotosMediaItem

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+property duration: float
+

The duration of the media item.

+
+ +
+
+property favorite: bool
+

Whether the media item has been favorited.

+
+ +
+
+property file_path: XAPath
+

The path to the main file for the media item.

+
+ +
+
+property filename: str
+

The name of the file on disk.

+
+ +
+
+get_clipboard_representation() NSURL[source]
+

Gets a clipboard-codable representation of the media item.

+

When the clipboard content is set to a media item, the item’s file URL is added to the clipboard.

+
+
Returns:
+

The media item’s file URL

+
+
Return type:
+

NSURL

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+get_image_representation() XAPath[source]
+

Gets a representation of the object that can be used to initialize an XAImage object.

+
+
Returns:
+

The XAImage-compatible form of this object

+
+
Return type:
+

XABase.XAPath

+
+
+
+ +
+
+property height: int
+

The height of the media item in pixels.

+
+ +
+
+property id: str
+

The unique ID of the media item.

+
+ +
+
+property is_burst: bool
+

Whether the media item is a burst photo.

+
+ +
+
+property is_hidden: bool
+

Whether the media item is hidden.

+
+ +
+
+property is_photo: bool
+

Whether the media item is a photo.

+
+ +
+
+property is_video: bool
+

Whether the media item is a video.

+
+ +
+
+property keywords: list[str]
+

A list of keywords to associate with a media item.

+
+ +
+
+property location: XALocation
+

The GPS latitude and longitude, in an ordered list of 2 numbers or missing values. Latitude in range -90.0 to 90.0, longitude in range -180.0 to 180.0.

+
+ +
+
+property modification_date: datetime
+

The last modification date of the media item.

+
+ +
+
+property name: str
+

The name (title) of the media item.

+
+ +
+
+property object_description: str
+

A description of the media item.

+
+ +
+
+property properties: dict
+

All properties of the media item.

+
+ +
+
+reveal_in_finder()[source]
+

Opens a Finder window or tab focused on the media item’s containing folder with the media item selected.

+
+

New in version 0.0.2.

+
+
+ +
+
+show_in_preview()[source]
+

Opens the media item in Preview.app.

+
+

New in version 0.0.2.

+
+
+ +
+
+property size: int
+

The selected media item file size.

+
+ +
+
+spotlight() XAPhotosMediaItem[source]
+

Shows the media item in the front window of Photos.app.

+
+
Returns:
+

The media item object

+
+
Return type:
+

XAPhotosMediaItem

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property width: int
+

The width of the media item in pixels.

+
+ +
+ +
+
+class PyXA.apps.PhotosApp.XAPhotosMediaItemList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around lists of media items that employs fast enumeration techniques.

+

All properties of media items can be called as methods on the wrapped list, returning a list containing each media item’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

altitude()

by_altitude(altitude)

by_date(date)

by_favorite(favorite)

by_filename(filename)

by_height(height)

by_id(id)

by_keywords(keywords)

by_location(location)

by_object_description(object_description)

by_properties(properties)

by_size(size)

by_title(title)

by_width(width)

creation_date()

duration()

favorite()

file_path()

filename()

get_clipboard_representation()

Gets a clipboard-codable representation of each media item in the list.

height()

id()

is_burst()

is_hidden()

is_photo()

is_video()

keywords()

location()

modification_date()

object_description()

properties()

size()

title()

width()

+
+
+altitude() list[float][source]
+
+ +
+
+by_altitude(altitude: float) Optional[XAPhotosMediaItem][source]
+
+ +
+
+by_date(date: datetime) Optional[XAPhotosMediaItem][source]
+
+ +
+
+by_favorite(favorite: bool) Optional[XAPhotosMediaItem][source]
+
+ +
+
+by_filename(filename: str) Optional[XAPhotosMediaItem][source]
+
+ +
+
+by_height(height: int) Optional[XAPhotosMediaItem][source]
+
+ +
+
+by_id(id: str) Optional[XAPhotosMediaItem][source]
+
+ +
+
+by_keywords(keywords: list[str]) Optional[XAPhotosMediaItem][source]
+
+ +
+
+by_location(location: XALocation) Optional[XAPhotosMediaItem][source]
+
+ +
+
+by_object_description(object_description: str) Optional[XAPhotosMediaItem][source]
+
+ +
+
+by_properties(properties: dict) Optional[XAPhotosMediaItem][source]
+
+ +
+
+by_size(size: int) Optional[XAPhotosMediaItem][source]
+
+ +
+
+by_title(title: str) Optional[XAPhotosMediaItem][source]
+
+ +
+
+by_width(width: int) Optional[XAPhotosMediaItem][source]
+
+ +
+
+creation_date() list[datetime.datetime][source]
+
+ +
+
+duration() list[float][source]
+
+ +
+
+favorite() list[bool][source]
+
+ +
+
+file_path() list[PyXA.XABase.XAPath][source]
+
+ +
+
+filename() list[str][source]
+
+ +
+
+get_clipboard_representation() list[objc.NSURL][source]
+

Gets a clipboard-codable representation of each media item in the list.

+

When the clipboard content is set to a list of media items, each item’s file URL is added to the clipboard.

+
+
Returns:
+

A list of media item file URLs

+
+
Return type:
+

list[NSURL]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+height() list[int][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+is_burst() list[bool][source]
+
+ +
+
+is_hidden() list[bool][source]
+
+ +
+
+is_photo() list[bool][source]
+
+ +
+
+is_video() list[bool][source]
+
+ +
+
+keywords() list[list[str]][source]
+
+ +
+
+location() list[list[Optional[float]]][source]
+
+ +
+
+modification_date() list[datetime.datetime][source]
+
+ +
+
+object_description() list[str][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+
+size() list[tuple[float, float]][source]
+
+ +
+
+title() list[str][source]
+
+ +
+
+width() list[int][source]
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/preview.html b/docs/reference/apps/preview.html new file mode 100644 index 0000000..9d35563 --- /dev/null +++ b/docs/reference/apps/preview.html @@ -0,0 +1,569 @@ + + + + + + + Preview Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Preview Module Reference

+
+

New in version 0.0.1.

+
+

Control the macOS Preview application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + +

XAPreviewApplication(properties)

A class for managing and interacting with Preview.app.

XAPreviewDocument(properties)

A class for managing and interacting with documents in Preview.

XAPreviewDocumentList(properties[, filter])

A wrapper around lists of documents that employs fast enumeration techniques.

XAPreviewWindow(properties)

A class for managing and interacting with Preview windows.

+
+
+class PyXA.apps.Preview.XAPreviewApplication(properties)[source]
+

Bases: XASBApplication, XACanOpenPath, XACanPrintPath

+

A class for managing and interacting with Preview.app.

+ +
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + + + + +

documents([filter])

Returns a list of documents matching the filter.

print(path[, show_prompt])

Opens the print dialog for the file at the given path, if the file can be opened in Preview.

+

Attributes:

+ + + + + + + + + + + + +

frontmost

Whether Preview is the active application.

name

The name of the application.

version

The version of Preview.app.

+
+
+documents(filter: dict = None) XAPreviewDocumentList[source]
+

Returns a list of documents matching the filter.

+
+
Example 1:
+

List all documents

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Preview")
+>>> print(app.documents())
+<<class 'PyXA.apps.Preview.XAPreviewDocumentList'>['Example1.pdf', 'Example2.pdf']>
+
+
+
+

Changed in version 0.0.4: Now returns an object of XAPreviewDocumentList instead of a default list.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property frontmost: bool
+

Whether Preview is the active application.

+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+print(path: Union[str, NSURL], show_prompt: bool = True)[source]
+

Opens the print dialog for the file at the given path, if the file can be opened in Preview.

+
+
Parameters:
+
    +
  • path (Union[str, AppKit.NSURL]) – The path of the file to print.

  • +
  • show_prompt (bool, optional) – Whether to show the print dialog or skip directly printing, defaults to True

  • +
+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property version: str
+

The version of Preview.app.

+
+ +
+ +
+
+class PyXA.apps.Preview.XAPreviewDocument(properties)[source]
+

Bases: XATextDocument, XAPrintable, XACloseable, XAClipboardCodable

+

A class for managing and interacting with documents in Preview.

+
+

See also

+

XAPreviewApplication

+
+
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + + + + + + + +

get_clipboard_representation()

Gets a clipboard-codable representation of the document.

print([print_properties, show_dialog])

Prints the document.

save([file_path])

Saves the document.

+

Attributes:

+ + + + + + + + + + + + + + + +

modified

Whether the document has been modified since the last save.

name

The name of the document.

path

The document's file path.

properties

All properties of the document.

+
+
+get_clipboard_representation() NSURL[source]
+

Gets a clipboard-codable representation of the document.

+

When the clipboard content is set to a document, the documents’s file URL is added to the clipboard.

+
+
Returns:
+

The document’s file URL

+
+
Return type:
+

AppKit.NSURL

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property modified: bool
+

Whether the document has been modified since the last save.

+
+ +
+
+property name: str
+

The name of the document.

+
+ +
+
+property path: XAPath
+

The document’s file path.

+
+ +
+
+print(print_properties: Optional[dict] = None, show_dialog: bool = True) Self[source]
+

Prints the document.

+
+
Parameters:
+
    +
  • print_properties (Union[dict, None], optional) – Properties to set for printing, defaults to None

  • +
  • show_dialog (bool, optional) – Whether to show the print dialog, defaults to True

  • +
+
+
Returns:
+

The document object

+
+
Return type:
+

Self

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+property properties: dict
+

All properties of the document.

+
+ +
+
+save(file_path: str = None)[source]
+

Saves the document.

+

If a file path is provided, Preview will attempt to save the file with the specified file extension at that path. If automatic conversion fails, the document will be saved in its original file format. If no path is provided, the document is saved at the current path for the document.

+
+
Example 1:
+

Save a PDF (or any compatible document) as a PNG

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Preview")
+>>> doc = app.documents()[0] # A PDF
+>>> # Save to Downloads to avoid permission errors
+>>> doc.save("/Users/steven/Downloads/Example.png")
+
+
+
+

New in version 0.0.4.

+
+
+ +
+ +
+
+class PyXA.apps.Preview.XAPreviewDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around lists of documents that employs fast enumeration techniques.

+

All properties of documents can be called as methods on the wrapped list, returning a list containing each documents’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_modified(modified)

by_name(name)

by_path(path)

by_properties(properties)

get_clipboard_representation()

Gets a clipboard-codable representation of each document in the list.

modified()

name()

path()

properties()

+
+
+by_modified(modified: bool) Optional[XAPreviewDocument][source]
+
+ +
+
+by_name(name: str) Optional[XAPreviewDocument][source]
+
+ +
+
+by_path(path: Union[str, XAPath]) Optional[XAPreviewDocument][source]
+
+ +
+
+by_properties(properties: dict) Optional[XAPreviewDocument][source]
+
+ +
+
+get_clipboard_representation() list[objc.NSURL][source]
+

Gets a clipboard-codable representation of each document in the list.

+

When the clipboard content is set to a document, each documents’s file URL is added to the clipboard.

+
+
Returns:
+

The document’s file URL

+
+
Return type:
+

list[AppKit.NSURL]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+modified() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+path() list[PyXA.XABase.XAPath][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+ +
+
+class PyXA.apps.Preview.XAPreviewWindow(properties)[source]
+

Bases: XASBWindow, XASBPrintable

+

A class for managing and interacting with Preview windows.

+
+

See also

+

XAPreviewApplication

+
+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + +

document

The document currently displayed in the window.

floating

Whether the window floats.

modal

Whether the window is a modal view.

properties

All properties of the window.

titled

Whether the window has a title bar.

+
+
+property document: XAPreviewDocument
+

The document currently displayed in the window.

+
+ +
+
+property floating: bool
+

Whether the window floats.

+
+ +
+
+property modal: bool
+

Whether the window is a modal view.

+
+ +
+
+property properties: dict
+

All properties of the window.

+
+ +
+
+property titled: bool
+

Whether the window has a title bar.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/quicktimeplayer.html b/docs/reference/apps/quicktimeplayer.html new file mode 100644 index 0000000..60d9448 --- /dev/null +++ b/docs/reference/apps/quicktimeplayer.html @@ -0,0 +1,1549 @@ + + + + + + + QuickTime Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

QuickTime Module Reference

+
+

New in version 0.0.6.

+
+

Control the macOS QuickTime application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XAQuickTimeApplication(properties)

A class for managing and interacting with QuickTime.app.

XAQuickTimeAudioCompressionPreset(properties)

A class for managing and interacting with audio compression presets in QuickTime.app.

XAQuickTimeAudioCompressionPresetList(properties)

A wrapper around lists of audio compression presets that employs fast enumeration techniques.

XAQuickTimeAudioRecordingDevice(properties)

A class for managing and interacting with microphones in QuickTime.app.

XAQuickTimeAudioRecordingDeviceList(properties)

A wrapper around lists of audio recording devices that employs fast enumeration techniques.

XAQuickTimeDocument(properties)

A class for managing and interacting with documents in QuickTime.app.

XAQuickTimeDocumentList(properties[, filter])

A wrapper around lists of themes that employs fast enumeration techniques.

XAQuickTimeMovieCompressionPreset(properties)

A class for managing and interacting with movie compression presets in QuickTime.app.

XAQuickTimeMovieCompressionPresetList(properties)

A wrapper around lists of movie compression presets that employs fast enumeration techniques.

XAQuickTimeScreenCompressionPreset(properties)

A class for managing and interacting with screen compression presets in QuickTime.app.

XAQuickTimeScreenCompressionPresetList(...)

A wrapper around lists of screen compression presets that employs fast enumeration techniques.

XAQuickTimeVideoRecordingDevice(properties)

A class for managing and interacting with cameras in QuickTime.app.

XAQuickTimeVideoRecordingDeviceList(properties)

A wrapper around lists of video recording devices that employs fast enumeration techniques.

XAQuickTimeWindow(properties)

A QuickTime window.

+
+
+class PyXA.apps.QuickTimePlayer.XAQuickTimeApplication(properties)[source]
+

Bases: XASBApplication, XACanOpenPath

+

A class for managing and interacting with QuickTime.app.

+ +
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

audio_compression_presets([filter])

Returns a list of audio compression presets, as PyXA objects, matching the given filter.

audio_recording_devices([filter])

Returns a list of audio recording devices, as PyXA objects, matching the given filter.

documents([filter])

Returns a list of documents, as PyXA objects, matching the given filter.

movie_compression_presets([filter])

Returns a list of movie compression presets, as PyXA objects, matching the given filter.

new_audio_recording()

Starts a new audio recording.

new_movie_recording()

Starts a new movie recording.

new_screen_recording()

Starts a new screen recording.

open(path)

Opens the file at the given filepath.

open_url(url)

Opens the file at the given (remote) URL.

screen_compression_presets([filter])

Returns a list of screen compression presets, as PyXA objects, matching the given filter.

video_recording_devices([filter])

Returns a list of video recording devices, as PyXA objects, matching the given filter.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

current_document

The document currently open in the front window of QuickTime.

frontmost

Whether QuickTime is the frontmost application.

name

The name of the application.

properties

Every property of the QuickTime application.

version

The version of QuickTime.app.

+
+
+audio_compression_presets(filter: Optional[dict] = None) XAQuickTimeAudioCompressionPresetList[source]
+

Returns a list of audio compression presets, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned p[resets] will have, or None

+
+
Returns:
+

The list of audio compression presets

+
+
Return type:
+

XAQuickTimeAudioCompressionPresetList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+audio_recording_devices(filter: Optional[dict] = None) XAQuickTimeAudioRecordingDeviceList[source]
+

Returns a list of audio recording devices, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned audio recording devices will have, or None

+
+
Returns:
+

The list of audio recording devices

+
+
Return type:
+

XAQuickTimeAudioRecordingDeviceList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property current_document: XAQuickTimeDocument
+

The document currently open in the front window of QuickTime.

+
+ +
+
+documents(filter: Optional[dict] = None) XAQuickTimeDocumentList[source]
+

Returns a list of documents, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned documents will have, or None

+
+
Returns:
+

The list of documents

+
+
Return type:
+

XAQuickTimeDocumentList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property frontmost: bool
+

Whether QuickTime is the frontmost application.

+
+ +
+
+movie_compression_presets(filter: Optional[dict] = None) XAQuickTimeMovieCompressionPresetList[source]
+

Returns a list of movie compression presets, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned presets will have, or None

+
+
Returns:
+

The list of movie compression presets

+
+
Return type:
+

XAQuickTimeMovieCompressionPresetList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+new_audio_recording() XAQuickTimeDocument[source]
+

Starts a new audio recording.

+
+
Returns:
+

The newly created audio recording document.

+
+
Return type:
+

XAQuickTimeDocument

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+new_movie_recording() XAQuickTimeDocument[source]
+

Starts a new movie recording.

+
+
Returns:
+

The newly created movie recording document.

+
+
Return type:
+

XAQuickTimeDocument

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+new_screen_recording() XAQuickTimeApplication[source]
+

Starts a new screen recording.

+
+
Returns:
+

A reference to the application object.

+
+
Return type:
+

XAQuickTimeApplication

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+open(path: Union[str, NSURL]) XAQuickTimeDocument[source]
+

Opens the file at the given filepath.

+
+
Parameters:
+

target (Union[str, AppKit.NSURL]) – The path of a file to open.

+
+
Returns:
+

A reference to the newly opened document.

+
+
Return type:
+

XAQuickTimeDocument

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+open_url(url: Union[str, NSURL]) XAQuickTimeDocument[source]
+

Opens the file at the given (remote) URL.

+
+
Parameters:
+

target (Union[str, NSURL]) – The path of a file to stream.

+
+
Returns:
+

A reference to the newly opened document.

+
+
Return type:
+

XAQuickTimeDocument

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property properties: dict
+

Every property of the QuickTime application.

+
+ +
+
+screen_compression_presets(filter: Optional[dict] = None) XAQuickTimeScreenCompressionPresetList[source]
+

Returns a list of screen compression presets, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned presets will have, or None

+
+
Returns:
+

The list of screen compression presets

+
+
Return type:
+

XAQuickTimeScreenCompressionPresetList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property version: str
+

The version of QuickTime.app.

+
+ +
+
+video_recording_devices(filter: Optional[dict] = None) XAQuickTimeVideoRecordingDeviceList[source]
+

Returns a list of video recording devices, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned video recording devices will have, or None

+
+
Returns:
+

The list of video recording devices

+
+
Return type:
+

XAQuickTimeVideoRecordingDeviceList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+ +
+
+class PyXA.apps.QuickTimePlayer.XAQuickTimeAudioCompressionPreset(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with audio compression presets in QuickTime.app.

+ +
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + + + + +

id

The unique identifier for the preset.

name

The name of the preset.

properties

All properties of the preset.

+
+
+property id: str
+

The unique identifier for the preset.

+
+ +
+
+property name: str
+

The name of the preset.

+
+ +
+
+property properties: dict
+

All properties of the preset.

+
+ +
+ +
+
+class PyXA.apps.QuickTimePlayer.XAQuickTimeAudioCompressionPresetList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of audio compression presets that employs fast enumeration techniques.

+

All properties of audio compression presets can be called as methods on the wrapped list, returning a list containing each presets’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + +

id()

name()

properties()

+
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+ +
+
+class PyXA.apps.QuickTimePlayer.XAQuickTimeAudioRecordingDevice(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with microphones in QuickTime.app.

+ +
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + + + + +

id

The unique identifier for the device.

name

The name of the device.

properties

All properties of the device.

+
+
+property id: str
+

The unique identifier for the device.

+
+ +
+
+property name: str
+

The name of the device.

+
+ +
+
+property properties: dict
+

All properties of the device.

+
+ +
+ +
+
+class PyXA.apps.QuickTimePlayer.XAQuickTimeAudioRecordingDeviceList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of audio recording devices that employs fast enumeration techniques.

+

All properties of audio recording devices can be called as methods on the wrapped list, returning a list containing each devices’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + +

id()

name()

properties()

+
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+ +
+
+class PyXA.apps.QuickTimePlayer.XAQuickTimeDocument(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with documents in QuickTime.app.

+ +
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

audio_volume

The volume of the movie from 0 to 1 (0 to 100%).

current_audio_compression

The current audio compression preset.

current_camera

The currently previewing video device.

current_microphone

The currently previewing audio device.

current_movie_compression

The current movie compression preset.

current_screen_compression

The current screen compression preset.

current_time

The current time of the movie in seconds.

data_rate

The data rate of the movie in bytes per second.

data_size

The data size of the movie in bytes.

duration

The duration of the movie in seconds.

looping

Whether the movie plays in a loop.

muted

Whether the movie is muted.

natural_dimensions

The national dimensions of the movie.

playing

Whether the movie is currently playing.

presenting

Whether the movie is presented in full screen.

properties

All properties of the document.

rate

The current rate of the movie.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

pause()

play()

present()

resume()

start()

step_backward(num_steps)

step_forward(num_steps)

stop()

trim(start_time, end_time)

+
+
+property audio_volume: float
+

The volume of the movie from 0 to 1 (0 to 100%).

+
+ +
+
+property current_audio_compression: XAQuickTimeAudioCompressionPreset
+

The current audio compression preset.

+
+ +
+
+property current_camera: XAQuickTimeVideoRecordingDevice
+

The currently previewing video device.

+
+ +
+
+property current_microphone: XAQuickTimeAudioRecordingDevice
+

The currently previewing audio device.

+
+ +
+
+property current_movie_compression: XAQuickTimeMovieCompressionPreset
+

The current movie compression preset.

+
+ +
+
+property current_screen_compression: XAQuickTimeScreenCompressionPreset
+

The current screen compression preset.

+
+ +
+
+property current_time: float
+

The current time of the movie in seconds.

+
+ +
+
+property data_rate: int
+

The data rate of the movie in bytes per second.

+
+ +
+
+property data_size: int
+

The data size of the movie in bytes.

+
+ +
+
+property duration: float
+

The duration of the movie in seconds.

+
+ +
+
+property looping: bool
+

Whether the movie plays in a loop.

+
+ +
+
+property muted: bool
+

Whether the movie is muted.

+
+ +
+
+property natural_dimensions: tuple[int, int]
+

The national dimensions of the movie.

+
+ +
+
+pause() XAQuickTimeDocument[source]
+
+ +
+
+play() XAQuickTimeDocument[source]
+
+ +
+
+property playing: bool
+

Whether the movie is currently playing.

+
+ +
+
+present() XAQuickTimeDocument[source]
+
+ +
+
+property presenting: bool
+

Whether the movie is presented in full screen.

+
+ +
+
+property properties: dict
+

All properties of the document.

+
+ +
+
+property rate: float
+

The current rate of the movie.

+
+ +
+
+resume() XAQuickTimeDocument[source]
+
+ +
+
+start() XAQuickTimeDocument[source]
+
+ +
+
+step_backward(num_steps: int) XAQuickTimeDocument[source]
+
+ +
+
+step_forward(num_steps: int) XAQuickTimeDocument[source]
+
+ +
+
+stop() XAQuickTimeDocument[source]
+
+ +
+
+trim(start_time: float, end_time: float) XAQuickTimeDocument[source]
+
+ +
+ +
+
+class PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of themes that employs fast enumeration techniques.

+

All properties of themes can be called as methods on the wrapped list, returning a list containing each theme’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

audio_volume()

by_audio_volume(audio_volume)

by_current_audio_compression(...)

by_current_camera(current_camera)

by_current_microphone(current_microphone)

by_current_movie_compression(...)

by_current_screen_compression(...)

by_current_time(current_time)

by_data_rate(data_rate)

by_data_size(data_size)

by_duration(duration)

by_looping(looping)

by_muted(muted)

by_natural_dimensions(natural_dimensions)

by_playing(playing)

by_presenting(presenting)

by_properties(properties)

by_rate(rate)

current_audio_compression()

current_camera()

current_microphone()

current_movie_compression()

current_screen_compression()

current_time()

data_rate()

data_size()

duration()

looping()

muted()

natural_dimensions()

playing()

presenting()

properties()

rate()

+
+
+audio_volume() list[float][source]
+
+ +
+
+by_audio_volume(audio_volume: float) XAQuickTimeDocument[source]
+
+ +
+
+by_current_audio_compression(current_audio_compression: float) XAQuickTimeDocument[source]
+
+ +
+
+by_current_camera(current_camera: float) XAQuickTimeDocument[source]
+
+ +
+
+by_current_microphone(current_microphone: float) XAQuickTimeDocument[source]
+
+ +
+
+by_current_movie_compression(current_movie_compression: float) XAQuickTimeDocument[source]
+
+ +
+
+by_current_screen_compression(current_screen_compression: float) XAQuickTimeDocument[source]
+
+ +
+
+by_current_time(current_time: float) XAQuickTimeDocument[source]
+
+ +
+
+by_data_rate(data_rate: int) XAQuickTimeDocument[source]
+
+ +
+
+by_data_size(data_size: int) XAQuickTimeDocument[source]
+
+ +
+
+by_duration(duration: float) XAQuickTimeDocument[source]
+
+ +
+
+by_looping(looping: bool) XAQuickTimeDocument[source]
+
+ +
+
+by_muted(muted: bool) XAQuickTimeDocument[source]
+
+ +
+
+by_natural_dimensions(natural_dimensions: tuple[int, int]) XAQuickTimeDocument[source]
+
+ +
+
+by_playing(playing: bool) XAQuickTimeDocument[source]
+
+ +
+
+by_presenting(presenting: bool) XAQuickTimeDocument[source]
+
+ +
+
+by_properties(properties: dict) XAQuickTimeDocument[source]
+
+ +
+
+by_rate(rate: float) XAQuickTimeDocument[source]
+
+ +
+
+current_audio_compression() XAQuickTimeAudioCompressionPresetList[source]
+
+ +
+
+current_camera() XAQuickTimeVideoRecordingDeviceList[source]
+
+ +
+
+current_microphone() XAQuickTimeAudioRecordingDeviceList[source]
+
+ +
+
+current_movie_compression() XAQuickTimeMovieCompressionPresetList[source]
+
+ +
+
+current_screen_compression() XAQuickTimeScreenCompressionPresetList[source]
+
+ +
+
+current_time() list[float][source]
+
+ +
+
+data_rate() list[int][source]
+
+ +
+
+data_size() list[int][source]
+
+ +
+
+duration() list[float][source]
+
+ +
+
+looping() list[bool][source]
+
+ +
+
+muted() list[bool][source]
+
+ +
+
+natural_dimensions() list[tuple[int, int]][source]
+
+ +
+
+playing() list[bool][source]
+
+ +
+
+presenting() list[bool][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+
+rate() list[float][source]
+
+ +
+ +
+
+class PyXA.apps.QuickTimePlayer.XAQuickTimeMovieCompressionPreset(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with movie compression presets in QuickTime.app.

+ +
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + + + + +

id

The unique identifier for the preset.

name

The name of the preset.

properties

All properties of the preset.

+
+
+property id: str
+

The unique identifier for the preset.

+
+ +
+
+property name: str
+

The name of the preset.

+
+ +
+
+property properties: dict
+

All properties of the preset.

+
+ +
+ +
+
+class PyXA.apps.QuickTimePlayer.XAQuickTimeMovieCompressionPresetList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of movie compression presets that employs fast enumeration techniques.

+

All properties of movie compression presets can be called as methods on the wrapped list, returning a list containing each presets’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + +

id()

name()

properties()

+
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+ +
+
+class PyXA.apps.QuickTimePlayer.XAQuickTimeScreenCompressionPreset(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with screen compression presets in QuickTime.app.

+ +
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + + + + +

id

The unique identifier for the preset.

name

The name of the preset.

properties

All properties of the preset.

+
+
+property id: str
+

The unique identifier for the preset.

+
+ +
+
+property name: str
+

The name of the preset.

+
+ +
+
+property properties: dict
+

All properties of the preset.

+
+ +
+ +
+
+class PyXA.apps.QuickTimePlayer.XAQuickTimeScreenCompressionPresetList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of screen compression presets that employs fast enumeration techniques.

+

All properties of screen compression presets can be called as methods on the wrapped list, returning a list containing each presets’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + +

id()

name()

properties()

+
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+ +
+
+class PyXA.apps.QuickTimePlayer.XAQuickTimeVideoRecordingDevice(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with cameras in QuickTime.app.

+ +
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + + + + +

id

The unique identifier for the device.

name

The name of the device.

properties

All properties of the device.

+
+
+property id: str
+

The unique identifier for the device.

+
+ +
+
+property name: str
+

The name of the device.

+
+ +
+
+property properties: dict
+

All properties of the device.

+
+ +
+ +
+
+class PyXA.apps.QuickTimePlayer.XAQuickTimeVideoRecordingDeviceList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of video recording devices that employs fast enumeration techniques.

+

All properties of video recording devices can be called as methods on the wrapped list, returning a list containing each devices’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + +

id()

name()

properties()

+
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+ +
+
+class PyXA.apps.QuickTimePlayer.XAQuickTimeWindow(properties)[source]
+

Bases: XASBWindow

+

A QuickTime window.

+ +
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + +

document

The document currently displayed in the front window of QuickTime.

properties

Every property of a QuickTime window.

+

Methods:

+ + + + + + +

set_property(property_name, value)

Sets the specified property to the given value.

+
+
+property document: XAQuickTimeDocument
+

The document currently displayed in the front window of QuickTime.

+
+ +
+
+property properties: dict
+

Every property of a QuickTime window.

+
+ +
+
+set_property(property_name: str, value: Any)[source]
+

Sets the specified property to the given value.

+
+

Deprecated since version 0.1.1: Set the desired attribute directly instead.

+
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/reminders.html b/docs/reference/apps/reminders.html new file mode 100644 index 0000000..74266a8 --- /dev/null +++ b/docs/reference/apps/reminders.html @@ -0,0 +1,2118 @@ + + + + + + + Reminders Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Reminders Module Reference

+
+

New in version 0.0.1.

+
+

Control the macOS Reminders application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XARemindersAccount(properties)

An account in the Reminders application.

XARemindersAccountList(properties[, filter])

A wrapper around lists of accounts that employs fast enumeration techniques.

XARemindersAlarm(properties)

An alarm attached to a reminder.

XARemindersAlarmList(properties[, filter])

A wrapper around lists of reminder alarms that employs fast enumeration techniques.

XARemindersApplication(properties)

A class for managing and interacting with scripting elements of the Reminders application.

XARemindersDocument(properties)

A document in the Reminders application.

XARemindersDocumentList(properties[, filter])

A wrapper around lists of documents that employs fast enumeration techniques.

XARemindersList(properties)

A class for...

XARemindersListList(properties[, filter])

A wrapper around lists of reminder lists that employs fast enumeration techniques.

XARemindersRecurrenceRule(properties)

A class for interacting with Reminders.

XARemindersReminder(properties)

A reminder in Reminders.app.

XARemindersReminderList(properties[, filter])

A wrapper around lists of reminders that employs fast enumeration techniques.

XARemindersWindow(properties)

A window of the Reminders application.

+
+
+class PyXA.apps.Reminders.XARemindersAccount(properties)[source]
+

Bases: XAObject

+

An account in the Reminders application.

+

Attributes:

+ + + + + + + + + + + + +

id

The unique identifier of the account.

name

The name of the account.

properties

All properties of the account.

+

Methods:

+ + + + + + +

show()

Shows the account in the front window.

+
+
+property id: str
+

The unique identifier of the account.

+
+ +
+
+property name: str
+

The name of the account.

+
+ +
+
+property properties: dict
+

All properties of the account.

+
+ +
+
+show() XARemindersAccount[source]
+

Shows the account in the front window.

+
+
Returns:
+

The account object

+
+
Return type:
+

XARemindersAccount

+
+
+
+

New in version 0.0.6.

+
+
+ +
+ +
+
+class PyXA.apps.Reminders.XARemindersAccountList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of accounts that employs fast enumeration techniques.

+

All properties of accounts can be called as methods on the wrapped list, returning a list containing each account’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_id(id)

by_name(name)

by_properties(properties)

id()

name()

properties()

+
+
+by_id(id: str) Optional[XARemindersAccount][source]
+
+ +
+
+by_name(name: str) Optional[XARemindersAccount][source]
+
+ +
+
+by_properties(properties: dict) Optional[XARemindersAccount][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+ +
+
+class PyXA.apps.Reminders.XARemindersAlarm(properties)[source]
+

Bases: XAObject

+

An alarm attached to a reminder.

+
+

See also

+

XARemindersReminder

+
+
+

New in version 0.0.2.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + +

date

The date and time of a date-based alarm.

id

A unique identifier for this alarm.

location

proximity_direction

Whether a location-based alarm is for arriving or departing.

snoozed

Whether the alarm is snoozed.

+

Methods:

+ + + + + + + + + +

set_date(date)

Sets the date and time of the alarm.

set_location(location)

Sets the location and radius of the alarm.

+
+
+property date: datetime
+

The date and time of a date-based alarm.

+
+ +
+
+property id: str
+

A unique identifier for this alarm.

+
+ +
+
+property location: XALocation
+
+ +
+
+property proximity_direction: str
+

Whether a location-based alarm is for arriving or departing.

+
+ +
+
+set_date(date: datetime)[source]
+

Sets the date and time of the alarm.

+
+
Parameters:
+

date (datetime) – The absolute date that the alarm will go off.

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+set_location(location: XALocation)[source]
+

Sets the location and radius of the alarm.

+
+
Parameters:
+

location (XABase.XALocation) – The location (with specified radius) that the alarm will go off.

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+property snoozed: bool
+

Whether the alarm is snoozed.

+
+ +
+ +
+
+class PyXA.apps.Reminders.XARemindersAlarmList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of reminder alarms that employs fast enumeration techniques.

+

All properties of alarms can be called as methods on the wrapped list, returning a list containing each alarm’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_date(date)

by_id(id)

by_location(location)

by_proximity_direction(proximity_direction)

by_snoozed(snoozed)

date()

id()

location()

proximity_direction()

snoozed()

+
+
+by_date(date: datetime) Optional[XARemindersAlarm][source]
+
+ +
+
+by_id(id: str) Optional[XARemindersAlarm][source]
+
+ +
+
+by_location(location: XALocation) Optional[XARemindersAlarm][source]
+
+ +
+
+by_proximity_direction(proximity_direction: str) Optional[XARemindersAlarm][source]
+
+ +
+
+by_snoozed(snoozed: bool) Optional[XARemindersAlarm][source]
+
+ +
+
+date() list[datetime.datetime][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+location() list[PyXA.XABase.XALocation][source]
+
+ +
+
+proximity_direction() list[str][source]
+
+ +
+
+snoozed() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Reminders.XARemindersApplication(properties)[source]
+

Bases: XASBApplication

+

A class for managing and interacting with scripting elements of the Reminders application.

+ +
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + +

accounts([filter])

Returns a list of accounts, as PyXA objects, matching the given filter.

documents([filter])

Returns a list of documents, as PyXA objects, matching the given filter.

lists([filter])

Returns a list of reminder lists, as PyXA objects, matching the given filter.

make(specifier[, properties])

Creates a new element of the given specifier class without adding it to any list.

new_list([name, color, emblem])

Creates a new reminder with the given name, body, and due date in the specified reminder list.

new_reminder([name, due_date, reminder_list])

Creates a new reminder with the given name, body, and due date in the specified reminder list.

reminders([filter])

Returns a list of reminders, as PyXA objects, matching the given filter.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

default_account

The default account in the Reminders application.

default_list

The default list in the Reminders application.

frontmost

Whether Reminders is the active application.

name

The name of the application.

version

The version number of Reminders.app.

+
+
+accounts(filter: Optional[dict] = None) XARemindersAccountList[source]
+

Returns a list of accounts, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned accounts will have, or None

+
+
Returns:
+

The list of accounts

+
+
Return type:
+

XARemindersAccountList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property default_account: XARemindersAccount
+

The default account in the Reminders application.

+
+ +
+
+property default_list: XARemindersList
+

The default list in the Reminders application.

+
+ +
+
+documents(filter: Optional[dict] = None) XARemindersDocumentList[source]
+

Returns a list of documents, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned documents will have, or None

+
+
Returns:
+

The list of documents

+
+
Return type:
+

XARemindersDocumentList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property frontmost: bool
+

Whether Reminders is the active application.

+
+ +
+
+lists(filter: Optional[dict] = None) XARemindersListList[source]
+

Returns a list of reminder lists, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned lists will have, or None

+
+
Returns:
+

The list of reminder lists

+
+
Return type:
+

XARemindersListList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+make(specifier: str, properties: dict = None)[source]
+

Creates a new element of the given specifier class without adding it to any list.

+

Use XABase.XAList.push() to push the element onto a list.

+
+
Parameters:
+
    +
  • specifier (str) – The classname of the object to create

  • +
  • properties (dict) – The properties to give the object

  • +
+
+
Returns:
+

A PyXA wrapped form of the object

+
+
Return type:
+

XABase.XAObject

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+new_list(name: str = 'New List', color: str = '#FF0000', emblem: str = 'symbol0') XARemindersList[source]
+

Creates a new reminder with the given name, body, and due date in the specified reminder list.

+

If no list is provided, the reminder is created in the default list.

+
+
Parameters:
+
    +
  • title – The name of the list, defaults to “New List”

  • +
  • color (str, optional) – The HEX color of the list’s icon.

  • +
  • emblem (str, optional) – The symbol to use as the list’s icon.

  • +
+
+
Returns:
+

A reference to the newly created list.

+
+
Return type:
+

XAReminderList

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+new_reminder(name: str = 'New Reminder', due_date: datetime = None, reminder_list: XARemindersList = None) XARemindersReminder[source]
+

Creates a new reminder with the given name, body, and due date in the specified reminder list. +If no list is provided, the reminder is created in the default list.

+
+
Parameters:
+
    +
  • title (str, optional) – The name of the reminder, defaults to “New Reminder”

  • +
  • notes (str, optional) – The text notes attached to the reminder, defaults to “”

  • +
  • due_date (datetime, optional) – The date and time when the reminder will be due.

  • +
  • reminder_list (XAReminderList, optional) – The list that the new reminder will be added to.

  • +
+
+
Returns:
+

A reference to the newly created reminder.

+
+
Return type:
+

XAReminder

+
+
Example:
+

+
+
>>> from datetime import datetime, timedelta
+>>> import PyXA
+>>> app = PyXA.Application("Reminder")
+>>> due_date = datetime.now() + timedelta(hours = 1)
+>>> reminder = app.new_reminder("Read PyXA listation", "Complete 1 tutorial", due_date)
+>>> print(reminder.id)
+B0DD7836-7C05-48D4-B806-D6A76317452E
+
+
+
+

See also

+

XAReminder, new_list()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+reminders(filter: Optional[dict] = None) XARemindersReminderList[source]
+

Returns a list of reminders, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned reminders will have, or None

+
+
Returns:
+

The list of reminders

+
+
Return type:
+

XARemindersReminderList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property version: str
+

The version number of Reminders.app.

+
+ +
+ +
+
+class PyXA.apps.Reminders.XARemindersDocument(properties)[source]
+

Bases: XAObject

+

A document in the Reminders application.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

close([save, location])

Closes a document.

delete()

Deletes the document.

duplicate()

Copies an object.

move_to(window)

Move an object to a new location.

print(properties[, show_dialog])

Prints a document.

save()

Saves a document.

+

Attributes:

+ + + + + + + + + + + + + + + +

file

The location of the document on disk, if it has one.

modified

Whether the document has been modified since it was last saved.

name

The name of the document.

properties

All properties of the document.

+
+
+close(save: bool = True, location: Union[str, NSURL] = None) None[source]
+

Closes a document.

+
+ +
+
+delete() None[source]
+

Deletes the document.

+
+ +
+
+duplicate() None[source]
+

Copies an object.

+
+ +
+
+property file: XAPath
+

The location of the document on disk, if it has one.

+
+ +
+
+property modified: bool
+

Whether the document has been modified since it was last saved.

+
+ +
+
+move_to(window: XARemindersWindow) None[source]
+

Move an object to a new location.

+
+ +
+
+property name: str
+

The name of the document.

+
+ +
+
+print(properties: dict, show_dialog: bool = True) None[source]
+

Prints a document.

+
+ +
+
+property properties: dict
+

All properties of the document.

+
+ +
+
+save() None[source]
+

Saves a document.

+
+ +
+ +
+
+class PyXA.apps.Reminders.XARemindersDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of documents that employs fast enumeration techniques.

+

All properties of documents can be called as methods on the wrapped list, returning a list containing each document’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_file(file)

by_modified(modified)

by_name(name)

by_properties(properties)

file()

modified()

name()

properties()

+
+
+by_file(file: XAPath) Optional[XARemindersDocument][source]
+
+ +
+
+by_modified(modified: bool) Optional[XARemindersDocument][source]
+
+ +
+
+by_name(name: str) Optional[XARemindersDocument][source]
+
+ +
+
+by_properties(properties: dict) Optional[XARemindersDocument][source]
+
+ +
+
+file() list[PyXA.XABase.XAPath][source]
+
+ +
+
+modified() list[dict][source]
+
+ +
+
+name() list[dict][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+ +
+
+class PyXA.apps.Reminders.XARemindersList(properties)[source]
+

Bases: XAObject

+

A class for…

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

color

The color of the list.

container

The container of the list.

emblem

The emblem icon name of the list.

id

The unique identifier of the list.

name

The name of the list.

properties

All properties of the list.

sharees

A list of individuals with whom the list is shared with

sharing_status

Whether the list is shared

subscription_url

The URL of the list used to subscribe to it

summary

An overview of the list's information

+

Methods:

+ + + + + + + + + + + + +

delete()

Deletes the list.

reminders([filter])

Returns a list of reminders, as PyXA objects, matching the given filter.

show()

Shows the list in the front Reminders window.

+
+
+property color: str
+

The color of the list.

+
+ +
+
+property container: Union[XARemindersAccount, XARemindersList]
+

The container of the list.

+
+ +
+
+delete() None[source]
+

Deletes the list.

+
+

New in version 0.0.6.

+
+
+ +
+
+property emblem: str
+

The emblem icon name of the list.

+
+ +
+
+property id: str
+

The unique identifier of the list.

+
+ +
+
+property name: str
+

The name of the list.

+
+ +
+
+property properties: dict
+

All properties of the list.

+
+ +
+
+reminders(filter: Optional[dict] = None) XARemindersReminderList[source]
+

Returns a list of reminders, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned reminders will have, or None

+
+
Returns:
+

The list of reminders

+
+
Return type:
+

XARemindersReminderList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+sharees
+

A list of individuals with whom the list is shared with

+
+ +
+
+sharing_status: bool
+

Whether the list is shared

+
+ +
+
+show() XARemindersList[source]
+

Shows the list in the front Reminders window.

+
+
Returns:
+

The list object

+
+
Return type:
+

XARemindersList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+subscription_url
+

The URL of the list used to subscribe to it

+
+ +
+
+summary
+

An overview of the list’s information

+
+ +
+ +
+
+class PyXA.apps.Reminders.XARemindersListList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of reminder lists that employs fast enumeration techniques.

+

All properties of reminder lists can be called as methods on the wrapped list, returning a list containing each list’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_color(color)

by_container(container)

by_emblem(emblem)

by_id(id)

by_name(name)

by_properties(properties)

color()

container()

delete()

Deletes all reminder lists in the list.

emblem()

id()

name()

properties()

reminders()

+
+
+by_color(color: str) Optional[XARemindersList][source]
+
+ +
+
+by_container(container: XARemindersList) Optional[XARemindersList][source]
+
+ +
+
+by_emblem(emblem: str) Optional[XARemindersList][source]
+
+ +
+
+by_id(id: str) Optional[XARemindersList][source]
+
+ +
+
+by_name(name: str) Optional[XARemindersList][source]
+
+ +
+
+by_properties(properties: dict) Optional[XARemindersList][source]
+
+ +
+
+color() list[dict][source]
+
+ +
+
+container() XARemindersAccountList[source]
+
+ +
+
+delete()[source]
+

Deletes all reminder lists in the list.

+
+

New in version 0.0.6.

+
+
+ +
+
+emblem() list[str][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[dict][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+
+reminders() XARemindersReminderList[source]
+
+ +
+ +
+
+class PyXA.apps.Reminders.XARemindersRecurrenceRule(properties)[source]
+

Bases: XAObject

+

A class for interacting with Reminders.

+
+

See also

+

XARemindersReminder

+
+
+

New in version 0.0.2.

+
+

Attributes:

+ + + + + + + + + + + + +

end_date

The end date and time of recurrence.

frequency

Specifier for the base unit of recurrence, i.e. daily, weekly, monthly, or yearly.

interval

The number of frequency units between recurrences.

+

Methods:

+ + + + + + + + + + + + +

set_end_date(end_date)

Sets the date and time when the recurrence ends.

set_frequency(frequency)

Sets the frequency of recurrence.

set_interval(interval)

Sets the interval of recurrence.

+
+
+property end_date: datetime
+

The end date and time of recurrence.

+
+ +
+
+property frequency: str
+

Specifier for the base unit of recurrence, i.e. daily, weekly, monthly, or yearly.

+
+ +
+
+property interval: int
+

The number of frequency units between recurrences.

+
+ +
+
+set_end_date(end_date: datetime)[source]
+

Sets the date and time when the recurrence ends.

+
+
Parameters:
+

end_date (datetime) – The absolute end day of recurrence.

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+set_frequency(frequency: Literal['daily', 'weekly', 'monthly', 'yearly'])[source]
+

Sets the frequency of recurrence.

+
+
Parameters:
+

frequency (Literal["daily", "weekly", "monthly", "yearly"]) – A specifier for the base unit of recurrence.

+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+set_interval(interval: int)[source]
+

Sets the interval of recurrence.

+
+
Parameters:
+

interval (int) – The interval; the number of frequency units between recurrences.

+
+
+
+

New in version 0.0.2.

+
+
+ +
+ +
+
+class PyXA.apps.Reminders.XARemindersReminder(properties)[source]
+

Bases: XAObject

+

A reminder in Reminders.app.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + +

alarms([filter])

Returns a list of alarms, as PyXA objects, matching the given filter.

delete()

Deletes the reminder.

move_to(list)

Moves the reminder to the specified list.

show()

Shows the reminder in the front Reminders window.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

all_day

Whether the reminder is all day or a specific time.

allday_due_date

The all-day due date of the reminder; will only set a date.

body

The notes attached to the reminder.

completed

Whether the reminder is completed.

completion_date

The completion date of the reminder.

container

The container of the reminder.

creation_date

The creation date of the reminder.

due_date

The due date of the reminder; will set both date and time.

flagged

Whether the reminder is flagged.

id

The unique identifier of the reminder.

modification_date

The modification date of the reminder.

name

The name of the reminder.

notes

User-inputted notes for this reminder.

priority

The priority of the reminder; 0: no priority, 1–4: high, 5: medium, 6–9: low.

properties

All properties of the reminder.

recurrence_rule

The recurrence rule for the reminder.

remind_me_date

The remind date of the reminder.

url

The URL attached to the reminder, if there is one.

+
+
+alarms(filter: Optional[dict] = None) XARemindersAlarmList[source]
+

Returns a list of alarms, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned alarms will have, or None

+
+
Returns:
+

The list of alarms

+
+
Return type:
+

XARemindersAlarmList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property all_day: bool
+

Whether the reminder is all day or a specific time.

+
+

New in version 0.0.6.

+
+
+ +
+
+property allday_due_date: Optional[datetime]
+

The all-day due date of the reminder; will only set a date.

+
+

New in version 0.0.6.

+
+
+ +
+
+property body: str
+

The notes attached to the reminder.

+
+

New in version 0.0.6.

+
+
+ +
+
+property completed: bool
+

Whether the reminder is completed.

+
+

New in version 0.0.6.

+
+
+ +
+
+property completion_date: Optional[datetime]
+

The completion date of the reminder.

+
+

New in version 0.0.6.

+
+
+ +
+
+property container: Union[XARemindersList, XARemindersReminder]
+

The container of the reminder.

+
+

New in version 0.0.6.

+
+
+ +
+
+property creation_date: datetime
+

The creation date of the reminder.

+
+

New in version 0.0.6.

+
+
+ +
+
+delete() None[source]
+

Deletes the reminder.

+
+

New in version 0.0.6.

+
+
+ +
+
+property due_date: Optional[datetime]
+

The due date of the reminder; will set both date and time.

+
+

New in version 0.0.6.

+
+
+ +
+
+property flagged: bool
+

Whether the reminder is flagged.

+
+

New in version 0.0.6.

+
+
+ +
+
+property id: str
+

The unique identifier of the reminder.

+
+

New in version 0.0.6.

+
+
+ +
+
+property modification_date: datetime
+

The modification date of the reminder.

+
+

New in version 0.0.6.

+
+
+ +
+
+move_to(list: XARemindersList) XARemindersReminder[source]
+

Moves the reminder to the specified list.

+
+
Parameters:
+

list (XARemindersList) – The list to move the reminder to

+
+
Returns:
+

The moved reminder object

+
+
Return type:
+

XARemindersReminder

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property name: str
+

The name of the reminder.

+
+

New in version 0.0.6.

+
+
+ +
+
+property notes: str
+

User-inputted notes for this reminder.

+
+

New in version 0.0.6.

+
+
+ +
+
+property priority: int
+

The priority of the reminder; 0: no priority, 1–4: high, 5: medium, 6–9: low.

+
+

New in version 0.0.6.

+
+
+ +
+
+property properties: dict
+

All properties of the reminder.

+
+

New in version 0.0.6.

+
+
+ +
+
+property recurrence_rule: XARemindersRecurrenceRule
+

The recurrence rule for the reminder.

+
+

New in version 0.0.6.

+
+
+ +
+
+property remind_me_date: Optional[datetime]
+

The remind date of the reminder.

+
+

New in version 0.0.6.

+
+
+ +
+
+show() XARemindersReminder[source]
+

Shows the reminder in the front Reminders window.

+
+
Returns:
+

The reminder object

+
+
Return type:
+

XARemindersReminder

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property url: XAURL
+

The URL attached to the reminder, if there is one.

+
+

New in version 0.0.6.

+
+
+ +
+ +
+
+class PyXA.apps.Reminders.XARemindersReminderList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of reminders that employs fast enumeration techniques.

+

All properties of reminders can be called as methods on the wrapped list, returning a list containing each reminder’s value for the property.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

alarms()

allday_due_date()

body()

by_allday_due_date(allday_due_date)

by_body(body)

by_completed(completed)

by_completion_date(completion_date)

by_container(container)

by_creation_date(creation_date)

by_due_date(due_date)

by_flagged(flagged)

by_id(id)

by_modification_date(modification_date)

by_name(name)

by_priority(priority)

by_properties(properties)

by_remind_me_date(remind_me_date)

completed()

completion_date()

container()

creation_date()

delete()

Deletes all reminders in the list.

due_date()

flagged()

id()

modification_date()

move_to(list)

Moves all reminders in the list to the specified reminder list.

name()

priority()

properties()

remind_me_date()

+
+
+alarms() list[PyXA.apps.Reminders.XARemindersAlarmList][source]
+
+ +
+
+allday_due_date() list[datetime.datetime][source]
+
+ +
+
+body() list[str][source]
+
+ +
+
+by_allday_due_date(allday_due_date: datetime) Optional[XARemindersReminder][source]
+
+ +
+
+by_body(body: str) Optional[XARemindersReminder][source]
+
+ +
+
+by_completed(completed: bool) Optional[XARemindersReminder][source]
+
+ +
+
+by_completion_date(completion_date: datetime) Optional[XARemindersReminder][source]
+
+ +
+
+by_container(container: XARemindersList) Optional[XARemindersReminder][source]
+
+ +
+
+by_creation_date(creation_date: datetime) Optional[XARemindersReminder][source]
+
+ +
+
+by_due_date(due_date: datetime) Optional[XARemindersReminder][source]
+
+ +
+
+by_flagged(flagged: bool) Optional[XARemindersReminder][source]
+
+ +
+
+by_id(id: str) Optional[XARemindersReminder][source]
+
+ +
+
+by_modification_date(modification_date: datetime) Optional[XARemindersReminder][source]
+
+ +
+
+by_name(name: str) Optional[XARemindersReminder][source]
+
+ +
+
+by_priority(priority: int) Optional[XARemindersReminder][source]
+
+ +
+
+by_properties(properties: dict) Optional[XARemindersReminder][source]
+
+ +
+
+by_remind_me_date(remind_me_date: datetime) Optional[XARemindersReminder][source]
+
+ +
+
+completed() list[bool][source]
+
+ +
+
+completion_date() list[datetime.datetime][source]
+
+ +
+
+container() XARemindersListList[source]
+
+ +
+
+creation_date() list[datetime.datetime][source]
+
+ +
+
+delete()[source]
+

Deletes all reminders in the list.

+
+

New in version 0.0.6.

+
+
+ +
+
+due_date() list[datetime.datetime][source]
+
+ +
+
+flagged() list[bool][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+modification_date() list[datetime.datetime][source]
+
+ +
+
+move_to(list: XARemindersList)[source]
+

Moves all reminders in the list to the specified reminder list.

+
+
Parameters:
+

list (XARemindersList) – The list to move reminders into

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+name() list[str][source]
+
+ +
+
+priority() list[int][source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+
+remind_me_date() list[datetime.datetime][source]
+
+ +
+ +
+
+class PyXA.apps.Reminders.XARemindersWindow(properties)[source]
+

Bases: XASBWindow

+

A window of the Reminders application.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + +

close([save])

Closes the window.

lists([filter])

Returns a list of reminder lists, as PyXA objects, matching the given filter.

print(properties[, show_dialog])

Prints the window.

reminders([filter])

Returns a list of reminders, as PyXA objects, matching the given filter.

save()

Saves the current document of the window.

+

Attributes:

+ + + + + + +

document

The document whose contents are displayed in the window.

+
+
+close(save: bool = True) None[source]
+

Closes the window.

+
+
Parameters:
+

save (bool, optional) – Whether to save the current document before closing, defaults to True

+
+
Returns:
+

The window object

+
+
Return type:
+

XARemindersDocument

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property document: XARemindersDocument
+

The document whose contents are displayed in the window.

+
+ +
+
+lists(filter: Optional[dict] = None) XARemindersListList[source]
+

Returns a list of reminder lists, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned lists will have, or None

+
+
Returns:
+

The list of reminder lists

+
+
Return type:
+

XARemindersListList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+print(properties: dict, show_dialog: bool = True) XARemindersWindow[source]
+

Prints the window.

+
+
Parameters:
+
    +
  • properties (dict) – The settings to pre-populate the print dialog with

  • +
  • show_dialog (bool, optional) – Whether to show the print dialog or skip right to printing, defaults to True

  • +
+
+
Returns:
+

The window object

+
+
Return type:
+

XARemindersWindow

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+reminders(filter: Optional[dict] = None) XARemindersReminderList[source]
+

Returns a list of reminders, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned reminders will have, or None

+
+
Returns:
+

The list of reminders

+
+
Return type:
+

XARemindersReminderList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+save() XARemindersWindow[source]
+

Saves the current document of the window.

+
+
Returns:
+

The window object

+
+
Return type:
+

XARemindersWindow

+
+
+
+

New in version 0.0.6.

+
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/rstudio.html b/docs/reference/apps/rstudio.html new file mode 100644 index 0000000..2a8939d --- /dev/null +++ b/docs/reference/apps/rstudio.html @@ -0,0 +1,185 @@ + + + + + + + RStudio Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

RStudio Module Reference

+
+

New in version 0.1.0.

+
+

Control RStudio using JXA-like syntax.

+

Classes:

+ + + + + + +

XARStudioApplication(properties)

A class for interacting with RStudio.app.

+
+
+class PyXA.apps.RStudio.XARStudioApplication(properties)[source]
+

Bases: XASBApplication

+

A class for interacting with RStudio.app.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + +

cmd(cmd)

Executes R code in RStudio, does NOT return the execution result.

+
+
+cmd(cmd: str)[source]
+

Executes R code in RStudio, does NOT return the execution result.

+
+
Parameters:
+

cmd (str) – The R code to evaluate

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("RStudio")
+>>> app.cmd("5*5")
+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/safari.html b/docs/reference/apps/safari.html new file mode 100644 index 0000000..5705be3 --- /dev/null +++ b/docs/reference/apps/safari.html @@ -0,0 +1,1603 @@ + + + + + + + Safari Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Safari Module Reference

+
+

New in version 0.0.1.

+
+

Control Safari using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

XASafariApplication(properties)

A class for interacting with Safari.app.

XASafariDocument(properties)

A class for interacting with Safari documents.

XASafariDocumentList(properties[, filter])

A wrapper around lists of Safari documents that employs fast enumeration techniques.

XASafariGeneric(properties)

A generic class containing methods relevant to Safari tabs and documents.

XASafariTab(properties)

A class for interacting with Safari tabs.

XASafariTabList(properties[, filter])

A wrapper around lists of tabs that employs fast enumeration techniques.

XASafariWindow(properties)

A window of Safari.app.

+
+
+class PyXA.apps.Safari.XASafariApplication(properties)[source]
+

Bases: XASBApplication, XASBPrintable, XAObject, XACanOpenPath

+

A class for interacting with Safari.app.

+
+

See also

+

XASafariDocument, XASafariTab, XABaseScriptable.XASBApplication, XABaseScriptable.XASBSaveable, XABaseScriptable.XASBPrintable

+
+
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

add_to_reading_list(item)

Adds a URL to the reading list.

do_javascript(script[, tab])

Runs JavaScript in the specified tab.

documents([filter])

Returns a list of documents matching the given filter.

email(item)

Opens a new email draft with the content of a tab or document.

make(specifier, properties)

Creates a new element of the given specifier class without adding it to any list.

new_tab(url)

Activates Safari to a new tab at the specified URL or path.

open([url])

Opens a URL in new tab.

save()

search(term)

Activates Safari and searches the specified string in a new tab of the frontmost Safari window.

search_in_tab(tab, term)

Searches the given search string in the specified tab.

show_bookmarks()

Activates Safari and opens Safari's bookmarks page.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

current_document

The currently displayed document in the active tab.

current_tab

The currently active tab.

frontmost

Whether Safari is the active application.

name

The name of the application.

version

The version of Safari.app.

+
+
+add_to_reading_list(item: Union[str, XAURL, XASafariTab, XASafariDocument]) XASafariApplication[source]
+

Adds a URL to the reading list.

+
+
Parameters:
+

item (Union[str, XASafariTab, XASafariDocument]) – A URL string or a Safari tab or document containing the URL to add to the reading list.

+
+
Returns:
+

A reference to the Safari application object.

+
+
Return type:
+

XASafariTab

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Safari")
+>>> window = app.front_window
+>>> doc = app.current_document
+>>> tab = window.current_tab
+>>> app.add_to_reading_list(doc)
+>>> app.add_to_reading_list(tab)
+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property current_document: XASafariDocument
+

The currently displayed document in the active tab.

+
+ +
+
+property current_tab: XASafariTab
+

The currently active tab.

+
+ +
+
+do_javascript(script: str, tab: XASafariTab = None) Any[source]
+

Runs JavaScript in the specified tab. If no tab is specified, the script is run in the current tab of the frontmost Safari window.

+
+
Parameters:
+
    +
  • script (str) – The script to run.

  • +
  • tab (XASafariTab) – The tab to execute the JavaScript script in, defaults to None

  • +
+
+
Returns:
+

The value returned from the script after it completes execution.

+
+
Return type:
+

Any

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Safari")
+>>> tab = app.front_window.current_tab
+>>> script = "(function example() { return 1 + 1 })()"
+>>> print(app.do_javascript(script, tab))
+2.0
+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+documents(filter: dict = None) XASafariDocumentList[source]
+

Returns a list of documents matching the given filter.

+
+

Changed in version 0.0.4: Now returns an object of XASafariDocumentList instead of a default list.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+email(item: Union[XASafariDocument, XASafariTab])[source]
+

Opens a new email draft with the content of a tab or document.

+
+
Parameters:
+

item (Union[XASafariDocument, XASafariTab]) – The object to email

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+property frontmost: bool
+

Whether Safari is the active application.

+
+ +
+
+make(specifier: str, properties: dict)[source]
+

Creates a new element of the given specifier class without adding it to any list.

+

Use XABase.XAList.push() to push the element onto a list.

+
+
Parameters:
+
    +
  • specifier (str) – The classname of the object to create

  • +
  • properties (dict) – The properties to give the object

  • +
+
+
Returns:
+

A PyXA wrapped form of the object

+
+
Return type:
+

XABase.XAObject

+
+
Example 1:
+

Make a new tab in Safari’s front window

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Safari")
+>>> new_tab = app.make("tab", {"URL": "http://google.com"})
+>>> app.front_window.tabs().push(new_tab)
+
+
+
+
Example 2:
+

Open a page in a new window by making a new document

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Safari")
+>>> new_doc = app.make("document", {"URL": "http://google.com"})
+>>> app.documents().push(new_doc)
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+new_tab(url: Union[str, XAURL, XAPath]) XASafariTab[source]
+

Activates Safari to a new tab at the specified URL or path.

+
+
Parameters:
+

url (Union[str, XABase.XAURL, XABase.XAPath]) – The URL or path to open in a new tab

+
+
Returns:
+

A reference to the newly opened tab

+
+
Return type:
+

XASafariTab

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+open(url: Union[str, XAURL, XAPath] = 'https://google.com') XASafariTab[source]
+

Opens a URL in new tab.

+
+
Parameters:
+

url (Union[str, XABase.XAURL, XABase.XAPath], optional) – The URL or path to open, defaults to “http://google.com

+
+
Returns:
+

A reference to the newly created tab object

+
+
Return type:
+

XASafariTab

+
+
Example 1:
+

Open local and external URLs

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Safari")
+>>> app.open("https://www.google.com")
+>>> app.open("google.com")
+>>> app.open("/Users/exampleuser/Documents/WebPage.html")
+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+save()[source]
+
+ +
+
+search(term: str) XASafariApplication[source]
+

Activates Safari and searches the specified string in a new tab of the frontmost Safari window. Uses the default search engine.

+
+
Parameters:
+

term (str) – The string to search

+
+
Returns:
+

A reference to the newly opened Search tab

+
+
Return type:
+

XASafariTab

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Safari")
+>>> app.search("What is PyXA?")
+
+
+
+

See also

+

search_in_tab()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+search_in_tab(tab: XASafariTab, term: str) XASafariApplication[source]
+

Searches the given search string in the specified tab. Uses the default search engine.

+
+
Parameters:
+
    +
  • tab (XASafariTab) – The tab to conduct the web search in.

  • +
  • term (str) – The string to search.

  • +
+
+
Returns:
+

A reference to the tab object

+
+
Return type:
+

XASafariTab

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Safari")
+>>> tab = app.front_window.current_tab
+>>> app.search_in_tab(tab, "What is PyXA?")
+
+
+
+

See also

+

search()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+show_bookmarks() XASafariApplication[source]
+

Activates Safari and opens Safari’s bookmarks page.

+
+
Returns:
+

A reference to the newly opened Bookmarks tab

+
+
Return type:
+

XASafariTab

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property version: str
+

The version of Safari.app.

+
+ +
+ +
+
+class PyXA.apps.Safari.XASafariDocument(properties)[source]
+

Bases: XASafariGeneric, XAClipboardCodable, XASBPrintable

+

A class for interacting with Safari documents.

+
+

See also

+

XASafariGeneric, XABaseScriptable.XASBPrintable, XABaseScriptable.XASBSaveable

+
+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

file

The location of the document on the disk, if there is one.

modified

Whether the document has been modified since its last save.

name

The title of the document.

source

The HTML source of the web page currently loaded in the document.

text

The text of the web page currently loaded in the document.

url

The current URL of the document.

+

Methods:

+ + + + + + + + + +

get_clipboard_representation()

Gets a clipboard-codable representation of the document.

print([properties, show_dialog])

Prints or opens the print dialog for the document.

+
+
+property file: str
+

The location of the document on the disk, if there is one.

+
+ +
+
+get_clipboard_representation() NSURL[source]
+

Gets a clipboard-codable representation of the document.

+

When the clipboard content is set to a Safari document, the document’s URL is added to the clipboard.

+
+
Returns:
+

The document’s URL

+
+
Return type:
+

AppKit.NSURL

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property modified: bool
+

Whether the document has been modified since its last save.

+
+ +
+
+property name: str
+

The title of the document.

+
+ +
+
+print(properties: dict = None, show_dialog: bool = True)[source]
+

Prints or opens the print dialog for the document.

+
+
Parameters:
+
    +
  • properties (dict, optional) – The print properties to pre-set for the print, defaults to None

  • +
  • show_dialog (bool, optional) – Whether to display the print dialog, defaults to True

  • +
+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+property source: str
+

The HTML source of the web page currently loaded in the document.

+
+ +
+
+property text: XAText
+

The text of the web page currently loaded in the document.

+
+ +
+
+property url: XAURL
+

The current URL of the document.

+
+ +
+ +
+
+class PyXA.apps.Safari.XASafariDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around lists of Safari documents that employs fast enumeration techniques.

+

All properties of documents can be called as methods on the wrapped list, returning a list containing each document’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

add_to_reading_list()

Adds the URL of all documents in the list to the reading list.

by_file(file)

by_modified(modified)

by_name(name)

by_source(source)

by_text(text)

by_url(url)

close()

Closes each tab in the list.

do_javascript(script)

Runs a given JavaScript script in each document in the list.

email()

Opens a new email draft with embedded links to the URL of each document in the list.

file()

get_clipboard_representation()

Gets a clipboard-codable representation of each document in the list.

modified()

name()

reload()

Reloads all documents in the list.

search(term)

Searches for the given term in each document in the list, using the default search engine.

source()

text()

url()

+
+
+add_to_reading_list() Self[source]
+

Adds the URL of all documents in the list to the reading list.

+
+
Returns:
+

A reference to the document list object.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+by_file(file: str) Optional[XASafariDocument][source]
+
+ +
+
+by_modified(modified: bool) Optional[XASafariDocument][source]
+
+ +
+
+by_name(name: str) Optional[XASafariDocument][source]
+
+ +
+
+by_source(source: str) Optional[XASafariDocument][source]
+
+ +
+
+by_text(text: Union[str, XAText]) Optional[XASafariDocument][source]
+
+ +
+
+by_url(url: XAURL) Optional[XASafariDocument][source]
+
+ +
+
+close()[source]
+

Closes each tab in the list.

+
+

New in version 0.0.5.

+
+
+ +
+
+do_javascript(script: str) Self[source]
+

Runs a given JavaScript script in each document in the list.

+
+
Returns:
+

A reference to the document list object.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+email() Self[source]
+

Opens a new email draft with embedded links to the URL of each document in the list.

+
+
Returns:
+

A reference to the document list object.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+file() list[str][source]
+
+ +
+
+get_clipboard_representation() list[objc.NSURL][source]
+

Gets a clipboard-codable representation of each document in the list.

+

When the clipboard content is set to a list of Safari documents, each document’s URL is added to the clipboard.

+
+
Returns:
+

A list of document URLs

+
+
Return type:
+

list[AppKit.NSURL]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+modified() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+reload() Self[source]
+

Reloads all documents in the list.

+
+
Returns:
+

A reference to the document list object.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+search(term: str) Self[source]
+

Searches for the given term in each document in the list, using the default search engine.

+
+
Returns:
+

A reference to the document list object.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+source() list[str][source]
+
+ +
+
+text() list[PyXA.XABase.XAText][source]
+
+ +
+
+url() list[PyXA.XABase.XAURL][source]
+
+ +
+ +
+
+class PyXA.apps.Safari.XASafariGeneric(properties)[source]
+

Bases: XACloseable, XAObject

+

A generic class containing methods relevant to Safari tabs and documents.

+ +
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + +

add_to_reading_list()

Adds the URL of a tab or document to the reading list.

do_javascript(script)

Runs JavaScript in a tab or document.

email()

Opens a new email draft with the content of a tab or document.

reload()

Reloads the tab or document.

search(term)

Searches for the specified term in the current tab or document.

+
+
+add_to_reading_list() Self[source]
+

Adds the URL of a tab or document to the reading list.

+
+
Returns:
+

A reference to the object that called this method.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+do_javascript(script: str) Any[source]
+

Runs JavaScript in a tab or document.

+
+
Returns:
+

The value returned from the script after it completes execution

+
+
Return type:
+

Any

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+email() Self[source]
+

Opens a new email draft with the content of a tab or document.

+
+
Parameters:
+

item (Union[XASafariDocument, XASafariTab]) – The object to email

+
+
Returns:
+

A reference to the object that called this method.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+reload() Self[source]
+

Reloads the tab or document.

+
+
Returns:
+

A reference to the object that called this method.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+search(term: str) Self[source]
+

Searches for the specified term in the current tab or document.

+
+
Parameters:
+

term (str) – The term to search

+
+
Returns:
+

A reference to the object that called this method

+
+
Return type:
+

Self

+
+
+
+

New in version 0.0.1.

+
+
+ +
+ +
+
+class PyXA.apps.Safari.XASafariTab(properties)[source]
+

Bases: XASafariGeneric, XAClipboardCodable

+

A class for interacting with Safari tabs.

+
+

See also

+

XASafariGeneric

+
+
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + + + + + + + +

duplicate_to(window)

Duplicates the tab in the specified window.

get_clipboard_representation()

Gets a clipboard-codable representation of the tab.

move_to(window)

Moves the tab to the specified window.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

index

The index of the tab, ordered left to right.

name

The title of the tab.

source

The HTML source of the web page currently loaded in the tab.

text

The text of the web page currently loaded in the tab.

url

The current URL of the tab.

visible

Whether the tab is currently visible.

+
+
+duplicate_to(window: XASafariWindow) Self[source]
+

Duplicates the tab in the specified window. The tab will then exist in two locations.

+
+
Parameters:
+

window (XASafariWindow) – The window to duplicate the tab in.

+
+
Returns:
+

A reference to the tab object.

+
+
Return type:
+

Self

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Safari")
+>>> tab = app.front_window.current_tab
+>>> window2 = app.window(1)
+>>> tab.duplicate_to(window2)
+
+
+
+

See also

+

move_to()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+get_clipboard_representation() NSURL[source]
+

Gets a clipboard-codable representation of the tab.

+

When the clipboard content is set to a Safari tab, the tab’s URL is added to the clipboard.

+
+
Returns:
+

The tabs’s URL

+
+
Return type:
+

AppKit.NSURL

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property index: int
+

The index of the tab, ordered left to right.

+
+ +
+
+move_to(window: XASafariWindow) Self[source]
+

Moves the tab to the specified window. After, the tab will exist in only one location.

+
+
Parameters:
+

window (XASafariWindow) – The window to move the tab to.

+
+
Returns:
+

A reference to the tab object.

+
+
Return type:
+

Self

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Safari")
+>>> tab = app.front_window.current_tab
+>>> window2 = app.window(1)
+>>> tab.move_to(window2)
+
+
+
+

See also

+

duplicate_to()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property name: str
+

The title of the tab.

+
+ +
+
+property source: str
+

The HTML source of the web page currently loaded in the tab.

+
+ +
+
+property text: XAText
+

The text of the web page currently loaded in the tab.

+
+ +
+
+property url: XAURL
+

The current URL of the tab.

+
+ +
+
+property visible: bool
+

Whether the tab is currently visible.

+
+ +
+ +
+
+class PyXA.apps.Safari.XASafariTabList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around lists of tabs that employs fast enumeration techniques.

+

All properties of tabs can be called as methods on the wrapped list, returning a list containing each tab’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

add_to_reading_list()

Adds the URL of all tabs in the list to the reading list.

by_index(index)

by_name(name)

by_source(source)

by_text(text)

by_url(url)

by_visible(visible)

close()

Closes each tab in the list.

do_javascript(script)

Runs a given JavaScript script in each tab in the list.

duplicate_to(window)

Duplicate all tabs in the list in the specified window.

email()

Opens a new email draft with embedded links to the URL of each tab in the list.

get_clipboard_representation()

Gets a clipboard-codable representation of each tab in the list.

index()

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

move_to(window)

Moves all tabs in the list to the specified window.

name()

reload()

Reloads all tabs in the list.

search(term)

Searches for the given term in each tab in the list, using the default search engine.

source()

Gets the source HTML of each tab in the list.

text()

Gets the visible text of each tab in the list.

url()

visible()

+
+
+add_to_reading_list() Self[source]
+

Adds the URL of all tabs in the list to the reading list.

+
+
Returns:
+

A reference to the tab list object.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+by_index(index: int) Optional[XASafariTab][source]
+
+ +
+
+by_name(name: str) Optional[XASafariTab][source]
+
+ +
+
+by_source(source: str) Optional[XASafariTab][source]
+
+ +
+
+by_text(text: Union[str, XAText]) Optional[XASafariTab][source]
+
+ +
+
+by_url(url: XAURL) Optional[XASafariTab][source]
+
+ +
+
+by_visible(visible: bool) Optional[XASafariTab][source]
+
+ +
+
+close()[source]
+

Closes each tab in the list.

+
+

New in version 0.0.5.

+
+
+ +
+
+do_javascript(script: str) Self[source]
+

Runs a given JavaScript script in each tab in the list.

+
+
Returns:
+

A reference to the tab list object.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+duplicate_to(window: XASafariWindow) Self[source]
+

Duplicate all tabs in the list in the specified window.

+
+
Parameters:
+

window (XASafariWindow) – The window to duplicate tabs in

+
+
Returns:
+

The tab list object

+
+
Return type:
+

Self

+
+
+
+

See also

+

move_to()

+
+
+

New in version 0.0.5.

+
+
+ +
+
+email() Self[source]
+

Opens a new email draft with embedded links to the URL of each tab in the list.

+
+
Returns:
+

A reference to the tab list object.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+get_clipboard_representation() list[objc.NSURL][source]
+

Gets a clipboard-codable representation of each tab in the list.

+

When the clipboard content is set to a list of Safari tabs, each tabs’s URL is added to the clipboard. Pasting the copied list into an app such as Numbers will place each URL in a separate cell of a column.

+
+
Returns:
+

A list of tab URLs

+
+
Return type:
+

list[AppKit.NSURL]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+index() list[int][source]
+

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

+
+

New in version 0.1.2.

+
+
+ +
+
+move_to(window: XASafariWindow) Self[source]
+

Moves all tabs in the list to the specified window.

+
+
Parameters:
+

window (XASafariWindow) – The window to move tabs to

+
+
Returns:
+

The tab list object

+
+
Return type:
+

Self

+
+
+
+

See also

+

duplicate_to()

+
+
+

New in version 0.0.5.

+
+
+ +
+
+name() list[str][source]
+
+ +
+
+reload() Self[source]
+

Reloads all tabs in the list.

+
+
Returns:
+

A reference to the tab list object.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+search(term: str) Self[source]
+

Searches for the given term in each tab in the list, using the default search engine.

+
+
Returns:
+

A reference to the tab list object.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+source() list[str][source]
+

Gets the source HTML of each tab in the list.

+

This will activate Safari, individually focus each tab, refocus the original tab, then return a list of all tabs’ source HTML.

+
+
Returns:
+

A list of source HTML

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+text() list[PyXA.XABase.XAText][source]
+

Gets the visible text of each tab in the list.

+

This will activate Safari, individually focus each tab, refocus the original tab, then return a list of all tabs’ visible text.

+
+
Returns:
+

A list of visible text

+
+
Return type:
+

list[XABase.XAText]

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+url() list[PyXA.XABase.XAURL][source]
+
+ +
+
+visible() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Safari.XASafariWindow(properties)[source]
+

Bases: XASBWindow, XASBPrintable, XAObject

+

A window of Safari.app.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + +

current_tab

The currently selected tab.

document

The document currently displayed in the window.

+

Methods:

+ + + + + + +

tabs([filter])

Returns a list of tabs matching the given filter.

+
+
+property current_tab: XASafariTab
+

The currently selected tab.

+
+ +
+
+property document: XASafariDocument
+

The document currently displayed in the window.

+
+ +
+
+tabs(filter: dict = None) XASafariTabList[source]
+

Returns a list of tabs matching the given filter.

+
+

Changed in version 0.0.4: Now returns an object of XASafariTabList instead of a default list.

+
+
+

New in version 0.0.1.

+
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/shortcuts.html b/docs/reference/apps/shortcuts.html new file mode 100644 index 0000000..3917573 --- /dev/null +++ b/docs/reference/apps/shortcuts.html @@ -0,0 +1,835 @@ + + + + + + + Shortcuts Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shortcuts Module Reference

+
+

New in version 0.0.2.

+
+

Control the macOS Shortcuts application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + +

XAShortcut(properties)

A class for managing and interacting with shortcuts.

XAShortcutFolder(properties)

A class for managing and interacting with folders of shortcuts.

XAShortcutFolderList(properties[, filter])

A wrapper around lists of shortcuts folders that employs fast enumeration techniques.

XAShortcutList(properties[, filter])

A wrapper around lists of shortcuts that employs fast enumeration techniques.

XAShortcutsApplication(properties)

A class for managing and interacting with Shortcuts.app.

+
+
+class PyXA.apps.Shortcuts.XAShortcut(properties)[source]
+

Bases: XASBPrintable, XAClipboardCodable

+

A class for managing and interacting with shortcuts.

+ +
+

New in version 0.0.2.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

accepts_input

Whether the shortcut accepts input data.

action_count

The number of actions in the shortcut.

color

The color of the short.

folder

The folder that contains the shortcut.

icon

The shortcut's icon.

id

The unique identifier for the shortcut.

name

The name of the shortcut.

subtitle

The shortcut's subtitle.

+

Methods:

+ + + + + + + + + +

get_clipboard_representation()

Gets a clipboard-codable representation of the shortcut.

run([input])

Runs the shortcut with the provided input.

+
+
+property accepts_input: bool
+

Whether the shortcut accepts input data.

+
+ +
+
+property action_count: int
+

The number of actions in the shortcut.

+
+ +
+
+property color: XAColor
+

The color of the short.

+
+ +
+
+property folder: XAShortcutFolder
+

The folder that contains the shortcut.

+
+ +
+
+get_clipboard_representation() list[Union[str, objc.NSImage]][source]
+

Gets a clipboard-codable representation of the shortcut.

+

When the clipboard content is set to a shortcut, the shortcut’s name, subtitle, and icon are added to the clipboard.

+
+
Returns:
+

The shortcut’s name, subtitle, and icon

+
+
Return type:
+

list[Union[str, str, AppKit.NSImage]]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property icon: XAImage
+

The shortcut’s icon.

+
+ +
+
+property id: str
+

The unique identifier for the shortcut.

+
+ +
+
+property name: str
+

The name of the shortcut.

+
+ +
+
+run(input: Any = None) Any[source]
+

Runs the shortcut with the provided input.

+
+
Parameters:
+

input (Any, optional) – The input to pass to the shortcut, defaults to None

+
+
Returns:
+

The value returned when the shortcut executes

+
+
Return type:
+

Any

+
+
Example 1:
+

Run a shortcut without inputs

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Shortcuts")
+>>> folder = app.folders().by_name("Dev Tools")
+>>> shortcut = folder.shortcuts().by_name("Show IP Address")
+>>> shortcut.run()
+
+
+
+
Example 2:
+

Run a shortcut with text input

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Shortcuts")
+>>> shortcut = app.shortcuts().by_name("Show Notification")
+>>> shortcut.run("Testing 1 2 3...")
+
+
+
+
Example 3:
+

Run a shortcut with URL input

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Shortcuts")
+>>> safari = PyXA.Application("Safari")
+>>> document = safari.document(0)
+>>> shortcut = app.shortcuts().by_name("Save URL as PDF")
+>>> shortcut.run(document.url)
+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+property subtitle: str
+

The shortcut’s subtitle.

+
+ +
+ +
+
+class PyXA.apps.Shortcuts.XAShortcutFolder(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for managing and interacting with folders of shortcuts.

+ +
+

New in version 0.0.2.

+
+

Methods:

+ + + + + + + + + +

get_clipboard_representation()

Gets a clipboard-codable representation of the folder.

shortcuts([filter])

Returns a list of shortcuts matching the given filter.

+

Attributes:

+ + + + + + + + + +

id

A unique identifier for the folder.

name

The name string for the folder.

+
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the folder.

+

When the clipboard content is set to a shortcut folder, the folders’s name is added to the clipboard.

+
+
Returns:
+

The name of the folder

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: str
+

A unique identifier for the folder.

+
+ +
+
+property name: str
+

The name string for the folder.

+
+ +
+
+shortcuts(filter: dict = None) XAShortcutList[source]
+

Returns a list of shortcuts matching the given filter.

+
+
Example 1:
+

Get all shortcuts in a folder

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Shortcuts")
+>>> folder = app.folders()[0]
+>>> print(folder.shortcuts())
+<<class 'PyXA.apps.Shortcuts.XAShortcutList'>['Text Last Image', 'Shazam shortcut', 'Make QR Code', 'Music Quiz', ...]>
+
+
+
+
Example 2:
+

Get a list of shortcut colors in a folder

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Shortcuts")
+>>> folder = app.folders()[0]
+>>> print(folder.shortcuts().color())
+[<<class 'PyXA.XABase.XAColor'>r=0.21521323919296265, g=0.7715266942977905, b=0.32515448331832886, a=0.0>, <<class 'PyXA.XABase.XAColor'>r=0.2379034161567688, g=0.3681696951389313, b=0.7627069354057312, a=0.0>, ...]>
+
+
+
+

Changed in version 0.0.4: Now returns an object of XAShortcutList instead of a default list.

+
+
+

New in version 0.0.2.

+
+
+ +
+ +
+
+class PyXA.apps.Shortcuts.XAShortcutFolderList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around lists of shortcuts folders that employs fast enumeration techniques.

+

All properties of folders can be called as methods on the wrapped list, returning a list containing each folders’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_id(id)

by_name(name)

get_clipboard_representation()

Gets a clipboard-codable representation of each folder in the list.

id()

name()

shortcuts([filter])

+
+
+by_id(id: str) Optional[XAShortcutFolder][source]
+
+ +
+
+by_name(name: str) Optional[XAShortcutFolder][source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each folder in the list.

+

When the clipboard content is set to a list of shortcut folders, each folders’s name is added to the clipboard.

+
+
Returns:
+

The list of folder names

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+shortcuts(filter: dict = None) list[PyXA.apps.Shortcuts.XAShortcutList][source]
+
+ +
+ +
+
+class PyXA.apps.Shortcuts.XAShortcutList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around lists of shortcuts that employs fast enumeration techniques.

+

All properties of shortcuts can be called as methods on the wrapped list, returning a list containing each shortcut’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

accepts_input()

action_count()

by_accepts_input(accepts_input)

by_action_count(action_count)

by_color(color)

by_folder(folder)

by_icon(icon)

by_id(id)

by_name(name)

by_subtitle(subtitle)

color()

folder()

get_clipboard_representation()

Gets a clipboard-codable representation of each shortcut in the list.

icon()

id()

name()

subtitle()

+
+
+accepts_input() list[bool][source]
+
+ +
+
+action_count() list[int][source]
+
+ +
+
+by_accepts_input(accepts_input: bool) Optional[XAShortcut][source]
+
+ +
+
+by_action_count(action_count: int) Optional[XAShortcut][source]
+
+ +
+
+by_color(color: XAColor) Optional[XAShortcut][source]
+
+ +
+
+by_folder(folder: XAShortcutFolder) Optional[XAShortcut][source]
+
+ +
+
+by_icon(icon: XAImage) Optional[XAShortcut][source]
+
+ +
+
+by_id(id: str) Optional[XAShortcut][source]
+
+ +
+
+by_name(name: str) Optional[XAShortcut][source]
+
+ +
+
+by_subtitle(subtitle: str) Optional[XAShortcut][source]
+
+ +
+
+color() list[PyXA.XABase.XAColor][source]
+
+ +
+
+folder() XAShortcutFolderList[source]
+
+ +
+
+get_clipboard_representation() list[Union[list[str], list[objc.NSImage]]][source]
+

Gets a clipboard-codable representation of each shortcut in the list.

+

When the clipboard content is set to a list of shortcuts, each shortcut’s name, subtitle, and icon are added to the clipboard.

+
+
Returns:
+

A list of each shortcut’s name, subtitle, and icon

+
+
Return type:
+

list[Union[list[str], list[str], list[AppKit.NSImage]]]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+icon() XAImageList[source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+subtitle() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Shortcuts.XAShortcutsApplication(properties)[source]
+

Bases: XASBApplication, XACanOpenPath

+

A class for managing and interacting with Shortcuts.app.

+
+

New in version 0.0.2.

+
+

Methods:

+ + + + + + + + + + + + +

folders([filter])

Returns a list of folders matching the given filter.

run(shortcut[, input])

Runs the shortcut with the provided input.

shortcuts([filter])

Returns a list of shortcuts matching the given filter.

+

Attributes:

+ + + + + + + + + + + + +

frontmost

Whether Shortcuts is the active application.

name

The name of the application.

version

The version number of Shortcuts.app.

+
+
+folders(filter: dict = None) XAShortcutFolderList[source]
+

Returns a list of folders matching the given filter.

+
+
Example 1:
+

Get all folders

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Shortcuts")
+>>> print(app.folders())
+<<class 'PyXA.apps.Shortcuts.XAShortcutFolderList'>['Starter Shortcuts', 'Window Management', 'Dev Tools', ...]>
+
+
+
+
Example 2:
+

Get the number of shortcuts contained in each folder

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Shortcuts")
+>>> all_shortcuts = app.folders().shortcuts()
+>>> lengths = [len(ls) for ls in all_shortcuts]
+>>> print(lengths)
+[4, 3, 2, 15, 12, ...]
+
+
+
+

Changed in version 0.0.4: Now returns an object of XAShortcutFolderList instead of a default list.

+
+
+

New in version 0.0.2.

+
+
+ +
+
+property frontmost: bool
+

Whether Shortcuts is the active application.

+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+run(shortcut: XAShortcut, input: Any = None) Any[source]
+

Runs the shortcut with the provided input.

+
+
Parameters:
+
    +
  • shortcut (XAShortcut) – The shortcut to run

  • +
  • input (Any, optional) – The input to pass to the shortcut, defaults to None

  • +
+
+
Returns:
+

The return value of the last action to execute

+
+
Return type:
+

Any

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+shortcuts(filter: dict = None) XAShortcutList[source]
+

Returns a list of shortcuts matching the given filter.

+
+
Example 1:
+

Get all shortcuts

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Shortcuts")
+>>> print(app.shortcuts())
+<<class 'PyXA.apps.Shortcuts.XAShortcutList'>['Combine Screenshots & Share', 'Travel plans', 'Paywall Bypasser via Facebook', 'Display Notification', 'Text Converter For iMessage', ...]>
+
+
+
+

Changed in version 0.0.4: Now returns an object of XAShortcutList instead of a default list.

+
+
+

New in version 0.0.2.

+
+
+ +
+
+property version: str
+

The version number of Shortcuts.app.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/spotify.html b/docs/reference/apps/spotify.html new file mode 100644 index 0000000..b91ab60 --- /dev/null +++ b/docs/reference/apps/spotify.html @@ -0,0 +1,598 @@ + + + + + + + Spotify Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Spotify Module Reference

+
+

New in version 0.1.0.

+
+

Control Spotify using JXA-like syntax.

+

Classes:

+ + + + + + + + + +

XASpotifyApplication(properties)

A class for managing and interacting with Spotify.app.

XASpotifyTrack(properties)

A Spotify track.

+
+
+class PyXA.apps.Spotify.XASpotifyApplication(properties)[source]
+

Bases: XASBApplication

+

A class for managing and interacting with Spotify.app.

+
+

New in version 0.1.0.

+
+

Classes:

+ + + + + + +

PlayerState(value[, names, module, ...])

States of the Spotify track player.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

current_track

The currently playing track.

frontmost

Whether Spotify is the active application.

name

The name of the application.

player_position

The player's position within the currently playing track in seconds.

player_state

Is Spotify stopped, paused, or playing?

repeating

Whether repeating is on or off.

repeating_enabled

Whether repeating is enabled in the current playback context.

shuffling

Whether shuffling is on or off.

shuffling_enabled

Whether shuffling is enabled in the current playback context.

sound_volume

The sound output volume (0 = minimum, 100 = maximum).

version

The version of Spotify.app.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + +

next_track()

Skips to the next track.

pause()

Pauses playback.

play()

Resumes playback.

play_track(track_uri[, context_uri])

Starts playback of a track in the given context.

playpause()

Toggles play/pause.

previous_track()

Skips to the previous track.

search([search_string, track, start_year, ...])

Opens the search tab and searches for content matching given parameters.

+
+
+class PlayerState(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

States of the Spotify track player.

+

Attributes:

+ + + + + + + + + + + + +

PAUSED

PLAYING

STOPPED

+
+
+PAUSED = 1800426352
+
+ +
+
+PLAYING = 1800426320
+
+ +
+
+STOPPED = 1800426323
+
+ +
+ +
+
+property current_track: XASpotifyTrack
+

The currently playing track.

+
+ +
+
+property frontmost: bool
+

Whether Spotify is the active application.

+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+next_track()[source]
+

Skips to the next track.

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Spotify")
+>>> app.next_track()
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+pause()[source]
+

Pauses playback.

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Spotify")
+>>> app.pause()
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+play()[source]
+

Resumes playback.

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Spotify")
+>>> app.play()
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+play_track(track_uri: str, context_uri: Optional[str] = None)[source]
+

Starts playback of a track in the given context.

+
+
Parameters:
+
    +
  • track_uri (str) – The URI of the track to play

  • +
  • context_uri (Union[str, None], optional) – The URI of the context to play in, defaults to None

  • +
+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Spotify")
+>>> app.play_track("spotify:track:4LRPiXqCikLlN15c3yImP7")
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property player_position: float
+

The player’s position within the currently playing track in seconds.

+
+ +
+
+property player_state: PlayerState
+

Is Spotify stopped, paused, or playing?

+
+ +
+
+playpause()[source]
+

Toggles play/pause.

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Spotify")
+>>> app.playpause()
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+previous_track()[source]
+

Skips to the previous track.

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Spotify")
+>>> app.previous_track()
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property repeating: bool
+

Whether repeating is on or off.

+
+ +
+
+property repeating_enabled: bool
+

Whether repeating is enabled in the current playback context.

+
+ +
+
+search(search_string: str = '', track: str = '', start_year: int = -1, end_year: int = -1, genre: str = '', artist: str = '', album: str = '', label: str = '', mood: str = '')[source]
+

Opens the search tab and searches for content matching given parameters.

+
+

New in version 0.1.0.

+
+
+ +
+
+property shuffling: bool
+

Whether shuffling is on or off.

+
+ +
+
+property shuffling_enabled: bool
+

Whether shuffling is enabled in the current playback context.

+
+ +
+
+property sound_volume: int
+

The sound output volume (0 = minimum, 100 = maximum).

+
+ +
+
+property version: str
+

The version of Spotify.app.

+
+ +
+ +
+
+class PyXA.apps.Spotify.XASpotifyTrack(properties)[source]
+

Bases: XAObject

+

A Spotify track.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

album

The album of the track.

album_artist

The album artist of the track.

artist

The artist of the track.

artwork

The album artwork image.

artwork_url

The URL of the track's album cover.

disc_number

The disc number of the track.

duration

The length of the track in milliseconds.

id

The ID of the track.

name

The name of the track.

played_count

The number of times this track has been played.

popularity

The popularity of this track, 0-100.

spotify_url

The URL of the track.

starred

Whether the track is starred.

track_number

The index of the track in its album.

+
+
+property album: str
+

The album of the track.

+
+ +
+
+property album_artist: str
+

The album artist of the track.

+
+ +
+
+property artist: str
+

The artist of the track.

+
+ +
+
+property artwork: XAImage
+

The album artwork image.

+
+ +
+
+property artwork_url: XAURL
+

The URL of the track’s album cover.

+
+ +
+
+property disc_number: int
+

The disc number of the track.

+
+ +
+
+property duration: int
+

The length of the track in milliseconds.

+
+ +
+
+property id: str
+

The ID of the track.

+
+ +
+
+property name: str
+

The name of the track.

+
+ +
+
+property played_count: int
+

The number of times this track has been played.

+
+ +
+
+property popularity: int
+

The popularity of this track, 0-100.

+
+ +
+
+property spotify_url: type
+

The URL of the track.

+
+ +
+
+property starred: bool
+

Whether the track is starred.

+
+ +
+
+property track_number: int
+

The index of the track in its album.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/stocks.html b/docs/reference/apps/stocks.html new file mode 100644 index 0000000..aef427e --- /dev/null +++ b/docs/reference/apps/stocks.html @@ -0,0 +1,490 @@ + + + + + + + Stocks Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Stocks Module Reference

+
+

New in version 0.0.6.

+
+

Control the macOS Stocks application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + +

XAStocksApplication(properties)

A class for managing and interacting with Stocks.app.

XAStocksSavedStock(properties)

A class for interacting with stocks in Stocks.app.

XAStocksSavedStockList(properties[, filter])

A wrapper around a list of stocks.

+
+
+class PyXA.apps.Stocks.XAStocksApplication(properties)[source]
+

Bases: XAApplication

+

A class for managing and interacting with Stocks.app.

+
+

See also

+

XAStocksSavedStock

+
+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + +

go_back()

Clicks the 'back' button (from a new article when viewed in the Stocks app).

new_tab()

Opens a new tab.

saved_stocks()

Gets a list of stocks.

show_business_news()

Shows the 'Business News' tab in the front stock window.

show_symbol(ticker)

Displays the page for the specified ticker symbol.

+

Attributes:

+ + + + + + +

sidebar_showing

Whether the sidebar is currently showing.

+
+
+go_back() XAStocksApplication[source]
+

Clicks the ‘back’ button (from a new article when viewed in the Stocks app).

+
+
Returns:
+

A reference to the application object

+
+
Return type:
+

XAStocksApplication

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+new_tab()[source]
+

Opens a new tab.

+
+

New in version 0.0.6.

+
+
+ +
+
+saved_stocks() XAStocksSavedStockList[source]
+

Gets a list of stocks.

+
+
Returns:
+

The list of stocks

+
+
Return type:
+

XAStocksStockList

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+show_business_news() XAStocksApplication[source]
+

Shows the ‘Business News’ tab in the front stock window.

+
+
Returns:
+

A reference to the application object

+
+
Return type:
+

XAStocksApplication

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+show_symbol(ticker: str) XAStocksApplication[source]
+

Displays the page for the specified ticker symbol.

+
+
Parameters:
+

ticker (str) – The ticker symbol for the desired stock

+
+
Returns:
+

A reference to the application object

+
+
Return type:
+

XAStocksApplication

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+property sidebar_showing: bool
+

Whether the sidebar is currently showing.

+
+ +
+ +
+
+class PyXA.apps.Stocks.XAStocksSavedStock(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for interacting with stocks in Stocks.app.

+
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

change

The percentage or point change of the stock in the current trading session.

name

The name of the stock (The company name).

price

The current price of the stock.

properties

All properties of the stock.

selected

Whether the stock is the currently selected stock.

symbol

The symbol for the stock.

+

Methods:

+ + + + + + + + + +

get_clipboard_representation()

Gets a clipboard-codable representation of the stock.

show()

Shows the stock's tab in the front stock window.

+
+
+property change: str
+

The percentage or point change of the stock in the current trading session.

+
+ +
+
+get_clipboard_representation() list[Union[str, objc.NSURL]][source]
+

Gets a clipboard-codable representation of the stock.

+

When the clipboard content is set to a saved stock, the stocks’s name, price, and stocks URI are added to the clipboard.

+
+
Returns:
+

The stock’s name, price, and stocks URI

+
+
Return type:
+

list[Union[str, NSURL]]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property name: str
+

The name of the stock (The company name).

+
+ +
+
+property price: float
+

The current price of the stock.

+
+ +
+
+property properties: dict
+

All properties of the stock.

+
+ +
+
+property selected: bool
+

Whether the stock is the currently selected stock.

+
+ +
+
+show()[source]
+

Shows the stock’s tab in the front stock window.

+
+

New in version 0.0.6.

+
+
+ +
+
+property symbol: str
+

The symbol for the stock.

+
+ +
+ +
+
+class PyXA.apps.Stocks.XAStocksSavedStockList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around a list of stocks.

+
+

New in version 0.0.6.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + +

change()

get_clipboard_representation()

Gets a clipboard-codable representation of each stock in the list.

name()

price()

properties()

selected()

symbol()

+
+
+change() list[str][source]
+
+ +
+
+get_clipboard_representation() list[Union[str, objc.NSURL]][source]
+

Gets a clipboard-codable representation of each stock in the list.

+

When the clipboard content is set to a list of saved stocks, each stocks’s name, price, and stocks URI are added to the clipboard.

+
+
Returns:
+

Each stock’s name, price, and stocks URI

+
+
Return type:
+

list[Union[str, NSURL]]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+name() list[str][source]
+
+ +
+
+price() list[str][source]
+
+ +
+
+properties() list[str][source]
+
+ +
+
+selected() list[str][source]
+
+ +
+
+symbol() list[str][source]
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/systemevents.html b/docs/reference/apps/systemevents.html new file mode 100644 index 0000000..83bba21 --- /dev/null +++ b/docs/reference/apps/systemevents.html @@ -0,0 +1,11701 @@ + + + + + + + System Events Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

System Events Module Reference

+
+

New in version 0.1.0.

+
+

Control the macOS System Events application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XASystemEventsAction(properties)

An action that can be performed on the UI element.

XASystemEventsActionList(properties[, filter])

A wrapper around lists of actions that employs fast enumeration techniques.

XASystemEventsAppearancePreferencesObject(...)

A collection of appearance preferences.

XASystemEventsApplication(properties)

A class for managing and interacting with System Events.app.

XASystemEventsApplicationProcess(properties)

A process launched from an application file.

XASystemEventsApplicationProcessList(properties)

A wrapper around lists of application processes that employs fast enumeration techniques.

XASystemEventsAttribute(properties)

A named data value associated with the UI element.

XASystemEventsAttributeList(properties[, filter])

A wrapper around lists of attributes that employs fast enumeration techniques.

XASystemEventsBrowser(properties)

A browser belonging to a window.

XASystemEventsBrowserList(properties[, filter])

A wrapper around lists of browser elements that employs fast enumeration techniques.

XASystemEventsBusyIndicator(properties)

A busy indicator belonging to a window.

XASystemEventsBusyIndicatorList(properties)

A wrapper around lists of busy indicator elements that employs fast enumeration techniques.

XASystemEventsButton(properties)

A button belonging to a window or scroll bar.

XASystemEventsButtonList(properties[, filter])

A wrapper around lists of button elements that employs fast enumeration techniques.

XASystemEventsCDAndDVDPreferencesObject(...)

The user's CD and DVD insertion preferences.

XASystemEventsCheckbox(properties)

A checkbox belonging to a window.

XASystemEventsCheckboxList(properties[, filter])

A wrapper around lists of checkbox elements that employs fast enumeration techniques.

XASystemEventsColorWell(properties)

A color well belonging to a window.

XASystemEventsColorWellList(properties[, filter])

A wrapper around lists of color well elements that employs fast enumeration techniques.

XASystemEventsColumn(properties)

A column belonging to a table.

XASystemEventsColumnList(properties[, filter])

A wrapper around lists of table column elements that employs fast enumeration techniques.

XASystemEventsComboBox(properties)

A combo box belonging to a window.

XASystemEventsComboBoxList(properties[, filter])

A wrapper around lists of combo box elements that employs fast enumeration techniques.

XASystemEventsConfiguration(properties)

A collection of settings for configuring a connection.

XASystemEventsConfigurationList(properties)

A wrapper around lists of configurations that employs fast enumeration techniques.

XASystemEventsDeskAccessoryProcess(properties)

A process launched from an desk accessory file.

XASystemEventsDeskAccessoryProcessList(...)

A wrapper around lists of desk accessory processes that employs fast enumeration techniques.

XASystemEventsDesktop(properties)

Desktop picture settings for desktops belonging to the user.

XASystemEventsDesktopList(properties[, filter])

A wrapper around lists of desktops that employs fast enumeration techniques.

XASystemEventsDockPreferencesObject(properties)

The current user's dock preferences.

XASystemEventsDocument(properties)

A document of System Events.app.

XASystemEventsDocumentList(properties[, filter])

A wrapper around lists of documents that employs fast enumeration techniques.

XASystemEventsDrawer(properties)

A drawer that may be extended from a window.

XASystemEventsDrawerList(properties[, filter])

A wrapper around lists of drawer elements that employs fast enumeration techniques.

XASystemEventsFolderAction(properties)

An action attached to a folder in the file system.

XASystemEventsFolderActionList(properties[, ...])

A wrapper around lists of folder actions that employs fast enumeration techniques.

XASystemEventsGroup(properties)

A group belonging to a window.

XASystemEventsGroupList(properties[, filter])

A wrapper around lists of group elements that employs fast enumeration techniques.

XASystemEventsGrowArea(properties)

A grow area belonging to a window.

XASystemEventsGrowAreaList(properties[, filter])

A wrapper around lists of grow area elements that employs fast enumeration techniques.

XASystemEventsImage(properties)

An image belonging to a static text field.

XASystemEventsImageList(properties[, filter])

A wrapper around lists of image elements that employs fast enumeration techniques.

XASystemEventsIncrementor(properties)

A incrementor belonging to a window.

XASystemEventsIncrementorList(properties[, ...])

A wrapper around lists of incrementor elements that employs fast enumeration techniques.

XASystemEventsInsertionPreference(properties)

A specific insertion preference.

XASystemEventsInterface(properties)

A collection of settings for a network interface.

XASystemEventsInterfaceList(properties[, filter])

A wrapper around lists of network interfaces that employs fast enumeration techniques.

XASystemEventsList(properties)

A list belonging to a window.

XASystemEventsListList(properties[, filter])

A wrapper around lists of list UI elements that employs fast enumeration techniques.

XASystemEventsLocation(properties)

A set of services.

XASystemEventsLocationList(properties[, filter])

A wrapper around lists of service locations that employs fast enumeration techniques.

XASystemEventsLoginItem(properties)

An item to be launched or opened at login.add()

XASystemEventsLoginItemList(properties[, filter])

A wrapper around lists of login items that employs fast enumeration techniques.

XASystemEventsMenu(properties)

A menu belonging to a menu bar item.

XASystemEventsMenuBar(properties)

A menu bar belonging to a process.

XASystemEventsMenuBarItem(properties)

A menu bar item belonging to a menu bar.

XASystemEventsMenuBarItemList(properties[, ...])

A wrapper around lists of menu bar item elements that employs fast enumeration techniques.

XASystemEventsMenuBarList(properties[, filter])

A wrapper around lists of menu bar elements that employs fast enumeration techniques.

XASystemEventsMenuButton(properties)

A menu button belonging to a window.

XASystemEventsMenuButtonList(properties[, ...])

A wrapper around lists of menu button elements that employs fast enumeration techniques.

XASystemEventsMenuItem(properties)

A menu item belonging to a menu.

XASystemEventsMenuItemList(properties[, filter])

A wrapper around lists of menu item elements that employs fast enumeration techniques.

XASystemEventsMenuList(properties[, filter])

A wrapper around lists of menu elements that employs fast enumeration techniques.

XASystemEventsNetworkPreferencesObject(...)

The preferences for the current user's network.

XASystemEventsOutline(properties)

An outline belonging to a window.

XASystemEventsOutlineList(properties[, filter])

A wrapper around lists of outline elements that employs fast enumeration techniques.

XASystemEventsPopOver(properties)

A pop over belonging to a window.

XASystemEventsPopOverList(properties[, filter])

A wrapper around lists of popover elements that employs fast enumeration techniques.

XASystemEventsPopUpButton(properties)

A pop up button belonging to a window.

XASystemEventsPopUpButtonList(properties[, ...])

A wrapper around lists of popup button elements that employs fast enumeration techniques.

XASystemEventsPrintSettings(properties)

Settings for printing.

XASystemEventsProcess(properties)

A process running on this computer.

XASystemEventsProcessList(properties[, ...])

A wrapper around lists of processes that employs fast enumeration techniques.

XASystemEventsProgressIndicator(properties)

A progress indicator belonging to a window.

XASystemEventsProgressIndicatorList(properties)

A wrapper around lists of progress indicator elements that employs fast enumeration techniques.

XASystemEventsPropertyListFile(properties)

A file containing data in Property List format.

XASystemEventsPropertyListFileList(properties)

A wrapper around lists of property list files that employs fast enumeration techniques.

XASystemEventsPropertyListItem(properties)

A unit of data in Property List format.

XASystemEventsPropertyListItemList(properties)

A wrapper around lists of property list items that employs fast enumeration techniques.

XASystemEventsRadioButton(properties)

A radio button belonging to a window.

XASystemEventsRadioButtonList(properties[, ...])

A wrapper around lists of radio button elements that employs fast enumeration techniques.

XASystemEventsRadioGroup(properties)

A radio button group belonging to a window.

XASystemEventsRadioGroupList(properties[, ...])

A wrapper around lists of radio button group elements that employs fast enumeration techniques.

XASystemEventsRelevanceIndicator(properties)

A relevance indicator belonging to a window.

XASystemEventsRelevanceIndicatorList(properties)

A wrapper around lists of relevance indicator elements that employs fast enumeration techniques.

XASystemEventsRow(properties)

A row belonging to a table.

XASystemEventsRowList(properties[, filter])

A wrapper around lists of table row elements that employs fast enumeration techniques.

XASystemEventsScreenSaver(properties)

An installed screen saver.

XASystemEventsScreenSaverList(properties[, ...])

A wrapper around lists of screen savers that employs fast enumeration techniques.

XASystemEventsScreenSaverPreferencesObject(...)

Screen saver settings.

XASystemEventsScript(properties)

A script invoked by a folder action.

XASystemEventsScriptList(properties[, filter])

A wrapper around lists of scripts that employs fast enumeration techniques.

XASystemEventsScriptingClass(properties)

A class within a suite within a scripting definition.

XASystemEventsScriptingClassList(properties)

A wrapper around lists of scripting classes that employs fast enumeration techniques.

XASystemEventsScriptingCommand(properties)

A command within a suite within a scripting definition.

XASystemEventsScriptingCommandList(properties)

A wrapper around lists of scripting commands that employs fast enumeration techniques.

XASystemEventsScriptingDefinitionObject(...)

The scripting definition of the System Events application.

XASystemEventsScriptingElement(properties)

An element within a class within a suite within a scripting definition.

XASystemEventsScriptingElementList(properties)

A wrapper around lists of scripting elements that employs fast enumeration techniques.

XASystemEventsScriptingEnumeration(properties)

An enumeration within a suite within a scripting definition.

XASystemEventsScriptingEnumerationList(...)

A wrapper around lists of scripting enumerations that employs fast enumeration techniques.

XASystemEventsScriptingEnumerator(properties)

An enumerator within an enumeration within a suite within a scripting definition.

XASystemEventsScriptingEnumeratorList(properties)

A wrapper around lists of scripting enumerators that employs fast enumeration techniques.

XASystemEventsScriptingParameter(properties)

A parameter within a command within a suite within a scripting definition.

XASystemEventsScriptingParameterList(properties)

A wrapper around lists of scripting parameters that employs fast enumeration techniques.

XASystemEventsScriptingProperty(properties)

A property within a class within a suite within a scripting definition.

XASystemEventsScriptingPropertyList(properties)

A wrapper around lists of scripting properties that employs fast enumeration techniques.

XASystemEventsScriptingResultObject(properties)

The result of a command within a suite within a scripting definition.

XASystemEventsScriptingResultObjectList(...)

A wrapper around lists of scripting result objects that employs fast enumeration techniques.

XASystemEventsScriptingSuite(properties)

A suite within a scripting definition.

XASystemEventsScriptingSuiteList(properties)

A wrapper around lists of scripting suites that employs fast enumeration techniques.

XASystemEventsScrollArea(properties)

A scroll area belonging to a window.

XASystemEventsScrollAreaList(properties[, ...])

A wrapper around lists of scroll area elements that employs fast enumeration techniques.

XASystemEventsScrollBar(properties)

A scroll bar belonging to a window.

XASystemEventsScrollBarList(properties[, filter])

A wrapper around lists of scroll bar elements that employs fast enumeration techniques.

XASystemEventsSecurityPreferencesObject(...)

A collection of security preferences.

XASystemEventsService(properties)

A collection of settings for a network service.

XASystemEventsServiceList(properties[, filter])

A wrapper around lists of services that employs fast enumeration techniques.

XASystemEventsSheet(properties)

A sheet displayed over a window.

XASystemEventsSheetList(properties[, filter])

A wrapper around lists of sheet elements that employs fast enumeration techniques.

XASystemEventsSlider(properties)

A slider belonging to a window.

XASystemEventsSliderList(properties[, filter])

A wrapper around lists of slider elements that employs fast enumeration techniques.

XASystemEventsSplitter(properties)

A splitter belonging to a window.

XASystemEventsSplitterGroup(properties)

A splitter group belonging to a window.

XASystemEventsSplitterGroupList(properties)

A wrapper around lists of splitter group elements that employs fast enumeration techniques.

XASystemEventsSplitterList(properties[, filter])

A wrapper around lists of splitter elements that employs fast enumeration techniques.

XASystemEventsStaticText(properties)

A static text field belonging to a window.

XASystemEventsStaticTextList(properties[, ...])

A wrapper around lists of static text elements that employs fast enumeration techniques.

XASystemEventsTabGroup(properties)

A tab group belonging to a window.

XASystemEventsTabGroupList(properties[, filter])

A wrapper around lists of tab group elements that employs fast enumeration techniques.

XASystemEventsTable(properties)

A table belonging to a window.

XASystemEventsTableList(properties[, filter])

A wrapper around lists of table elements that employs fast enumeration techniques.

XASystemEventsTextArea(properties)

A text area belonging to a window.

XASystemEventsTextAreaList(properties[, filter])

A wrapper around lists of text area elements that employs fast enumeration techniques.

XASystemEventsTextField(properties)

A text field belonging to a window.

XASystemEventsTextFieldList(properties[, filter])

A wrapper around lists of text field elements that employs fast enumeration techniques.

XASystemEventsToolbar(properties)

A toolbar belonging to a window.

XASystemEventsToolbarList(properties[, filter])

A wrapper around lists of toolbar elements that employs fast enumeration techniques.

XASystemEventsUIElement(properties)

A piece of the user interface of a process.

XASystemEventsUIElementList(properties[, ...])

A wrapper around lists of UI elements that employs fast enumeration techniques.

XASystemEventsUser(properties)

A user of the system.

XASystemEventsUserList(properties[, filter])

A wrapper around lists of users that employs fast enumeration techniques.

XASystemEventsValueIndicator(properties)

A value indicator ( thumb or slider ) belonging to a scroll bar.

XASystemEventsValueIndicatorList(properties)

A wrapper around lists of value indicator elements that employs fast enumeration techniques.

XASystemEventsWindow(properties)

A window belonging to a process.

XASystemEventsWindowList(properties[, ...])

A wrapper around a list of windows.

XASystemEventsXMLAttribute(properties)

A named value associated with a unit of data in XML format.

XASystemEventsXMLAttributeList(properties[, ...])

A wrapper around lists of XML attributes that employs fast enumeration techniques.

XASystemEventsXMLData(properties)

Data in XML format.

XASystemEventsXMLDataList(properties[, filter])

A wrapper around lists of XML data that employs fast enumeration techniques.

XASystemEventsXMLElement(properties)

A unit of data in XML format.

XASystemEventsXMLElementList(properties[, ...])

A wrapper around lists of XML elements that employs fast enumeration techniques.

XASystemEventsXMLFile(properties)

A file containing data in XML format.

XASystemEventsXMLFileList(properties[, filter])

A wrapper around lists of XML files that employs fast enumeration techniques.

+
+
+class PyXA.apps.SystemEvents.XASystemEventsAction(properties)[source]
+

Bases: XAObject

+

An action that can be performed on the UI element.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + +

name

The name of the action.

object_description

What the action does.

+

Methods:

+ + + + + + +

perform()

Performs the action.

+
+
+property name: str
+

The name of the action.

+
+ +
+
+property object_description: str
+

What the action does.

+
+ +
+
+perform()[source]
+

Performs the action.

+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsActionList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of actions that employs fast enumeration techniques.

+

All properties of actions can be called as methods on the wrapped list, returning a list containing each action’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + +

by_name(name)

by_object_description(object_description)

name()

object_description()

+
+
+by_name(name: str) Optional[XASystemEventsAction][source]
+
+ +
+
+by_object_description(object_description: str) Optional[XASystemEventsAction][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+object_description() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsAppearancePreferencesObject(properties)[source]
+

Bases: XAObject

+

A collection of appearance preferences.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

appearance

The overall look of buttons, menus and windows.

dark_mode

Whether to use dark menu bar and dock.

font_smoothing

Is font smoothing on?

font_smoothing_style

The method used for smoothing fonts.

highlight_color

The color used for hightlighting selected text and lists.

recent_applications_limit

The number of recent applications to track.

recent_documents_limit

The number of recent documents to track.

recent_servers_limit

The number of recent servers to track.

scroll_bar_action

The action performed by clicking the scroll bar.

smooth_scrolling

Is smooth scrolling used?

+
+
+property appearance: Appearance
+

The overall look of buttons, menus and windows.

+
+ +
+
+property dark_mode: bool
+

Whether to use dark menu bar and dock.

+
+ +
+
+property font_smoothing: bool
+

Is font smoothing on?

+
+ +
+
+property font_smoothing_style: FontSmoothingStyle
+

The method used for smoothing fonts.

+
+ +
+
+property highlight_color: HighlightColor
+

The color used for hightlighting selected text and lists.

+
+ +
+
+property recent_applications_limit: int
+

The number of recent applications to track.

+
+ +
+
+property recent_documents_limit: int
+

The number of recent documents to track.

+
+ +
+
+property recent_servers_limit: int
+

The number of recent servers to track.

+
+ +
+
+property scroll_bar_action: ScrollPageBehavior
+

The action performed by clicking the scroll bar.

+
+ +
+
+property smooth_scrolling: bool
+

Is smooth scrolling used?

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsApplication(properties)[source]
+

Bases: XAEventsApplication, XASBApplication, XACanPrintPath

+

A class for managing and interacting with System Events.app.

+
+

New in version 0.1.0.

+
+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

AccessRight(value[, names, module, ...])

Access right levels.

Appearance(value[, names, module, qualname, ...])

Appearance colors.

DoubleClickBehavior(value[, names, module, ...])

Options for double click behaviors.

DynamicStyle(value[, names, module, ...])

Options for the dynamic style of the desktop background.

FontSmoothingStyle(value[, names, module, ...])

Font smoothing styles.

HighlightColor(value[, names, module, ...])

Highlight colors.

Key(value[, names, module, qualname, type, ...])

Keys and key actions.

MediaInsertionAction(value[, names, module, ...])

Actions to perform when media is inserted.

MinimizeEffect(value[, names, module, ...])

Options for the effect to use when minimizing applications.

PictureRotation(value[, names, module, ...])

Desktop image picture rotation settings.

ScreenLocation(value[, names, module, ...])

Locations on the screen.

ScrollPageBehavior(value[, names, module, ...])

Scroll page behaviors.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

abort_transaction()

Aborts the current transaction.

aliases([filter])

Returns a list of aliases, as PyXA-wrapped objects, matching the given filter.

application_processes([filter])

Returns a list of application processes, as PyXA-wrapped objects, matching the given filter.

begin_transaction()

Discards the results of a bounded update session with one or more files.

click()

Clicks on the application.

desk_accessory_processes([filter])

Returns a list of desk accessory processes, as PyXA-wrapped objects, matching the given filter.

desktops([filter])

Returns a list of desktops, as PyXA-wrapped objects, matching the given filter.

disk_items([filter])

Returns a list of disk items, as PyXA-wrapped objects, matching the given filter.

disks([filter])

Returns a list of disks, as PyXA-wrapped objects, matching the given filter.

documents([filter])

Returns a list of documents, as PyXA-wrapped objects, matching the given filter.

domains([filter])

Returns a list of domains, as PyXA-wrapped objects, matching the given filter.

end_transaction()

Ends the current transaction gracefully.

file_packages([filter])

Returns a list of file packages, as PyXA-wrapped objects, matching the given filter.

files([filter])

Returns a list of files, as PyXA-wrapped objects, matching the given filter.

folder_actions([filter])

Returns a list of folder actions, as PyXA-wrapped objects, matching the given filter.

folders([filter])

Returns a list of folders, as PyXA-wrapped objects, matching the given filter.

key_code(key_code[, modifier])

Cause the target (active) process to behave as if key codes were entered.

key_stroke(keystroke[, modifier])

Cause the target (active) process to behave as if keystrokes were entered.

log_out()

Logs out the current user.

login_items([filter])

Returns a list of login items, as PyXA-wrapped objects, matching the given filter.

make(specifier, properties)

Creates a new element of the given specifier class without adding it to any list.

processes([filter])

Returns a list of processes, as PyXA-wrapped objects, matching the given filter.

property_list_files([filter])

Returns a list of property list files, as PyXA-wrapped objects, matching the given filter.

property_list_items([filter])

Returns a list of property list items, as PyXA-wrapped objects, matching the given filter.

restart([state_saving_preference])

Restarts the computer.

screen_savers([filter])

Returns a list of screen savers, as PyXA-wrapped objects, matching the given filter.

shut_down([state_saving_preference])

Shuts down the computer.

sleep()

Puts the computer to sleep.

ui_elements([filter])

Returns a list of UI elements, as PyXA-wrapped objects, matching the given filter.

users([filter])

Returns a list of users, as PyXA-wrapped objects, matching the given filter.

xml_datas([filter])

Returns a list of XML datas, as PyXA-wrapped objects, matching the given filter.

xml_files([filter])

Returns a list of XML files, as PyXA-wrapped objects, matching the given filter.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

appearance_preferences

A collection of appearance preferences.

application_support_folder

The Application Support folder.

applications_folder

The user's Applications folder.

cd_and_dvd_preferences

The preferences for the current user when a CD or DVD is inserted.

classic_domain

The collection of folders belonging to the Classic System.

current_desktop

The primary desktop.

current_screen_saver

The currently selected screen saver.

current_user

The currently logged in user.

desktop_folder

The user's Desktop folder.

desktop_pictures_folder

The Desktop Pictures folder.

dock_preferences

The preferences for the current user's dock.

documents_folder

The user's Documents folder.

downloads_folder

The user's Downloads folder.

favorites_folder

The user's Favorites folder.

folder_action_scripts_folder

The user's Folder Action Scripts folder.

folder_actions_enabled

Are Folder Actions currently being processed?

fonts_folder

The Fonts folder.

frontmost

Is this the active application?

home_folder

The Home folder of the currently logged in user.

library_folder

The Library folder.

local_domain

The collection of folders residing on the Local machine.

movies_folder

The user's Movies folder.

music_folder

The user's Music folder.

name

The name of the application.

network_domain

The collection of folders residing on the Network.

network_preferences

The preferences for the current user's network.

pictures_folder

The user's Pictures folder.

preferences_folder

The user's Preferences folder.

public_folder

The user's Public folder.

quit_delay

The time in seconds the application will idle before quitting; if set to zero, idle time will not cause the application to quit.

screen_saver_preferences

The preferences common to all screen savers.

script_menu_enabled

Is the Script menu installed in the menu bar?

scripting_additions_folder

The Scripting Additions folder.

scripting_definition

The scripting definition of the System Events application.

scripts_folder

The user's Scripts folder.

security_preferences

A collection of security preferences.

shared_documents_folder

The Shared Documents folder.

sites_folder

The user's Sites folder.

speakable_items_folder

The Speakable Items folder.

startup_disk

The disk from which Mac OS X was loaded.

system_domain

The collection of folders belonging to the System.

temporary_items_folder

The Temporary Items folder.

trash

The user's Trash folder.

ui_elements_enabled

Are UI element events currently being processed?

user_domain

The collection of folders belonging to the User.

utilities_folder

The Utilities folder.

version

The version number of the application.

workflows_folder

The Automator Workflows folder.

+
+
+class AccessRight(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Access right levels.

+

Attributes:

+ + + + + + + + + + + + + + + +

NONE

READ

Read only

READ_WRITE

Read and write

WRITE

Write only

+
+
+NONE = 1852796517
+
+ +
+
+READ = 1919246692
+

Read only

+
+ +
+
+READ_WRITE = 1919186802
+

Read and write

+
+ +
+
+WRITE = 2003986804
+

Write only

+
+ +
+ +
+
+class Appearance(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Appearance colors.

+

Attributes:

+ + + + + + + + + +

BLUE

GRAPHITE

+
+
+BLUE = 1651275109
+
+ +
+
+GRAPHITE = 1735550580
+
+ +
+ +
+
+class DoubleClickBehavior(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for double click behaviors.

+

Attributes:

+ + + + + + + + + + + + +

MINIMIZE

Minimize

OFF

Off

ZOOM

Zoom

+
+
+MINIMIZE = 1684303209
+

Minimize

+
+ +
+
+OFF = 1684303718
+

Off

+
+ +
+
+ZOOM = 1684306543
+

Zoom

+
+ +
+ +
+
+class DynamicStyle(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for the dynamic style of the desktop background.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

AUTO

automatic (if supported, follows light/dark appearance)

DARK

dark style

DYNAMIC

dynamic (if supported, updates desktop picture based on time and/or location)

LIGHT

light style

UNKNOWN

unknown style

+
+
+AUTO = 1635020148
+

automatic (if supported, follows light/dark appearance)

+
+ +
+
+DARK = 1684107883
+

dark style

+
+ +
+
+DYNAMIC = 1685679725
+

dynamic (if supported, updates desktop picture based on time and/or location)

+
+ +
+
+LIGHT = 1818850405
+

light style

+
+ +
+
+UNKNOWN = 504363703359
+

unknown style

+
+ +
+ +
+
+class FontSmoothingStyle(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Font smoothing styles.

+

Attributes:

+ + + + + + + + + + + + + + + + + + +

AUTOMATIC

LIGHT

MEDIUM

STANDARD

STRONG

+
+
+AUTOMATIC = 1635087469
+
+ +
+
+LIGHT = 1818850405
+
+ +
+
+MEDIUM = 1835361385
+
+ +
+
+STANDARD = 1937010276
+
+ +
+
+STRONG = 1937011303
+
+ +
+ +
+
+class HighlightColor(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Highlight colors.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

BLUE

GOLD

GRAPHITE

GREEN

ORANGE

PURPLE

RED

SILVER

+
+
+BLUE = 1651275109
+
+ +
+
+GOLD = 1735355492
+
+ +
+
+GRAPHITE = 1735550580
+
+ +
+
+GREEN = 1735550318
+
+ +
+
+ORANGE = 1869770343
+
+ +
+
+PURPLE = 1886548076
+
+ +
+
+RED = 1919247392
+
+ +
+
+SILVER = 1936488050
+
+ +
+ +
+
+class Key(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Keys and key actions.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

CAPS_LOCK

COMMAND

CONTROL

FUNCTION

OPTION

SHIFT

+
+
+CAPS_LOCK = 4
+
+ +
+
+COMMAND = 0
+
+ +
+
+CONTROL = 1
+
+ +
+
+FUNCTION = 5
+
+ +
+
+OPTION = 2
+
+ +
+
+SHIFT = 3
+
+ +
+ +
+
+class MediaInsertionAction(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Actions to perform when media is inserted.

+

Attributes:

+ + + + + + + + + + + + + + + +

ASK_WHAT_TO_DO

IGNORE

OPEN_APPLICATION

RUN_A_SCRIPT

+
+
+ASK_WHAT_TO_DO = 1684562291
+
+ +
+
+IGNORE = 1684564327
+
+ +
+
+OPEN_APPLICATION = 1684562288
+
+ +
+
+RUN_A_SCRIPT = 1684566643
+
+ +
+ +
+
+class MinimizeEffect(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for the effect to use when minimizing applications.

+

Attributes:

+ + + + + + + + + +

GENIE

Genie effect

SCALE

Scale effect

+
+
+GENIE = 1734700649
+

Genie effect

+
+ +
+
+SCALE = 1935892844
+

Scale effect

+
+ +
+ +
+
+class PictureRotation(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Desktop image picture rotation settings.

+

Attributes:

+ + + + + + + + + + + + + + + +

AFTER_SLEEP

NEVER

USING_INTERVAL

USING_LOGIN

+
+
+AFTER_SLEEP = 3
+
+ +
+
+NEVER = 0
+
+ +
+
+USING_INTERVAL = 1
+
+ +
+
+USING_LOGIN = 2
+
+ +
+ +
+
+class ScreenLocation(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Locations on the screen.

+

Attributes:

+ + + + + + + + + + + + +

BOTTOM

Bottom of screen

LEFT

Left side of screen

RIGHT

Right side of screen

+
+
+BOTTOM = 1651471476
+

Bottom of screen

+
+ +
+
+LEFT = 1818584692
+

Left side of screen

+
+ +
+
+RIGHT = 1919510376
+

Right side of screen

+
+ +
+ +
+
+class ScrollPageBehavior(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Scroll page behaviors.

+

Attributes:

+ + + + + + + + + +

JUMP_TO_HERE

Jump to here

JUMP_TO_NEXT_PAGE

Jump to next page

+
+
+JUMP_TO_HERE = 1953458290
+

Jump to here

+
+ +
+
+JUMP_TO_NEXT_PAGE = 1853386855
+

Jump to next page

+
+ +
+ +
+
+abort_transaction()[source]
+

Aborts the current transaction.

+
+

New in version 0.1.0.

+
+
+ +
+
+aliases(filter: dict = None) Optional[XAAliasList][source]
+

Returns a list of aliases, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned aliases will have, or None

+
+
Returns:
+

The list of aliases

+
+
Return type:
+

XABase.XAAliasList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property appearance_preferences: XASystemEventsAppearancePreferencesObject
+

A collection of appearance preferences.

+
+ +
+
+application_processes(filter: dict = None) Optional[XASystemEventsApplicationProcessList][source]
+

Returns a list of application processes, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned processes will have, or None

+
+
Returns:
+

The list of processes

+
+
Return type:
+

XASystemEventsApplicationProcessList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property application_support_folder: XAFolder
+

The Application Support folder.

+
+ +
+
+property applications_folder: XAFolder
+

The user’s Applications folder.

+
+ +
+
+begin_transaction() int[source]
+

Discards the results of a bounded update session with one or more files.

+
+
Returns:
+

_description_

+
+
Return type:
+

int

+
+
+
+ +
+
+property cd_and_dvd_preferences: XASystemEventsCDAndDVDPreferencesObject
+

The preferences for the current user when a CD or DVD is inserted.

+
+ +
+
+property classic_domain: XAClassicDomainObject
+

The collection of folders belonging to the Classic System.

+
+ +
+
+click()[source]
+

Clicks on the application.

+
+

New in version 0.1.0.

+
+
+ +
+
+property current_desktop: XASystemEventsDesktop
+

The primary desktop.

+
+ +
+
+property current_screen_saver: XASystemEventsScreenSaver
+

The currently selected screen saver.

+
+ +
+
+property current_user: XASystemEventsUser
+

The currently logged in user.

+
+ +
+
+desk_accessory_processes(filter: dict = None) Optional[XASystemEventsDeskAccessoryProcessList][source]
+

Returns a list of desk accessory processes, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned processes will have, or None

+
+
Returns:
+

The list of processes

+
+
Return type:
+

XASystemEventsDeskAccessoryProcessList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property desktop_folder: XAFolder
+

The user’s Desktop folder.

+
+ +
+
+property desktop_pictures_folder: XAFolder
+

The Desktop Pictures folder.

+
+ +
+
+desktops(filter: dict = None) Optional[XASystemEventsDesktopList][source]
+

Returns a list of desktops, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned desktops will have, or None

+
+
Returns:
+

The list of desktops

+
+
Return type:
+

XASystemEventsDesktopList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+disk_items(filter: dict = None) Optional[XADiskItemList][source]
+

Returns a list of disk items, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned disk items will have, or None

+
+
Returns:
+

The list of disk items

+
+
Return type:
+

XABase.XADiskItemList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+disks(filter: dict = None) Optional[XADiskList][source]
+

Returns a list of disks, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned disks will have, or None

+
+
Returns:
+

The list of disks

+
+
Return type:
+

XABase.XADiskList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property dock_preferences: XASystemEventsDockPreferencesObject
+

The preferences for the current user’s dock.

+
+ +
+
+documents(filter: dict = None) Optional[XASystemEventsDocumentList][source]
+

Returns a list of documents, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned documents will have, or None

+
+
Returns:
+

The list of documents

+
+
Return type:
+

XASystemEventsDocumentList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property documents_folder: XAFolder
+

The user’s Documents folder.

+
+ +
+
+domains(filter: dict = None) Optional[XADomainList][source]
+

Returns a list of domains, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned domains will have, or None

+
+
Returns:
+

The list of domains

+
+
Return type:
+

XABase.XADomainList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property downloads_folder: XAFolder
+

The user’s Downloads folder.

+
+ +
+
+end_transaction()[source]
+

Ends the current transaction gracefully.

+
+

New in version 0.1.0.

+
+
+ +
+
+property favorites_folder: XAFolder
+

The user’s Favorites folder.

+
+ +
+
+file_packages(filter: dict = None) Optional[XAFilePackageList][source]
+

Returns a list of file packages, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned file packages will have, or None

+
+
Returns:
+

The list of file packages

+
+
Return type:
+

XABase.XAFilePackageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+files(filter: dict = None) Optional[XAFileList][source]
+

Returns a list of files, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned files will have, or None

+
+
Returns:
+

The list of files

+
+
Return type:
+

XABase.XAFileList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property folder_action_scripts_folder: XAFolder
+

The user’s Folder Action Scripts folder.

+
+ +
+
+folder_actions(filter: dict = None) Optional[XABase.XAFolderActionList][source]
+

Returns a list of folder actions, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned folder actions will have, or None

+
+
Returns:
+

The list of folder actions

+
+
Return type:
+

XABase.XAFolderActionList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property folder_actions_enabled: bool
+

Are Folder Actions currently being processed?

+
+ +
+
+folders(filter: dict = None) Optional[XAFolderList][source]
+

Returns a list of folders, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned folders will have, or None

+
+
Returns:
+

The list of folders

+
+
Return type:
+

XABase.XAFolderList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property fonts_folder: XAFolder
+

The Fonts folder.

+
+ +
+
+property frontmost: bool
+

Is this the active application?

+
+ +
+
+property home_folder: XAFolder
+

The Home folder of the currently logged in user.

+
+ +
+
+key_code(key_code: Union[int, list[int]], modifier: Optional[Union[Key, list[PyXA.apps.SystemEvents.XASystemEventsApplication.Key]]] = None)[source]
+

Cause the target (active) process to behave as if key codes were entered.

+
+
Parameters:
+
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+key_stroke(keystroke: Union[int, list[int]], modifier: Optional[Union[Key, list[PyXA.apps.SystemEvents.XASystemEventsApplication.Key]]] = None)[source]
+

Cause the target (active) process to behave as if keystrokes were entered.

+
+
Parameters:
+
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property library_folder: XAFolder
+

The Library folder.

+
+ +
+
+property local_domain: XALocalDomainObject
+

The collection of folders residing on the Local machine.

+
+ +
+
+log_out()[source]
+

Logs out the current user.

+
+

New in version 0.1.0.

+
+
+ +
+
+login_items(filter: dict = None) Optional[XASystemEventsLoginItemList][source]
+

Returns a list of login items, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned login items will have, or None

+
+
Returns:
+

The list of login items

+
+
Return type:
+

XASystemEventsLoginItemList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+make(specifier: str, properties: dict)[source]
+

Creates a new element of the given specifier class without adding it to any list.

+

Use XABase.XAList.push() to push the element onto a list.

+
+
Parameters:
+
    +
  • specifier (str) – The classname of the object to create

  • +
  • properties (dict) – The properties to give the object

  • +
+
+
Returns:
+

A PyXA wrapped form of the object

+
+
Return type:
+

XABase.XAObject

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property movies_folder: XAFolder
+

The user’s Movies folder.

+
+ +
+
+property music_folder: XAFolder
+

The user’s Music folder.

+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+property network_domain: XANetworkDomainObject
+

The collection of folders residing on the Network.

+
+ +
+
+property network_preferences: XASystemEventsNetworkPreferencesObject
+

The preferences for the current user’s network.

+
+ +
+
+property pictures_folder: XAFolder
+

The user’s Pictures folder.

+
+ +
+
+property preferences_folder: XAFolder
+

The user’s Preferences folder.

+
+ +
+
+processes(filter: dict = None) Optional[XASystemEventsProcessList][source]
+

Returns a list of processes, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned processes will have, or None

+
+
Returns:
+

The list of processes

+
+
Return type:
+

XASystemEventsProcessList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property_list_files(filter: dict = None) Optional[XASystemEventsPropertyListFileList][source]
+

Returns a list of property list files, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned property list files will have, or None

+
+
Returns:
+

The list of property list files

+
+
Return type:
+

XASystemEventsPropertyListFileList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property_list_items(filter: dict = None) Optional[XASystemEventsPropertyListItemList][source]
+

Returns a list of property list items, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned property list items will have, or None

+
+
Returns:
+

The list of property list items

+
+
Return type:
+

XASystemEventsPropertyListItemList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property public_folder: XAFolder
+

The user’s Public folder.

+
+ +
+
+property quit_delay: int
+

The time in seconds the application will idle before quitting; if set to zero, idle time will not cause the application to quit.

+
+ +
+
+restart(state_saving_preference: bool = False)[source]
+

Restarts the computer.

+
+
Parameters:
+

state_saving_preference (bool, optional) – Whether the user defined state saving preference is followed, defaults to False (always saved)

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property screen_saver_preferences: XASystemEventsScreenSaverPreferencesObject
+

The preferences common to all screen savers.

+
+ +
+
+screen_savers(filter: dict = None) Optional[XASystemEventsScreenSaverList][source]
+

Returns a list of screen savers, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned screen savers will have, or None

+
+
Returns:
+

The list of screen savers

+
+
Return type:
+

XASystemEventsScreenSaverList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property script_menu_enabled: bool
+

Is the Script menu installed in the menu bar?

+
+ +
+
+property scripting_additions_folder: XAFolder
+

The Scripting Additions folder.

+
+ +
+
+property scripting_definition: XASystemEventsScriptingDefinitionObject
+

The scripting definition of the System Events application.

+
+ +
+
+property scripts_folder: XAFolder
+

The user’s Scripts folder.

+
+ +
+
+property security_preferences: XASystemEventsSecurityPreferencesObject
+

A collection of security preferences.

+
+ +
+
+property shared_documents_folder: XAFolder
+

The Shared Documents folder.

+
+ +
+
+shut_down(state_saving_preference: bool = False)[source]
+

Shuts down the computer.

+
+
Parameters:
+

state_saving_preference (bool, optional) – Whether the user defined state saving preference is followed, defaults to False (always saved)

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property sites_folder: XAFolder
+

The user’s Sites folder.

+
+ +
+
+sleep()[source]
+

Puts the computer to sleep.

+
+

New in version 0.1.0.

+
+
+ +
+
+property speakable_items_folder: XAFolder
+

The Speakable Items folder.

+
+ +
+
+property startup_disk: XADisk
+

The disk from which Mac OS X was loaded.

+
+ +
+
+property system_domain: XASystemDomainObject
+

The collection of folders belonging to the System.

+
+ +
+
+property temporary_items_folder: XAFolder
+

The Temporary Items folder.

+
+ +
+
+property trash: XAFolder
+

The user’s Trash folder.

+
+ +
+
+ui_elements(filter: dict = None) Optional[XASystemEventsUIElementList][source]
+

Returns a list of UI elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned UI elements will have, or None

+
+
Returns:
+

The list of UI elements

+
+
Return type:
+

XASystemEventsUIElementList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property ui_elements_enabled: bool
+

Are UI element events currently being processed?

+
+ +
+
+property user_domain: XAUserDomainObject
+

The collection of folders belonging to the User.

+
+ +
+
+users(filter: dict = None) Optional[XASystemEventsUserList][source]
+

Returns a list of users, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned users will have, or None

+
+
Returns:
+

The list of users

+
+
Return type:
+

XASystemEventsUserList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property utilities_folder: XAFolder
+

The Utilities folder.

+
+ +
+
+property version: str
+

The version number of the application.

+
+ +
+
+property workflows_folder: XAFolder
+

The Automator Workflows folder.

+
+ +
+
+xml_datas(filter: dict = None) Optional[XASystemEventsXMLDataList][source]
+

Returns a list of XML datas, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned XML datas will have, or None

+
+
Returns:
+

The list of XML datas

+
+
Return type:
+

XASystemEventsXMLDataList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+xml_files(filter: dict = None) Optional[XASystemEventsXMLFileList][source]
+

Returns a list of XML files, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned XML files will have, or None

+
+
Returns:
+

The list of XML files

+
+
Return type:
+

XASystemEventsXMLFileList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsApplicationProcess(properties)[source]
+

Bases: XASystemEventsProcess

+

A process launched from an application file.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + +

application_file

A reference to the application file from which this process was launched.

+
+
+property application_file: XAFile
+

A reference to the application file from which this process was launched.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsApplicationProcessList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsProcessList

+

A wrapper around lists of application processes that employs fast enumeration techniques.

+

All properties of application processes can be called as methods on the wrapped list, returning a list containing each process’ value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + +

application_file()

by_application_file(application_file)

+
+
+application_file() XAFileList[source]
+
+ +
+
+by_application_file(application_file: XAFile) Optional[XASystemEventsApplicationProcess][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsAttribute(properties)[source]
+

Bases: XAObject

+

A named data value associated with the UI element.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + +

name

The name of the attribute.

settable

Can the attribute be set?

value

The current value of the attribute.

+
+
+property name: str
+

The name of the attribute.

+
+ +
+
+property settable: bool
+

Can the attribute be set?

+
+ +
+
+property value: Any
+

The current value of the attribute.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsAttributeList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of attributes that employs fast enumeration techniques.

+

All properties of attributes can be called as methods on the wrapped list, returning a list containing each attribute’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_name(name)

by_settable(settable)

by_value(value)

name()

settable()

value()

+
+
+by_name(name: str) Optional[XASystemEventsAttribute][source]
+
+ +
+
+by_settable(settable: bool) Optional[XASystemEventsAttribute][source]
+
+ +
+
+by_value(value: Any) Optional[XASystemEventsAttribute][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+settable() list[bool][source]
+
+ +
+
+value() Any[source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsBrowser(properties)[source]
+

Bases: XASystemEventsUIElement

+

A browser belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsBrowserList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of browser elements that employs fast enumeration techniques.

+

All properties of browser elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsBusyIndicator(properties)[source]
+

Bases: XASystemEventsUIElement

+

A busy indicator belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsBusyIndicatorList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of busy indicator elements that employs fast enumeration techniques.

+

All properties of busy indicator elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsButton(properties)[source]
+

Bases: XASystemEventsUIElement

+

A button belonging to a window or scroll bar.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsButtonList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of button elements that employs fast enumeration techniques.

+

All properties of button elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsCDAndDVDPreferencesObject(properties)[source]
+

Bases: XAObject

+

The user’s CD and DVD insertion preferences.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

blank_bd

The blank BD insertion preference.

blank_cd

The blank CD insertion preference.

blank_dvd

The blank DVD insertion preference.

music_cd

The music CD insertion preference.

picture_cd

The picture CD insertion preference.

video_bd

The video BD insertion preference.

video_dvd

The video DVD insertion preference.

+
+
+property blank_bd: XASystemEventsInsertionPreference
+

The blank BD insertion preference.

+
+ +
+
+property blank_cd: XASystemEventsInsertionPreference
+

The blank CD insertion preference.

+
+ +
+
+property blank_dvd: XASystemEventsInsertionPreference
+

The blank DVD insertion preference.

+
+ +
+
+property music_cd: XASystemEventsInsertionPreference
+

The music CD insertion preference.

+
+ +
+
+property picture_cd: XASystemEventsInsertionPreference
+

The picture CD insertion preference.

+
+ +
+
+property video_bd: XASystemEventsInsertionPreference
+

The video BD insertion preference.

+
+ +
+
+property video_dvd: XASystemEventsInsertionPreference
+

The video DVD insertion preference.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsCheckbox(properties)[source]
+

Bases: XASystemEventsUIElement

+

A checkbox belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsCheckboxList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of checkbox elements that employs fast enumeration techniques.

+

All properties of checkbox elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsColorWell(properties)[source]
+

Bases: XASystemEventsUIElement

+

A color well belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsColorWellList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of color well elements that employs fast enumeration techniques.

+

All properties of color well elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsColumn(properties)[source]
+

Bases: XASystemEventsUIElement

+

A column belonging to a table.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsColumnList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of table column elements that employs fast enumeration techniques.

+

All properties of table column elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsComboBox(properties)[source]
+

Bases: XASystemEventsUIElement

+

A combo box belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsComboBoxList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of combo box elements that employs fast enumeration techniques.

+

All properties of combo box elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsConfiguration(properties)[source]
+

Bases: XAObject

+

A collection of settings for configuring a connection.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

account_name

The name used to authenticate.

connected

Is the configuration connected?

id

The unique identifier for the configuration.

name

The name of the configuration.

+

Methods:

+ + + + + + + + + +

connect()

Connects the configuration.

disconnect()

Disconnects the configuration.

+
+
+property account_name: str
+

The name used to authenticate.

+
+ +
+
+connect() XASystemEventsConfiguration[source]
+

Connects the configuration.

+
+
Returns:
+

The configuration object

+
+
Return type:
+

XASystemEventsConfiguration

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property connected: bool
+

Is the configuration connected?

+
+ +
+
+disconnect() XASystemEventsConfiguration[source]
+

Disconnects the configuration.

+
+
Returns:
+

The configuration object

+
+
Return type:
+

XASystemEventsConfiguration

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property id: str
+

The unique identifier for the configuration.

+
+ +
+
+property name: str
+

The name of the configuration.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsConfigurationList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of configurations that employs fast enumeration techniques.

+

All properties of configurations can be called as methods on the wrapped list, returning a list containing each configuration’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

account_name()

by_account_name(account_name)

by_connected(connected)

by_id(id)

by_name(name)

connected()

id()

name()

+
+
+account_name() list[str][source]
+
+ +
+
+by_account_name(account_name: str) Optional[XASystemEventsConfiguration][source]
+
+ +
+
+by_connected(connected: bool) Optional[XASystemEventsConfiguration][source]
+
+ +
+
+by_id(id: str) Optional[XASystemEventsConfiguration][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsConfiguration][source]
+
+ +
+
+connected() list[bool][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsDeskAccessoryProcess(properties)[source]
+

Bases: XASystemEventsProcess

+

A process launched from an desk accessory file.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + +

desk_accessory_file

A reference to the desk accessory file from which this process was launched.

+
+
+property desk_accessory_file: XAAlias
+

A reference to the desk accessory file from which this process was launched.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsDeskAccessoryProcessList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsProcessList

+

A wrapper around lists of desk accessory processes that employs fast enumeration techniques.

+

All properties of desk accessory processes can be called as methods on the wrapped list, returning a list containing each process’ value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + +

by_desk_accessory_file(desk_accessory_file)

desk_accessory_file()

+
+
+by_desk_accessory_file(desk_accessory_file: XAFile) Optional[XASystemEventsDeskAccessoryProcess][source]
+
+ +
+
+desk_accessory_file() XAFileList[source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsDesktop(properties)[source]
+

Bases: XAObject

+

Desktop picture settings for desktops belonging to the user.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

change_interval

The number of seconds to wait between changing the desktop picture.

display_name

The name of display on which this desktop appears.

dynamic_style

The desktop picture dynamic style.

id

The unique identifier of the desktop.

name

The name of the desktop.

picture

The path to file used as desktop picture.

picture_rotation

Never, using interval, using login, after sleep.

pictures_folder

The path to folder containing pictures for changing desktop background.

random_order

Turn on for random ordering of changing desktop pictures.

translucent_menu_bar

Indicates whether the menu bar is translucent.

transluscent_menu_bar

Indicates whether the menu bar is translucent.

+
+
+property change_interval: float
+

The number of seconds to wait between changing the desktop picture.

+
+ +
+
+property display_name: str
+

The name of display on which this desktop appears.

+
+ +
+
+property dynamic_style: DynamicStyle
+

The desktop picture dynamic style.

+
+ +
+
+property id: int
+

The unique identifier of the desktop.

+
+ +
+
+property name: str
+

The name of the desktop.

+
+ +
+
+property picture: XAPath
+

The path to file used as desktop picture.

+
+ +
+
+property picture_rotation: PictureRotation
+

Never, using interval, using login, after sleep.

+
+ +
+
+property pictures_folder: XAPath
+

The path to folder containing pictures for changing desktop background.

+
+ +
+
+property random_order: bool
+

Turn on for random ordering of changing desktop pictures.

+
+ +
+
+property translucent_menu_bar: bool
+

Indicates whether the menu bar is translucent.

+
+ +
+
+property transluscent_menu_bar: bool
+

Indicates whether the menu bar is translucent.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsDesktopList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of desktops that employs fast enumeration techniques.

+

All properties of desktops can be called as methods on the wrapped list, returning a list containing each desktop’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_change_interval(change_interval)

by_display_name(display_name)

by_dynamic_style(dynamic_style)

by_id(id)

by_name(name)

by_picture(picture)

by_picture_rotation(picture_rotation)

by_pictures_folder(pictures_folder)

by_random_order(random_order)

by_translucent_menu_bar(translucent_menu_bar)

change_interval()

display_name()

dynamic_style()

id()

name()

picture()

picture_rotation()

pictures_folder()

random_folder()

translucent_menu_bar()

+
+
+by_change_interval(change_interval: float) Optional[XASystemEventsDesktop][source]
+
+ +
+
+by_display_name(display_name: str) Optional[XASystemEventsDesktop][source]
+
+ +
+
+by_dynamic_style(dynamic_style: DynamicStyle) Optional[XASystemEventsDesktop][source]
+
+ +
+
+by_id(id: int) Optional[XASystemEventsDesktop][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsDesktop][source]
+
+ +
+
+by_picture(picture: Union[XAPath, str]) Optional[XASystemEventsDesktop][source]
+
+ +
+
+by_picture_rotation(picture_rotation: PictureRotation) Optional[XASystemEventsDesktop][source]
+
+ +
+
+by_pictures_folder(pictures_folder: Union[XAPath, str]) Optional[XASystemEventsDesktop][source]
+
+ +
+
+by_random_order(random_order: bool) Optional[XASystemEventsDesktop][source]
+
+ +
+
+by_translucent_menu_bar(translucent_menu_bar: bool) Optional[XASystemEventsDesktop][source]
+
+ +
+
+change_interval() list[float][source]
+
+ +
+
+display_name() list[str][source]
+
+ +
+
+dynamic_style() list[PyXA.apps.SystemEvents.XASystemEventsApplication.DynamicStyle][source]
+
+ +
+
+id() list[int][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+picture() list[PyXA.XABase.XAPath][source]
+
+ +
+
+picture_rotation() list[PyXA.apps.SystemEvents.XASystemEventsApplication.PictureRotation][source]
+
+ +
+
+pictures_folder() list[PyXA.XABase.XAPath][source]
+
+ +
+
+random_folder() list[bool][source]
+
+ +
+
+translucent_menu_bar() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsDockPreferencesObject(properties)[source]
+

Bases: XAObject

+

The current user’s dock preferences.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

animate

Is the animation of opening applications on or off?

autohide

Is autohiding the dock on or off?

autohide_menu_bar

Is autohiding the menu bar on or off?

dock_size

Size/height of the items (between 0.0 (minimum) and 1.0 (maximum)).

double_click_behavior

Behavior when double clicking window a title bar.

magnification

Is magnification on or off?

magnification_size

Maximum magnification size when magnification is on (between 0.0 (minimum) and 1.0 (maximum)).

minimize_effect

Minimization effect.

minimize_into_application

Minimize window into its application?

screen_edge

Location on screen.

show_indicators

Show indicators for open applications?

show_recents

Show recent applications?

+
+
+property animate: bool
+

Is the animation of opening applications on or off?

+
+ +
+
+property autohide: bool
+

Is autohiding the dock on or off?

+
+ +
+
+property autohide_menu_bar: bool
+

Is autohiding the menu bar on or off?

+
+ +
+
+property dock_size: float
+

Size/height of the items (between 0.0 (minimum) and 1.0 (maximum)).

+
+ +
+
+property double_click_behavior: DoubleClickBehavior
+

Behavior when double clicking window a title bar.

+
+ +
+
+property magnification: bool
+

Is magnification on or off?

+
+ +
+
+property magnification_size: float
+

Maximum magnification size when magnification is on (between 0.0 (minimum) and 1.0 (maximum)).

+
+ +
+
+property minimize_effect: MinimizeEffect
+

Minimization effect.

+
+ +
+
+property minimize_into_application: bool
+

Minimize window into its application?

+
+ +
+
+property screen_edge: ScreenLocation
+

Location on screen.

+
+ +
+
+property show_indicators: bool
+

Show indicators for open applications?

+
+ +
+
+property show_recents: bool
+

Show recent applications?

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsDocument(properties)[source]
+

Bases: XAObject, XACloseable, XAPrintable

+

A document of System Events.app.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + +

file

Its location on disk, if it has one.

modified

Has it been modified since the last save?

name

Its name.

+

Methods:

+ + + + + + +

save([path])

Saves the document at the specified file path.

+
+
+property file: XAFile
+

Its location on disk, if it has one.

+
+ +
+
+property modified: bool
+

Has it been modified since the last save?

+
+ +
+
+property name: str
+

Its name.

+
+ +
+
+save(path: Optional[Union[str, XAPath]] = None)[source]
+

Saves the document at the specified file path.

+
+
Parameters:
+

path (Union[str, XABase.XAPath, None], optional) – The path to save the document at, defaults to None

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of documents that employs fast enumeration techniques.

+

All properties of documents can be called as methods on the wrapped list, returning a list containing each document’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_file(file)

by_modified(modified)

by_name(name)

file()

modified()

name()

+
+
+by_file(file: XAFile) Optional[XASystemEventsDocument][source]
+
+ +
+
+by_modified(modified: bool) Optional[XASystemEventsDocument][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsDocument][source]
+
+ +
+
+file() XAFileList[source]
+
+ +
+
+modified() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsDrawer(properties)[source]
+

Bases: XASystemEventsUIElement

+

A drawer that may be extended from a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsDrawerList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of drawer elements that employs fast enumeration techniques.

+

All properties of drawer elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsFolderAction(properties)[source]
+

Bases: XAObject

+

An action attached to a folder in the file system.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + +

enable()

Enables the folder action.

scripts([filter])

Returns a list of scripts, as PyXA-wrapped objects, matching the given filter.

+

Attributes:

+ + + + + + + + + + + + + + + +

enabled

Is the folder action enabled?

name

The name of the folder action, which is also the name of the folder.

path

The path to the folder to which the folder action applies.

volume

The volume on which the folder to which the folder action applies resides.

+
+
+enable()[source]
+

Enables the folder action.

+
+

New in version 0.1.0.

+
+
+ +
+
+property enabled: bool
+

Is the folder action enabled?

+
+ +
+
+property name: str
+

The name of the folder action, which is also the name of the folder.

+
+ +
+
+property path: str
+

The path to the folder to which the folder action applies.

+
+ +
+
+scripts(filter: dict = None) Optional[XASystemEventsScriptList][source]
+

Returns a list of scripts, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned scripts will have, or None

+
+
Returns:
+

The list of scripts

+
+
Return type:
+

XASystemEventsScriptList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property volume: str
+

The volume on which the folder to which the folder action applies resides.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsFolderActionList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of folder actions that employs fast enumeration techniques.

+

All properties of folder actions can be called as methods on the wrapped list, returning a list containing each actions’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_enabled(enabled)

by_name(name)

by_path(path)

by_volume(volume)

enabled()

name()

path()

volume()

+
+
+by_enabled(enabled: bool) Optional[XABase.XAFolderAction][source]
+
+ +
+
+by_name(name: str) Optional[XABase.XAFolderAction][source]
+
+ +
+
+by_path(path: Union[XAPath, str]) Optional[XABase.XAFolderAction][source]
+
+ +
+
+by_volume(volume: str) Optional[XABase.XAFolderAction][source]
+
+ +
+
+enabled() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+path() list[PyXA.XABase.XAPath][source]
+
+ +
+
+volume() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsGroup(properties)[source]
+

Bases: XASystemEventsUIElement

+

A group belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsGroupList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of group elements that employs fast enumeration techniques.

+

All properties of group elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsGrowArea(properties)[source]
+

Bases: XASystemEventsUIElement

+

A grow area belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsGrowAreaList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of grow area elements that employs fast enumeration techniques.

+

All properties of grow area elements can be called as methods on the wrapped list, returning a list containing each button’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsImage(properties)[source]
+

Bases: XASystemEventsUIElement

+

An image belonging to a static text field.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsImageList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of image elements that employs fast enumeration techniques.

+

All properties of image elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsIncrementor(properties)[source]
+

Bases: XASystemEventsUIElement

+

A incrementor belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsIncrementorList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of incrementor elements that employs fast enumeration techniques.

+

All properties of incrementor elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsInsertionPreference(properties)[source]
+

Bases: XAObject

+

A specific insertion preference.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + +

custom_application

Application to launch or activate on the insertion of media.

custom_script

AppleScript to launch or activate on the insertion of media.

insertion_action

The action to perform on media insertion.

+
+
+property custom_application: Optional[str]
+

Application to launch or activate on the insertion of media.

+
+ +
+
+property custom_script: Optional[str]
+

AppleScript to launch or activate on the insertion of media.

+
+ +
+
+property insertion_action: MediaInsertionAction
+

The action to perform on media insertion.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsInterface(properties)[source]
+

Bases: XAObject

+

A collection of settings for a network interface.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

automatic

Configure the interface speed, duplex, and mtu automatically?

duplex

The duplex setting half | full | full with flow control.

id

The unique identifier for the interface.

kind

The type of interface.

mac_address

The MAC address for the interface.

mtu

The packet size.

name

The name of the interface.

speed

Ethernet speed 10 | 100 | 1000.

+
+
+property automatic: bool
+

Configure the interface speed, duplex, and mtu automatically?

+
+ +
+
+property duplex: str
+

The duplex setting half | full | full with flow control.

+
+ +
+
+property id: str
+

The unique identifier for the interface.

+
+ +
+
+property kind: str
+

The type of interface.

+
+ +
+
+property mac_address: str
+

The MAC address for the interface.

+
+ +
+
+property mtu: int
+

The packet size.

+
+ +
+
+property name: str
+

The name of the interface.

+
+ +
+
+property speed: int
+

Ethernet speed 10 | 100 | 1000.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsInterfaceList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of network interfaces that employs fast enumeration techniques.

+

All properties of interfaces can be called as methods on the wrapped list, returning a list containing each interfaces’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

automatic()

by_automatic(automatic)

by_duplex(duplex)

by_id(id)

by_kind(kind)

by_mac_address(mac_address)

by_mtu(mtu)

by_name(name)

by_speed(speed)

duplex()

id()

kind()

mac_address()

mtu()

name()

speed()

+
+
+automatic() list[bool][source]
+
+ +
+
+by_automatic(automatic: bool) Optional[XASystemEventsInterface][source]
+
+ +
+
+by_duplex(duplex: str) Optional[XASystemEventsInterface][source]
+
+ +
+
+by_id(id: str) Optional[XASystemEventsInterface][source]
+
+ +
+
+by_kind(kind: str) Optional[XASystemEventsInterface][source]
+
+ +
+
+by_mac_address(mac_address: str) Optional[XASystemEventsInterface][source]
+
+ +
+
+by_mtu(mtu: int) Optional[XASystemEventsInterface][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsInterface][source]
+
+ +
+
+by_speed(speed: int) Optional[XASystemEventsInterface][source]
+
+ +
+
+duplex() list[str][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+kind() list[str][source]
+
+ +
+
+mac_address() list[str][source]
+
+ +
+
+mtu() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+speed() list[int][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsList(properties)[source]
+

Bases: XASystemEventsUIElement

+

A list belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsListList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of list UI elements that employs fast enumeration techniques.

+

All properties of list elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsLocation(properties)[source]
+

Bases: XAObject

+

A set of services.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + +

id

The unique identifier for the location.

name

The name of the location.

+
+
+property id: str
+

The unique identifier for the location.

+
+ +
+
+property name: str
+

The name of the location.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsLocationList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of service locations that employs fast enumeration techniques.

+

All properties of locations can be called as methods on the wrapped list, returning a list containing each location’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + +

by_id(id)

by_name(name)

id()

name()

+
+
+by_id(id: str) Optional[XASystemEventsLocation][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsLocation][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsLoginItem(properties)[source]
+

Bases: XAObject

+

An item to be launched or opened at login.add()

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + +

delete()

Deletes the login item.

+

Attributes:

+ + + + + + + + + + + + + + + +

hidden

Is the Login Item hidden when launched?

kind

The file type of the Login Item.

name

The name of the Login Item.

path

The file system path to the Login Item.

+
+
+delete()[source]
+

Deletes the login item.

+
+

New in version 0.1.0.

+
+
+ +
+
+property hidden: bool
+

Is the Login Item hidden when launched?

+
+ +
+
+property kind: str
+

The file type of the Login Item.

+
+ +
+
+property name: str
+

The name of the Login Item.

+
+ +
+
+property path: str
+

The file system path to the Login Item.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsLoginItemList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of login items that employs fast enumeration techniques.

+

All properties of property login items can be called as methods on the wrapped list, returning a list containing each login item’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_hidden(hidden)

by_kind(kind)

by_name(name)

by_path(path)

hidden()

kind()

name()

path()

+
+
+by_hidden(hidden: bool) Optional[XASystemEventsLoginItem][source]
+
+ +
+
+by_kind(kind: str) Optional[XASystemEventsLoginItem][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsLoginItem][source]
+
+ +
+
+by_path(path: Union[XAPath, str]) Optional[XASystemEventsLoginItem][source]
+
+ +
+
+hidden() list[bool][source]
+
+ +
+
+kind() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+path() list[PyXA.XABase.XAPath][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsMenu(properties)[source]
+

Bases: XASystemEventsUIElement

+

A menu belonging to a menu bar item.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsMenuBar(properties)[source]
+

Bases: XASystemEventsUIElement

+

A menu bar belonging to a process.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsMenuBarItem(properties)[source]
+

Bases: XASystemEventsUIElement

+

A menu bar item belonging to a menu bar.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsMenuBarItemList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of menu bar item elements that employs fast enumeration techniques.

+

All properties of menu bar item elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsMenuBarList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of menu bar elements that employs fast enumeration techniques.

+

All properties of menu bar elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsMenuButton(properties)[source]
+

Bases: XASystemEventsUIElement

+

A menu button belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsMenuButtonList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of menu button elements that employs fast enumeration techniques.

+

All properties of menu button elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsMenuItem(properties)[source]
+

Bases: XASystemEventsUIElement

+

A menu item belonging to a menu.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsMenuItemList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of menu item elements that employs fast enumeration techniques.

+

All properties of menu item elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsMenuList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of menu elements that employs fast enumeration techniques.

+

All properties of menu elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsNetworkPreferencesObject(properties)[source]
+

Bases: XAObject

+

The preferences for the current user’s network.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + +

current_location

The current location.

+

Methods:

+ + + + + + + + + + + + +

interfaces([filter])

Returns a list of interfaces, as PyXA-wrapped objects, matching the given filter.

locations([filter])

Returns a list of locations, as PyXA-wrapped objects, matching the given filter.

services([filter])

Returns a list of services, as PyXA-wrapped objects, matching the given filter.

+
+
+property current_location: XASystemEventsLocation
+

The current location.

+
+ +
+
+interfaces(filter: dict = None) Optional[XASystemEventsInterfaceList][source]
+

Returns a list of interfaces, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned interfaces will have, or None

+
+
Returns:
+

The list of interfaces

+
+
Return type:
+

XASystemEventsInterfaceList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+locations(filter: dict = None) Optional[XASystemEventsLocationList][source]
+

Returns a list of locations, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned locations will have, or None

+
+
Returns:
+

The list of locations

+
+
Return type:
+

XASystemEventsLocationList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+services(filter: dict = None) Optional[XASystemEventsServiceList][source]
+

Returns a list of services, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned services will have, or None

+
+
Returns:
+

The list of services

+
+
Return type:
+

XASystemEventsServiceList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsOutline(properties)[source]
+

Bases: XASystemEventsUIElement

+

An outline belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsOutlineList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of outline elements that employs fast enumeration techniques.

+

All properties of outline elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsPopOver(properties)[source]
+

Bases: XASystemEventsUIElement

+

A pop over belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsPopOverList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of popover elements that employs fast enumeration techniques.

+

All properties of outline popover can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsPopUpButton(properties)[source]
+

Bases: XASystemEventsUIElement

+

A pop up button belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsPopUpButtonList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of popup button elements that employs fast enumeration techniques.

+

All properties of popup button elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsPrintSettings(properties)[source]
+

Bases: XAObject

+

Settings for printing.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

collating

Should printed copies be collated?

copies

The number of copies of a document to be printed.

ending_page

The last page of the document to be printed.

error_handling

How should errors be handled?

fax_number

The target fax number.

pages_across

The number of logical pages laid across a physical page.

pages_down

The number of logical pages laid out down a physical page.

requested_print_time

The time at which the desktop printer should print the document.

starting_page

The first page of the document to be printed.

target_printer

The target printer.

+
+
+property collating: bool
+

Should printed copies be collated?

+
+ +
+
+property copies: int
+

The number of copies of a document to be printed.

+
+ +
+
+property ending_page: int
+

The last page of the document to be printed.

+
+ +
+
+property error_handling: PrintErrorHandling
+

How should errors be handled?

+
+ +
+
+property fax_number: str
+

The target fax number.

+
+ +
+
+property pages_across: int
+

The number of logical pages laid across a physical page.

+
+ +
+
+property pages_down: int
+

The number of logical pages laid out down a physical page.

+
+ +
+
+property requested_print_time: datetime
+

The time at which the desktop printer should print the document.

+
+ +
+
+property starting_page: int
+

The first page of the document to be printed.

+
+ +
+
+property target_printer: str
+

The target printer.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsProcess(properties)[source]
+

Bases: XASystemEventsUIElement

+

A process running on this computer.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

accepts_high_level_events

Is the process high-level event aware (accepts open application, open document, print document, and quit)?

accepts_remote_events

Does the process accept remote events?

architecture

The architecture in which the process is running.

background_only

Does the process run exclusively in the background?

bundle_identifier

The bundle identifier of the process' application file.

classic

Is the process running in the Classic environment?

creator_type

The OSType of the creator of the process (the signature).

displayed_name

The name of the file from which the process was launched, as displayed in the User Interface.

file

The file from which the process was launched.

file_type

The OSType of the file type of the process.

front_window

The front window of the application process.

frontmost

Is the process the frontmost process?

has_scripting_terminology

Does the process have a scripting terminology, i.e., can it be scripted?

id

The unique identifier of the process.

name

The name of the process.

partition_space_used

The number of bytes currently used in the process' partition.

short_name

The short name of the file from which the process was launched.

total_partition_size

The size of the partition with which the process was launched.

unix_id

The Unix process identifier of a process running in the native environment, or -1 for a process running in the Classic environment.

visible

Is the process' layer visible?

+
+
+property accepts_high_level_events: bool
+

Is the process high-level event aware (accepts open application, open document, print document, and quit)?

+
+ +
+
+property accepts_remote_events: bool
+

Does the process accept remote events?

+
+ +
+
+property architecture: str
+

The architecture in which the process is running.

+
+ +
+
+property background_only: bool
+

Does the process run exclusively in the background?

+
+ +
+
+property bundle_identifier: str
+

The bundle identifier of the process’ application file.

+
+ +
+
+property classic: bool
+

Is the process running in the Classic environment?

+
+ +
+
+property creator_type: str
+

The OSType of the creator of the process (the signature).

+
+ +
+
+property displayed_name: str
+

The name of the file from which the process was launched, as displayed in the User Interface.

+
+ +
+
+property file: XAFile
+

The file from which the process was launched.

+
+ +
+
+property file_type: str
+

The OSType of the file type of the process.

+
+ +
+
+property front_window: XASBWindow
+

The front window of the application process.

+
+ +
+
+property frontmost: bool
+

Is the process the frontmost process?

+
+ +
+
+property has_scripting_terminology: bool
+

Does the process have a scripting terminology, i.e., can it be scripted?

+
+ +
+
+property id: int
+

The unique identifier of the process.

+
+ +
+
+property name: str
+

The name of the process.

+
+ +
+
+property partition_space_used: int
+

The number of bytes currently used in the process’ partition.

+
+ +
+
+property short_name: Optional[str]
+

The short name of the file from which the process was launched.

+
+ +
+
+property total_partition_size: int
+

The size of the partition with which the process was launched.

+
+ +
+
+property unix_id: int
+

The Unix process identifier of a process running in the native environment, or -1 for a process running in the Classic environment.

+
+ +
+
+property visible: bool
+

Is the process’ layer visible?

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsProcessList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of processes that employs fast enumeration techniques.

+

All properties of processes can be called as methods on the wrapped list, returning a list containing each process’ value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

accepts_high_level_events()

accepts_remote_events()

architecture()

background_only()

bundle_identifier()

by_accepts_high_level_events(...)

by_accepts_remote_events(accepts_remote_events)

by_architecture(architecture)

by_background_only(background_only)

by_bundle_identifier(bundle_identifier)

by_classic(classic)

by_creator_type(creator_type)

by_displayed_name(displayed_name)

by_file(file)

by_file_type(file_type)

by_frontmost(frontmost)

by_has_scripting_terminology(...)

by_id(id)

by_name(name)

by_partition_space_used(partition_space_used)

by_short_name(short_name)

by_total_partition_size(total_partition_size)

by_unix_id(unix_id)

by_visible(visible)

classic()

creator_type()

displayed_name()

file()

file_type()

has_scripting_terminology()

id()

name()

partition_space_used()

short_name()

total_partition_size()

unix_id()

visible()

+
+
+accepts_high_level_events() list[bool][source]
+
+ +
+
+accepts_remote_events() list[bool][source]
+
+ +
+
+architecture() list[str][source]
+
+ +
+
+background_only() list[bool][source]
+
+ +
+
+bundle_identifier() list[str][source]
+
+ +
+
+by_accepts_high_level_events(accepts_high_level_events: bool) Optional[XASystemEventsProcess][source]
+
+ +
+
+by_accepts_remote_events(accepts_remote_events: bool) Optional[XASystemEventsProcess][source]
+
+ +
+
+by_architecture(architecture: str) Optional[XASystemEventsProcess][source]
+
+ +
+
+by_background_only(background_only: bool) Optional[XASystemEventsProcess][source]
+
+ +
+
+by_bundle_identifier(bundle_identifier: str) Optional[XASystemEventsProcess][source]
+
+ +
+
+by_classic(classic: bool) Optional[XASystemEventsProcess][source]
+
+ +
+
+by_creator_type(creator_type: str) Optional[XASystemEventsProcess][source]
+
+ +
+
+by_displayed_name(displayed_name: str) Optional[XASystemEventsProcess][source]
+
+ +
+
+by_file(file: XAFile) Optional[XASystemEventsProcess][source]
+
+ +
+
+by_file_type(file_type: str) Optional[XASystemEventsProcess][source]
+
+ +
+
+by_frontmost(frontmost: bool) Optional[XASystemEventsProcess][source]
+
+ +
+
+by_has_scripting_terminology(has_scripting_terminology: str) Optional[XASystemEventsProcess][source]
+
+ +
+
+by_id(id: str) Optional[XASystemEventsProcess][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsProcess][source]
+
+ +
+
+by_partition_space_used(partition_space_used: int) Optional[XASystemEventsProcess][source]
+
+ +
+
+by_short_name(short_name: str) Optional[XASystemEventsProcess][source]
+
+ +
+
+by_total_partition_size(total_partition_size: int) Optional[XASystemEventsProcess][source]
+
+ +
+
+by_unix_id(unix_id: str) Optional[XASystemEventsProcess][source]
+
+ +
+
+by_visible(visible: bool) Optional[XASystemEventsProcess][source]
+
+ +
+
+classic() list[bool][source]
+
+ +
+
+creator_type() list[str][source]
+
+ +
+
+displayed_name() list[str][source]
+
+ +
+
+file() XAFileList[source]
+
+ +
+
+file_type() list[str][source]
+
+ +
+
+has_scripting_terminology() list[bool][source]
+
+ +
+
+id() list[int][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+partition_space_used() list[int][source]
+
+ +
+
+short_name() list[str][source]
+
+ +
+
+total_partition_size() list[int][source]
+
+ +
+
+unix_id() list[int][source]
+
+ +
+
+visible() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsProgressIndicator(properties)[source]
+

Bases: XASystemEventsUIElement

+

A progress indicator belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsProgressIndicatorList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of progress indicator elements that employs fast enumeration techniques.

+

All properties of progress indicator elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsPropertyListFile(properties)[source]
+

Bases: XAObject

+

A file containing data in Property List format.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + +

contents

The contents of the property list file; elements and properties of the property list item may be accessed as if they were elements and properties of the property list file.

+
+
+property contents: XASystemEventsPropertyListItem
+

The contents of the property list file; elements and properties of the property list item may be accessed as if they were elements and properties of the property list file.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsPropertyListFileList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of property list files that employs fast enumeration techniques.

+

All properties of property list files can be called as methods on the wrapped list, returning a list containing each file’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + +

by_content(contents)

contents()

+
+
+by_content(contents: XASystemEventsPropertyListItemList) Optional[XASystemEventsPropertyListFile][source]
+
+ +
+
+contents() XASystemEventsPropertyListItemList[source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsPropertyListItem(properties)[source]
+

Bases: XAObject

+

A unit of data in Property List format.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

kind

The kind of data stored in the property list item: boolean/data/date/list/number/record/string.

name

The name of the property list item (if any).

text

The text representation of the property list data.

value

The value of the property list item.

+

Methods:

+ + + + + + +

property_list_items([filter])

Returns a list of property list items, as PyXA-wrapped objects, matching the given filter.

+
+
+property kind: str
+

The kind of data stored in the property list item: boolean/data/date/list/number/record/string.

+
+ +
+
+property name: str
+

The name of the property list item (if any).

+
+ +
+
+property_list_items(filter: dict = None) Optional[XASystemEventsPropertyListItemList][source]
+

Returns a list of property list items, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned property list items will have, or None

+
+
Returns:
+

The list of property list items

+
+
Return type:
+

XASystemEventsPropertyListItemList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property text: str
+

The text representation of the property list data.

+
+ +
+
+property value: Any
+

The value of the property list item.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsPropertyListItemList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of property list items that employs fast enumeration techniques.

+

All properties of property list items can be called as methods on the wrapped list, returning a list containing each item’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_kind(kind)

by_name(name)

by_text(text)

by_value(value)

kind()

name()

text()

value()

+
+
+by_kind(kind: str) Optional[XASystemEventsPropertyListItem][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsPropertyListItem][source]
+
+ +
+
+by_text(text: str) Optional[XASystemEventsPropertyListItem][source]
+
+ +
+
+by_value(value: Any) Optional[XASystemEventsPropertyListItem][source]
+
+ +
+
+kind() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+text() list[str][source]
+
+ +
+
+value() list[Union[int, bool, datetime.datetime, PyXA.apps.SystemEvents.XASystemEventsList, dict, str, bytes]][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsRadioButton(properties)[source]
+

Bases: XASystemEventsUIElement

+

A radio button belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsRadioButtonList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of radio button elements that employs fast enumeration techniques.

+

All properties of radio button elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsRadioGroup(properties)[source]
+

Bases: XASystemEventsUIElement

+

A radio button group belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsRadioGroupList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of radio button group elements that employs fast enumeration techniques.

+

All properties of radio button group elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsRelevanceIndicator(properties)[source]
+

Bases: XASystemEventsUIElement

+

A relevance indicator belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsRelevanceIndicatorList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of relevance indicator elements that employs fast enumeration techniques.

+

All properties of relevance indicator elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsRow(properties)[source]
+

Bases: XASystemEventsUIElement

+

A row belonging to a table.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsRowList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of table row elements that employs fast enumeration techniques.

+

All properties of table row elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScreenSaver(properties)[source]
+

Bases: XAObject

+

An installed screen saver.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

displayedName

Name of the screen saver module as displayed to the user.

name

Name of the screen saver module to be displayed.

path

Path to the screen saver module.

picture_display_style

Effect to use when displaying picture-based screen savers (slideshow, collage, or mosaic).

+

Methods:

+ + + + + + + + + +

start()

Starts the screen saver.

stop()

Stops the screen saver.

+
+
+property displayedName: str
+

Name of the screen saver module as displayed to the user.

+
+ +
+
+property name: str
+

Name of the screen saver module to be displayed.

+
+ +
+
+property path: XAAlias
+

Path to the screen saver module.

+
+ +
+
+property picture_display_style: str
+

Effect to use when displaying picture-based screen savers (slideshow, collage, or mosaic).

+
+ +
+
+start()[source]
+

Starts the screen saver.

+
+

New in version 0.1.0.

+
+
+ +
+
+stop()[source]
+

Stops the screen saver.

+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScreenSaverList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of screen savers that employs fast enumeration techniques.

+

All properties of screen savers can be called as methods on the wrapped list, returning a list containing each screen saver’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_displayed_name(displayed_name)

by_name(name)

by_path(path)

by_picture_display_style(picture_display_style)

displayed_name()

name()

path()

picture_display_style()

+
+
+by_displayed_name(displayed_name: str) Optional[XASystemEventsScreenSaver][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsScreenSaver][source]
+
+ +
+
+by_path(path: Union[XAPath, str]) Optional[XASystemEventsScreenSaver][source]
+
+ +
+
+by_picture_display_style(picture_display_style: str) Optional[XASystemEventsScreenSaver][source]
+
+ +
+
+displayed_name() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+path() list[PyXA.XABase.XAPath][source]
+
+ +
+
+picture_display_style() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScreenSaverPreferencesObject(properties)[source]
+

Bases: XAObject

+

Screen saver settings.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

delay_interval

Number of seconds of idle time before the screen saver starts; zero for never.

main_screen_only

Should the screen saver be shown only on the main screen?

running

Is the screen saver running?

show_clock

Should a clock appear over the screen saver?

+

Methods:

+ + + + + + + + + +

start()

Starts the current screen saver.

stop()

Stops the current screen saver.

+
+
+property delay_interval: int
+

Number of seconds of idle time before the screen saver starts; zero for never.

+
+ +
+
+property main_screen_only: bool
+

Should the screen saver be shown only on the main screen?

+
+ +
+
+property running: bool
+

Is the screen saver running?

+
+ +
+
+property show_clock: bool
+

Should a clock appear over the screen saver?

+
+ +
+
+start()[source]
+

Starts the current screen saver.

+
+

New in version 0.1.0.

+
+
+ +
+
+stop()[source]
+

Stops the current screen saver.

+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScript(properties)[source]
+

Bases: XAObject

+

A script invoked by a folder action.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

enabled

Is the script enabled?

name

The name of the script.

path

The file system path of the disk.

posix_path

The POSIX file system path of the disk.

+
+
+property enabled: bool
+

Is the script enabled?

+
+ +
+
+property name: str
+

The name of the script.

+
+ +
+
+property path: str
+

The file system path of the disk.

+
+ +
+
+property posix_path: str
+

The POSIX file system path of the disk.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of scripts that employs fast enumeration techniques.

+

All properties of scripts can be called as methods on the wrapped list, returning a list containing each script’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_enabled(enabled)

by_name(name)

by_path(path)

by_posix_path(posix_path)

enabled()

name()

path()

posix_path()

+
+
+by_enabled(enabled: bool) Optional[XASystemEventsScript][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsScript][source]
+
+ +
+
+by_path(path: Union[XAPath, str]) Optional[XASystemEventsScript][source]
+
+ +
+
+by_posix_path(posix_path: str) Optional[XASystemEventsScript][source]
+
+ +
+
+enabled() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+path() list[PyXA.XABase.XAPath][source]
+
+ +
+
+posix_path() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptingClass(properties)[source]
+

Bases: XAObject

+

A class within a suite within a scripting definition.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

hidden

Is the class hidden?

id

The unique identifier of the class.

name

The name of the class.

object_description

The description of the class.

plural_name

The plural name of the class.

suite_name

The name of the suite to which this class belongs.

superclass

The class from which this class inherits.

+

Methods:

+ + + + + + + + + +

scripting_elements([filter])

Returns a list of scripting elements, as PyXA-wrapped objects, matching the given filter.

scripting_properties([filter])

Returns a list of scripting properties, as PyXA-wrapped objects, matching the given filter.

+
+
+property hidden: bool
+

Is the class hidden?

+
+ +
+
+property id: str
+

The unique identifier of the class.

+
+ +
+
+property name: str
+

The name of the class.

+
+ +
+
+property object_description: str
+

The description of the class.

+
+ +
+
+property plural_name: str
+

The plural name of the class.

+
+ +
+
+scripting_elements(filter: dict = None) Optional[XASystemEventsScriptingElementList][source]
+

Returns a list of scripting elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned scripting elements will have, or None

+
+
Returns:
+

The list of scripting elements

+
+
Return type:
+

XASystemEventsScriptingElementList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+scripting_properties(filter: dict = None) Optional[XASystemEventsScriptingPropertyList][source]
+

Returns a list of scripting properties, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned scripting properties will have, or None

+
+
Returns:
+

The list of scripting properties

+
+
Return type:
+

XASystemEventsScriptingPropertyList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property suite_name: str
+

The name of the suite to which this class belongs.

+
+ +
+
+property superclass: XASystemEventsScriptingClass
+

The class from which this class inherits.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptingClassList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of scripting classes that employs fast enumeration techniques.

+

All properties of scripting classes can be called as methods on the wrapped list, returning a list containing each class’ value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_hidden(hidden)

by_id(id)

by_name(name)

by_object_description(object_description)

by_plural_name(plural_name)

by_suite_name(suite_name)

by_superclass(superclass)

hidden()

id()

name()

object_description()

plural_name()

suite_name()

superclass()

+
+
+by_hidden(hidden: bool) Optional[XASystemEventsScriptingClass][source]
+
+ +
+
+by_id(id: str) Optional[XASystemEventsScriptingClass][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsScriptingClass][source]
+
+ +
+
+by_object_description(object_description: str) Optional[XASystemEventsScriptingClass][source]
+
+ +
+
+by_plural_name(plural_name: str) Optional[XASystemEventsScriptingClass][source]
+
+ +
+
+by_suite_name(suite_name: str) Optional[XASystemEventsScriptingClass][source]
+
+ +
+
+by_superclass(superclass: XASystemEventsScriptingClass) Optional[XASystemEventsScriptingClass][source]
+
+ +
+
+hidden() list[bool][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+object_description() list[str][source]
+
+ +
+
+plural_name() list[str][source]
+
+ +
+
+suite_name() list[str][source]
+
+ +
+
+superclass() XASystemEventsScriptingClassList[source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptingCommand(properties)[source]
+

Bases: XAObject

+

A command within a suite within a scripting definition.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

direct_parameter

The direct parameter of the command.

hidden

Is the command hidden?

id

The unique identifier of the command.

name

The name of the command.

object_description

The description of the command.

scripting_result

The object or data returned by this command.

suite_name

The name of the suite to which this command belongs.

+

Methods:

+ + + + + + +

scripting_parameters([filter])

Returns a list of scripting parameters, as PyXA-wrapped objects, matching the given filter.

+
+
+property direct_parameter: XASystemEventsScriptingParameter
+

The direct parameter of the command.

+
+ +
+
+property hidden: bool
+

Is the command hidden?

+
+ +
+
+property id: str
+

The unique identifier of the command.

+
+ +
+
+property name: str
+

The name of the command.

+
+ +
+
+property object_description: str
+

The description of the command.

+
+ +
+
+scripting_parameters(filter: dict = None) Optional[XASystemEventsScriptingParameterList][source]
+

Returns a list of scripting parameters, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned scripting parameters will have, or None

+
+
Returns:
+

The list of scripting parameters

+
+
Return type:
+

XASystemEventsScriptingParameterList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property scripting_result: XASystemEventsScriptingResultObject
+

The object or data returned by this command.

+
+ +
+
+property suite_name: str
+

The name of the suite to which this command belongs.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptingCommandList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of scripting commands that employs fast enumeration techniques.

+

All properties of scripting commands can be called as methods on the wrapped list, returning a list containing each command’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_direct_parameter(direct_parameter)

by_hidden(hidden)

by_id(id)

by_name(name)

by_object_description(object_description)

by_scripting_result(scripting_result)

by_suite_name(suite_name)

direct_parameter()

hidden()

id()

name()

object_description()

scripting_result()

suite_name()

+
+
+by_direct_parameter(direct_parameter: XASystemEventsScriptingParameter) Optional[XASystemEventsScriptingCommand][source]
+
+ +
+
+by_hidden(hidden: bool) Optional[XASystemEventsScriptingCommand][source]
+
+ +
+
+by_id(id: str) Optional[XASystemEventsScriptingCommand][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsScriptingCommand][source]
+
+ +
+
+by_object_description(object_description: str) Optional[XASystemEventsScriptingCommand][source]
+
+ +
+
+by_scripting_result(scripting_result: XASystemEventsScriptingResultObject) Optional[XASystemEventsScriptingCommand][source]
+
+ +
+
+by_suite_name(suite_name: str) Optional[XASystemEventsScriptingCommand][source]
+
+ +
+
+direct_parameter() XASystemEventsScriptingParameterList[source]
+
+ +
+
+hidden() list[str][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+object_description() list[str][source]
+
+ +
+
+scripting_result() XASystemEventsScriptingResultObjectList[source]
+
+ +
+
+suite_name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptingDefinitionObject(properties)[source]
+

Bases: XAObject

+

The scripting definition of the System Events application.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + +

scripting_suites([filter])

Returns a list of scripting suites, as PyXA-wrapped objects, matching the given filter.

+
+
+scripting_suites(filter: dict = None) Optional[XASystemEventsScriptingSuiteList][source]
+

Returns a list of scripting suites, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned scripting suites will have, or None

+
+
Returns:
+

The list of scripting suites

+
+
Return type:
+

XASystemEventsScriptingSuiteList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptingElement(properties)[source]
+

Bases: XASystemEventsScriptingClass

+

An element within a class within a suite within a scripting definition.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptingElementList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of scripting elements that employs fast enumeration techniques.

+

All properties of scripting elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptingEnumeration(properties)[source]
+

Bases: XAObject

+

An enumeration within a suite within a scripting definition.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + +

hidden

Is the enumeration hidden?

id

The unique identifier of the enumeration.

name

The name of the enumeration.

+

Methods:

+ + + + + + +

scripting_enumerators([filter])

Returns a list of scripting enumerators, as PyXA-wrapped objects, matching the given filter.

+
+
+property hidden: bool
+

Is the enumeration hidden?

+
+ +
+
+property id: str
+

The unique identifier of the enumeration.

+
+ +
+
+property name: str
+

The name of the enumeration.

+
+ +
+
+scripting_enumerators(filter: dict = None) Optional[XASystemEventsScriptingEnumeratorList][source]
+

Returns a list of scripting enumerators, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned scripting enumerators will have, or None

+
+
Returns:
+

The list of scripting enumerators

+
+
Return type:
+

XASystemEventsScriptingEnumeratorList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptingEnumerationList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of scripting enumerations that employs fast enumeration techniques.

+

All properties of scripting enumerations can be called as methods on the wrapped list, returning a list containing each enumerations’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_hidden(hidden)

by_id(id)

by_name(name)

hidden()

id()

name()

+
+
+by_hidden(hidden: bool) Optional[XASystemEventsScriptingEnumeration][source]
+
+ +
+
+by_id(id: str) Optional[XASystemEventsScriptingEnumeration][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsScriptingEnumeration][source]
+
+ +
+
+hidden() list[str][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptingEnumerator(properties)[source]
+

Bases: XAObject

+

An enumerator within an enumeration within a suite within a scripting definition.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

hidden

Is the enumerator hidden?

id

The unique identifier of the enumerator.

name

The name of the enumerator.

object_description

The description of the enumerator.

+
+
+property hidden: bool
+

Is the enumerator hidden?

+
+ +
+
+property id: str
+

The unique identifier of the enumerator.

+
+ +
+
+property name: str
+

The name of the enumerator.

+
+ +
+
+property object_description: str
+

The description of the enumerator.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptingEnumeratorList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of scripting enumerators that employs fast enumeration techniques.

+

All properties of scripting enumerators can be called as methods on the wrapped list, returning a list containing each enumerator’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_hidden(hidden)

by_id(id)

by_name(name)

by_object_description(object_description)

hidden()

id()

name()

object_description()

+
+
+by_hidden(hidden: bool) Optional[XASystemEventsScriptingEnumerator][source]
+
+ +
+
+by_id(id: str) Optional[XASystemEventsScriptingEnumerator][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsScriptingEnumerator][source]
+
+ +
+
+by_object_description(object_description: str) Optional[XASystemEventsScriptingEnumerator][source]
+
+ +
+
+hidden() list[str][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+object_description() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptingParameter(properties)[source]
+

Bases: XAObject

+

A parameter within a command within a suite within a scripting definition.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

hidden

Is the parameter hidden?

id

The unique identifier of the parameter.

kind

The kind of object or data specified by this parameter.

name

The name of the parameter.

object_description

The description of the parameter.

optional

Is the parameter optional?

+
+
+property hidden: bool
+

Is the parameter hidden?

+
+ +
+
+property id: str
+

The unique identifier of the parameter.

+
+ +
+
+property kind: str
+

The kind of object or data specified by this parameter.

+
+ +
+
+property name: str
+

The name of the parameter.

+
+ +
+
+property object_description: str
+

The description of the parameter.

+
+ +
+
+property optional: bool
+

Is the parameter optional?

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptingParameterList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of scripting parameters that employs fast enumeration techniques.

+

All properties of scripting parameters can be called as methods on the wrapped list, returning a list containing each parameter’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_hidden(hidden)

by_id(id)

by_kind(kind)

by_name(name)

by_object_description(object_description)

by_optional(optional)

hidden()

id()

kind()

name()

object_description()

optional()

+
+
+by_hidden(hidden: bool) Optional[XASystemEventsScriptingParameter][source]
+
+ +
+
+by_id(id: str) Optional[XASystemEventsScriptingParameter][source]
+
+ +
+
+by_kind(kind: str) Optional[XASystemEventsScriptingParameter][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsScriptingParameter][source]
+
+ +
+
+by_object_description(object_description: str) Optional[XASystemEventsScriptingParameter][source]
+
+ +
+
+by_optional(optional: bool) Optional[XASystemEventsScriptingParameter][source]
+
+ +
+
+hidden() list[bool][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+kind() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+object_description() list[str][source]
+
+ +
+
+optional() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptingProperty(properties)[source]
+

Bases: XAObject

+

A property within a class within a suite within a scripting definition.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

access

The type of access to this property.

enumerated

Is the property's value an enumerator?

hidden

Is the property hidden?

id

The unique identifier of the property.

kind

The kind of object or data returned by this property.

listed

Is the property's value a list?

name

The name of the property.

object_description

The description of the property.

+
+
+property access: AccessRight
+

The type of access to this property.

+
+ +
+
+property enumerated: bool
+

Is the property’s value an enumerator?

+
+ +
+
+property hidden: bool
+

Is the property hidden?

+
+ +
+
+property id: str
+

The unique identifier of the property.

+
+ +
+
+property kind: str
+

The kind of object or data returned by this property.

+
+ +
+
+property listed: bool
+

Is the property’s value a list?

+
+ +
+
+property name: str
+

The name of the property.

+
+ +
+
+property object_description: str
+

The description of the property.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptingPropertyList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of scripting properties that employs fast enumeration techniques.

+

All properties of scripting properties can be called as methods on the wrapped list, returning a list containing each scripting property’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

access()

by_access(access)

by_enumerated(enumerated)

by_hidden(hidden)

by_id(id)

by_kind(kind)

by_listed(listed)

by_name(name)

by_object_description(object_description)

enumerated()

hidden()

id()

kind()

listed()

name()

object_description()

+
+
+access() list[PyXA.apps.SystemEvents.XASystemEventsApplication.AccessRight][source]
+
+ +
+
+by_access(access: AccessRight) Optional[XASystemEventsScriptingProperty][source]
+
+ +
+
+by_enumerated(enumerated: bool) Optional[XASystemEventsScriptingProperty][source]
+
+ +
+
+by_hidden(hidden: bool) Optional[XASystemEventsScriptingProperty][source]
+
+ +
+
+by_id(id: str) Optional[XASystemEventsScriptingProperty][source]
+
+ +
+
+by_kind(kind: str) Optional[XASystemEventsScriptingProperty][source]
+
+ +
+
+by_listed(listed: bool) Optional[XASystemEventsScriptingProperty][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsScriptingProperty][source]
+
+ +
+
+by_object_description(object_description: str) Optional[XASystemEventsScriptingProperty][source]
+
+ +
+
+enumerated() list[bool][source]
+
+ +
+
+hidden() list[str][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+kind() list[str][source]
+
+ +
+
+listed() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+object_description() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptingResultObject(properties)[source]
+

Bases: XAObject

+

The result of a command within a suite within a scripting definition.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

enumerated

Is the scripting result's value an enumerator?

kind

The kind of object or data returned by this property.

listed

Is the scripting result's value a list?

object_description

The description of the property.

+
+
+property enumerated: bool
+

Is the scripting result’s value an enumerator?

+
+ +
+
+property kind: str
+

The kind of object or data returned by this property.

+
+ +
+
+property listed: bool
+

Is the scripting result’s value a list?

+
+ +
+
+property object_description: str
+

The description of the property.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptingResultObjectList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of scripting result objects that employs fast enumeration techniques.

+

All properties of scripting result objects can be called as methods on the wrapped list, returning a list containing each result’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_enumerated(enumerated)

by_kind(kind)

by_listed(listed)

by_object_description(object_description)

enumerated()

kind()

listed()

object_description()

+
+
+by_enumerated(enumerated: bool) Optional[XASystemEventsScriptingResultObject][source]
+
+ +
+
+by_kind(kind: str) Optional[XASystemEventsScriptingResultObject][source]
+
+ +
+
+by_listed(listed: bool) Optional[XASystemEventsScriptingResultObject][source]
+
+ +
+
+by_object_description(object_description: str) Optional[XASystemEventsScriptingResultObject][source]
+
+ +
+
+enumerated() list[bool][source]
+
+ +
+
+kind() list[str][source]
+
+ +
+
+listed() list[bool][source]
+
+ +
+
+object_description() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptingSuite(properties)[source]
+

Bases: XAObject

+

A suite within a scripting definition.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

hidden

Is the suite hidden?

id

The unique identifier of the suite.

name

The name of the suite.

object_description

The description of the suite.

+

Methods:

+ + + + + + + + + + + + +

scripting_classes([filter])

Returns a list of scripting classes, as PyXA-wrapped objects, matching the given filter.

scripting_commands([filter])

Returns a list of scripting commands, as PyXA-wrapped objects, matching the given filter.

scripting_enumerations([filter])

Returns a list of scripting enumerations, as PyXA-wrapped objects, matching the given filter.

+
+
+property hidden: bool
+

Is the suite hidden?

+
+ +
+
+property id: str
+

The unique identifier of the suite.

+
+ +
+
+property name: str
+

The name of the suite.

+
+ +
+
+property object_description: str
+

The description of the suite.

+
+ +
+
+scripting_classes(filter: dict = None) Optional[XASystemEventsScriptingClassList][source]
+

Returns a list of scripting classes, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned scripting classes will have, or None

+
+
Returns:
+

The list of scripting classes

+
+
Return type:
+

XASystemEventsScriptingClassList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+scripting_commands(filter: dict = None) Optional[XASystemEventsScriptingCommandList][source]
+

Returns a list of scripting commands, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned scripting commands will have, or None

+
+
Returns:
+

The list of scripting commands

+
+
Return type:
+

XASystemEventsScriptingCommandList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+scripting_enumerations(filter: dict = None) Optional[XASystemEventsScriptingEnumerationList][source]
+

Returns a list of scripting enumerations, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned scripting enumerations will have, or None

+
+
Returns:
+

The list of scripting enumerations

+
+
Return type:
+

XASystemEventsScriptingEnumerationList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScriptingSuiteList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of scripting suites that employs fast enumeration techniques.

+

All properties of scripting suites can be called as methods on the wrapped list, returning a list containing each suite’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_hidden(hidden)

by_id(id)

by_name(name)

by_object_description(object_description)

hidden()

id()

name()

object_description()

+
+
+by_hidden(hidden: bool) Optional[XASystemEventsScriptingSuite][source]
+
+ +
+
+by_id(id: str) Optional[XASystemEventsScriptingSuite][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsScriptingSuite][source]
+
+ +
+
+by_object_description(object_description: str) Optional[XASystemEventsScriptingSuite][source]
+
+ +
+
+hidden() list[bool][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+object_description() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScrollArea(properties)[source]
+

Bases: XASystemEventsUIElement

+

A scroll area belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScrollAreaList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of scroll area elements that employs fast enumeration techniques.

+

All properties of scroll area elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScrollBar(properties)[source]
+

Bases: XASystemEventsUIElement

+

A scroll bar belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsScrollBarList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of scroll bar elements that employs fast enumeration techniques.

+

All properties of scroll bar elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsSecurityPreferencesObject(properties)[source]
+

Bases: XAObject

+

A collection of security preferences.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

automatic_login

Is automatic login allowed?

log_out_when_inactive

Will the computer log out when inactive?

log_out_when_inactive_interval

The interval of inactivity after which the computer will log out.

require_password_to_unlock

Is a password required to unlock secure preferences?

require_password_to_wake

Is a password required to wake the computer from sleep or screen saver?

secure_virtual_memory

Is secure virtual memory being used?

+
+
+property automatic_login: bool
+

Is automatic login allowed?

+
+ +
+
+property log_out_when_inactive: bool
+

Will the computer log out when inactive?

+
+ +
+
+property log_out_when_inactive_interval: int
+

The interval of inactivity after which the computer will log out.

+
+ +
+
+property require_password_to_unlock: bool
+

Is a password required to unlock secure preferences?

+
+ +
+
+property require_password_to_wake: bool
+

Is a password required to wake the computer from sleep or screen saver?

+
+ +
+
+property secure_virtual_memory: bool
+

Is secure virtual memory being used?

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsService(properties)[source]
+

Bases: XAObject

+

A collection of settings for a network service.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

active

Is the service active?

current_configuration

The currently selected configuration.

id

The unique identifier for the service.

interface

The interface the service is built on.

kind

The type of service.

name

The name of the service.

+

Methods:

+ + + + + + + + + +

connect()

Connects the service.

disconnect()

Disconnects the service.

+
+
+property active: bool
+

Is the service active?

+
+ +
+
+connect() XASystemEventsConfiguration[source]
+

Connects the service.

+
+
Returns:
+

The service object

+
+
Return type:
+

XASystemEventsConfiguration

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property current_configuration: XASystemEventsConfiguration
+

The currently selected configuration.

+
+ +
+
+disconnect() XASystemEventsConfiguration[source]
+

Disconnects the service.

+
+
Returns:
+

The service object

+
+
Return type:
+

XASystemEventsConfiguration

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property id: str
+

The unique identifier for the service.

+
+ +
+
+property interface: XASystemEventsInterface
+

The interface the service is built on.

+
+ +
+
+property kind: int
+

The type of service.

+
+ +
+
+property name: str
+

The name of the service.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsServiceList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of services that employs fast enumeration techniques.

+

All properties of services can be called as methods on the wrapped list, returning a list containing each service’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

active()

by_active(active)

by_current_configuration(current_configuration)

by_id(id)

by_interface(interface)

by_kind(kind)

by_name(name)

current_configuration()

id()

interface()

kind()

name()

+
+
+active() list[bool][source]
+
+ +
+
+by_active(active: bool) Optional[XASystemEventsService][source]
+
+ +
+
+by_current_configuration(current_configuration: XASystemEventsConfiguration) Optional[XASystemEventsService][source]
+
+ +
+
+by_id(id: str) Optional[XASystemEventsService][source]
+
+ +
+
+by_interface(interface: XASystemEventsInterface) Optional[XASystemEventsService][source]
+
+ +
+
+by_kind(kind: str) Optional[XASystemEventsService][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsService][source]
+
+ +
+
+current_configuration() XASystemEventsConfigurationList[source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+interface() XASystemEventsInterfaceList[source]
+
+ +
+
+kind() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsSheet(properties)[source]
+

Bases: XASystemEventsUIElement

+

A sheet displayed over a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsSheetList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of sheet elements that employs fast enumeration techniques.

+

All properties of sheet elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsSlider(properties)[source]
+

Bases: XASystemEventsUIElement

+

A slider belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsSliderList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of slider elements that employs fast enumeration techniques.

+

All properties of slider elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsSplitter(properties)[source]
+

Bases: XASystemEventsUIElement

+

A splitter belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsSplitterGroup(properties)[source]
+

Bases: XASystemEventsUIElement

+

A splitter group belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsSplitterGroupList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of splitter group elements that employs fast enumeration techniques.

+

All properties of splitter group elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsSplitterList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of splitter elements that employs fast enumeration techniques.

+

All properties of splitter elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsStaticText(properties)[source]
+

Bases: XASystemEventsUIElement

+

A static text field belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsStaticTextList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of static text elements that employs fast enumeration techniques.

+

All properties of static text elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsTabGroup(properties)[source]
+

Bases: XASystemEventsUIElement

+

A tab group belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsTabGroupList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of tab group elements that employs fast enumeration techniques.

+

All properties of tab group elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsTable(properties)[source]
+

Bases: XASystemEventsUIElement

+

A table belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsTableList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of table elements that employs fast enumeration techniques.

+

All properties of table elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsTextArea(properties)[source]
+

Bases: XASystemEventsUIElement

+

A text area belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsTextAreaList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of text area elements that employs fast enumeration techniques.

+

All properties of text area elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsTextField(properties)[source]
+

Bases: XASystemEventsUIElement

+

A text field belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsTextFieldList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of text field elements that employs fast enumeration techniques.

+

All properties of text field elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsToolbar(properties)[source]
+

Bases: XASystemEventsUIElement

+

A toolbar belonging to a window.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsToolbarList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of toolbar elements that employs fast enumeration techniques.

+

All properties of toolbar elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsUIElement(properties)[source]
+

Bases: XAObject, XASelectable

+

A piece of the user interface of a process.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

accessibility_description

A more complete description of the UI element and its capabilities.

enabled

Is the UI element enabled? (Does it accept clicks?)

entire_contents

A list of every UI element contained in this UI element and its child UI elements, to the limits of the tree.

focused

Is the focus on this UI element?

help

An elaborate description of the UI element and its capabilities.

maximum_value

The maximum value that the UI element can take on.

minimum_value

The minimum value that the UI element can take on.

name

The name of the UI Element, which identifies it within its container.

object_description

The accessibility description, if available; otherwise, the role description.

orientation

The orientation of the UI element.

position

The position of the UI element.

role

An encoded description of the UI element and its capabilities.

role_description

A more complete description of the UI element's role.

selected

Is the UI element selected?

size

The size of the UI element.

subrole

An encoded description of the UI element and its capabilities.

title

The title of the UI element as it appears on the screen.

value

The current value of the UI element.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

actions([filter])

Returns a list of action elements, as PyXA-wrapped objects, matching the given filter.

attributes([filter])

Returns a list of attribute elements, as PyXA-wrapped objects, matching the given filter.

browsers([filter])

Returns a list of browser elements, as PyXA-wrapped objects, matching the given filter.

busy_indicators([filter])

Returns a list of busy indicator elements, as PyXA-wrapped objects, matching the given filter.

buttons([filter])

Returns a list of button elements, as PyXA-wrapped objects, matching the given filter.

cancel()

Cancels the UI element, if applicable.

checkboxes([filter])

Returns a list of checkbox elements, as PyXA-wrapped objects, matching the given filter.

click([point])

Cause the target process to behave as if the UI element were clicked.

color_wells([filter])

Returns a list of color well elements, as PyXA-wrapped objects, matching the given filter.

columns([filter])

Returns a list of table column elements, as PyXA-wrapped objects, matching the given filter.

combo_boxes([filter])

Returns a list of combo box elements, as PyXA-wrapped objects, matching the given filter.

confirm()

Confirms the UI element, if applicable.

decrement()

Decrements the UI element, if applicable.

drawers([filter])

Returns a list of drawer elements, as PyXA-wrapped objects, matching the given filter.

groups([filter])

Returns a list of group elements, as PyXA-wrapped objects, matching the given filter.

grow_areas([filter])

Returns a list of grow area elements, as PyXA-wrapped objects, matching the given filter.

images([filter])

Returns a list of image elements, as PyXA-wrapped objects, matching the given filter.

increment()

Increments the UI element, if applicable.

incrementors([filter])

Returns a list of incrementor elements, as PyXA-wrapped objects, matching the given filter.

lists([filter])

Returns a list of list elements, as PyXA-wrapped objects, matching the given filter.

menu_bar_items([filter])

Returns a list of menu bar item elements, as PyXA-wrapped objects, matching the given filter.

menu_bars([filter])

Returns a list of menu bar elements, as PyXA-wrapped objects, matching the given filter.

menu_buttons([filter])

Returns a list of menu button elements, as PyXA-wrapped objects, matching the given filter.

menu_items([filter])

Returns a list of menu item elements, as PyXA-wrapped objects, matching the given filter.

menus([filter])

Returns a list of menu elements, as PyXA-wrapped objects, matching the given filter.

outlines([filter])

Returns a list of outline elements, as PyXA-wrapped objects, matching the given filter.

pick()

Picks the UI element, if applicable.

pop_overs([filter])

Returns a list of pop-over elements, as PyXA-wrapped objects, matching the given filter.

pop_up_buttons([filter])

Returns a list of pop-up button elements, as PyXA-wrapped objects, matching the given filter.

progress_indicators([filter])

Returns a list of progress indicator elements, as PyXA-wrapped objects, matching the given filter.

radio_buttons([filter])

Returns a list of radio button elements, as PyXA-wrapped objects, matching the given filter.

radio_groups([filter])

Returns a list of radio group elements, as PyXA-wrapped objects, matching the given filter.

relevance_indicators([filter])

Returns a list of relevance indicator elements, as PyXA-wrapped objects, matching the given filter.

rows([filter])

Returns a list of table row elements, as PyXA-wrapped objects, matching the given filter.

scroll_areas([filter])

Returns a list of scroll area elements, as PyXA-wrapped objects, matching the given filter.

scroll_bars([filter])

Returns a list of scroll bar elements, as PyXA-wrapped objects, matching the given filter.

sheets([filter])

Returns a list of sheet elements, as PyXA-wrapped objects, matching the given filter.

sliders([filter])

Returns a list of slider elements, as PyXA-wrapped objects, matching the given filter.

splitter_groups([filter])

Returns a list of splitter group elements, as PyXA-wrapped objects, matching the given filter.

splitters([filter])

Returns a list of splitter elements, as PyXA-wrapped objects, matching the given filter.

static_texts([filter])

Returns a list of static text elements, as PyXA-wrapped objects, matching the given filter.

tab_groups([filter])

Returns a list of tab group elements, as PyXA-wrapped objects, matching the given filter.

tables([filter])

Returns a list of table elements, as PyXA-wrapped objects, matching the given filter.

text_areas([filter])

Returns a list of text area elements, as PyXA-wrapped objects, matching the given filter.

text_fields([filter])

Returns a list of text fields elements, as PyXA-wrapped objects, matching the given filter.

toolbars([filter])

Returns a list of toolbar elements, as PyXA-wrapped objects, matching the given filter.

ui_elements([filter])

Returns a list of UI elements, as PyXA-wrapped objects, matching the given filter.

value_indicators([filter])

Returns a list of value indicator elements, as PyXA-wrapped objects, matching the given filter.

windows([filter])

Returns a list of window elements, as PyXA-wrapped objects, matching the given filter.

+
+
+property accessibility_description: Optional[str]
+

A more complete description of the UI element and its capabilities.

+
+ +
+
+actions(filter: dict = None) Optional[XASystemEventsActionList][source]
+

Returns a list of action elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of actions

+
+
Return type:
+

XASystemEventsActionList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+attributes(filter: dict = None) Optional[XASystemEventsAttributeList][source]
+

Returns a list of attribute elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of attributes

+
+
Return type:
+

XASystemEventsAttributeList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+browsers(filter: dict = None) Optional[XASystemEventsBrowserList][source]
+

Returns a list of browser elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of browsers

+
+
Return type:
+

XASystemEventsBrowserList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+busy_indicators(filter: dict = None) Optional[XASystemEventsBusyIndicatorList][source]
+

Returns a list of busy indicator elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of busy indicators

+
+
Return type:
+

XASystemEventsBusyIndicatorList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+buttons(filter: dict = None) Optional[XASystemEventsButtonList][source]
+

Returns a list of button elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of buttons

+
+
Return type:
+

XASystemEventsButtonList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+cancel()[source]
+

Cancels the UI element, if applicable.

+
+

New in version 0.1.0.

+
+
+ +
+
+checkboxes(filter: dict = None) Optional[XASystemEventsButtonList][source]
+

Returns a list of checkbox elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of checkboxes

+
+
Return type:
+

XASystemEventsCheckboxList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+click(point: Optional[tuple[int, int]] = None)[source]
+

Cause the target process to behave as if the UI element were clicked.

+
+
Parameters:
+

point (Union[tuple[int, int], None], optional) – The coordinate location at which to click, defaults to None

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+color_wells(filter: dict = None) Optional[XASystemEventsColorWellList][source]
+

Returns a list of color well elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of color wells

+
+
Return type:
+

XASystemEventsColorWellList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+columns(filter: dict = None) Optional[XASystemEventsColumnList][source]
+

Returns a list of table column elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of columns

+
+
Return type:
+

XASystemEventsColumnList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+combo_boxes(filter: dict = None) Optional[XASystemEventsComboBoxList][source]
+

Returns a list of combo box elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of combo boxes

+
+
Return type:
+

XASystemEventsComboBoxList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+confirm()[source]
+

Confirms the UI element, if applicable.

+
+

New in version 0.1.0.

+
+
+ +
+
+decrement()[source]
+

Decrements the UI element, if applicable.

+
+

New in version 0.1.0.

+
+
+ +
+
+drawers(filter: dict = None) Optional[XASystemEventsDrawerList][source]
+

Returns a list of drawer elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of drawers

+
+
Return type:
+

XASystemEventsDrawerList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property enabled: Optional[bool]
+

Is the UI element enabled? (Does it accept clicks?)

+
+ +
+
+property entire_contents: XAList
+

A list of every UI element contained in this UI element and its child UI elements, to the limits of the tree.

+
+ +
+
+property focused: Optional[bool]
+

Is the focus on this UI element?

+
+ +
+
+groups(filter: dict = None) Optional[XASystemEventsGroupList][source]
+

Returns a list of group elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of groups

+
+
Return type:
+

XASystemEventsGroupList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+grow_areas(filter: dict = None) Optional[XASystemEventsGrowAreaList][source]
+

Returns a list of grow area elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of grow areas

+
+
Return type:
+

XASystemEventsGrowAreaList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property help: Optional[str]
+

An elaborate description of the UI element and its capabilities.

+
+ +
+
+images(filter: dict = None) Optional[XASystemEventsImageList][source]
+

Returns a list of image elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of images

+
+
Return type:
+

XASystemEventsImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+increment()[source]
+

Increments the UI element, if applicable.

+
+

New in version 0.1.0.

+
+
+ +
+
+incrementors(filter: dict = None) Optional[XASystemEventsIncrementorList][source]
+

Returns a list of incrementor elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of incrementors

+
+
Return type:
+

XASystemEventsIncrementorList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+lists(filter: dict = None) Optional[XASystemEventsListList][source]
+

Returns a list of list elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of lists

+
+
Return type:
+

XASystemEventsListList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property maximum_value: Optional[Union[int, float]]
+

The maximum value that the UI element can take on.

+
+ +
+
+menu_bar_items(filter: dict = None) Optional[XASystemEventsMenuBarItemList][source]
+

Returns a list of menu bar item elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of menu bar items

+
+
Return type:
+

XASystemEventsMenuBarItemList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+menu_bars(filter: dict = None) Optional[XASystemEventsMenuBarList][source]
+

Returns a list of menu bar elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of menu bars

+
+
Return type:
+

XASystemEventsMenuBarList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+menu_buttons(filter: dict = None) Optional[XASystemEventsMenuButtonList][source]
+

Returns a list of menu button elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of menu buttons

+
+
Return type:
+

XASystemEventsMenuButtonList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+menu_items(filter: dict = None) Optional[XASystemEventsMenuItemList][source]
+

Returns a list of menu item elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of menu items

+
+
Return type:
+

XASystemEventsMenuItemList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+menus(filter: dict = None) Optional[XASystemEventsMenuList][source]
+

Returns a list of menu elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of menus

+
+
Return type:
+

XASystemEventsMenuList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property minimum_value: Optional[Union[int, float]]
+

The minimum value that the UI element can take on.

+
+ +
+
+property name: str
+

The name of the UI Element, which identifies it within its container.

+
+ +
+
+property object_description: Optional[str]
+

The accessibility description, if available; otherwise, the role description.

+
+ +
+
+property orientation: Optional[str]
+

The orientation of the UI element.

+
+ +
+
+outlines(filter: dict = None) Optional[XASystemEventsOutlineList][source]
+

Returns a list of outline elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of outlines

+
+
Return type:
+

XASystemEventsOutlineList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+pick()[source]
+

Picks the UI element, if applicable.

+
+

New in version 0.1.0.

+
+
+ +
+
+pop_overs(filter: dict = None) Optional[XASystemEventsPopOverList][source]
+

Returns a list of pop-over elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of pop-overs

+
+
Return type:
+

XASystemEventsPopOverList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+pop_up_buttons(filter: dict = None) Optional[XASystemEventsPopUpButtonList][source]
+

Returns a list of pop-up button elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of pop-up buttons

+
+
Return type:
+

XASystemEventsPopUpButtonList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property position: Optional[list[Union[int, float]]]
+

The position of the UI element.

+
+ +
+
+progress_indicators(filter: dict = None) Optional[XASystemEventsProgressIndicatorList][source]
+

Returns a list of progress indicator elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of progress indicators

+
+
Return type:
+

XASystemEventsProgressIndicatorList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+radio_buttons(filter: dict = None) Optional[XASystemEventsRadioButtonList][source]
+

Returns a list of radio button elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of radio buttons

+
+
Return type:
+

XASystemEventsRadioButtonList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+radio_groups(filter: dict = None) Optional[XASystemEventsRadioGroupList][source]
+

Returns a list of radio group elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of radio groups

+
+
Return type:
+

XASystemEventsRadioGroupList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+relevance_indicators(filter: dict = None) Optional[XASystemEventsRelevanceIndicatorList][source]
+

Returns a list of relevance indicator elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of relevance indicators

+
+
Return type:
+

XASystemEventsRelevanceIndicatorList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property role: str
+

An encoded description of the UI element and its capabilities.

+
+ +
+
+property role_description: str
+

A more complete description of the UI element’s role.

+
+ +
+
+rows(filter: dict = None) Optional[XASystemEventsRowList][source]
+

Returns a list of table row elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of rows

+
+
Return type:
+

XASystemEventsRowList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+scroll_areas(filter: dict = None) Optional[XASystemEventsScrollAreaList][source]
+

Returns a list of scroll area elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of scroll areas

+
+
Return type:
+

XASystemEventsScrollAreaList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+scroll_bars(filter: dict = None) Optional[XASystemEventsScrollBarList][source]
+

Returns a list of scroll bar elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of scroll bars

+
+
Return type:
+

XASystemEventsScrollBarList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property selected: Optional[bool]
+

Is the UI element selected?

+
+ +
+
+sheets(filter: dict = None) Optional[XASystemEventsSheetList][source]
+

Returns a list of sheet elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of sheets

+
+
Return type:
+

XASystemEventsSheetList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property size: Optional[list[Union[int, float]]]
+

The size of the UI element.

+
+ +
+
+sliders(filter: dict = None) Optional[XASystemEventsSliderList][source]
+

Returns a list of slider elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of sliders

+
+
Return type:
+

XASystemEventsSliderList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+splitter_groups(filter: dict = None) Optional[XASystemEventsSplitterGroupList][source]
+

Returns a list of splitter group elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of splitter groups

+
+
Return type:
+

XASystemEventsSplitterGroupList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+splitters(filter: dict = None) Optional[XASystemEventsSplitterList][source]
+

Returns a list of splitter elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of splitters

+
+
Return type:
+

XASystemEventsSplitterList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+static_texts(filter: dict = None) Optional[XASystemEventsStaticTextList][source]
+

Returns a list of static text elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of static texts

+
+
Return type:
+

XASystemEventsStaticTextList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property subrole: Optional[str]
+

An encoded description of the UI element and its capabilities.

+
+ +
+
+tab_groups(filter: dict = None) Optional[XASystemEventsTabGroupList][source]
+

Returns a list of tab group elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of tab groups

+
+
Return type:
+

XASystemEventsTabGroupList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+tables(filter: dict = None) Optional[XASystemEventsTableList][source]
+

Returns a list of table elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of tables

+
+
Return type:
+

XASystemEventsTableList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+text_areas(filter: dict = None) Optional[XASystemEventsTextAreaList][source]
+

Returns a list of text area elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of text areas

+
+
Return type:
+

XASystemEventsTextAreaList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+text_fields(filter: dict = None) Optional[XASystemEventsTextFieldList][source]
+

Returns a list of text fields elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of text fields

+
+
Return type:
+

XASystemEventsTextFieldList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property title: str
+

The title of the UI element as it appears on the screen.

+
+ +
+
+toolbars(filter: dict = None) Optional[XASystemEventsToolbarList][source]
+

Returns a list of toolbar elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of outlines

+
+
Return type:
+

XASystemEventsToolbarList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+ui_elements(filter: dict = None) Optional[XASystemEventsUIElementList][source]
+

Returns a list of UI elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of UI elements

+
+
Return type:
+

XASystemEventsUIElementList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property value: Any
+

The current value of the UI element.

+
+ +
+
+value_indicators(filter: dict = None) Optional[XASystemEventsValueIndicatorList][source]
+

Returns a list of value indicator elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of value indicators

+
+
Return type:
+

XASystemEventsValueIndicatorList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+windows(filter: dict = None) Optional[XASystemEventsToolbarList][source]
+

Returns a list of window elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of windows

+
+
Return type:
+

XASystemEventsToolbarList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsUIElementList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList

+

A wrapper around lists of UI elements that employs fast enumeration techniques.

+

All properties of UI elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

accessibility_description()

actions([filter])

by_accessibility_description(...)

by_enabled(enabled)

by_entire_contents(entire_contents)

by_focused(focused)

by_help(help)

by_maximum_value(maximum_value)

by_minimum_value(minimum_value)

by_name(name)

by_object_description(object_description)

by_orientation(orientation)

by_position(position)

by_role(role)

by_role_description(role_description)

by_selected(selected)

by_size(size)

by_subrole(subrole)

by_title(title)

by_value(value)

enabled()

entire_contents()

focused()

help()

maximum_value()

minimum_value()

name()

object_description()

orientation()

position()

role()

role_description()

selected()

size()

subrole()

title()

value()

windows([filter])

+
+
+accessibility_description() list[str][source]
+
+ +
+
+actions(filter: dict = None) XASystemEventsActionList[source]
+
+ +
+
+by_accessibility_description(accessibility_description: str) Optional[XASystemEventsUIElement][source]
+
+ +
+
+by_enabled(enabled: bool) Optional[XASystemEventsUIElement][source]
+
+ +
+
+by_entire_contents(entire_contents: XASystemEventsUIElementList) Optional[XASystemEventsUIElement][source]
+
+ +
+
+by_focused(focused: bool) Optional[XASystemEventsUIElement][source]
+
+ +
+
+by_help(help: str) Optional[XASystemEventsUIElement][source]
+
+ +
+
+by_maximum_value(maximum_value: Union[int, float]) Optional[XASystemEventsUIElement][source]
+
+ +
+
+by_minimum_value(minimum_value: Union[int, float]) Optional[XASystemEventsUIElement][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsUIElement][source]
+
+ +
+
+by_object_description(object_description: str) Optional[XASystemEventsUIElement][source]
+
+ +
+
+by_orientation(orientation: str) Optional[XASystemEventsUIElement][source]
+
+ +
+
+by_position(position: tuple[int, int]) Optional[XASystemEventsUIElement][source]
+
+ +
+
+by_role(role: str) Optional[XASystemEventsUIElement][source]
+
+ +
+
+by_role_description(role_description: str) Optional[XASystemEventsUIElement][source]
+
+ +
+
+by_selected(selected: bool) Optional[XASystemEventsUIElement][source]
+
+ +
+
+by_size(size: tuple[int, int]) Optional[XASystemEventsUIElement][source]
+
+ +
+
+by_subrole(subrole: str) Optional[XASystemEventsUIElement][source]
+
+ +
+
+by_title(title: str) Optional[XASystemEventsUIElement][source]
+
+ +
+
+by_value(value: Any) Optional[XASystemEventsUIElement][source]
+
+ +
+
+enabled() list[bool][source]
+
+ +
+
+entire_contents() XASystemEventsUIElementList[source]
+
+ +
+
+focused() list[bool][source]
+
+ +
+
+help() list[str][source]
+
+ +
+
+maximum_value() list[Union[int, float]][source]
+
+ +
+
+minimum_value() list[Union[int, float]][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+object_description() list[str][source]
+
+ +
+
+orientation() list[str][source]
+
+ +
+
+position() list[tuple[int, int]][source]
+
+ +
+
+role() list[str][source]
+
+ +
+
+role_description() list[str][source]
+
+ +
+
+selected() list[bool][source]
+
+ +
+
+size() list[tuple[int, int]][source]
+
+ +
+
+subrole() list[str][source]
+
+ +
+
+title() list[str][source]
+
+ +
+
+value() list[Any][source]
+
+ +
+
+windows(filter: dict = None) XASystemEventsWindowList[source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsUser(properties)[source]
+

Bases: XAObject

+

A user of the system.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

full_name

The user's full name.

home_directory

The path to user's home directory.

name

The user's short name.

picture_path

Path to user's picture.

+
+
+property full_name: str
+

The user’s full name.

+
+ +
+
+property home_directory: XAPath
+

The path to user’s home directory.

+
+ +
+
+property name: str
+

The user’s short name.

+
+ +
+
+property picture_path: XAPath
+

Path to user’s picture. Can be set for current user only!

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsUserList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of users that employs fast enumeration techniques.

+

All properties of users can be called as methods on the wrapped list, returning a list containing each user’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

by_full_name(full_name)

by_home_directory(home_directory)

by_name(name)

by_picture_path(picture_path)

full_name()

home_directory()

name()

picture_path()

+
+
+by_full_name(full_name: str) Optional[XASystemEventsUser][source]
+
+ +
+
+by_home_directory(home_directory: Union[XAPath, str]) Optional[XASystemEventsUser][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsUser][source]
+
+ +
+
+by_picture_path(picture_path: Union[XAPath, str]) Optional[XASystemEventsUser][source]
+
+ +
+
+full_name() list[str][source]
+
+ +
+
+home_directory() list[PyXA.XABase.XAPath][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+picture_path() list[PyXA.XABase.XAPath][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsValueIndicator(properties)[source]
+

Bases: XASystemEventsUIElement

+

A value indicator ( thumb or slider ) belonging to a scroll bar.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsValueIndicatorList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XASystemEventsUIElementList

+

A wrapper around lists of value indicator elements that employs fast enumeration techniques.

+

All properties of value indicator elements can be called as methods on the wrapped list, returning a list containing each element’s value for the property.

+
+

New in version 0.1.0.

+
+
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsWindow(properties)[source]
+

Bases: XASBWindow, XASelectable

+

A window belonging to a process.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

accessibility_description

A more complete description of the window and its capabilities.

document

The document whose contents are displayed in the window.

enabled

Is the window enabled? (Does it accept clicks?)

entire_contents

A list of every UI element contained in this window and its child UI elements, to the limits of the tree.

focused

Is the focus on this window?

help

An elaborate description of the window and its capabilities.

maximum_value

The maximum value that the UI element can take on.

minimum_value

The minimum value that the UI element can take on.

name

The name of the window, which identifies it within its container.

object_description

The accessibility description, if available; otherwise, the role description.

orientation

The orientation of the window.

position

The position of the window.

role

An encoded description of the window and its capabilities.

role_description

A more complete description of the window's role.

selected

Is the window selected?

size

The size of the window.

subrole

An encoded description of the window and its capabilities.

title

The title of the window as it appears on the screen.

value

The current value of the window.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

actions([filter])

Returns a list of action elements, as PyXA-wrapped objects, matching the given filter.

attributes([filter])

Returns a list of attribute elements, as PyXA-wrapped objects, matching the given filter.

browsers([filter])

Returns a list of browser elements, as PyXA-wrapped objects, matching the given filter.

busy_indicators([filter])

Returns a list of busy indicator elements, as PyXA-wrapped objects, matching the given filter.

buttons([filter])

Returns a list of button elements, as PyXA-wrapped objects, matching the given filter.

cancel()

Cancels the window, if applicable.

checkboxes([filter])

Returns a list of checkbox elements, as PyXA-wrapped objects, matching the given filter.

click([point])

Cause the window.

close()

Collapses (minimizes) the window.

collapse()

Collapses (minimizes) the window.

color_wells([filter])

Returns a list of color well elements, as PyXA-wrapped objects, matching the given filter.

combo_boxes([filter])

Returns a list of combo box elements, as PyXA-wrapped objects, matching the given filter.

confirm()

Confirms the window, if applicable.

decrement()

Decrements the window, if applicable.

drawers([filter])

Returns a list of drawer elements, as PyXA-wrapped objects, matching the given filter.

groups([filter])

Returns a list of group elements, as PyXA-wrapped objects, matching the given filter.

grow_areas([filter])

Returns a list of grow area elements, as PyXA-wrapped objects, matching the given filter.

images([filter])

Returns a list of image elements, as PyXA-wrapped objects, matching the given filter.

increment()

Increments the window, if applicable.

incrementors([filter])

Returns a list of incrementor elements, as PyXA-wrapped objects, matching the given filter.

lists([filter])

Returns a list of list elements, as PyXA-wrapped objects, matching the given filter.

menu_buttons([filter])

Returns a list of menu button elements, as PyXA-wrapped objects, matching the given filter.

outlines([filter])

Returns a list of outline elements, as PyXA-wrapped objects, matching the given filter.

pick()

Picks the window, if applicable.

pop_overs([filter])

Returns a list of pop-over elements, as PyXA-wrapped objects, matching the given filter.

pop_up_buttons([filter])

Returns a list of pop-up button elements, as PyXA-wrapped objects, matching the given filter.

progress_indicators([filter])

Returns a list of progress indicator elements, as PyXA-wrapped objects, matching the given filter.

radio_buttons([filter])

Returns a list of radio button elements, as PyXA-wrapped objects, matching the given filter.

radio_groups([filter])

Returns a list of radio group elements, as PyXA-wrapped objects, matching the given filter.

relevance_indicators([filter])

Returns a list of relevance indicator elements, as PyXA-wrapped objects, matching the given filter.

scroll_areas([filter])

Returns a list of scroll area elements, as PyXA-wrapped objects, matching the given filter.

scroll_bars([filter])

Returns a list of scroll bar elements, as PyXA-wrapped objects, matching the given filter.

sheets([filter])

Returns a list of sheet elements, as PyXA-wrapped objects, matching the given filter.

sliders([filter])

Returns a list of slider elements, as PyXA-wrapped objects, matching the given filter.

splitter_groups([filter])

Returns a list of splitter group elements, as PyXA-wrapped objects, matching the given filter.

splitters([filter])

Returns a list of splitter elements, as PyXA-wrapped objects, matching the given filter.

static_texts([filter])

Returns a list of static text elements, as PyXA-wrapped objects, matching the given filter.

tab_groups([filter])

Returns a list of tab group elements, as PyXA-wrapped objects, matching the given filter.

tables([filter])

Returns a list of table elements, as PyXA-wrapped objects, matching the given filter.

text_areas([filter])

Returns a list of text area elements, as PyXA-wrapped objects, matching the given filter.

text_fields([filter])

Returns a list of text fields elements, as PyXA-wrapped objects, matching the given filter.

toolbars([filter])

Returns a list of toolbar elements, as PyXA-wrapped objects, matching the given filter.

ui_elements([filter])

Returns a list of UI elements, as PyXA-wrapped objects, matching the given filter.

uncollapse()

Uncollapses (unminimizes/expands) the window.

+
+
+property accessibility_description: Optional[str]
+

A more complete description of the window and its capabilities.

+
+ +
+
+actions(filter: dict = None) Optional[XASystemEventsActionList][source]
+

Returns a list of action elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of actions

+
+
Return type:
+

XASystemEventsActionList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+attributes(filter: dict = None) Optional[XASystemEventsAttributeList][source]
+

Returns a list of attribute elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of attributes

+
+
Return type:
+

XASystemEventsAttributeList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+browsers(filter: dict = None) Optional[XASystemEventsBrowserList][source]
+

Returns a list of browser elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of browsers

+
+
Return type:
+

XASystemEventsBrowserList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+busy_indicators(filter: dict = None) Optional[XASystemEventsBusyIndicatorList][source]
+

Returns a list of busy indicator elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of busy indicators

+
+
Return type:
+

XASystemEventsBusyIndicatorList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+buttons(filter: dict = None) Optional[XASystemEventsButtonList][source]
+

Returns a list of button elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of buttons

+
+
Return type:
+

XASystemEventsButtonList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+cancel()[source]
+

Cancels the window, if applicable.

+
+

New in version 0.1.0.

+
+
+ +
+
+checkboxes(filter: dict = None) Optional[XASystemEventsButtonList][source]
+

Returns a list of checkbox elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of checkboxes

+
+
Return type:
+

XASystemEventsCheckboxList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+click(point: Optional[tuple[int, int]] = None)[source]
+

Cause the window.

+
+
Parameters:
+

point (Union[tuple[int, int], None], optional) – The coordinate location at which to click, defaults to None

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+close() XASystemEventsWindow[source]
+

Collapses (minimizes) the window.

+
+
Returns:
+

A reference to the now-collapsed window object.

+
+
Return type:
+

XASystemEventsWindow

+
+
Example:
+

+
+
>>> import PyXA
+>>> PyXA.Application("App Store").front_window.close()
+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+collapse() XASystemEventsWindow[source]
+

Collapses (minimizes) the window.

+
+
Returns:
+

A reference to the now-collapsed window object.

+
+
Return type:
+

XASystemEventsWindow

+
+
Example:
+

+
+
>>> import PyXA
+>>> PyXA.Application("App Store").front_window.collapse()
+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+color_wells(filter: dict = None) Optional[XASystemEventsColorWellList][source]
+

Returns a list of color well elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of color wells

+
+
Return type:
+

XASystemEventsColorWellList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+combo_boxes(filter: dict = None) Optional[XASystemEventsComboBoxList][source]
+

Returns a list of combo box elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of combo boxes

+
+
Return type:
+

XASystemEventsComboBoxList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+confirm()[source]
+

Confirms the window, if applicable.

+
+

New in version 0.1.0.

+
+
+ +
+
+decrement()[source]
+

Decrements the window, if applicable.

+
+

New in version 0.1.0.

+
+
+ +
+
+property document: XASystemEventsDocument
+

The document whose contents are displayed in the window.

+
+ +
+
+drawers(filter: dict = None) Optional[XASystemEventsDrawerList][source]
+

Returns a list of drawer elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of drawers

+
+
Return type:
+

XASystemEventsDrawerList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property enabled: Optional[bool]
+

Is the window enabled? (Does it accept clicks?)

+
+ +
+
+property entire_contents: list[PyXA.XABase.XAObject]
+

A list of every UI element contained in this window and its child UI elements, to the limits of the tree.

+
+ +
+
+property focused: Optional[bool]
+

Is the focus on this window?

+
+ +
+
+groups(filter: dict = None) Optional[XASystemEventsGroupList][source]
+

Returns a list of group elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of groups

+
+
Return type:
+

XASystemEventsGroupList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+grow_areas(filter: dict = None) Optional[XASystemEventsGrowAreaList][source]
+

Returns a list of grow area elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of grow areas

+
+
Return type:
+

XASystemEventsGrowAreaList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property help: Optional[str]
+

An elaborate description of the window and its capabilities.

+
+ +
+
+images(filter: dict = None) Optional[XASystemEventsImageList][source]
+

Returns a list of image elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of images

+
+
Return type:
+

XASystemEventsImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+increment()[source]
+

Increments the window, if applicable.

+
+

New in version 0.1.0.

+
+
+ +
+
+incrementors(filter: dict = None) Optional[XASystemEventsIncrementorList][source]
+

Returns a list of incrementor elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of incrementors

+
+
Return type:
+

XASystemEventsIncrementorList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+lists(filter: dict = None) Optional[XASystemEventsListList][source]
+

Returns a list of list elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of lists

+
+
Return type:
+

XASystemEventsListList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property maximum_value: Optional[Union[int, float]]
+

The maximum value that the UI element can take on.

+
+ +
+
+menu_buttons(filter: dict = None) Optional[XASystemEventsMenuButtonList][source]
+

Returns a list of menu button elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of menu buttons

+
+
Return type:
+

XASystemEventsMenuButtonList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property minimum_value: Optional[Union[int, float]]
+

The minimum value that the UI element can take on.

+
+ +
+
+property name: str
+

The name of the window, which identifies it within its container.

+
+ +
+
+property object_description: Optional[str]
+

The accessibility description, if available; otherwise, the role description.

+
+ +
+
+property orientation: Optional[str]
+

The orientation of the window.

+
+ +
+
+outlines(filter: dict = None) Optional[XASystemEventsOutlineList][source]
+

Returns a list of outline elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of outlines

+
+
Return type:
+

XASystemEventsOutlineList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+pick()[source]
+

Picks the window, if applicable.

+
+

New in version 0.1.0.

+
+
+ +
+
+pop_overs(filter: dict = None) Optional[XASystemEventsPopOverList][source]
+

Returns a list of pop-over elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of pop-overs

+
+
Return type:
+

XASystemEventsPopOverList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+pop_up_buttons(filter: dict = None) Optional[XASystemEventsPopUpButtonList][source]
+

Returns a list of pop-up button elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of pop-up buttons

+
+
Return type:
+

XASystemEventsPopUpButtonList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property position: Optional[list[Union[int, float]]]
+

The position of the window.

+
+ +
+
+progress_indicators(filter: dict = None) Optional[XASystemEventsProgressIndicatorList][source]
+

Returns a list of progress indicator elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of progress indicators

+
+
Return type:
+

XASystemEventsProgressIndicatorList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+radio_buttons(filter: dict = None) Optional[XASystemEventsRadioButtonList][source]
+

Returns a list of radio button elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of radio buttons

+
+
Return type:
+

XASystemEventsRadioButtonList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+radio_groups(filter: dict = None) Optional[XASystemEventsRadioGroupList][source]
+

Returns a list of radio group elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of radio groups

+
+
Return type:
+

XASystemEventsRadioGroupList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+relevance_indicators(filter: dict = None) Optional[XASystemEventsRelevanceIndicatorList][source]
+

Returns a list of relevance indicator elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of relevance indicators

+
+
Return type:
+

XASystemEventsRelevanceIndicatorList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property role: str
+

An encoded description of the window and its capabilities.

+
+ +
+
+property role_description: str
+

A more complete description of the window’s role.

+
+ +
+
+scroll_areas(filter: dict = None) Optional[XASystemEventsScrollAreaList][source]
+

Returns a list of scroll area elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of scroll areas

+
+
Return type:
+

XASystemEventsScrollAreaList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+scroll_bars(filter: dict = None) Optional[XASystemEventsScrollBarList][source]
+

Returns a list of scroll bar elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of scroll bars

+
+
Return type:
+

XASystemEventsScrollBarList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property selected: Optional[bool]
+

Is the window selected?

+
+ +
+
+sheets(filter: dict = None) Optional[XASystemEventsSheetList][source]
+

Returns a list of sheet elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of sheets

+
+
Return type:
+

XASystemEventsSheetList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property size: Optional[list[Union[int, float]]]
+

The size of the window.

+
+ +
+
+sliders(filter: dict = None) Optional[XASystemEventsSliderList][source]
+

Returns a list of slider elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of sliders

+
+
Return type:
+

XASystemEventsSliderList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+splitter_groups(filter: dict = None) Optional[XASystemEventsSplitterGroupList][source]
+

Returns a list of splitter group elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of splitter groups

+
+
Return type:
+

XASystemEventsSplitterGroupList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+splitters(filter: dict = None) Optional[XASystemEventsSplitterList][source]
+

Returns a list of splitter elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of splitters

+
+
Return type:
+

XASystemEventsSplitterList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+static_texts(filter: dict = None) Optional[XASystemEventsStaticTextList][source]
+

Returns a list of static text elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of static texts

+
+
Return type:
+

XASystemEventsStaticTextList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property subrole: Optional[str]
+

An encoded description of the window and its capabilities.

+
+ +
+
+tab_groups(filter: dict = None) Optional[XASystemEventsTabGroupList][source]
+

Returns a list of tab group elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of tab groups

+
+
Return type:
+

XASystemEventsTabGroupList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+tables(filter: dict = None) Optional[XASystemEventsTableList][source]
+

Returns a list of table elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of tables

+
+
Return type:
+

XASystemEventsTableList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+text_areas(filter: dict = None) Optional[XASystemEventsTextAreaList][source]
+

Returns a list of text area elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of text areas

+
+
Return type:
+

XASystemEventsTextAreaList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+text_fields(filter: dict = None) Optional[XASystemEventsTextFieldList][source]
+

Returns a list of text fields elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of text fields

+
+
Return type:
+

XASystemEventsTextFieldList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property title: Optional[str]
+

The title of the window as it appears on the screen.

+
+ +
+
+toolbars(filter: dict = None) Optional[XASystemEventsToolbarList][source]
+

Returns a list of toolbar elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of outlines

+
+
Return type:
+

XASystemEventsToolbarList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+ui_elements(filter: dict = None) Optional[XASystemEventsUIElementList][source]
+

Returns a list of UI elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned elements will have, or None

+
+
Returns:
+

The list of UI elements

+
+
Return type:
+

XASystemEventsUIElementList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+uncollapse() XASystemEventsWindow[source]
+

Uncollapses (unminimizes/expands) the window.

+
+
Returns:
+

A reference to the uncollapsed window object.

+
+
Return type:
+

XASystemEventsWindow

+
+
Example:
+

+
+
>>> import PyXA
+>>> PyXA.Application("App Store").front_window.uncollapse()
+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property value: Any
+

The current value of the window.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsWindowList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XASBWindowList

+

A wrapper around a list of windows.

+
+

New in version 0.1.2.

+
+

Methods:

+ + + + + + + + + + + + + + + +

close()

Closes all windows in the list.add()

collapse()

Collapses all windows in the list.

name()

uncollapse()

Uncollapses all windows in the list.

+
+
+close()[source]
+

Closes all windows in the list.add()

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Keychain Access")
+>>> app.windows().close()
+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+collapse() XASystemEventsWindowList[source]
+

Collapses all windows in the list.

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Keychain Access")
+>>> app.windows().collapse()
+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+name() list[str][source]
+
+ +
+
+uncollapse() XASystemEventsWindowList[source]
+

Uncollapses all windows in the list.

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Keychain Access")
+>>> app.windows().uncollapse()
+
+
+
+

New in version 0.0.6.

+
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsXMLAttribute(properties)[source]
+

Bases: XAObject

+

A named value associated with a unit of data in XML format.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + +

name

The name of the XML attribute.

value

The value of the XML attribute.

+
+
+property name: str
+

The name of the XML attribute.

+
+ +
+
+property value: Any
+

The value of the XML attribute.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsXMLAttributeList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of XML attributes that employs fast enumeration techniques.

+

All properties of XML attributes can be called as methods on the wrapped list, returning a list containing each attribute’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + +

by_name(name)

by_value(value)

name()

value()

+
+
+by_name(name: str) Optional[XASystemEventsXMLAttribute][source]
+
+ +
+
+by_value(value: Any) Optional[XASystemEventsXMLAttribute][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+value() list[Any][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsXMLData(properties)[source]
+

Bases: XAObject

+

Data in XML format.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + +

id

The unique identifier of the XML data.

name

The name of the XML data.

text

The text representation of the XML data.

+

Methods:

+ + + + + + +

xml_elements([filter])

Returns a list of XML elements, as PyXA-wrapped objects, matching the given filter.

+
+
+property id: str
+

The unique identifier of the XML data.

+
+ +
+
+property name: str
+

The name of the XML data.

+
+ +
+
+property text: str
+

The text representation of the XML data.

+
+ +
+
+xml_elements(filter: dict = None) Optional[XASystemEventsXMLElementList][source]
+

Returns a list of XML elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned XML elements will have, or None

+
+
Returns:
+

The list of XML elements

+
+
Return type:
+

XASystemEventsXMLElementList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsXMLDataList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of XML data that employs fast enumeration techniques.

+

All properties of XML datas can be called as methods on the wrapped list, returning a list containing each XML data’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_id(id)

by_name(name)

by_text(text)

id()

name()

text()

+
+
+by_id(id: str) Optional[XASystemEventsXMLData][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsXMLData][source]
+
+ +
+
+by_text(text: str) Optional[XASystemEventsXMLData][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+text() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsXMLElement(properties)[source]
+

Bases: XAObject

+

A unit of data in XML format.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + +

id

The unique identifier of the XML element.

name

The name of the XML element.

value

The value of the XML element.

+

Methods:

+ + + + + + + + + +

xml_attributes([filter])

Returns a list of XML attributes, as PyXA-wrapped objects, matching the given filter.

xml_elements([filter])

Returns a list of XML elements, as PyXA-wrapped objects, matching the given filter.

+
+
+property id: str
+

The unique identifier of the XML element.

+
+ +
+
+property name: str
+

The name of the XML element.

+
+ +
+
+property value: Any
+

The value of the XML element.

+
+ +
+
+xml_attributes(filter: dict = None) Optional[XASystemEventsXMLAttributeList][source]
+

Returns a list of XML attributes, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned XML attributes will have, or None

+
+
Returns:
+

The list of XML attributes

+
+
Return type:
+

XASystemEventsXMLAttributeList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+xml_elements(filter: dict = None) Optional[XASystemEventsXMLElementList][source]
+

Returns a list of XML elements, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned XML elements will have, or None

+
+
Returns:
+

The list of XML elements

+
+
Return type:
+

XASystemEventsXMLElementList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsXMLElementList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of XML elements that employs fast enumeration techniques.

+

All properties of XML elements can be called as methods on the wrapped list, returning a list containing each elements’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_id(id)

by_name(name)

by_value(value)

id()

name()

value()

+
+
+by_id(id: str) Optional[XASystemEventsXMLElement][source]
+
+ +
+
+by_name(name: str) Optional[XASystemEventsXMLElement][source]
+
+ +
+
+by_value(value: Any) Optional[XASystemEventsXMLElement][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+value() list[Any][source]
+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsXMLFile(properties)[source]
+

Bases: XAObject

+

A file containing data in XML format.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + +

contents

The contents of the XML file; elements and properties of the XML data may be accessed as if they were elements and properties of the XML file.

+
+
+property contents: XASystemEventsXMLData
+

The contents of the XML file; elements and properties of the XML data may be accessed as if they were elements and properties of the XML file.

+
+ +
+ +
+
+class PyXA.apps.SystemEvents.XASystemEventsXMLFileList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAFileList

+

A wrapper around lists of XML files that employs fast enumeration techniques.

+

All properties of XML files can be called as methods on the wrapped list, returning a list containing each file’s value for the property.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + + + + +

by_contents(contents)

contents()

+
+
+by_contents(contents: XASystemEventsXMLData) Optional[XASystemEventsXMLFile][source]
+
+ +
+
+contents() XASystemEventsXMLDataList[source]
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/systempreferences.html b/docs/reference/apps/systempreferences.html new file mode 100644 index 0000000..5991001 --- /dev/null +++ b/docs/reference/apps/systempreferences.html @@ -0,0 +1,631 @@ + + + + + + + System Preferences Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

System Preferences Module Reference

+
+

New in version 0.0.2.

+
+

Control the macOS System Preferences application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + +

XAPreferenceAnchor(properties)

A class for managing and interacting with anchors in System Preferences.

XAPreferenceAnchorList(properties[, filter])

A wrapper around lists of preference anchors that employs fast enumeration techniques.

XAPreferencePane(properties)

A class for managing and interacting with preference panes in System Preferences.

XAPreferencePaneList(properties[, filter])

A wrapper around lists of preference panes that employs fast enumeration techniques.

XASystemPreferencesApplication(properties)

A class for interacting with System Preferences.app.

+
+
+class PyXA.apps.SystemPreferences.XAPreferenceAnchor(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with anchors in System Preferences.

+
+

New in version 0.0.2.

+
+

Attributes:

+ + + + + + +

name

The name of the anchor.

+

Methods:

+ + + + + + +

reveal()

Reveals the anchor in the System Preferences window.

+
+
+property name: str
+

The name of the anchor.

+
+ +
+
+reveal() XAPreferenceAnchor[source]
+

Reveals the anchor in the System Preferences window.

+
+
Returns:
+

A reference to the anchor object.

+
+
Return type:
+

XAPreferenceAnchor

+
+
Example 1:
+

Reveal the Siri anchor in the Accessibility pane

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("System Preferences")
+>>> pane = app.panes().by_name("Accessibility")
+>>> anchor = pane.anchors().by_name("Siri")
+>>> anchor.reveal()
+
+
+
+

New in version 0.0.4.

+
+
+ +
+ +
+
+class PyXA.apps.SystemPreferences.XAPreferenceAnchorList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of preference anchors that employs fast enumeration techniques.

+

All properties of anchors can be called as methods on the wrapped list, returning a list containing each anchor’s value for the property.

+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + +

by_name(name)

name()

+
+
+by_name(name: str) XAPreferenceAnchor[source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.SystemPreferences.XAPreferencePane(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with preference panes in System Preferences.

+
+

See also

+

XAPreferenceAnchor

+
+
+

New in version 0.0.2.

+
+

Methods:

+ + + + + + + + + + + + +

anchors([filter])

Returns a list of anchors, as PyXA objects, matching the given filter.

authorize()

Prompts for authorization for the preference pane.

reveal()

Reveals the preference pane in the System Preferences window.

+

Attributes:

+ + + + + + + + + + + + +

id

A unique identifier for the preference pane independent of locale.

localized_name

The locale-dependant name of the preference pane.

name

The name of the preference pane as it appears in the title bar.

+
+
+anchors(filter: Optional[dict] = None) XAPreferenceAnchorList[source]
+

Returns a list of anchors, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned anchors will have, or None

+
+
Returns:
+

The list of anchors

+
+
Return type:
+

list[XAPreferenceAnchor]

+
+
Example 1:
+

Listing all anchors

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("System Preferences")
+>>> pane = app.panes()[0]
+>>> print(pane.anchors())
+<<class 'PyXA.apps.SystemPreferences.XAPreferenceAnchorList'>['Accessibility_Shortcut', 'Seeing_Cursor', ...]>
+
+
+
+

Changed in version 0.0.4: Now returns an object of XAPreferenceAnchorList instead of a default list.

+
+
+

New in version 0.0.2.

+
+
+ +
+
+authorize() XAPreferencePane[source]
+

Prompts for authorization for the preference pane.

+
+
Returns:
+

A reference to the pane object.

+
+
Return type:
+

XAPreferencePane

+
+
Example 1:
+

Prompt for authorization for the Date & Time pane

+
+
+
>>> import PyXA
+>>> from time import sleep
+>>> app = PyXA.Application("System Preferences")
+>>> app.activate()
+>>> pane = app.panes().by_name("Date & Time")
+>>> pane.reveal()
+>>> sleep(0.5) # Wait for animation to finish
+>>> pane.authorize()
+
+
+
+

New in version 0.0.2.

+
+
+ +
+
+property id: str
+

A unique identifier for the preference pane independent of locale.

+
+ +
+
+property localized_name: str
+

The locale-dependant name of the preference pane.

+
+ +
+
+property name: str
+

The name of the preference pane as it appears in the title bar.

+
+ +
+
+reveal() XAPreferencePane[source]
+

Reveals the preference pane in the System Preferences window.

+
+
Returns:
+

A reference to the pane object.

+
+
Return type:
+

XAPreferencePane

+
+
Example 1:
+

Reveal the Displays preference pane

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("System Preferences")
+>>> app.activate()
+>>> app.panes().by_name("Displays").reveal()
+
+
+
+

New in version 0.0.4.

+
+
+ +
+ +
+
+class PyXA.apps.SystemPreferences.XAPreferencePaneList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of preference panes that employs fast enumeration techniques.

+

All properties of panes can be called as methods on the wrapped list, returning a list containing each pane’s value for the property.

+
+
Example 1:
+

List the name of each preference pane

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("System Preferences")
+>>> print(app.panes().name())
+['Accessibility', 'Apple ID', 'Battery', 'Bluetooth', ...]
+
+
+
+
Example 2:
+

Get a preference pane by name (two ways)

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("System Preferences")
+>>> pane1 = app.panes().by_name("Battery")
+>>> pane2 = app.panes({"name": "Battery"})[0]
+>>> print(pane1 == pane2)
+True
+
+
+
+

New in version 0.0.4.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

by_id(id)

by_localized_name(localized_name)

by_name(name)

id()

localized_name()

name()

+
+
+by_id(id: str) XAPreferencePane[source]
+
+ +
+
+by_localized_name(localized_name: str) XAPreferencePane[source]
+
+ +
+
+by_name(name: str) XAPreferencePane[source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+localized_name() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.SystemPreferences.XASystemPreferencesApplication(properties)[source]
+

Bases: XASBApplication

+

A class for interacting with System Preferences.app.

+ +
+

New in version 0.0.2.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

current_pane

The currently selected preference pane.

frontmost

Whether System Preferences is the active application.

name

The name of the application.

preferences_window

The main preferences window.

show_all

Whether the system preferences is in show all view.

version

The version of System Preferences.app.

+

Methods:

+ + + + + + +

panes([filter])

Returns a list of preference panes, as PyXA objects, matching the given filter.

+
+
+property current_pane: XAPreferencePane
+

The currently selected preference pane.

+
+ +
+
+property frontmost: bool
+

Whether System Preferences is the active application.

+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+panes(filter: Optional[dict] = None) XAPreferencePaneList[source]
+

Returns a list of preference panes, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned preference panes will have, or None

+
+
Returns:
+

The list of preference panes

+
+
Return type:
+

list[XAPreferencePane]

+
+
Example 1:
+

List all preference panes

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("System Preferences")
+>>> print(app.panes())
+<<class 'PyXA.apps.SystemPreferences.XAPreferencePaneList'>['Accessibility', 'Apple ID', 'Battery', ...]>
+
+
+
+
Example 2:
+

List preference panes after applying a filter

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("System Preferences")
+>>> print(app.panes({"name": "Battery"}))
+<<class 'PyXA.apps.SystemPreferences.XAPreferencePaneList'>['Battery']>
+
+
+
+

Changed in version 0.0.4: Now returns an object of XAPreferencePaneList instead of a default list.

+
+
+

New in version 0.0.2.

+
+
+ +
+
+property preferences_window: XASBWindow
+

The main preferences window.

+
+ +
+
+property show_all: bool
+

Whether the system preferences is in show all view.

+
+ +
+
+property version: str
+

The version of System Preferences.app.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/terminal.html b/docs/reference/apps/terminal.html new file mode 100644 index 0000000..e1f16e9 --- /dev/null +++ b/docs/reference/apps/terminal.html @@ -0,0 +1,1265 @@ + + + + + + + Terminal Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Terminal Module Reference

+
+

New in version 0.0.1.

+
+

Control the macOS Terminal application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + +

XATerminalApplication(properties)

A class for managing and interacting with Messages.app

XATerminalSettingsSet(properties)

A class for managing and interacting with settings sets in Terminal.app.

XATerminalSettingsSetList(properties[, filter])

A wrapper around lists of Terminal settings sets that employs fast enumeration techniques.

XATerminalTab(properties)

A class for managing and interacting with tabs in Terminal.app.

XATerminalTabList(properties[, filter])

A wrapper around lists of Terminal tabs that employs fast enumeration techniques.

XATerminalWindow(properties)

A class for managing and interacting with windows in Terminal.app.

+
+
+class PyXA.apps.Terminal.XATerminalApplication(properties)[source]
+

Bases: XASBApplication, XACanOpenPath

+

A class for managing and interacting with Messages.app

+ +
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

current_tab

The currently active Terminal tab.

default_settings

The settings set used for new windows.

frontmost

Whether Terminal is the active application.

name

The name of the application.

startup_settings

The settings set used for the window created on application startup.

version

The version of Terminal.app.

+

Methods:

+ + + + + + + + + +

do_script(script[, window_tab, return_result])

Executes a Terminal script in the specified window or tab.

settings_sets([filter])

Returns a list of settings sets, as PyXA-wrapped objects, matching the given filter.

+
+
+property current_tab: XATerminalTab
+

The currently active Terminal tab.

+
+ +
+
+property default_settings: XATerminalSettingsSet
+

The settings set used for new windows.

+
+ +
+
+do_script(script: str, window_tab: Union[XATerminalWindow, XATerminalTab] = None, return_result: bool = False) Union[XATerminalApplication, Dict[str, str]][source]
+

Executes a Terminal script in the specified window or tab.

+

If no window or tab is provided, the script will run in a new tab of the frontmost window. If return_result is True, the script will be run in a new tab no regardless of the value of window_tab.

+
+
Parameters:
+
    +
  • script (str) – The script to execute.

  • +
  • window_tab (Union[XATerminalWindow, XATerminalTab], optional) – The window or tab to execute the script in, defaults to None

  • +
  • return_result (bool, optional) – Whether to return the result of script execution, defaults to False

  • +
+
+
Returns:
+

A reference to the Terminal application object, or the result of script execution.

+
+
Return type:
+

Union[XATerminalApplication, Dict[str, str]]

+
+
+
+

Changed in version 0.0.9: Now optionally returns the script execution result.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property frontmost: bool
+

Whether Terminal is the active application.

+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+settings_sets(filter: dict = None) Optional[XATerminalSettingsSetList][source]
+

Returns a list of settings sets, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned settings sets will have, or None

+
+
Returns:
+

The list of settings sets

+
+
Return type:
+

XATerminalSettingsSetList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+
+property startup_settings: XATerminalSettingsSet
+

The settings set used for the window created on application startup.

+
+ +
+
+property version: str
+

The version of Terminal.app.

+
+ +
+ +
+
+class PyXA.apps.Terminal.XATerminalSettingsSet(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for managing and interacting with settings sets in Terminal.app.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

background_color

The background color for the tab.

bold_text_color

The bold text color for the tab.

clean_commands

The processes which will be ignored when checking whether a tab can be closed without showing a prompt.

cursor_color

The cursor color for the tab.

custom_title

The tab's custom title.

font_antialiasing

Whether the font used to display the tab's contents is antialiased.

font_name

The name of the font used to display the tab's contents.

font_size

The size of the font used to display the tab's contents.

id

The unique identifier of the settings set.

name

The name of the settings set.

normal_text_color

The normal text color for the tab.

number_of_columns

The number of columns displayed in the tab.

number_of_rows

The number of rows displayed in the tab.

title_displays_custom_title

Whether the title contains a custom title.

title_displays_device_name

Whether the title contains the device name.

title_displays_settings_name

Whether the title contains the settings set name.

title_displays_shell_path

Whether the title contains the shell path.

title_displays_window_size

Whether the title contains the tab's size, in rows and columns.

+

Methods:

+ + + + + + +

get_clipboard_representation()

Gets a clipboard-codable representation of the settings set.

+
+
+property background_color: XAColor
+

The background color for the tab.

+
+ +
+
+property bold_text_color: XAColor
+

The bold text color for the tab.

+
+ +
+
+property clean_commands: list[str]
+

The processes which will be ignored when checking whether a tab can be closed without showing a prompt.

+
+ +
+
+property cursor_color: XAColor
+

The cursor color for the tab.

+
+ +
+
+property custom_title: str
+

The tab’s custom title.

+
+ +
+
+property font_antialiasing: bool
+

Whether the font used to display the tab’s contents is antialiased.

+
+ +
+
+property font_name: str
+

The name of the font used to display the tab’s contents.

+
+ +
+
+property font_size: int
+

The size of the font used to display the tab’s contents.

+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the settings set.

+

When the clipboard content is set to a settings set, the setting set’s name is added to the clipboard.

+
+
Returns:
+

The setting set’s name

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: int
+

The unique identifier of the settings set.

+
+ +
+
+property name: str
+

The name of the settings set.

+
+ +
+
+property normal_text_color: XAColor
+

The normal text color for the tab.

+
+ +
+
+property number_of_columns: int
+

The number of columns displayed in the tab.

+
+ +
+
+property number_of_rows: int
+

The number of rows displayed in the tab.

+
+ +
+
+property title_displays_custom_title: bool
+

Whether the title contains a custom title.

+
+ +
+
+property title_displays_device_name: bool
+

Whether the title contains the device name.

+
+ +
+
+property title_displays_settings_name: bool
+

Whether the title contains the settings set name.

+
+ +
+
+property title_displays_shell_path: bool
+

Whether the title contains the shell path.

+
+ +
+
+property title_displays_window_size: bool
+

Whether the title contains the tab’s size, in rows and columns.

+
+ +
+ +
+
+class PyXA.apps.Terminal.XATerminalSettingsSetList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around lists of Terminal settings sets that employs fast enumeration techniques.

+

All properties of settings sets can be called as methods on the wrapped list, returning a list containing each settings set’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

background_color()

bold_text_color()

by_background_color(background_color)

by_bold_text_color(bold_text_color)

by_clean_commands(clean_commands)

by_cursor_color(cursor_color)

by_custom_title(custom_title)

by_font_antialiasing(font_antialiasing)

by_font_name(font_name)

by_font_size(font_size)

by_id(id)

by_name(name)

by_normal_text_color(normal_text_color)

by_number_of_columns(number_of_columns)

by_number_of_rows(number_of_rows)

by_title_displays_custom_title(...)

by_title_displays_device_name(...)

by_title_displays_settings_name(...)

by_title_displays_shell_path(...)

by_title_displays_windows_size(...)

clean_commands()

cursor_color()

custom_title()

font_antialiasing()

font_name()

font_size()

get_clipboard_representation()

Gets a clipboard-codable representation of each settings set in the list.

id()

name()

normal_text_color()

number_of_columns()

number_of_rows()

title_displays_custom_title()

title_displays_device_name()

title_displays_settings_name()

title_displays_shell_path()

title_displays_window_size()

+
+
+background_color() list[PyXA.XABase.XAColor][source]
+
+ +
+
+bold_text_color() list[PyXA.XABase.XAColor][source]
+
+ +
+
+by_background_color(background_color: XAColor) Optional[XATerminalSettingsSet][source]
+
+ +
+
+by_bold_text_color(bold_text_color: XAColor) Optional[XATerminalSettingsSet][source]
+
+ +
+
+by_clean_commands(clean_commands: list[str]) Optional[XATerminalSettingsSet][source]
+
+ +
+
+by_cursor_color(cursor_color: XAColor) Optional[XATerminalSettingsSet][source]
+
+ +
+
+by_custom_title(custom_title: str) Optional[XATerminalSettingsSet][source]
+
+ +
+
+by_font_antialiasing(font_antialiasing: bool) Optional[XATerminalSettingsSet][source]
+
+ +
+
+by_font_name(font_name: str) Optional[XATerminalSettingsSet][source]
+
+ +
+
+by_font_size(font_size: int) Optional[XATerminalSettingsSet][source]
+
+ +
+
+by_id(id: int) Optional[XATerminalSettingsSet][source]
+
+ +
+
+by_name(name: str) Optional[XATerminalSettingsSet][source]
+
+ +
+
+by_normal_text_color(normal_text_color: XAColor) Optional[XATerminalSettingsSet][source]
+
+ +
+
+by_number_of_columns(number_of_columns: int) Optional[XATerminalSettingsSet][source]
+
+ +
+
+by_number_of_rows(number_of_rows: int) Optional[XATerminalSettingsSet][source]
+
+ +
+
+by_title_displays_custom_title(title_displays_custom_title: bool) Optional[XATerminalSettingsSet][source]
+
+ +
+
+by_title_displays_device_name(title_displays_device_name: bool) Optional[XATerminalSettingsSet][source]
+
+ +
+
+by_title_displays_settings_name(title_displays_settings_name: bool) Optional[XATerminalSettingsSet][source]
+
+ +
+
+by_title_displays_shell_path(title_displays_shell_path: bool) Optional[XATerminalSettingsSet][source]
+
+ +
+
+by_title_displays_windows_size(title_displays_windows_size: bool) Optional[XATerminalSettingsSet][source]
+
+ +
+
+clean_commands() list[list[str]][source]
+
+ +
+
+cursor_color() list[PyXA.XABase.XAColor][source]
+
+ +
+
+custom_title() list[str][source]
+
+ +
+
+font_antialiasing() list[bool][source]
+
+ +
+
+font_name() list[str][source]
+
+ +
+
+font_size() list[int][source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each settings set in the list.

+

When the clipboard content is set to a list of settings sets, each setting set’s name is added to the clipboard.

+
+
Returns:
+

The list of setting set names

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+id() list[int][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+normal_text_color() list[PyXA.XABase.XAColor][source]
+
+ +
+
+number_of_columns() list[int][source]
+
+ +
+
+number_of_rows() list[int][source]
+
+ +
+
+title_displays_custom_title() list[bool][source]
+
+ +
+
+title_displays_device_name() list[bool][source]
+
+ +
+
+title_displays_settings_name() list[bool][source]
+
+ +
+
+title_displays_shell_path() list[bool][source]
+
+ +
+
+title_displays_window_size() list[bool][source]
+
+ +
+ +
+
+class PyXA.apps.Terminal.XATerminalTab(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for managing and interacting with tabs in Terminal.app.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

busy

Whether the tab is currently busy running a process.

contents

The currently visible contents of the tab.

current_settings

The set of settings which control the tab's behavior and appearance.

custom_title

The tab's custom title.

history

The contents of the entire scrolling buffer of the tab.

number_of_columns

The number of columns displayed in the tab.

number_of_rows

The number of rows displayed in the tab.

processes

The processes currently running in the tab.

selected

Whether the tab is currently selected.

title_displays_custom_title

Whether the tab's title contains a custom title.

tty

The tab's TTY device.

+

Methods:

+ + + + + + +

get_clipboard_representation()

Gets a clipboard-codable representation of the tab.

+
+
+property busy: bool
+

Whether the tab is currently busy running a process.

+
+ +
+
+property contents: str
+

The currently visible contents of the tab.

+
+ +
+
+property current_settings: XATerminalSettingsSet
+

The set of settings which control the tab’s behavior and appearance.

+
+ +
+
+property custom_title: str
+

The tab’s custom title.

+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of the tab.

+

When the clipboard content is set to a Terminal tab, the tab’s custom title and its history are added to the clipboard.

+
+
Returns:
+

The tab’s custom title and history

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property history: str
+

The contents of the entire scrolling buffer of the tab.

+
+ +
+
+property number_of_columns: int
+

The number of columns displayed in the tab.

+
+ +
+
+property number_of_rows: int
+

The number of rows displayed in the tab.

+
+ +
+
+property processes: list[str]
+

The processes currently running in the tab.

+
+ +
+
+property selected: bool
+

Whether the tab is currently selected.

+
+ +
+
+property title_displays_custom_title: bool
+

Whether the tab’s title contains a custom title.

+
+ +
+
+property tty: str
+

The tab’s TTY device.

+
+ +
+ +
+
+class PyXA.apps.Terminal.XATerminalTabList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around lists of Terminal tabs that employs fast enumeration techniques.

+

All properties of tabs can be called as methods on the wrapped list, returning a list containing each tab’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

busy()

by_busy(busy)

by_contents(contents)

by_current_settings(current_settings)

by_custom_title(custom_title)

by_history(history)

by_number_of_columns(number_of_columns)

by_number_of_rows(number_of_rows)

by_processes(processes)

by_selected(selected)

by_title_displays_custom_title(...)

by_tty(tty)

contents()

current_settings()

custom_title()

get_clipboard_representation()

Gets a clipboard-codable representation of each tab in the list.

history()

number_of_columns()

number_of_rows()

processes()

selected()

title_displays_custom_title()

tty()

+
+
+busy() list[bool][source]
+
+ +
+
+by_busy(busy: bool) Optional[XATerminalTab][source]
+
+ +
+
+by_contents(contents: str) Optional[XATerminalTab][source]
+
+ +
+
+by_current_settings(current_settings: XATerminalSettingsSet) Optional[XATerminalTab][source]
+
+ +
+
+by_custom_title(custom_title: str) Optional[XATerminalTab][source]
+
+ +
+
+by_history(history: str) Optional[XATerminalTab][source]
+
+ +
+
+by_number_of_columns(number_of_columns: int) Optional[XATerminalTab][source]
+
+ +
+
+by_number_of_rows(number_of_rows: int) Optional[XATerminalTab][source]
+
+ +
+
+by_processes(processes: list[str]) Optional[XATerminalTab][source]
+
+ +
+
+by_selected(selected: bool) Optional[XATerminalTab][source]
+
+ +
+
+by_title_displays_custom_title(title_displays_custom_title: bool) Optional[XATerminalTab][source]
+
+ +
+
+by_tty(tty: str) Optional[XATerminalTab][source]
+
+ +
+
+contents() list[str][source]
+
+ +
+
+current_settings() XATerminalSettingsSetList[source]
+
+ +
+
+custom_title() list[str][source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each tab in the list.

+

When the clipboard content is set to a list of Terminal tabs, each tab’s custom title and history are added to the clipboard.

+
+
Returns:
+

The list of each tab’s custom title and history

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+history() list[str][source]
+
+ +
+
+number_of_columns() list[int][source]
+
+ +
+
+number_of_rows() list[int][source]
+
+ +
+
+processes() list[list[str]][source]
+
+ +
+
+selected() list[bool][source]
+
+ +
+
+title_displays_custom_title() list[bool][source]
+
+ +
+
+tty() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.Terminal.XATerminalWindow(properties)[source]
+

Bases: XASBWindow, XASBPrintable, XAObject

+

A class for managing and interacting with windows in Terminal.app.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + +

frontmost

Whether the window is currently the frontmost Terminal window.

position

selected_tab

The Terminal tab currently displayed in the window.

+

Methods:

+ + + + + + +

tabs([filter])

Returns a list of tabs, as PyXA-wrapped objects, matching the given filter.

+
+
+property frontmost: bool
+

Whether the window is currently the frontmost Terminal window.

+
+ +
+
+property position: tuple[int, int]
+
+ +
+
+property selected_tab: XATerminalTab
+

The Terminal tab currently displayed in the window.

+
+ +
+
+tabs(filter: dict = None) Optional[XATerminalTabList][source]
+

Returns a list of tabs, as PyXA-wrapped objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned tabs will have, or None

+
+
Returns:
+

The list of tabs

+
+
Return type:
+

XATerminalTabList

+
+
+
+

New in version 0.0.7.

+
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/textedit.html b/docs/reference/apps/textedit.html new file mode 100644 index 0000000..90c5569 --- /dev/null +++ b/docs/reference/apps/textedit.html @@ -0,0 +1,844 @@ + + + + + + + TextEdit Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

TextEdit Module Reference

+
+

New in version 0.0.1.

+
+

Control the macOS TextEdit application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + +

XATextEditApplication(properties)

A class for managing and interacting with TextEdit.app.

XATextEditDocument(properties)

A class for managing and interacting with TextEdit documents.

XATextEditDocumentList(properties[, filter])

A wrapper around lists of documents that employs fast enumeration techniques.

XATextEditWindow(properties)

A class for managing and interacting with TextEdit windows.

+
+
+class PyXA.apps.TextEdit.XATextEditApplication(properties)[source]
+

Bases: XASBApplication, XACanOpenPath, XACanPrintPath

+

A class for managing and interacting with TextEdit.app.

+
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + +

documents([filter])

Returns a list of documents matching the filter.

make(specifier, properties)

Creates a new element of the given specifier class without adding it to any list.

new_document([name, text, location])

Creates a new document with the given name and initializes it with the supplied text.

open(path)

Opens the file/website at the given filepath/URL.

print(file[, print_properties, show_prompt])

Prints a TextEdit document.

+

Attributes:

+ + + + + + + + + + + + +

frontmost

Whether TextEdit is the active application.

name

The name of the application.

version

The version of the TextEdit application.

+
+
+documents(filter: dict = None) XATextEditDocumentList[source]
+

Returns a list of documents matching the filter.

+
+
Parameters:
+

filter (dict) – A dictionary specifying property-value pairs that all returned documents will have

+
+
Returns:
+

The list of documents

+
+
Return type:
+

list[XATextEditDocument]

+
+
Example 1:
+

Listing all documents

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("TextEdit")
+>>> print(list(app.documents()))
+[<<class 'PyXA.apps.TextEdit.XATextEditDocument'>Current Document.txt>, <<class 'PyXA.apps.TextEdit.XATextEditDocument'>Another Document.txt>, ...]
+
+
+
+
Example 2:
+

List documents after applying a filter

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("TextEdit")
+>>> print(list(app.documents({"name": "Another Document.txt"})))
+[<<class 'PyXA.apps.TextEdit.XATextEditDocument'>Another Document.txt>]
+
+
+
+
Example 3:
+

List all paragraphs, words, and characters in all currently open documents

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("TextEdit")
+>>> documents = app.documents()
+>>> print("Paragraphs:", documents.paragraphs())
+>>> print("Words:", documents.words())
+>>> print("Characters:", documents.characters())
+Paragraphs: [This is note 1
+, This is note 2
+, This is note 3
+]
+Words: [This, is, note, 1, This, is, note, 2, This, is, note, 3]
+Characters: [T, h, i, s,  , i, s, , n, o, t, e,  , 1, 
+, T, h, i, s, , i, s, , n, o, t, e, , 2, 
+, T, h, i, s, , i, s, , n, o, t, e, , 3, 
+]
+
+
+
+

Changed in version 0.0.4: Now returns an object of XATextEditDocumentList instead of a default list.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property frontmost: bool
+

Whether TextEdit is the active application.

+
+ +
+
+make(specifier: str, properties: dict)[source]
+

Creates a new element of the given specifier class without adding it to any list.

+

Use XABase.XAList.push() to push the element onto a list.

+
+
Parameters:
+
    +
  • specifier (str) – The classname of the object to create

  • +
  • properties (dict) – The properties to give the object

  • +
+
+
Returns:
+

A PyXA wrapped form of the object

+
+
Return type:
+

XABase.XAObject

+
+
Example 1:
+

Make a new document and push it onto the list of documents

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("TextEdit")
+>>> properties = {
+>>>     "name": "Example.txt",
+>>>     "path": "/Users/exampleuser/Downloads/Example.txt",
+>>>     "text": "Some example text"
+>>> }
+>>> new_doc = app.make("document", properties)
+>>> app.documents().push(new_doc)
+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+new_document(name: Optional[str] = 'Untitled.txt', text: Optional[str] = '', location: Optional[str] = None) XATextEditDocument[source]
+

Creates a new document with the given name and initializes it with the supplied text. If no location is provided, the document file is created in the user’s Documents folder.

+
+
Parameters:
+
    +
  • name (Union[str, None], optional) – The name (including file extension) of the document, defaults to “Untitled.txt”

  • +
  • text (Union[str, None], optional) – The initial text of the document, defaults to “”

  • +
  • location (Union[str, None]) – The containing folder of the new document, defaults to None.

  • +
+
+
Returns:
+

A reference to the newly created document.

+
+
Return type:
+

XATextEditDocument

+
+
Example 1:
+

Create a new document with a name and initial body content

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("TextEdit")
+>>> doc = app.new_document("New.txt", "Example text")
+>>> print(doc.properties)
+{
+    modified = 0;
+    name = "New.txt";
+    objectClass = "<NSAppleEventDescriptor: 'docu'>";
+    path = "/Users/exampleuser/Documents/New.txt";
+    text = "Example text";
+}
+
+
+
+

See also

+

XATextEditDocument

+
+
+

New in version 0.0.1.

+
+
+ +
+
+open(path: str) XATextEditDocument[source]
+

Opens the file/website at the given filepath/URL.

+

Child classes of XACanOpenPath should redefine this method as necessary.

+
+
Parameters:
+

target (str) – The path to a file or the URL to a website to open.

+
+
Returns:
+

A reference to the opened document or element, or None if no document/element was created or it cannot be found

+
+
Return type:
+

Any

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+print(file: Union[str, NSURL, XATextEditDocument], print_properties: dict = None, show_prompt: bool = True)[source]
+

Prints a TextEdit document.

+
+
Parameters:
+
    +
  • file (Union[str, AppKit.NSURL, XATextEditDocument]) – The document or path to a document to print

  • +
  • print_properties (dict, optional) – Settings to print with or to preset in the print dialog, defaults to None

  • +
  • show_prompt (bool, optional) – Whether to show the print dialog, defaults to True

  • +
+
+
Example 1:
+

Printing a document with print properties

+
+
+
>>> import PyXA
+>>> from datetime import datetime, timedelta
+>>> app = PyXA.Application("TextEdit")
+>>> doc = app.documents()[0]
+>>> print_time = datetime.now() + timedelta(minutes=1)
+>>> properties = {
+>>>     "copies": 3,
+>>>     "collating": False,
+>>>     "startingPage": 1,
+>>>     "endingPage": 10,
+>>>     "pagesAcross": 3,
+>>>     "pagesDown": 3,
+>>>     "requestedPrintTime": print_time,
+>>>     "errorHandling": app.PrintErrorHandling.DETAILED.value,
+>>>     "faxNumber": "",
+>>>     "targetPrinter": ""
+>>> }
+>>> app.print(doc, print_properties=properties)
+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+property version: str
+

The version of the TextEdit application.

+
+ +
+ +
+
+class PyXA.apps.TextEdit.XATextEditDocument(properties)[source]
+

Bases: XATextDocument, XAPrintable, XAClipboardCodable, XACloseable

+

A class for managing and interacting with TextEdit documents.

+
+

Changed in version 0.0.2: Added close(), save(), and copy()

+
+
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + + + + + + + +

get_clipboard_representation()

Gets a clipboard-codable representation of the document.

print([print_properties, show_dialog])

Prints the document.

save([file_path])

Saves the document.

+

Attributes:

+ + + + + + + + + + + + + + + +

modified

Whether the document has been modified since the last save.

name

The name of the document, including the file extension.

path

The path at which the document is stored.

properties

All properties of the document.

+
+
+get_clipboard_representation() list[Union[str, objc.NSURL]][source]
+

Gets a clipboard-codable representation of the document.

+

When the clipboard content is set to a document, the documents’s file URL and body text are added to the clipboard.

+
+
Returns:
+

The document’s file URL and body text

+
+
Return type:
+

list[Union[str, AppKit.NSURL]]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property modified: bool
+

Whether the document has been modified since the last save.

+
+ +
+
+property name: str
+

The name of the document, including the file extension.

+
+ +
+
+property path: XAPath
+

The path at which the document is stored.

+
+ +
+
+print(print_properties: Optional[dict] = None, show_dialog: bool = True) Self[source]
+

Prints the document.

+
+
Parameters:
+
    +
  • print_properties (Union[dict, None], optional) – Properties to set for printing, defaults to None

  • +
  • show_dialog (bool, optional) – Whether to show the print dialog, defaults to True

  • +
+
+
Returns:
+

The document object

+
+
Return type:
+

Self

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property properties: dict
+

All properties of the document.

+
+ +
+
+save(file_path: Optional[Union[str, XAPath]] = None)[source]
+

Saves the document.

+

If a file path is provided, TextEdit will attempt to create a new file at the target location and of the specified file extension. If no file path is provided, and the document does not have a current path on the disk, a save dialog for the document will open.

+
+
Parameters:
+

file_path (str, optional) – The path to save the document at, defaults to None

+
+
Example 1:
+

Save all currently open documents

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("TextEdit")
+>>> for doc in app.documents():
+>>>     doc.save()
+
+
+
+

New in version 0.0.2.

+
+
+ +
+ +
+
+class PyXA.apps.TextEdit.XATextEditDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XATextDocumentList, XAClipboardCodable

+

A wrapper around lists of documents that employs fast enumeration techniques.

+

All properties of documents can be called as methods on the wrapped list, returning a list containing each document’s value for the property.

+
+

New in version 0.0.3.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

append(text)

Appends the provided text to the end of every document in the list.

by_modified(modified)

by_name(name)

by_path(path)

by_properties(properties)

get_clipboard_representation()

Gets a clipboard-codable representation of each document in the list.

modified()

name()

path()

prepend(text)

Inserts the provided text at the beginning of every document in the list.

properties()

push(*documents)

Appends the document to the list.

reverse()

Reverses the text of every document in the list.

+
+
+append(text: str) XATextEditDocumentList[source]
+

Appends the provided text to the end of every document in the list.

+
+
Parameters:
+

text (str) – The text to append.

+
+
Returns:
+

A reference to the document object.

+
+
Return type:
+

XATextDocument

+
+
Example 1:
+

Append a string at the end of every open document

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("TextEdit")
+>>> documents = app.documents()
+>>> documents.append("\n\n-- End Of Notes --")
+
+
+
+

See also

+

prepend()

+
+
+

New in version 0.0.4.

+
+
+ +
+
+by_modified(modified: bool) Optional[XATextEditDocument][source]
+
+ +
+
+by_name(name: str) Optional[XATextEditDocument][source]
+
+ +
+
+by_path(path: Union[str, XAPath]) Optional[XATextEditDocument][source]
+
+ +
+
+by_properties(properties: dict) Optional[XATextDocument][source]
+
+ +
+
+get_clipboard_representation() list[Union[str, objc.NSURL]][source]
+

Gets a clipboard-codable representation of each document in the list.

+

When the clipboard content is set to a list of documents, each documents’s file URL and name are added to the clipboard.

+
+
Returns:
+

A list of each document’s file URL and name

+
+
Return type:
+

list[Union[str, AppKit.NSURL]]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+modified() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+path() list[PyXA.XABase.XAPath][source]
+
+ +
+
+prepend(text: str) XATextEditDocumentList[source]
+

Inserts the provided text at the beginning of every document in the list.

+
+
Parameters:
+

text (str) – The text to insert.

+
+
Returns:
+

A reference to the document object.

+
+
Return type:
+

XATextDocument

+
+
Example 1:
+

Prepend a string at the beginning of every open document

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("TextEdit")
+>>> documents = app.documents()
+>>> documents.prepend("-- PyXA Notes --\n\n")
+
+
+
+

See also

+

append()

+
+
+

New in version 0.0.4.

+
+
+ +
+
+properties() list[dict][source]
+
+ +
+
+push(*documents: list[PyXA.apps.TextEdit.XATextEditDocument]) Optional[Union[XATextEditDocument, list[PyXA.apps.TextEdit.XATextEditDocument]]][source]
+

Appends the document to the list.

+
+

New in version 0.1.1.

+
+
+ +
+
+reverse() XATextEditDocumentList[source]
+

Reverses the text of every document in the list.

+
+
Returns:
+

A reference to the document object.

+
+
Return type:
+

XATextDocument

+
+
Example 1:
+

Reverse the text of every open document

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("TextEdit")
+>>> documents = app.documents()
+>>> documents.reverse()
+
+
+
+

New in version 0.0.4.

+
+
+ +
+ +
+
+class PyXA.apps.TextEdit.XATextEditWindow(properties)[source]
+

Bases: XASBWindow, XASBPrintable

+

A class for managing and interacting with TextEdit windows.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

document

The active document.

floating

Whether the window floats.

modal

Whether the window is a modal window.

titled

Whether the window has a title bar.

+
+
+property document: XATextEditDocument
+

The active document.

+
+ +
+
+property floating: bool
+

Whether the window floats.

+
+ +
+
+property modal: bool
+

Whether the window is a modal window.

+
+ +
+
+property titled: bool
+

Whether the window has a title bar.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/tv.html b/docs/reference/apps/tv.html new file mode 100644 index 0000000..81be52f --- /dev/null +++ b/docs/reference/apps/tv.html @@ -0,0 +1,259 @@ + + + + + + + TV Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

TV Module Reference

+
+

New in version 0.0.1.

+
+

Control the macOS TV application using JXA-like syntax.

+

Classes:

+ + + + + + + + + + + + + + + +

XATVApplication(properties)

A class for managing and interacting with TV.app.

XATVTrack(properties)

A class for managing and interacting with tracks in TV.app.

XATVTrackList(properties[, filter, obj_class])

A wrapper around lists of TV tracks that employs fast enumeration techniques.

XATVWindow(properties)

A windows of TV.app.

+
+
+class PyXA.apps.TV.XATVApplication(properties)[source]
+

Bases: XAMediaApplication, XASBApplication

+

A class for managing and interacting with TV.app.

+
+

See also

+

XATVWindow, class:XATVSource, XATVPlaylist, XATVTrack

+
+
+

New in version 0.0.1.

+
+
+ +
+
+class PyXA.apps.TV.XATVTrack(properties)[source]
+

Bases: XAMediaItem

+

A class for managing and interacting with tracks in TV.app.

+
+

See also

+

XATVSharedTrack, XATVFileTrack, XATVRemoteURLTrack

+
+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + +

sort_director

The string used for this track when sorting by director.

+
+
+property sort_director: str
+

The string used for this track when sorting by director.

+
+ +
+ +
+
+class PyXA.apps.TV.XATVTrackList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAMediaItemList

+

A wrapper around lists of TV tracks that employs fast enumeration techniques.

+

All properties of TV tracks can be called as methods on the wrapped list, returning a list containing each track’s value for the property.

+
+

New in version 0.0.7.

+
+

Methods:

+ + + + + + + + + +

by_sort_director(sort_director)

sort_director()

+
+
+by_sort_director(sort_director: str) Optional[XATVTrack][source]
+
+ +
+
+sort_director() list[str][source]
+
+ +
+ +
+
+class PyXA.apps.TV.XATVWindow(properties)[source]
+

Bases: XAMediaWindow, XASBWindow

+

A windows of TV.app.

+
+

New in version 0.0.1.

+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/apps/vlc.html b/docs/reference/apps/vlc.html new file mode 100644 index 0000000..f30e692 --- /dev/null +++ b/docs/reference/apps/vlc.html @@ -0,0 +1,763 @@ + + + + + + + VLC Module Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

VLC Module Reference

+

Classes:

+ + + + + + + + + + + + + + + +

XAVLCApplication(properties)

VLC's top level scripting object.

XAVLCDocument(properties)

A document open in VLC.app.

XAVLCDocumentList(properties[, filter])

A wrapper around a list of documents.

XAVLCWindow(properties)

A window of VLC.app.

+
+
+class PyXA.apps.VLC.XAVLCApplication(properties)[source]
+

Bases: XASBApplication, XACanOpenPath, XACanPrintPath

+

VLC’s top level scripting object.

+
+

New in version 0.0.8.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

activate_menu_item()

Activates the currently focused menu item.

documents([filter])

Returns a list of documents, as PyXA objects, matching the given filter.

fullscreen()

Toggle between fullscreen and windowed mode.

get_url(url)

Get a URL without playing it.

make(specifier, properties)

Creates a new element of the given specifier class without adding it to any list.

move_menu_focus_down()

Moves the menu focus down.

move_menu_focus_left()

Moves the menu focus to the left.

move_menu_focus_right()

Moves the menu focus to the right.

move_menu_focus_up()

Moves the menu focus up.

mute()

Mute the audio of the item or unmute it if it was muted.

next()

Go to the next item in the playlist or the next chapter in the DVD/VCD.

open(target)

Opens the file/website at the given filepath/URL.

open_url(url)

Open a media URL.

play()

Start playing the current playlistitem or pause it when it is already playing.

previous()

Go to the previous item in the playlist or the previous chapter in the DVD/VCD.

step_backward()

Step the current playlist item backward the specified step width (default is 2) (1=extraShort, 2=short, 3=medium, 4=long).

step_forward()

Step the current playlist item forward the specified step width (default is 2) (1=extraShort, 2=short, 3=medium, 4=long).

stop()

Stop playing the current playlist item.

volume_down()

Bring the volume down by one step.

volume_up()

Bring the volume up by one step.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

audio_desync

The audio desynchronization preference from -2147483648 to 2147483647, where 0 is default.

audio_volume

The volume of the current playlist item from 0 to 512, where 256 is 100%.

current_time

The current time of the current playlist item in seconds.

duration_of_current_item

The duration of the current playlist item in seconds.

frontmost

Whether VLC is the active application.

fullscreen_mode

Indicates whether fullscreen is enabled or not.

muted

Is VLC currently muted?

name

The name of the application.

name_of_current_item

Name of the current playlist item.

path_of_current_item

Path to the current playlist item.

playback_shows_menu

Indicates whether a DVD menu is currently being shown.

playing

Is VLC playing an item?

properties

All properties of the VLC application.

version

The version of VLC.app.

+
+
+activate_menu_item()[source]
+

Activates the currently focused menu item.

+
+

New in version 0.0.8.

+
+
+ +
+
+property audio_desync: int
+

The audio desynchronization preference from -2147483648 to 2147483647, where 0 is default.

+
+ +
+
+property audio_volume: int
+

The volume of the current playlist item from 0 to 512, where 256 is 100%.

+
+ +
+
+property current_time: int
+

The current time of the current playlist item in seconds.

+
+ +
+
+documents(filter: Optional[dict] = None) XAVLCDocumentList[source]
+

Returns a list of documents, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (dict, optional) – Keys and values to filter documents by, defaults to None

+
+
Returns:
+

A PyXA list object wrapping a list of documents

+
+
Return type:
+

XAVLCDocumentList

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property duration_of_current_item: int
+

The duration of the current playlist item in seconds.

+
+ +
+
+property frontmost: bool
+

Whether VLC is the active application.

+
+ +
+
+fullscreen()[source]
+

Toggle between fullscreen and windowed mode.

+
+

New in version 0.0.8.

+
+
+ +
+
+property fullscreen_mode: bool
+

Indicates whether fullscreen is enabled or not.

+
+ +
+
+get_url(url: Union[XAURL, XAPath, str])[source]
+

Get a URL without playing it.

+
+

New in version 0.0.8.

+
+
+ +
+
+make(specifier: str, properties: dict)[source]
+

Creates a new element of the given specifier class without adding it to any list.

+
+

New in version 0.0.9.

+
+
+ +
+
+move_menu_focus_down()[source]
+

Moves the menu focus down.

+
+

New in version 0.0.8.

+
+
+ +
+
+move_menu_focus_left()[source]
+

Moves the menu focus to the left.

+
+

New in version 0.0.8.

+
+
+ +
+
+move_menu_focus_right()[source]
+

Moves the menu focus to the right.

+
+

New in version 0.0.8.

+
+
+ +
+
+move_menu_focus_up()[source]
+

Moves the menu focus up.

+
+

New in version 0.0.8.

+
+
+ +
+
+mute()[source]
+

Mute the audio of the item or unmute it if it was muted.

+
+

New in version 0.0.8.

+
+
+ +
+
+property muted: bool
+

Is VLC currently muted?

+
+ +
+
+property name: str
+

The name of the application.

+
+ +
+
+property name_of_current_item: str
+

Name of the current playlist item.

+
+ +
+
+next()[source]
+

Go to the next item in the playlist or the next chapter in the DVD/VCD.

+
+

New in version 0.0.8.

+
+
+ +
+
+open(target: Union[XAURL, XAPath, str]) None[source]
+

Opens the file/website at the given filepath/URL.

+
+
Parameters:
+

target (Union[XABase.XAURL, XABase.XAPath, str]) – The path to a file or the URL to a website to open.

+
+
Example 1:
+

Open files from file paths

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("VLC")
+>>> app.open("/Users/exampleUser/Downloads/Example.avi")
+>>> 
+>>> path = PyXA.XAPath("/Users/exampleUser/Documents/Example.m4v")
+>>> app.open(path)
+
+
+
+
Example 2:
+

Open URLs

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("VLC")
+>>> app.open("https://upload.wikimedia.org/wikipedia/commons/transcoded/0/0f/Baby_pelican.ogg/Baby_pelican.ogg.mp3")
+>>> 
+>>> url = PyXA.XAURL("https://www.youtube.com/watch?v=e9B3E_DnnWw")
+>>> app.open(url)
+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+open_url(url: Union[XAURL, XAPath, str])[source]
+

Open a media URL.

+
+

New in version 0.0.8.

+
+
+ +
+
+property path_of_current_item: XAPath
+

Path to the current playlist item.

+
+ +
+
+play()[source]
+

Start playing the current playlistitem or pause it when it is already playing.

+
+

New in version 0.0.8.

+
+
+ +
+
+property playback_shows_menu: bool
+

Indicates whether a DVD menu is currently being shown.

+
+ +
+
+property playing: bool
+

Is VLC playing an item?

+
+ +
+
+previous()[source]
+

Go to the previous item in the playlist or the previous chapter in the DVD/VCD.

+
+

New in version 0.0.8.

+
+
+ +
+
+property properties: dict
+

All properties of the VLC application.

+
+ +
+
+step_backward()[source]
+

Step the current playlist item backward the specified step width (default is 2) (1=extraShort, 2=short, 3=medium, 4=long).

+
+

New in version 0.0.8.

+
+
+ +
+
+step_forward()[source]
+

Step the current playlist item forward the specified step width (default is 2) (1=extraShort, 2=short, 3=medium, 4=long).

+
+

New in version 0.0.8.

+
+
+ +
+
+stop()[source]
+

Stop playing the current playlist item.

+
+

New in version 0.0.8.

+
+
+ +
+
+property version: str
+

The version of VLC.app.

+
+ +
+
+volume_down()[source]
+

Bring the volume down by one step. There are 32 steps from 0 to 400% volume.

+
+

New in version 0.0.8.

+
+
+ +
+
+volume_up()[source]
+

Bring the volume up by one step. There are 32 steps from 0 to 400% volume.

+
+

New in version 0.0.8.

+
+
+ +
+ +
+
+class PyXA.apps.VLC.XAVLCDocument(properties)[source]
+

Bases: XAObject

+

A document open in VLC.app.

+

Attributes:

+ + + + + + + + + + + + + + + +

modified

Has the document been modified since the last save?

name

The document's name.

path

The document's path.

properties

All properties of the document.

+
+
+property modified: bool
+

Has the document been modified since the last save?

+
+ +
+
+property name: str
+

The document’s name.

+
+ +
+
+property path: XAPath
+

The document’s path.

+
+ +
+
+property properties: dict
+

All properties of the document.

+
+ +
+ +
+
+class PyXA.apps.VLC.XAVLCDocumentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XACloseable, XAClipboardCodable

+

A wrapper around a list of documents.

+
+

New in version 0.0.8.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + +

by_modified(modified)

by_name(name)

by_path(path)

get_clipboard_representation()

Gets a clipboard-codable representation of each document in the list.

modified()

name()

path()

+
+
+by_modified(modified: bool) Optional[XAVLCDocument][source]
+
+ +
+
+by_name(name: str) Optional[XAVLCDocument][source]
+
+ +
+
+by_path(path: Union[str, XAPath]) Optional[XAVLCDocument][source]
+
+ +
+
+get_clipboard_representation() list[str][source]
+

Gets a clipboard-codable representation of each document in the list.

+

When the clipboard content is set to a list of documents, the name of each document is added to the clipboard.

+
+
Returns:
+

A list of document names

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+modified() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+path() list[PyXA.XABase.XAPath][source]
+
+ +
+ +
+
+class PyXA.apps.VLC.XAVLCWindow(properties)[source]
+

Bases: XASBWindow

+

A window of VLC.app.

+
+

New in version 0.0.8.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

document

The document whose contents are being displayed in the window.

floating

Whether the window floats.

modal

Whether the window is the application's current modal window.

titled

Whether the window has a title bar.

+
+
+property document: XAVLCDocument
+

The document whose contents are being displayed in the window.

+
+ +
+
+property floating: bool
+

Whether the window floats.

+
+ +
+
+property modal: bool
+

Whether the window is the application’s current modal window.

+
+ +
+
+property titled: bool
+

Whether the window has a title bar.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/index.html b/docs/reference/index.html new file mode 100644 index 0000000..1643514 --- /dev/null +++ b/docs/reference/index.html @@ -0,0 +1,1097 @@ + + + + + + + Code Documentation and Reference — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Code Documentation and Reference

+
+

Top-level PyXA Modules

+
+ +
+
+
+

First-Party Application Module Reference

+
+ +
+
+
+

Third-Party Application Module Reference

+
+ +
+
+
+

PyXA Additions

+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/pyxa.html b/docs/reference/pyxa.html new file mode 100644 index 0000000..66253f7 --- /dev/null +++ b/docs/reference/pyxa.html @@ -0,0 +1,687 @@ + + + + + + + PyXA Module — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

PyXA Module

+

Classes:

+ + + + + + + + + + + + +

Application(app_name)

+

Deprecated since version 0.1.1.

+
+

XAApplicationList(properties[, filter])

A wrapper around a list of applications.

XACombinedWindowList(properties[, filter])

A wrapper around a combined list of both scriptable and non-scriptable windows.

+

Functions:

+ + + + + + + + + + + + + + + +

CGWindowListCopyWindowInfo(arg0, arg1, /)

CFArrayRef CGWindowListCopyWindowInfo(unsigned int arg0, unsigned int arg1);

application(app_identifier)

Retrieves a PyXA application object representation of the target application without launching or activating the application.

current_application()

Retrieves a PyXA representation of the frontmost application.

running_applications()

Gets PyXA references to all currently visible (not hidden or minimized) running applications whose app bundles are stored in typical application directories.

+

Data:

+ + + + + + +

supported_applications

A list of names of supported scriptable applications

+
+
+class PyXA.PyXA.Application(app_name: str)[source]
+

Bases: XAObject

+
+

Deprecated since version 0.1.1: Use XABase.Application instead.

+
+

Attributes:

+ + + + + + + + + + + + +

app_paths

A list containing the path to each application

shared_app

workspace

+
+
+app_paths: List[str] = []
+

A list containing the path to each application

+
+ +
+
+property shared_app
+
+ +
+
+property workspace
+
+ +
+ +
+
+PyXA.PyXA.CGWindowListCopyWindowInfo(arg0, arg1, /)
+

CFArrayRef CGWindowListCopyWindowInfo(unsigned int arg0, unsigned int arg1);

+
+ +
+
+class PyXA.PyXA.XAApplicationList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around a list of applications.

+
+

Deprecated since version 0.1.1: Use XABase.XAApplicationList instead.

+
+
+

New in version 0.0.5.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

bundle_identifier()

Gets the bundle identifier of every application in the list.

bundle_url()

Gets the bundle URL of every application in the list.

executable_url()

Gets the executable URL of every application in the list.

first()

Retrieves the first element of the list as a wrapped PyXA application object.

hide()

Hides all applications in the list.

last()

Retrieves the last element of the list as a wrapped PyXA application object.

launch_date()

Gets the launch date of every application in the list.

localized_name()

Gets the localized name of every application in the list.

pop([index])

Removes the application at the specified index from the list and returns it.

process_identifier()

Gets the process identifier of every application in the list.

quit()

Quits (terminates) all applications in the list.

terminate()

Quits (terminates) all applications in the list.

unhide()

Unhides all applications in the list.

windows()

Retrieves a list of every window belonging to each application in the list.

+
+
+bundle_identifier() List[str][source]
+

Gets the bundle identifier of every application in the list.

+
+
Returns:
+

The list of application bundle identifiers

+
+
Return type:
+

List[str]

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+bundle_url() List[XAURL][source]
+

Gets the bundle URL of every application in the list.

+
+
Returns:
+

The list of application bundle URLs

+
+
Return type:
+

List[XAURL]

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+executable_url() List[XAURL][source]
+

Gets the executable URL of every application in the list.

+
+
Returns:
+

The list of application executable URLs

+
+
Return type:
+

List[XAURL]

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+first() XAObject[source]
+

Retrieves the first element of the list as a wrapped PyXA application object.

+
+
Returns:
+

The wrapped object

+
+
Return type:
+

XAObject

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+hide()[source]
+

Hides all applications in the list.

+
+
Example 1:
+

Hide all visible running applications

+
+
+
>>> import PyXA
+>>> apps = PyXA.running_applications()
+>>> apps.hide()
+
+
+
+

See also

+

unhide()

+
+
+

New in version 0.0.5.

+
+
+ +
+
+last() XAObject[source]
+

Retrieves the last element of the list as a wrapped PyXA application object.

+
+
Returns:
+

The wrapped object

+
+
Return type:
+

XAObject

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+launch_date() List[datetime][source]
+

Gets the launch date of every application in the list.

+
+
Returns:
+

The list of application launch dates

+
+
Return type:
+

List[str]

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+localized_name() List[str][source]
+

Gets the localized name of every application in the list.

+
+
Returns:
+

The list of application localized names

+
+
Return type:
+

List[str]

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+pop(index: int = -1) XAObject[source]
+

Removes the application at the specified index from the list and returns it.

+
+

New in version 0.0.5.

+
+
+ +
+
+process_identifier() List[str][source]
+

Gets the process identifier of every application in the list.

+
+
Returns:
+

The list of application process identifiers

+
+
Return type:
+

List[str]

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+quit()[source]
+

Quits (terminates) all applications in the list. Synonymous with terminate().

+
+
Example 1:
+

Quit all visible running applications

+
+
+
>>> import PyXA
+>>> apps = PyXA.running_applications()
+>>> apps.quit()
+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+terminate()[source]
+

Quits (terminates) all applications in the list. Synonymous with quit().

+
+
Example 1:
+

Terminate all visible running applications

+
+
+
>>> import PyXA
+>>> apps = PyXA.running_applications()
+>>> apps.terminate()
+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+unhide()[source]
+

Unhides all applications in the list.

+
+
Example 1:
+

Hide then unhide all visible running applications

+
+
+
>>> import PyXA
+>>> apps = PyXA.running_applications()
+>>> apps.hide()
+>>> apps.unhide()
+
+
+
+

See also

+

hide()

+
+
+

New in version 0.0.5.

+
+
+ +
+
+windows() XACombinedWindowList[source]
+

Retrieves a list of every window belonging to each application in the list.

+

Operations on the list of windows will specialized to scriptable and non-scriptable application window operations as necessary.

+
+
Returns:
+

A list containing both scriptable and non-scriptable windows

+
+
Return type:
+

XACombinedWindowList

+
+
Example:
+

+
+
>>> import PyXA
+>>> windows = PyXA.running_applications().windows()
+>>> windows.collapse()
+>>> sleep(1)
+>>> windows.uncollapse()
+
+
+
+

New in version 0.0.5.

+
+
+ +
+ +
+
+class PyXA.PyXA.XACombinedWindowList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around a combined list of both scriptable and non-scriptable windows.

+

This class contains methods that specialize to XAWindow and XASBWindow methods as necessary.

+
+

Deprecated since version 0.1.1: Use XABase.XACombinedWindowList instead.

+
+
+

New in version 0.0.5.

+
+

Methods:

+ + + + + + + + + +

collapse()

Collapses all windows in the list.

uncollapse()

Uncollapses all windows in the list.

+
+
+collapse() XACombinedWindowList[source]
+

Collapses all windows in the list.

+
+
Returns:
+

The window list object

+
+
Return type:
+

XACombinedWindowList

+
+
Example 1:
+

Collapse all windows for all currently visible running applications

+
+
+
>>> import PyXA
+>>> apps = PyXA.running_applications()
+>>> apps.windows().collapse()
+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+uncollapse() XACombinedWindowList[source]
+

Uncollapses all windows in the list.

+
+
Returns:
+

The window list object

+
+
Return type:
+

XACombinedWindowList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+PyXA.PyXA.application(app_identifier: str) XAApplication[source]
+

Retrieves a PyXA application object representation of the target application without launching or activating the application.

+
+
Parameters:
+

app_identifier (str) – The name of the application to get an object of.

+
+
Returns:
+

A PyXA application object referencing the target application.

+
+
Return type:
+

XAApplication

+
+
+
+

Deprecated since version 0.1.0: Use Application instead.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+PyXA.PyXA.current_application() XAApplication[source]
+

Retrieves a PyXA representation of the frontmost application.

+
+
Returns:
+

A PyXA application object referencing the current application.

+
+
Return type:
+

XAApplication

+
+
+
+

Deprecated since version 0.1.1: Use XABase.current_application() instead.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+PyXA.PyXA.running_applications() List[XAApplication][source]
+

Gets PyXA references to all currently visible (not hidden or minimized) running applications whose app bundles are stored in typical application directories.

+
+
Returns:
+

A list of PyXA application objects.

+
+
Return type:
+

List[XAApplication]

+
+
Example 1:
+

Get the name of each running application

+
+
+
>>> import PyXA
+>>> apps = PyXA.running_applications()
+>>> print(apps.localized_name())
+['GitHub Desktop', 'Safari', 'Code', 'Terminal', 'Notes', 'Messages', 'TV']
+
+
+
+

Deprecated since version 0.1.1: Use XABase.running_applications() instead.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+PyXA.PyXA.supported_applications: List[str] = ['finder', 'safari', 'music', 'reminders', 'notes', 'messages', 'calendar', 'textedit', 'pages', 'terminal', 'preview', 'tv', 'contacts', 'shortcuts', 'shortcuts events', 'photos', 'system preferences', 'system settings', 'keynote', 'mail', 'automator', 'console', 'font book', 'quicktime player', 'numbers', 'script editor', 'system events', 'image events', 'calculator', 'dictionary', 'maps', 'podcasts', 'stocks', 'chromium', 'brave browser', 'microsoft edge', 'google chrome', 'opera', 'vivaldi', 'blisk', 'iridium', 'alfred', 'drafts', 'hammerspoon', 'rstudio', 'iterm', 'vlc', 'fantastical', 'omnioutliner', 'spotify', 'flow', 'bike', 'adobe acrobat reader', 'cardhop', 'amphetamine']
+

A list of names of supported scriptable applications

+
+

Deprecated since version 0.1.1: Use XABase.supported_applications instead.

+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/xabase.html b/docs/reference/xabase.html new file mode 100644 index 0000000..0cc8aa7 --- /dev/null +++ b/docs/reference/xabase.html @@ -0,0 +1,13563 @@ + + + + + + + XABase Module — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

XABase Module

+
+

New in version 0.0.1.

+
+

General classes and methods applicable to any PyXA object.

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

AppleScript([script])

A class for constructing and executing AppleScript scripts.

Application(app_name)

A wrapper around a macOS application providing access to its scripting functionality.

XAAlias(properties)

An alias in the file system.

XAAliasList(properties[, filter])

A wrapper around lists of aliases that employs fast enumeration techniques.

XAApplication(properties)

A general application class for both officially scriptable and non-scriptable applications.

XAApplicationList(properties[, filter])

A wrapper around a list of applications.

XAApplicationPicker([title, prompt, ...])

An application selection window.

XAAttachment(properties)

A class for managing and interacting with attachments in text documents.

XAAttachmentList(properties[, filter])

A wrapper around lists of text attachments that employs fast enumeration techniques.

XAAttributeRun(properties)

A class for managing and interacting with attribute runs in text documents.

XAAttributeRunList(properties[, filter])

A wrapper around lists of attribute runs that employs fast enumeration techniques.

XACharacter(properties)

A class for managing and interacting with characters in text documents.

XACharacterList(properties[, filter])

A wrapper around lists of characters that employs fast enumeration techniques.

XAClassicDomainObject(properties)

The Classic domain in the file system.

XAClipboard()

A wrapper class for managing and interacting with the system clipboard.

XAColor(*args)

XAColorList(properties[, filter])

A wrapper around lists of colors that employs fast enumeration techniques.

XAColorPicker([style])

A class for creating and interacting with a color picker window.

XAColorPickerStyle(value[, names, module, ...])

Options for which tab a color picker should display when first opened.

XADialog([text, title, buttons, ...])

A custom dialog window.

XADisk(properties)

A disk in the file system.

XADiskItem(properties)

An item stored in the file system.

XADiskItemList(properties[, filter, ...])

A wrapper around lists of disk items that employs fast enumeration techniques.

XADiskList(properties[, filter])

A wrapper around lists of disks that employs fast enumeration techniques.

XADomain(properties)

A domain in the file system.

XADomainList(properties[, filter])

A wrapper around lists of domains that employs fast enumeration techniques.

XAEventsApplication()

A base class for the System and Image events applications.

XAFile(properties)

A file in the file system.

XAFileList(properties[, filter, object_class])

A wrapper around lists of files that employs fast enumeration techniques.

XAFileNameDialog([prompt, default_name, ...])

A file name input window.

XAFilePackage(properties)

A file package in the file system.

XAFilePackageList(properties[, filter])

A wrapper around lists of file packages that employs fast enumeration techniques.

XAFilePicker([prompt, types, ...])

A file selection window.

XAFolder(properties)

A folder in the file system.

XAFolderList(properties[, filter])

A wrapper around lists of folders that employs fast enumeration techniques.

XAFolderPicker([prompt, default_location, ...])

A folder selection window.

XAImage([image_reference, data])

A wrapper around NSImage with specialized automation methods.

XAImageList(properties[, filter, obj_class])

A wrapper around lists of images that employs fast enumeration techniques.

XAList(properties[, object_class, filter])

A wrapper around NSArray and NSMutableArray objects enabling fast enumeration and lazy evaluation of Objective-C objects.

XALocalDomainObject(properties)

The local domain in the file system.

XALocation([raw_value, title, latitude, ...])

A location with a latitude and longitude, along with other data.

XAMenu(menu_items[, title, prompt, ...])

A custom list item selection menu.

XANetworkDomainObject(properties)

The network domain in the file system.

XAObject([properties])

A general class for PyXA scripting objects.

XAParagraph(properties)

A class for managing and interacting with paragraphs in text documents.

XAParagraphList(properties[, filter])

A wrapper around lists of paragraphs that employs fast enumeration techniques.

XAPath(path)

A path to a file on the disk.

XAPredicate()

A predicate used to filter arrays.

XASentence(properties)

A class for managing and interacting with sentences in text documents.

XASentenceList(properties[, filter])

A wrapper around lists of sentences that employs fast enumeration techniques.

XASound(sound_reference)

A class for playing and interacting with audio files and data.

XASoundList(properties[, filter])

A wrapper around lists of sounds that employs fast enumeration techniques.

XASpotlight(*query)

A Spotlight query for files on the disk.

XASystemDomainObject(properties)

The system domain in the file system.

XAText(properties)

A class for managing and interacting with the text of documents.

XATextDocument(properties)

A class for managing and interacting with text documents.

XATextDocumentList(properties[, filter, ...])

A wrapper around lists of text documents that employs fast enumeration techniques.

XATextList(properties[, filter, obj_class])

A wrapper around lists of text objects that employs fast enumeration techniques.

XAURL(url)

A URL using any scheme recognized by the system.

XAURLList(properties[, filter])

A list of URLs.

XAUserDomainObject(properties)

The user domain in the file system.

XAVideo(video_reference)

A class for interacting with video files and data.

XAWord(properties)

A class for managing and interacting with words in text documents.

XAWordList(properties[, filter])

A wrapper around lists of words that employs fast enumeration techniques.

+

Functions:

+ + + + + + + + + + + + + + + +

OSType(s)

current_application()

Retrieves a PyXA representation of the frontmost application.

running_applications()

Gets PyXA references to all currently visible (not hidden or minimized) running applications whose app bundles are stored in typical application directories.

unOSType(i)

+

Data:

+ + + + + + + + + +

VERSION

The installed version of PyXA

supported_applications

A list of names of supported scriptable applications

+
+
+class PyXA.XABase.AppleScript(script: Optional[Union[str, list[str]]] = None)[source]
+

Bases: object

+

A class for constructing and executing AppleScript scripts.

+
+

New in version 0.0.5.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

__dict__

__module__

__weakref__

list of weak references to the object (if defined)

file_path

The file path of this script, if one exists

last_result

The return value of the last execution of the script

script

The lines of AppleScript code contained in the script

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__([script])

Creates a new AppleScript object.

__repr__()

Return repr(self).

add(script)

Adds the supplied string, list of strings, or script as a new line entry in the script.

insert(index, script)

Inserts the supplied string, list of strings, or script as a line entry in the script starting at the given line index.

load()

Loads an AppleScript (.scpt) file as a runnable AppleScript object.

parse_result_data()

Extracts string data from an AppleScript execution result dictionary.

pop([index])

Removes the line at the given index from the script.

run()

Compiles and runs the script, returning the result.

save([path])

Saves the script to the specified file path, or to the path from which the script was loaded.

+
+
+__annotations__ = {'file_path': 'XAPath', 'last_result': 'Any', 'script': 'list[str]'}
+
+ +
+
+__dict__ = mappingproxy({'__module__': 'PyXA.XABase', '__doc__': 'A class for constructing and executing AppleScript scripts.\n\n    .. versionadded:: 0.0.5\n    ', '__init__': <function AppleScript.__init__>, 'last_result': <property object>, 'file_path': <property object>, 'add': <function AppleScript.add>, 'insert': <function AppleScript.insert>, 'pop': <function AppleScript.pop>, 'load': <function AppleScript.load>, 'save': <function AppleScript.save>, 'parse_result_data': <function AppleScript.parse_result_data>, 'run': <function AppleScript.run>, '__repr__': <function AppleScript.__repr__>, '__dict__': <attribute '__dict__' of 'AppleScript' objects>, '__weakref__': <attribute '__weakref__' of 'AppleScript' objects>, '__annotations__': {'script': 'list[str]', 'last_result': 'Any', 'file_path': 'XAPath'}})
+
+ +
+
+__init__(script: Optional[Union[str, list[str]]] = None)[source]
+

Creates a new AppleScript object.

+
+
Parameters:
+

script (Union[str, list[str], None], optional) – A string or list of strings representing lines of AppleScript code, or the path to a script plaintext file, defaults to None

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+__repr__()[source]
+

Return repr(self).

+
+ +
+
+__weakref__
+

list of weak references to the object (if defined)

+
+ +
+
+add(script: Union[str, list[str], AppleScript])[source]
+

Adds the supplied string, list of strings, or script as a new line entry in the script.

+
+
Parameters:
+

script (Union[str, list[str], AppleScript]) – The script to append to the current script string.

+
+
Example:
+

+
+
>>> import PyXA
+>>> script = PyXA.AppleScript("tell application "Safari"")
+>>> script.add("print the document of window 1")
+>>> script.add("end tell")
+>>> script.run()
+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+property file_path: XAPath
+

The file path of this script, if one exists

+
+ +
+
+insert(index: int, script: Union[str, list[str], AppleScript])[source]
+

Inserts the supplied string, list of strings, or script as a line entry in the script starting at the given line index.

+
+
Parameters:
+
    +
  • index (int) – The line index to begin insertion at

  • +
  • script (Union[str, list[str], AppleScript]) – The script to insert into the current script

  • +
+
+
Example:
+

+
+
>>> import PyXA
+>>> script = PyXA.AppleScript.load("/Users/exampleUser/Downloads/Test.scpt")
+>>> script.insert(1, "activate")
+>>> script.run()
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+property last_result: Any
+

The return value of the last execution of the script

+
+ +
+
+load() AppleScript[source]
+

Loads an AppleScript (.scpt) file as a runnable AppleScript object.

+
+
Parameters:
+

path (Union[XAPath, str]) – The path of the .scpt file to load

+
+
Returns:
+

The newly loaded AppleScript object

+
+
Return type:
+

AppleScript

+
+
Example 1:
+

Load and run a script

+
+
+
>>> import PyXA
+>>> script = PyXA.AppleScript.load("/Users/exampleUser/Downloads/Test.scpt")
+>>> print(script.run())
+{
+    'string': None,
+    'int': 0, 
+    'bool': False,
+    'float': 0.0,
+    'date': None,
+    'file_url': None,
+    'type_code': 845507684,
+    'data': {length = 8962, bytes = 0x646c6532 00000000 6c697374 000022f2 ... 6e756c6c 00000000 },
+    'event': <NSAppleEventDescriptor: [ 'obj '{ ... } ]>
+}
+
+
+
+
Example 2:
+

Load, modify, and run a script

+
+
+
>>> import PyXA
+>>> script = PyXA.AppleScript.load("/Users/exampleUser/Downloads/Test.scpt")
+>>> script.pop(1)
+>>> script.insert(1, "activate")
+>>> script.run()
+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+parse_result_data() list[tuple[str, str]][source]
+

Extracts string data from an AppleScript execution result dictionary.

+
+
Parameters:
+

result (dict) – The execution result dictionary to extract data from

+
+
Returns:
+

A list of responses contained in the result structured as tuples

+
+
Return type:
+

list[tuple[str, str]]

+
+
Example:
+

+
+
>>> import PyXA
+>>> script = PyXA.AppleScript.load("/Users/exampleUser/Downloads/Test.scpt")
+>>> print(script.script)
+>>> result = script.run()
+>>> print(PyXA.AppleScript.parse_result_data(result))
+['tell application "Messages"', '\tget chats', 'end tell']
+[('ID', 'iMessage;-;+12345678910'), ('ID', 'iMessage;-;+12345678911'), ('ID', 'iMessage;-;example@icloud.com'), ...]
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+pop(index: int = -1) str[source]
+

Removes the line at the given index from the script.

+
+
Parameters:
+

index (int) – The index of the line to remove

+
+
Returns:
+

The text of the removed line

+
+
Return type:
+

str

+
+
Example:
+

+
+
>>> import PyXA
+>>> script = PyXA.AppleScript.load("/Users/exampleUser/Downloads/Test.scpt")
+>>> print(script.pop(1))
+    get chats
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+run() Any[source]
+

Compiles and runs the script, returning the result.

+
+
Returns:
+

The return value of the script.

+
+
Return type:
+

Any

+
+
Example:
+

+
+
>>> import PyXA
+>>> script = PyXA.AppleScript(f"""tell application "System Events"
+>>>     return 1 + 2
+>>> end tell
+>>> """)
+>>> print(script.run())
+{
+    'string': '3',
+    'int': 3,
+    'bool': False,
+    'float': 3.0,
+    'date': None,
+    'file_url': None,
+    'type_code': 3,
+    'data': {length = 4, bytes = 0x03000000},
+    'event': <NSAppleEventDescriptor: 3>
+}
+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+save(path: Optional[Union[XAPath, str]] = None)[source]
+

Saves the script to the specified file path, or to the path from which the script was loaded.

+
+
Parameters:
+

path (Union[XAPath, str, None], optional) – The path to save the script at, defaults to None

+
+
Example 1:
+

Save the script to a specified path

+
+
+
>>> import PyXA
+>>> script = PyXA.AppleScript(f"""
+>>>     tell application "Safari"
+>>>         activate
+>>>     end tell
+>>> """)
+>>> script.save("/Users/exampleUser/Downloads/Example.scpt")
+
+
+
+
Example 2:
+

Load a script, modify it, then save it

+
+
+
>>> import PyXA
+>>> script = PyXA.AppleScript.load("/Users/steven/Downloads/Example.scpt")
+>>> script.insert(2, "delay 2")
+>>> script.insert(3, "set the miniaturized of window 1 to true")
+>>> script.save()
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+script: list[str]
+

The lines of AppleScript code contained in the script

+
+ +
+ +
+
+class PyXA.XABase.Application(app_name: str)[source]
+

Bases: XAObject

+

A wrapper around a macOS application providing access to its scripting functionality.

+
+

Changed in version 0.1.1: Moved into the XABase module.

+
+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + +

__annotations__

__module__

app_paths

A list containing the path to each application

+

Methods:

+ + + + + + +

__init__(app_name)

Creates a new application object.

+
+
+__annotations__ = {'app_paths': list[str]}
+
+ +
+
+__init__(app_name: str)[source]
+

Creates a new application object.

+
+
Parameters:
+

app_name (str) – The name of the target application

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+app_paths: list[str] = []
+

A list containing the path to each application

+
+ +
+ +
+
+PyXA.XABase.OSType(s: str)[source]
+
+ +
+
+PyXA.XABase.VERSION = '0.1.2'
+

The installed version of PyXA

+
+ +
+
+class PyXA.XABase.XAAlias(properties)[source]
+

Bases: XADiskItem

+

An alias in the file system.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__annotations__

__module__

creator_type

The OSType identifying the application that created the alias.

default_application

The application that will launch if the alias is opened.

file_type

The OSType identifying the type of data contained in the alias.

kind

The kind of alias, as shown in Finder.

product_version

The version of the product (visible at the top of the "Get Info" window).

short_version

The short version of the application bundle referenced by the alias.

stationery

Whether the alias is a stationery pad.

type_identifier

The type identifier of the alias.

version

The version of the application bundle referenced by the alias (visible at the bottom of the "Get Info" window).

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

aliases([filter])

Returns a list of aliases, as PyXA objects, matching the given filter.

disk_items([filter])

Returns a list of disk items, as PyXA objects, matching the given filter.

file_packages([filter])

Returns a list of file packages, as PyXA objects, matching the given filter.

files([filter])

Returns a list of files, as PyXA objects, matching the given filter.

folders([filter])

Returns a list of folders, as PyXA objects, matching the given filter.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+aliases(filter: Optional[dict] = None) XAAliasList[source]
+

Returns a list of aliases, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+property creator_type: str
+

The OSType identifying the application that created the alias.

+
+

New in version 0.1.0.

+
+
+ +
+
+property default_application: XADiskItem
+

The application that will launch if the alias is opened.

+
+

New in version 0.1.0.

+
+
+ +
+
+disk_items(filter: Optional[dict] = None) XADiskItemList[source]
+

Returns a list of disk items, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+file_packages(filter: Optional[dict] = None) XAFilePackageList[source]
+

Returns a list of file packages, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+property file_type: str
+

The OSType identifying the type of data contained in the alias.

+
+

New in version 0.1.0.

+
+
+ +
+
+files(filter: Optional[dict] = None) XAFileList[source]
+

Returns a list of files, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+folders(filter: Optional[dict] = None) XAFolderList[source]
+

Returns a list of folders, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+property kind: str
+

The kind of alias, as shown in Finder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property product_version: str
+

The version of the product (visible at the top of the “Get Info” window).

+
+

New in version 0.1.0.

+
+
+ +
+
+property short_version: str
+

The short version of the application bundle referenced by the alias.

+
+

New in version 0.1.0.

+
+
+ +
+
+property stationery: bool
+

Whether the alias is a stationery pad.

+
+

New in version 0.1.0.

+
+
+ +
+
+property type_identifier: str
+

The type identifier of the alias.

+
+

New in version 0.1.0.

+
+
+ +
+
+property version: str
+

The version of the application bundle referenced by the alias (visible at the bottom of the “Get Info” window).

+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.XABase.XAAliasList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XADiskItemList

+

A wrapper around lists of aliases that employs fast enumeration techniques.

+

All properties of aliases can be called as methods on the wrapped list, returning a list containing each alias’ value for the property.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__(properties[, filter])

Creates an efficient wrapper object around a list of scriptable elements.

by_creator_type(creator_type)

by_default_application(default_application)

by_file_type(file_type)

by_kind(kind)

by_product_version(product_version)

by_short_version(short_version)

by_stationery(stationery)

by_type_identifier(type_identifier)

by_version(version)

creator_type()

default_application()

file_type()

kind()

product_version()

short_version()

stationery()

type_identifier()

version()

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+by_creator_type(creator_type: str) Optional[XAAlias][source]
+
+ +
+
+by_default_application(default_application: XADiskItem) Optional[XAAlias][source]
+
+ +
+
+by_file_type(file_type: str) Optional[XAAlias][source]
+
+ +
+
+by_kind(kind: str) Optional[XAAlias][source]
+
+ +
+
+by_product_version(product_version: str) Optional[XAAlias][source]
+
+ +
+
+by_short_version(short_version: str) Optional[XAAlias][source]
+
+ +
+
+by_stationery(stationery: bool) Optional[XAAlias][source]
+
+ +
+
+by_type_identifier(type_identifier: str) Optional[XAAlias][source]
+
+ +
+
+by_version(version: str) Optional[XAAlias][source]
+
+ +
+
+creator_type() list[str][source]
+
+ +
+
+default_application() XADiskItemList[source]
+
+ +
+
+file_type() list[str][source]
+
+ +
+
+kind() list[str][source]
+
+ +
+
+product_version() list[str][source]
+
+ +
+
+short_version() list[str][source]
+
+ +
+
+stationery() list[bool][source]
+
+ +
+
+type_identifier() list[str][source]
+
+ +
+
+version() list[str][source]
+
+ +
+ +
+
+class PyXA.XABase.XAApplication(properties)[source]
+

Bases: XAObject, XAClipboardCodable

+

A general application class for both officially scriptable and non-scriptable applications.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__annotations__

__module__

bundle_identifier

The bundle identifier for the application.

bundle_url

The file URL of the application bundle.

executable_url

The file URL of the application's executable.

front_window

The frontmost window of the application.

frontmost

Whether the application is the active application.

icon

The application's icon.

launch_date

The date and time that the application was launched.

localized_name

The application's name.

owns_menu_bar

Whether the application owns the top menu bar.

process_identifier

The process identifier for the application instance.

xa_apsc

xa_prcs

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__getattr__(attr)

__init__(properties)

Instantiates a PyXA scripting object.

activate()

Activates the application, bringing its window(s) to the front and launching the application beforehand if necessary.

focus()

Hides the windows of all applications except this one.

get_clipboard_representation()

Gets a clipboard-codable representation of the application.

hide()

Hides all windows of the application.

launch()

Launches the application.

menu_bars([filter])

quit()

Quits the application.

terminate()

Quits the application.

unfocus()

Unhides (reveals) the windows of all other applications, but does not activate them.

unhide()

Unhides (reveals) all windows of the application, but does not does not activate them.

windows([filter])

+
+
+__annotations__ = {}
+
+ +
+
+__getattr__(attr)[source]
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+activate() XAApplication[source]
+

Activates the application, bringing its window(s) to the front and launching the application beforehand if necessary.

+
+
Returns:
+

A reference to the PyXA application object.

+
+
Return type:
+

XAApplication

+
+
+
+

See also

+

terminate(), unhide(), focus()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property bundle_identifier: str
+

The bundle identifier for the application.

+
+

New in version 0.0.1.

+
+
+ +
+
+property bundle_url: str
+

The file URL of the application bundle.

+
+

New in version 0.0.1.

+
+
+ +
+
+property executable_url: str
+

The file URL of the application’s executable.

+
+

New in version 0.0.1.

+
+
+ +
+
+focus() XAApplication[source]
+

Hides the windows of all applications except this one.

+
+
Returns:
+

A reference to the PyXA application object.

+
+
Return type:
+

XAApplication

+
+
Example:
+

+
+
>>> import PyXA
+>>> safari = PyXA.Application("Safari")
+>>> safari.focus()
+
+
+
+

See also

+

unfocus()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property front_window: XAObject
+

The frontmost window of the application.

+
+ +
+
+property frontmost: bool
+

Whether the application is the active application.

+
+

New in version 0.0.1.

+
+
+ +
+
+get_clipboard_representation() list[Union[str, objc.NSURL, objc.NSImage]][source]
+

Gets a clipboard-codable representation of the application.

+

When the clipboard content is set to an application, three items are placed on the clipboard: +1. The application’s name +2. The URL to the application bundle +3. The application icon

+

After copying an application to the clipboard, pasting will have the following effects: +- In Finder: Paste a copy of the application bundle in the current directory +- In Terminal: Paste the name of the application followed by the path to the application +- In iWork: Paste the application name +- In Safari: Paste the application name +- In Notes: Attach a copy of the application bundle to the active note +The pasted content may be different for other applications.

+
+
Returns:
+

The clipboard-codable representation

+
+
Return type:
+

list[Union[str, AppKit.NSURL, AppKit.NSImage]]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+hide() XAApplication[source]
+

Hides all windows of the application.

+
+
Returns:
+

A reference to the PyXA application object.

+
+
Return type:
+

XAApplication

+
+
Example:
+

+
+
>>> import PyXA
+>>> safari = PyXA.Application("Safari")
+>>> safari.hide()
+
+
+
+

See also

+

unhide()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property icon: XAImage
+

The application’s icon.

+
+

New in version 0.1.1.

+
+
+ +
+
+launch() Self[source]
+

Launches the application.

+
+
Returns:
+

The application object.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+property launch_date: datetime
+

The date and time that the application was launched.

+
+

New in version 0.0.1.

+
+
+ +
+
+property localized_name: str
+

The application’s name.

+
+

New in version 0.0.1.

+
+
+ +
+
+menu_bars(filter: dict = None) XAList[source]
+
+ +
+
+property owns_menu_bar: bool
+

Whether the application owns the top menu bar.

+
+

New in version 0.0.1.

+
+
+ +
+
+property process_identifier: str
+

The process identifier for the application instance.

+
+

New in version 0.0.1.

+
+
+ +
+
+quit() XAApplication[source]
+

Quits the application. Synonymous with terminate().

+
+
Returns:
+

A reference to the PyXA application object.

+
+
Return type:
+

XAApplication

+
+
Example:
+

+
+
>>> import PyXA
+>>> safari = PyXA.Application("Safari")
+>>> safari.quit()
+
+
+
+

See also

+

terminate(), activate()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+terminate() XAApplication[source]
+

Quits the application. Synonymous with quit().

+
+
Returns:
+

A reference to the PyXA application object.

+
+
Return type:
+

XAApplication

+
+
Example:
+

+
+
>>> import PyXA
+>>> safari = PyXA.Application("Safari")
+>>> safari.terminate()
+
+
+
+

See also

+

quit(), activate()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+unfocus() XAApplication[source]
+

Unhides (reveals) the windows of all other applications, but does not activate them.

+
+
Returns:
+

A reference to the PyXA application object.

+
+
Return type:
+

XAApplication

+
+
Example:
+

+
+
>>> import PyXA
+>>> safari = PyXA.Application("Safari")
+>>> safari.unfocus()
+
+
+
+

See also

+

focus()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+unhide() XAApplication[source]
+

Unhides (reveals) all windows of the application, but does not does not activate them.

+
+
Returns:
+

A reference to the PyXA application object.

+
+
Return type:
+

XAApplication

+
+
Example:
+

+
+
>>> import PyXA
+>>> safari = PyXA.Application("Safari")
+>>> safari.unhide()
+
+
+
+

See also

+

hide()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+windows(filter: dict = None) XAList[source]
+
+ +
+
+property xa_apsc
+
+ +
+
+property xa_prcs
+
+ +
+ +
+
+class PyXA.XABase.XAApplicationList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around a list of applications.

+
+

New in version 0.0.5.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__contains__(item)

__getitem__(key)

Retrieves the wrapped application object(s) at the specified key.

__init__(properties[, filter])

Creates an efficient wrapper object around a list of scriptable elements.

__iter__()

__repr__()

Return repr(self).

bundle_identifier()

bundle_url()

by_bundle_identifier(bundle_identifier)

by_bundle_url(bundle_url)

by_executable_url(executable_url)

by_launch_date(launch_date)

by_localized_name(localized_name)

by_process_identifier(process_identifier)

executable_url()

first()

Retrieves the first element of the list as a wrapped PyXA application object.

hide()

Hides all applications in the list.

last()

Retrieves the last element of the list as a wrapped PyXA application object.

launch_date()

localized_name()

pop([index])

Removes the application at the specified index from the list and returns it.

process_identifier()

quit()

Quits (terminates) all applications in the list.

terminate()

Quits (terminates) all applications in the list.

unhide()

Unhides all applications in the list.

windows()

Retrieves a list of every window belonging to each application in the list.

+
+
+__annotations__ = {}
+
+ +
+
+__contains__(item)[source]
+
+ +
+
+__getitem__(key: Union[int, slice])[source]
+

Retrieves the wrapped application object(s) at the specified key.

+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__iter__()[source]
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+__repr__()[source]
+

Return repr(self).

+
+ +
+
+bundle_identifier() list[str][source]
+
+ +
+
+bundle_url() list[PyXA.XABase.XAURL][source]
+
+ +
+
+by_bundle_identifier(bundle_identifier: str) Optional[XAApplication][source]
+
+ +
+
+by_bundle_url(bundle_url: Union[XAURL, str]) Optional[XAApplication][source]
+
+ +
+
+by_executable_url(executable_url: Union[XAURL, str]) Optional[XAApplication][source]
+
+ +
+
+by_launch_date(launch_date: datetime) Optional[XAApplication][source]
+
+ +
+
+by_localized_name(localized_name: str) Optional[XAApplication][source]
+
+ +
+
+by_process_identifier(process_identifier: str) Optional[XAApplication][source]
+
+ +
+
+executable_url() list[PyXA.XABase.XAURL][source]
+
+ +
+
+first() XAObject[source]
+

Retrieves the first element of the list as a wrapped PyXA application object.

+
+
Returns:
+

The wrapped object

+
+
Return type:
+

XAObject

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+hide()[source]
+

Hides all applications in the list.

+
+
Example 1:
+

Hide all visible running applications

+
+
+
>>> import PyXA
+>>> apps = PyXA.running_applications()
+>>> apps.hide()
+
+
+
+

See also

+

unhide()

+
+
+

New in version 0.0.5.

+
+
+ +
+
+last() XAObject[source]
+

Retrieves the last element of the list as a wrapped PyXA application object.

+
+
Returns:
+

The wrapped object

+
+
Return type:
+

XAObject

+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+launch_date() list[datetime.datetime][source]
+
+ +
+
+localized_name() list[str][source]
+
+ +
+
+pop(index: int = -1) XAObject[source]
+

Removes the application at the specified index from the list and returns it.

+
+

New in version 0.0.5.

+
+
+ +
+
+process_identifier() list[str][source]
+
+ +
+
+quit()[source]
+

Quits (terminates) all applications in the list. Synonymous with terminate().

+
+
Example 1:
+

Quit all visible running applications

+
+
+
>>> import PyXA
+>>> apps = PyXA.running_applications()
+>>> apps.quit()
+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+terminate()[source]
+

Quits (terminates) all applications in the list. Synonymous with quit().

+
+
Example 1:
+

Terminate all visible running applications

+
+
+
>>> import PyXA
+>>> apps = PyXA.running_applications()
+>>> apps.terminate()
+
+
+
+

New in version 0.0.5.

+
+
+ +
+
+unhide()[source]
+

Unhides all applications in the list.

+
+
Example 1:
+

Hide then unhide all visible running applications

+
+
+
>>> import PyXA
+>>> apps = PyXA.running_applications()
+>>> apps.hide()
+>>> apps.unhide()
+
+
+
+

See also

+

hide()

+
+
+

New in version 0.0.5.

+
+
+ +
+
+windows() XAList[source]
+

Retrieves a list of every window belonging to each application in the list.

+

Operations on the list of windows will specialized to scriptable and non-scriptable application window operations as necessary.

+
+
Returns:
+

A list containing both scriptable and non-scriptable windows

+
+
Return type:
+

XAList

+
+
Example:
+

+
+
>>> import PyXA
+>>> windows = PyXA.running_applications().windows()
+>>> windows.collapse()
+>>> sleep(1)
+>>> windows.uncollapse()
+
+
+
+

Changed in version 0.1.1: Now returns an instance of XAWindowList instead of XACombinedWindowList.

+
+
+

New in version 0.0.5.

+
+
+ +
+ +
+
+class PyXA.XABase.XAApplicationPicker(title: Optional[str] = None, prompt: Optional[str] = None, multiple_selections_allowed: bool = False)[source]
+

Bases: XAObject

+

An application selection window.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + +

__annotations__

__module__

multiple_selections_allowed

Whether to allow multiple items to be selected

prompt

The prompt to be displayed in the dialog box

title

The dialog window title

+

Methods:

+ + + + + + + + + +

__init__([title, prompt, ...])

Instantiates a PyXA scripting object.

display()

Displays the application chooser, waits for the user to select an application or cancel, then returns the selected application's name or None if cancelled.

+
+
+__annotations__ = {'multiple_selections_allowed': 'bool', 'prompt': 'str', 'title': 'str'}
+
+ +
+
+__init__(title: Optional[str] = None, prompt: Optional[str] = None, multiple_selections_allowed: bool = False)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+display() str[source]
+

Displays the application chooser, waits for the user to select an application or cancel, then returns the selected application’s name or None if cancelled.

+
+
Returns:
+

The name of the selected application

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+multiple_selections_allowed: bool
+

Whether to allow multiple items to be selected

+
+ +
+
+prompt: str
+

The prompt to be displayed in the dialog box

+
+ +
+
+title: str
+

The dialog window title

+
+ +
+ +
+
+class PyXA.XABase.XAAttachment(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with attachments in text documents.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+class PyXA.XABase.XAAttachmentList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XATextList

+

A wrapper around lists of text attachments that employs fast enumeration techniques.

+
+

New in version 0.0.5.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + +

__init__(properties[, filter])

Creates an efficient wrapper object around a list of scriptable elements.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+class PyXA.XABase.XAAttributeRun(properties)[source]
+

Bases: XAText

+

A class for managing and interacting with attribute runs in text documents.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

+
+
+__annotations__ = {'color': 'XAColor', 'font': 'str', 'size': 'int', 'text': 'str'}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+class PyXA.XABase.XAAttributeRunList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XATextList

+

A wrapper around lists of attribute runs that employs fast enumeration techniques.

+
+

New in version 0.0.5.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + +

__init__(properties[, filter])

Creates an efficient wrapper object around a list of scriptable elements.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+class PyXA.XABase.XACharacter(properties)[source]
+

Bases: XAText

+

A class for managing and interacting with characters in text documents.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

+
+
+__annotations__ = {'color': 'XAColor', 'font': 'str', 'size': 'int', 'text': 'str'}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+class PyXA.XABase.XACharacterList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XATextList

+

A wrapper around lists of characters that employs fast enumeration techniques.

+
+

New in version 0.0.5.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + +

__init__(properties[, filter])

Creates an efficient wrapper object around a list of scriptable elements.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+class PyXA.XABase.XAClassicDomainObject(properties)[source]
+

Bases: XADomain

+

The Classic domain in the file system.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__annotations__

__module__

apple_menu_folder

The Apple Menu Items folder.

control_panels_folder

The Control Panels folder.

control_strip_modules_folder

The Control Strip Modules folder.

desktop_folder

The Classic Desktop folder.

extensions_folder

The Extensions folder.

fonts_folder

The Fonts folder.

launcher_items_folder

The Launcher Items folder.

preferences_folder

The Classic Preferences folder.

shutdown_folder

The Shutdown Items folder.

startup_items_folder

The StartupItems folder.

system_folder

The System folder.

+

Methods:

+ + + + + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

folders([filter])

Returns a list of folders, as PyXA objects, matching the given filter.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+property apple_menu_folder: XAFolder
+

The Apple Menu Items folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property control_panels_folder: XAFolder
+

The Control Panels folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property control_strip_modules_folder: XAFolder
+

The Control Strip Modules folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property desktop_folder: XAFolder
+

The Classic Desktop folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property extensions_folder: XAFolder
+

The Extensions folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+folders(filter: Optional[dict] = None) XAFolderList[source]
+

Returns a list of folders, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+property fonts_folder: XAFolder
+

The Fonts folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property launcher_items_folder: XAFolder
+

The Launcher Items folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property preferences_folder: XAFolder
+

The Classic Preferences folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property shutdown_folder: XAFolder
+

The Shutdown Items folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property startup_items_folder: XAFolder
+

The StartupItems folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property system_folder: XAFolder
+

The System folder.

+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.XABase.XAClipboard[source]
+

Bases: XAObject

+

A wrapper class for managing and interacting with the system clipboard.

+
+

New in version 0.0.5.

+
+

Attributes:

+ + + + + + + + + + + + +

__annotations__

__module__

content

The content of the clipboard.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

__init__()

Instantiates a PyXA scripting object.

clear()

Clears the system clipboard.

get_images()

Retrieves image type data from the clipboard, as instances of XAImage, if any such data exists.

get_strings()

Retrieves string type data from the clipboard, if any such data exists.

get_urls()

Retrieves URL type data from the clipboard, as instances of XAURL and XAPath, if any such data exists.

set_contents(content)

Sets the content of the clipboard

+
+
+__annotations__ = {}
+
+ +
+
+__init__()[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+clear()[source]
+

Clears the system clipboard.

+
+

New in version 0.0.5.

+
+
+ +
+
+property content: dict[str, list[Any]]
+

The content of the clipboard.

+
+ +
+
+get_images() list[PyXA.XABase.XAImage][source]
+

Retrieves image type data from the clipboard, as instances of XAImage, if any such data exists.

+
+
Returns:
+

The list of images currently copied to the clipboard

+
+
Return type:
+

list[XAImage]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+get_strings() list[str][source]
+

Retrieves string type data from the clipboard, if any such data exists.

+
+
Returns:
+

The list of strings currently copied to the clipboard

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+get_urls() list[PyXA.XABase.XAURL][source]
+

Retrieves URL type data from the clipboard, as instances of XAURL and XAPath, if any such data exists.

+
+
Returns:
+

The list of file URLs and web URLs currently copied to the clipboard

+
+
Return type:
+

list[XAURL]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+set_contents(content: list[Any])[source]
+

Sets the content of the clipboard

+
+
Parameters:
+

content (list[Any]) – A list of the content to add fill the clipboard with.

+
+
+
+

Deprecated since version 0.0.8: Set the content property directly instead.

+
+
+

New in version 0.0.5.

+
+
+ +
+ +
+
+class PyXA.XABase.XAColor(*args)[source]
+

Bases: XAObject, XAClipboardCodable

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__annotations__

__module__

alpha_value

The alpha value of the color on the scale of 0.0 to 1.0.

blue_value

The blue value of the color on the scale of 0.0 to 1.0.

brightness_value

The brightness value of the color on the scale of 0.0 to 1.0.

green_value

The green value of the color on the scale of 0.0 to 1.0.

hex_value

The HEX representation of the color.

hue_value

The hue value of the color on the scale of 0.0 to 1.0.

red_value

The red value of the color on the scale of 0.0 to 1.0.

saturation_value

The staturation value of the color on the scale of 0.0 to 1.0.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__(*args)

Instantiates a PyXA scripting object.

__repr__()

Return repr(self).

black()

Initializes and returns a pure black XAColor object.

blue()

Initializes and returns a pure blue XAColor object.

brighten([fraction])

Brightens the color by mixing the specified fraction of the system white color into it.

brown()

Initializes and returns an XAColor object whose RGB values are (0.6, 0.4, 0.2).

clear()

Initializes and returns a an XAColor object whose alpha value is 0.0.

copy_color(color)

Initializes a XAColor copy of an NSColor object.

cyan()

Initializes and returns an XAColor object whose RGB values are (0.0, 1.0, 1.0).

darken([fraction])

Darkens the color by mixing the specified fraction of the system black color into it.

get_clipboard_representation()

Gets a clipboard-codable representation of the color.

gray()

Initializes and returns an XAColor object whose RGB values are (0.5, 0.5, 0.5).

green()

Initializes and returns a pure green XAColor object.

magenta()

Initializes and returns an XAColor object whose RGB values are (1.0, 0.0, 1.0).

make_swatch([width, height])

Creates an image swatch of the color with the specified dimensions.

mix_with(color[, fraction])

Blends this color with the specified fraction of another.

orange()

Initializes and returns an XAColor object whose RGB values are (1.0, 0.5, 0.0).

purple()

Initializes and returns an XAColor object whose RGB values are (0.5, 0.0, 0.5).

red()

Initializes and returns a pure red XAColor object.

set_hsla(hue, saturation, brightness, alpha)

Sets the HSLA values of the color.

set_rgba(red, green, blue, alpha)

Sets the RGBA values of the color.

white()

Initializes and returns a pure white XAColor object.

yellow()

Initializes and returns an XAColor object whose RGB values are (1.0, 1.0, 0.0).

+
+
+__annotations__ = {}
+
+ +
+
+__init__(*args)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+__repr__()[source]
+

Return repr(self).

+
+ +
+
+property alpha_value: float
+

The alpha value of the color on the scale of 0.0 to 1.0.

+
+

New in version 0.1.0.

+
+
+ +
+
+black() XAColor[source]
+

Initializes and returns a pure black XAColor object.

+
+

New in version 0.1.0.

+
+
+ +
+
+blue() XAColor[source]
+

Initializes and returns a pure blue XAColor object.

+
+

New in version 0.1.0.

+
+
+ +
+
+property blue_value: float
+

The blue value of the color on the scale of 0.0 to 1.0.

+
+

New in version 0.1.0.

+
+
+ +
+
+brighten(fraction: float = 0.5) XAColor[source]
+

Brightens the color by mixing the specified fraction of the system white color into it.

+
+
Parameters:
+

fraction (float, optional) – The amount (fraction) of white to mix into the color, defaults to 0.5

+
+
Returns:
+

The resulting color after brightening

+
+
Return type:
+

XAColor

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property brightness_value
+

The brightness value of the color on the scale of 0.0 to 1.0.

+
+

New in version 0.1.0.

+
+
+ +
+
+brown() XAColor[source]
+

Initializes and returns an XAColor object whose RGB values are (0.6, 0.4, 0.2).

+
+

New in version 0.1.0.

+
+
+ +
+
+clear() XAColor[source]
+

Initializes and returns a an XAColor object whose alpha value is 0.0.

+
+

New in version 0.1.0.

+
+
+ +
+
+copy_color(color: NSColor) XAColor[source]
+

Initializes a XAColor copy of an NSColor object.

+
+
Parameters:
+

color (AppKit.NSColor) – The NSColor to copy

+
+
Returns:
+

The newly created XAColor object

+
+
Return type:
+

XAColor

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+cyan() XAColor[source]
+

Initializes and returns an XAColor object whose RGB values are (0.0, 1.0, 1.0).

+
+

New in version 0.1.0.

+
+
+ +
+
+darken(fraction: float = 0.5) XAColor[source]
+

Darkens the color by mixing the specified fraction of the system black color into it.

+
+
Parameters:
+

fraction (float, optional) – The amount (fraction) of black to mix into the color, defaults to 0.5

+
+
Returns:
+

The resulting color after darkening

+
+
Return type:
+

XAColor

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+get_clipboard_representation() NSColor[source]
+

Gets a clipboard-codable representation of the color.

+

When the clipboard content is set to a color, the raw color data is added to the clipboard.

+
+
Returns:
+

The raw color data

+
+
Return type:
+

AppKit.NSColor

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+gray() XAColor[source]
+

Initializes and returns an XAColor object whose RGB values are (0.5, 0.5, 0.5).

+
+

New in version 0.1.0.

+
+
+ +
+
+green() XAColor[source]
+

Initializes and returns a pure green XAColor object.

+
+

New in version 0.1.0.

+
+
+ +
+
+property green_value: float
+

The green value of the color on the scale of 0.0 to 1.0.

+
+

New in version 0.1.0.

+
+
+ +
+
+property hex_value: str
+

The HEX representation of the color.

+
+

New in version 0.1.1.

+
+
+ +
+
+property hue_value
+

The hue value of the color on the scale of 0.0 to 1.0.

+
+

New in version 0.1.0.

+
+
+ +
+
+magenta() XAColor[source]
+

Initializes and returns an XAColor object whose RGB values are (1.0, 0.0, 1.0).

+
+

New in version 0.1.0.

+
+
+ +
+
+make_swatch(width: int = 100, height: int = 100) XAImage[source]
+

Creates an image swatch of the color with the specified dimensions.

+
+
Parameters:
+
    +
  • width (int, optional) – The width of the swatch image, in pixels, defaults to 100

  • +
  • height (int, optional) – The height of the swatch image, in pixels, defaults to 100

  • +
+
+
Returns:
+

The image swatch as an XAImage object

+
+
Return type:
+

XAImage

+
+
Example:
+

View swatches in Preview

+
+
+
>>> import PyXA
+>>> from time import sleep
+>>> 
+>>> blue = PyXA.XAColor.blue()
+>>> red = PyXA.XAColor.red()
+>>> 
+>>> swatches = [
+>>>     blue.make_swatch(),
+>>>     blue.darken(0.5).make_swatch(),
+>>>     blue.mix_with(red).make_swatch()
+>>> ]
+>>> 
+>>> for swatch in swatches:
+>>>     swatch.show_in_preview()
+>>>     sleep(0.2)
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+mix_with(color: XAColor, fraction: int = 0.5) XAColor[source]
+

Blends this color with the specified fraction of another.

+
+
Parameters:
+
    +
  • color (XAColor) – The color to blend this color with

  • +
  • fraction (int, optional) – The fraction of the other color to mix into this color, from 0.0 to 1.0, defaults to 0.5

  • +
+
+
Returns:
+

The resulting color after mixing

+
+
Return type:
+

XAColor

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+orange() XAColor[source]
+

Initializes and returns an XAColor object whose RGB values are (1.0, 0.5, 0.0).

+
+

New in version 0.1.0.

+
+
+ +
+
+purple() XAColor[source]
+

Initializes and returns an XAColor object whose RGB values are (0.5, 0.0, 0.5).

+
+

New in version 0.1.0.

+
+
+ +
+
+red() XAColor[source]
+

Initializes and returns a pure red XAColor object.

+
+

New in version 0.1.0.

+
+
+ +
+
+property red_value: float
+

The red value of the color on the scale of 0.0 to 1.0.

+
+

New in version 0.1.0.

+
+
+ +
+
+property saturation_value
+

The staturation value of the color on the scale of 0.0 to 1.0.

+
+

New in version 0.1.0.

+
+
+ +
+
+set_hsla(hue: float, saturation: float, brightness: float, alpha: float) XAColor[source]
+

Sets the HSLA values of the color.

+
+
Parameters:
+
    +
  • hue (float) – The hue value of the color, from 0.0 to 1.0

  • +
  • saturation (float) – The saturation value of the color, from 0.0 to 1.0

  • +
  • brightness (float) – The brightness value of the color, from 0.0 to 1.0

  • +
  • alpha (float) – The opacity of the color, from 0.0 to 1.0

  • +
+
+
Returns:
+

The XAColor object

+
+
Return type:
+

XAColor

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+set_rgba(red: float, green: float, blue: float, alpha: float) XAColor[source]
+

Sets the RGBA values of the color.

+
+
Parameters:
+
    +
  • red (float) – The red value of the color, from 0.0 to 1.0

  • +
  • green (float) – The green value of the color, from 0.0 to 1.0

  • +
  • blue (float) – The blue value of the color, from 0.0 to 1.0

  • +
  • alpha (float) – The opacity of the color, from 0.0 to 1.0

  • +
+
+
Returns:
+

The XAColor object

+
+
Return type:
+

XAColor

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+white() XAColor[source]
+

Initializes and returns a pure white XAColor object.

+
+

New in version 0.1.0.

+
+
+ +
+
+yellow() XAColor[source]
+

Initializes and returns an XAColor object whose RGB values are (1.0, 1.0, 0.0).

+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.XABase.XAColorList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XATextList

+

A wrapper around lists of colors that employs fast enumeration techniques.

+
+

New in version 0.0.6.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + +

__init__(properties[, filter])

Creates an efficient wrapper object around a list of scriptable elements.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+class PyXA.XABase.XAColorPicker(style: XAColorPickerStyle = XAColorPickerStyle.COLOR_WHEEL)[source]
+

Bases: XAObject

+

A class for creating and interacting with a color picker window.

+
+

New in version 0.0.5.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + + + + +

__init__([style])

Instantiates a PyXA scripting object.

display()

Displays the color picker.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(style: XAColorPickerStyle = XAColorPickerStyle.COLOR_WHEEL)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+display() XAColor[source]
+

Displays the color picker.

+
+
Returns:
+

The color that the user selected

+
+
Return type:
+

XAColor

+
+
+
+

New in version 0.0.5.

+
+
+ +
+ +
+
+class PyXA.XABase.XAColorPickerStyle(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for which tab a color picker should display when first opened.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

CMYK_SLIDERS

COLOR_LIST

COLOR_WHEEL

CRAYONS

GRAYSCALE

HSB_SLIDERS

IMAGE_PALETTE

RGB_SLIDERS

__module__

+
+
+CMYK_SLIDERS = 2
+
+ +
+
+COLOR_LIST = 5
+
+ +
+
+COLOR_WHEEL = 6
+
+ +
+
+CRAYONS = 7
+
+ +
+
+GRAYSCALE = 0
+
+ +
+
+HSB_SLIDERS = 3
+
+ +
+
+IMAGE_PALETTE = 4
+
+ +
+
+RGB_SLIDERS = 1
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+class PyXA.XABase.XADialog(text: str = '', title: Optional[str] = None, buttons: Union[None, list[Union[str, int]]] = None, hidden_answer: bool = False, default_button: Optional[Union[str, int]] = None, cancel_button: Optional[Union[str, int]] = None, icon: Optional[Literal['stop', 'note', 'caution']] = None, default_answer: Optional[Union[str, int]] = None)[source]
+

Bases: XAObject

+

A custom dialog window.

+
+

New in version 0.0.8.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + + + + +

__init__([text, title, buttons, ...])

Instantiates a PyXA scripting object.

display()

Displays the dialog, waits for the user to select an option or cancel, then returns the selected button or None if cancelled.

+
+
+__annotations__ = {'buttons': 'Union[None, list[Union[str, int]]]', 'cancel_button': 'Union[str, int, None]', 'default_answer': 'Union[str, int, None]', 'default_button': 'Union[str, int, None]', 'hidden_answer': 'bool', 'icon': 'Union[str, None]', 'text': 'str', 'title': 'str'}
+
+ +
+
+__init__(text: str = '', title: Optional[str] = None, buttons: Union[None, list[Union[str, int]]] = None, hidden_answer: bool = False, default_button: Optional[Union[str, int]] = None, cancel_button: Optional[Union[str, int]] = None, icon: Optional[Literal['stop', 'note', 'caution']] = None, default_answer: Optional[Union[str, int]] = None)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+buttons: Union[None, list[Union[str, int]]]
+
+ +
+
+cancel_button: Optional[Union[str, int]]
+
+ +
+
+default_answer: Optional[Union[str, int]]
+
+ +
+
+default_button: Optional[Union[str, int]]
+
+ +
+
+display() Union[str, int, None, list[str]][source]
+

Displays the dialog, waits for the user to select an option or cancel, then returns the selected button or None if cancelled.

+
+
Returns:
+

The selected button or None if no value was selected

+
+
Return type:
+

Union[str, int, None, list[str]]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+hidden_answer: bool
+
+ +
+
+icon: Optional[str]
+
+ +
+
+text: str
+
+ +
+
+title: str
+
+ +
+ +
+
+class PyXA.XABase.XADisk(properties)[source]
+

Bases: XADiskItem

+

A disk in the file system.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__annotations__

__module__

capacity

The total number of bytes (free or used) on the disk.

ejectable

Whether the media can be ejected (floppies, CD's, and so on).

format

The file system format of the disk.

free_space

The number of free bytes left on the disk.

ignore_privileges

Whether to ignore permissions on this disk.

local_volume

Whether the media is a local volume (as opposed to a file server).

server

The server on which the disk resides, AFP volumes only.

startup

Whether this disk is the boot disk.

zone

The zone in which the disk's server resides, AFP volumes only.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

aliases([filter])

Returns a list of aliases, as PyXA objects, matching the given filter.

disk_items([filter])

Returns a list of disk items, as PyXA objects, matching the given filter.

file_packages([filter])

Returns a list of file packages, as PyXA objects, matching the given filter.

files([filter])

Returns a list of files, as PyXA objects, matching the given filter.

folders([filter])

Returns a list of folders, as PyXA objects, matching the given filter.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+aliases(filter: Optional[dict] = None) XAAliasList[source]
+

Returns a list of aliases, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+property capacity: float
+

The total number of bytes (free or used) on the disk.

+
+

New in version 0.1.0.

+
+
+ +
+
+disk_items(filter: Optional[dict] = None) XADiskItemList[source]
+

Returns a list of disk items, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+property ejectable: bool
+

Whether the media can be ejected (floppies, CD’s, and so on).

+
+

New in version 0.1.0.

+
+
+ +
+
+file_packages(filter: Optional[dict] = None) XAFilePackageList[source]
+

Returns a list of file packages, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+files(filter: Optional[dict] = None) XAFileList[source]
+

Returns a list of files, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+folders(filter: Optional[dict] = None) XAFolderList[source]
+

Returns a list of folders, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+property format: Format
+

The file system format of the disk.

+
+

New in version 0.1.0.

+
+
+ +
+
+property free_space: float
+

The number of free bytes left on the disk.

+
+

New in version 0.1.0.

+
+
+ +
+
+property ignore_privileges: bool
+

Whether to ignore permissions on this disk.

+
+

New in version 0.1.0.

+
+
+ +
+
+property local_volume: bool
+

Whether the media is a local volume (as opposed to a file server).

+
+

New in version 0.1.0.

+
+
+ +
+
+property server: str
+

The server on which the disk resides, AFP volumes only.

+
+

New in version 0.1.0.

+
+
+ +
+
+property startup: bool
+

Whether this disk is the boot disk.

+
+

New in version 0.1.0.

+
+
+ +
+
+property zone: str
+

The zone in which the disk’s server resides, AFP volumes only.

+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.XABase.XADiskItem(properties)[source]
+

Bases: XAObject, XAPathLike

+

An item stored in the file system.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__annotations__

__module__

busy_status

Whether the disk item is busy.

container

The folder or disk which has this disk item as an element.

creation_date

The date on which the disk item was created.

displayed_name

The name of the disk item as displayed in the User Interface.

id

The unique ID of the disk item.

modification_date

The date on which the disk item was last modified.

name

The name of the disk item.

name_extension

The extension portion of the name.

package_folder

Whether the disk item is a package.

path

The file system path of the disk item.

physical_size

The actual space used by the disk item on disk.

posix_path

The POSIX file system path of the disk item.

size

The logical size of the disk item.

url

The URL of the disk item.

visible

Whether the disk item is visible.

volume

The volume on which the disk item resides.

+

Methods:

+ + + + + + + + + + + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

__repr__()

Return repr(self).

get_path_representation()

Gets a representation of the object that can be used to initialize an XAPath object.

open()

Opens the item in its default application.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+__repr__()[source]
+

Return repr(self).

+
+ +
+
+property busy_status: bool
+

Whether the disk item is busy.

+
+

New in version 0.1.0.

+
+
+ +
+
+property container: XADiskItem
+

The folder or disk which has this disk item as an element.

+
+

New in version 0.1.0.

+
+
+ +
+
+property creation_date: datetime
+

The date on which the disk item was created.

+
+

New in version 0.1.0.

+
+
+ +
+
+property displayed_name: str
+

The name of the disk item as displayed in the User Interface.

+
+

New in version 0.1.0.

+
+
+ +
+
+get_path_representation() XAPath[source]
+

Gets a representation of the object that can be used to initialize an XAPath object.

+

This method must be overriden in child classes of XAPathLike.

+
+
Returns:
+

The XAPath-compatible form of the object, or None if no such form exists

+
+
Return type:
+

Any

+
+
+
+ +
+
+property id: str
+

The unique ID of the disk item.

+
+

New in version 0.1.0.

+
+
+ +
+
+property modification_date: datetime
+

The date on which the disk item was last modified.

+
+

New in version 0.1.0.

+
+
+ +
+
+property name: str
+

The name of the disk item.

+
+

New in version 0.1.0.

+
+
+ +
+
+property name_extension: str
+

The extension portion of the name.

+
+

New in version 0.1.0.

+
+
+ +
+
+open() Self[source]
+

Opens the item in its default application.

+
+
Returns:
+

The item object

+
+
Return type:
+

Self

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+property package_folder: bool
+

Whether the disk item is a package.

+
+

New in version 0.1.0.

+
+
+ +
+
+property path: XAPath
+

The file system path of the disk item.

+
+

New in version 0.1.0.

+
+
+ +
+
+property physical_size: int
+

The actual space used by the disk item on disk.

+
+

New in version 0.1.0.

+
+
+ +
+
+property posix_path: XAPath
+

The POSIX file system path of the disk item.

+
+

New in version 0.1.0.

+
+
+ +
+
+property size: int
+

The logical size of the disk item.

+
+

New in version 0.1.0.

+
+
+ +
+
+property url: XAURL
+

The URL of the disk item.

+
+

New in version 0.1.0.

+
+
+ +
+
+property visible: bool
+

Whether the disk item is visible.

+
+

New in version 0.1.0.

+
+
+ +
+
+property volume: str
+

The volume on which the disk item resides.

+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.XABase.XADiskItemList(properties: dict, filter: Optional[dict] = None, object_class=None)[source]
+

Bases: XAList

+

A wrapper around lists of disk items that employs fast enumeration techniques.

+

All properties of disk items can be called as methods on the wrapped list, returning a list containing each item’s value for the property.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__(properties[, filter, object_class])

Creates an efficient wrapper object around a list of scriptable elements.

__repr__()

Return repr(self).

busy_status()

by_busy_status(busy_status)

by_container(container)

by_creation_date(creation_date)

by_displayed_name(displayed_name)

by_id(id)

by_modification_date(modification_date)

by_name(name)

by_name_extension(name_extension)

by_package_folder(package_folder)

by_path(path)

by_physical_size(physical_size)

by_posix_path(posix_path)

by_size(size)

by_url(url)

by_visible(visible)

by_volume(volume)

container()

creation_date()

displayed_name()

id()

modification_date()

name()

name_extension()

package_folder()

path()

physical_size()

posix_path()

size()

url()

visible()

volume()

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None, object_class=None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+__repr__()[source]
+

Return repr(self).

+
+ +
+
+busy_status() list[bool][source]
+
+ +
+
+by_busy_status(busy_status: bool) Optional[XADiskItem][source]
+
+ +
+
+by_container(container: XADiskItem) Optional[XADiskItem][source]
+
+ +
+
+by_creation_date(creation_date: datetime) Optional[XADiskItem][source]
+
+ +
+
+by_displayed_name(displayed_name: str) Optional[XADiskItem][source]
+
+ +
+
+by_id(id: str) Optional[XADiskItem][source]
+
+ +
+
+by_modification_date(modification_date: datetime) Optional[XADiskItem][source]
+
+ +
+
+by_name(name: str) Optional[XADiskItem][source]
+
+ +
+
+by_name_extension(name_extension: str) Optional[XADiskItem][source]
+
+ +
+
+by_package_folder(package_folder: bool) Optional[XADiskItem][source]
+
+ +
+
+by_path(path: Union[XAPath, str]) Optional[XADiskItem][source]
+
+ +
+
+by_physical_size(physical_size: int) Optional[XADiskItem][source]
+
+ +
+
+by_posix_path(posix_path: Union[XAPath, str]) Optional[XADiskItem][source]
+
+ +
+
+by_size(size: int) Optional[XADiskItem][source]
+
+ +
+
+by_url(url: XAURL) Optional[XADiskItem][source]
+
+ +
+
+by_visible(visible: bool) Optional[XADiskItem][source]
+
+ +
+
+by_volume(volume: str) Optional[XADiskItem][source]
+
+ +
+
+container() XADiskItemList[source]
+
+ +
+
+creation_date() list[datetime.datetime][source]
+
+ +
+
+displayed_name() list[str][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+modification_date() list[datetime.datetime][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+name_extension() list[str][source]
+
+ +
+
+package_folder() list[bool][source]
+
+ +
+
+path() list[PyXA.XABase.XAPath][source]
+
+ +
+
+physical_size() list[int][source]
+
+ +
+
+posix_path() list[PyXA.XABase.XAPath][source]
+
+ +
+
+size() list[int][source]
+
+ +
+
+url() list[PyXA.XABase.XAURL][source]
+
+ +
+
+visible() list[bool][source]
+
+ +
+
+volume() list[str][source]
+
+ +
+ +
+
+class PyXA.XABase.XADiskList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XADiskItemList

+

A wrapper around lists of disks that employs fast enumeration techniques.

+

All properties of disks can be called as methods on the wrapped list, returning a list containing each disk’s value for the property.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__(properties[, filter])

Creates an efficient wrapper object around a list of scriptable elements.

by_capacity(capacity)

by_ejectable(ejectable)

by_format(format)

by_free_space(free_space)

by_ignore_privileges(ignore_privileges)

by_local_volume(local_volume)

by_server(server)

by_startup(startup)

by_zone(zone)

capacity()

ejectable()

format()

free_space()

ignore_privileges()

local_volume()

server()

startup()

zone()

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+by_capacity(capacity: float) Optional[XADisk][source]
+
+ +
+
+by_ejectable(ejectable: bool) Optional[XADisk][source]
+
+ +
+
+by_format(format: Format) Optional[XADisk][source]
+
+ +
+
+by_free_space(free_space: float) Optional[XADisk][source]
+
+ +
+
+by_ignore_privileges(ignore_privileges: bool) Optional[XADisk][source]
+
+ +
+
+by_local_volume(local_volume: bool) Optional[XADisk][source]
+
+ +
+
+by_server(server: str) Optional[XADisk][source]
+
+ +
+
+by_startup(startup: bool) Optional[XADisk][source]
+
+ +
+
+by_zone(zone: str) Optional[XADisk][source]
+
+ +
+
+capacity() list[float][source]
+
+ +
+
+ejectable() list[bool][source]
+
+ +
+
+format() list[PyXA.XABase.XAEventsApplication.Format][source]
+
+ +
+
+free_space() list[float][source]
+
+ +
+
+ignore_privileges() list[bool][source]
+
+ +
+
+local_volume() list[bool][source]
+
+ +
+
+server() list[str][source]
+
+ +
+
+startup() list[bool][source]
+
+ +
+
+zone() list[str][source]
+
+ +
+ +
+
+class PyXA.XABase.XADomain(properties)[source]
+

Bases: XAObject

+

A domain in the file system.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__annotations__

__module__

application_support_folder

The Application Support folder.

applications_folder

The Applications folder.

desktop_pictures_folder

The Desktop Pictures folder.

folder_action_scripts_folder

The Folder Action Scripts folder.

fonts_folder

The Fonts folder.

id

The unique identifier of the domain.

library_folder

The Library folder.

name

The name of the domain.

preferences_folder

The Preferences folder.

scripting_additions_folder

The Scripting Additions folder.

scripts_folder

The Scripts folder.

shared_documents_folder

The Shared Documents folder.

speakable_items_folder

The Speakable Items folder.

utilities_folder

The Utilities folder.

workflows_folder

The Automator Workflows folder.

+

Methods:

+ + + + + + + + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

__repr__()

Return repr(self).

folders([filter])

Returns a list of folders, as PyXA objects, matching the given filter.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+__repr__()[source]
+

Return repr(self).

+
+ +
+
+property application_support_folder: XAFolder
+

The Application Support folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property applications_folder: XAFolder
+

The Applications folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property desktop_pictures_folder: XAFolder
+

The Desktop Pictures folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property folder_action_scripts_folder: XAFolder
+

The Folder Action Scripts folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+folders(filter: Optional[dict] = None) XAFolderList[source]
+

Returns a list of folders, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+property fonts_folder: XAFolder
+

The Fonts folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property id: str
+

The unique identifier of the domain.

+
+

New in version 0.1.0.

+
+
+ +
+
+property library_folder: XAFolder
+

The Library folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property name: str
+

The name of the domain.

+
+

New in version 0.1.0.

+
+
+ +
+
+property preferences_folder: XAFolder
+

The Preferences folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property scripting_additions_folder: XAFolder
+

The Scripting Additions folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property scripts_folder: XAFolder
+

The Scripts folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property shared_documents_folder: XAFolder
+

The Shared Documents folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property speakable_items_folder: XAFolder
+

The Speakable Items folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property utilities_folder: XAFolder
+

The Utilities folder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property workflows_folder: XAFolder
+

The Automator Workflows folder.

+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.XABase.XADomainList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A wrapper around lists of domains that employs fast enumeration techniques.

+

All properties of domains can be called as methods on the wrapped list, returning a list containing each domain’s value for the property.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

__init__(properties[, filter])

Creates an efficient wrapper object around a list of scriptable elements.

__repr__()

Return repr(self).

by_id(id)

by_name(name)

id()

name()

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+__repr__()[source]
+

Return repr(self).

+
+ +
+
+by_id(id: str) Optional[XADomain][source]
+
+ +
+
+by_name(name: str) Optional[XADomain][source]
+
+ +
+
+id() list[str][source]
+
+ +
+
+name() list[str][source]
+
+ +
+ +
+
+class PyXA.XABase.XAEventsApplication[source]
+

Bases: XACanOpenPath

+

A base class for the System and Image events applications.

+
+

New in version 0.1.0.

+
+

Classes:

+ + + + + + +

Format(value[, names, module, qualname, ...])

Disk format options.

+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+
+
+class Format(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Disk format options.

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

APPLESHARE

APPLE_PHOTO

AUDIO

HIGH_SIERRA

ISO_9660

MACOS

MACOS_EXTENDED

MSDOS

NFS

PRODOS

QUICKTAKE

UDF

UFS

UNKNOWN

WEBDAV

__module__

+
+
+APPLESHARE = 1684431219
+
+ +
+
+APPLE_PHOTO = 1684435048
+
+ +
+
+AUDIO = 1684431221
+
+ +
+
+HIGH_SIERRA = 1684433011
+
+ +
+
+ISO_9660 = 1717844278
+
+ +
+
+MACOS = 1684432998
+
+ +
+
+MACOS_EXTENDED = 1684432939
+
+ +
+
+MSDOS = 1684434291
+
+ +
+
+NFS = 1684434534
+
+ +
+
+PRODOS = 1684435058
+
+ +
+
+QUICKTAKE = 1684435316
+
+ +
+
+UDF = 1684436324
+
+ +
+
+UFS = 1684436326
+
+ +
+
+UNKNOWN = 1684415524
+
+ +
+
+WEBDAV = 1684436836
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+__annotations__ = {}
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+class PyXA.XABase.XAFile(properties)[source]
+

Bases: XADiskItem

+

A file in the file system.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__annotations__

__module__

creator_type

The OSType identifying the application that created the file.

default_application

The application that will launch if the file is opened.

file_type

The OSType identifying the type of data contained in the file.

kind

The kind of file, as shown in Finder.

product_version

The version of the product (visible at the top of the "Get Info" window).

short_version

The short version of the file.

stationery

Whether the file is a stationery pad.

type_identifier

The type identifier of the file.

version

The version of the file (visible at the bottom of the "Get Info" window).

+

Methods:

+ + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+property creator_type: str
+

The OSType identifying the application that created the file.

+
+

New in version 0.1.0.

+
+
+ +
+
+property default_application: XADiskItem
+

The application that will launch if the file is opened.

+
+

New in version 0.1.0.

+
+
+ +
+
+property file_type: str
+

The OSType identifying the type of data contained in the file.

+
+

New in version 0.1.0.

+
+
+ +
+
+property kind: str
+

The kind of file, as shown in Finder.

+
+

New in version 0.1.0.

+
+
+ +
+
+property product_version: str
+

The version of the product (visible at the top of the “Get Info” window).

+
+

New in version 0.1.0.

+
+
+ +
+
+property short_version: str
+

The short version of the file.

+
+

New in version 0.1.0.

+
+
+ +
+
+property stationery: bool
+

Whether the file is a stationery pad.

+
+

New in version 0.1.0.

+
+
+ +
+
+property type_identifier: str
+

The type identifier of the file.

+
+

New in version 0.1.0.

+
+
+ +
+
+property version: str
+

The version of the file (visible at the bottom of the “Get Info” window).

+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.XABase.XAFileList(properties: dict, filter: Optional[dict] = None, object_class=None)[source]
+

Bases: XADiskItemList

+

A wrapper around lists of files that employs fast enumeration techniques.

+

All properties of files can be called as methods on the wrapped list, returning a list containing each file’s value for the property.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__(properties[, filter, object_class])

Creates an efficient wrapper object around a list of scriptable elements.

by_creator_type(creator_type)

by_default_application(default_application)

by_file_type(file_type)

by_kind(kind)

by_product_version(product_version)

by_short_version(short_version)

by_stationery(stationery)

by_type_identifier(type_identifier)

by_version(version)

creator_type()

default_application()

file_type()

kind()

product_version()

short_version()

stationery()

type_identifier()

version()

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None, object_class=None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+by_creator_type(creator_type: str) Optional[XAFile][source]
+
+ +
+
+by_default_application(default_application: XADiskItem) Optional[XAFile][source]
+
+ +
+
+by_file_type(file_type: str) Optional[XAFile][source]
+
+ +
+
+by_kind(kind: str) Optional[XAFile][source]
+
+ +
+
+by_product_version(product_version: str) Optional[XAFile][source]
+
+ +
+
+by_short_version(short_version: str) Optional[XAFile][source]
+
+ +
+
+by_stationery(stationery: bool) Optional[XAFile][source]
+
+ +
+
+by_type_identifier(type_identifier: str) Optional[XAFile][source]
+
+ +
+
+by_version(version: str) Optional[XAFile][source]
+
+ +
+
+creator_type() list[str][source]
+
+ +
+
+default_application() XADiskItemList[source]
+
+ +
+
+file_type() list[str][source]
+
+ +
+
+kind() list[str][source]
+
+ +
+
+product_version() list[str][source]
+
+ +
+
+short_version() list[str][source]
+
+ +
+
+stationery() list[bool][source]
+
+ +
+
+type_identifier() list[str][source]
+
+ +
+
+version() list[str][source]
+
+ +
+ +
+
+class PyXA.XABase.XAFileNameDialog(prompt: str = 'Specify file name and location', default_name: str = 'New File', default_location: Optional[str] = None)[source]
+

Bases: XAObject

+

A file name input window.

+
+

New in version 0.0.8.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + +

__annotations__

__module__

default_location

The default file location

default_name

The default name for the new file

prompt

The prompt to display in the dialog box

+

Methods:

+ + + + + + + + + +

__init__([prompt, default_name, ...])

Instantiates a PyXA scripting object.

display()

Displays the file name input window, waits for the user to input a name and location or cancel, then returns the specified file URL or None if cancelled.

+
+
+__annotations__ = {'default_location': 'Union[str, None]', 'default_name': 'str', 'prompt': 'str'}
+
+ +
+
+__init__(prompt: str = 'Specify file name and location', default_name: str = 'New File', default_location: Optional[str] = None)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+default_location: Optional[str]
+

The default file location

+
+ +
+
+default_name: str
+

The default name for the new file

+
+ +
+
+display() Optional[XAPath][source]
+

Displays the file name input window, waits for the user to input a name and location or cancel, then returns the specified file URL or None if cancelled.

+
+
Returns:
+

The specified file URL or None if no file name was inputted

+
+
Return type:
+

Union[XAPath, None]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+prompt: str
+

The prompt to display in the dialog box

+
+ +
+ +
+
+class PyXA.XABase.XAFilePackage(properties)[source]
+

Bases: XAFile

+

A file package in the file system.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

aliases([filter])

Returns a list of aliases, as PyXA objects, matching the given filter.

disk_items([filter])

Returns a list of disk items, as PyXA objects, matching the given filter.

file_packages([filter])

Returns a list of file packages, as PyXA objects, matching the given filter.

files([filter])

Returns a list of files, as PyXA objects, matching the given filter.

folders([filter])

Returns a list of folders, as PyXA objects, matching the given filter.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+aliases(filter: Optional[dict] = None) XAAliasList[source]
+

Returns a list of aliases, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+disk_items(filter: Optional[dict] = None) XADiskItemList[source]
+

Returns a list of disk items, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+file_packages(filter: Optional[dict] = None) XAFilePackageList[source]
+

Returns a list of file packages, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+files(filter: Optional[dict] = None) XAFileList[source]
+

Returns a list of files, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+folders(filter: Optional[dict] = None) XAFolderList[source]
+

Returns a list of folders, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.XABase.XAFilePackageList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAFileList

+

A wrapper around lists of file packages that employs fast enumeration techniques.

+

All properties of file packages can be called as methods on the wrapped list, returning a list containing each package’s value for the property.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + +

__init__(properties[, filter])

Creates an efficient wrapper object around a list of scriptable elements.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+class PyXA.XABase.XAFilePicker(prompt: str = 'Choose File', types: list[str] = None, default_location: Optional[str] = None, show_invisibles: bool = False, multiple_selections_allowed: bool = False, show_package_contents: bool = False)[source]
+

Bases: XAObject

+

A file selection window.

+
+

New in version 0.0.8.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

__annotations__

__module__

default_location

The default file location

multiple_selections_allowed

Whether the user can select multiple files

prompt

The prompt to display in the dialog box

show_invisibles

Whether invisible files and folders are shown

show_package_contents

Whether to show the contents of packages

types

The file types/type identifiers to allow for selection

+

Methods:

+ + + + + + + + + +

__init__([prompt, types, default_location, ...])

Instantiates a PyXA scripting object.

display()

Displays the file chooser, waits for the user to select a file or cancel, then returns the selected file URL or None if cancelled.

+
+
+__annotations__ = {'default_location': 'Union[str, None]', 'multiple_selections_allowed': 'bool', 'prompt': 'str', 'show_invisibles': 'bool', 'show_package_contents': 'bool', 'types': 'list[str]'}
+
+ +
+
+__init__(prompt: str = 'Choose File', types: list[str] = None, default_location: Optional[str] = None, show_invisibles: bool = False, multiple_selections_allowed: bool = False, show_package_contents: bool = False)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+default_location: Optional[str]
+

The default file location

+
+ +
+
+display() Optional[XAPath][source]
+

Displays the file chooser, waits for the user to select a file or cancel, then returns the selected file URL or None if cancelled.

+
+
Returns:
+

The selected file URL or None if no file was selected

+
+
Return type:
+

Union[XAPath, None]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+multiple_selections_allowed: bool
+

Whether the user can select multiple files

+
+ +
+
+prompt: str
+

The prompt to display in the dialog box

+
+ +
+
+show_invisibles: bool
+

Whether invisible files and folders are shown

+
+ +
+
+show_package_contents: bool
+

Whether to show the contents of packages

+
+ +
+
+types: list[str]
+

The file types/type identifiers to allow for selection

+
+ +
+ +
+
+class PyXA.XABase.XAFolder(properties)[source]
+

Bases: XADiskItem

+

A folder in the file system.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

aliases([filter])

Returns a list of aliases, as PyXA objects, matching the given filter.

disk_items([filter])

Returns a list of disk items, as PyXA objects, matching the given filter.

file_packages([filter])

Returns a list of file packages, as PyXA objects, matching the given filter.

files([filter])

Returns a list of files, as PyXA objects, matching the given filter.

folders([filter])

Returns a list of folders, as PyXA objects, matching the given filter.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+aliases(filter: Optional[dict] = None) XAAliasList[source]
+

Returns a list of aliases, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+disk_items(filter: Optional[dict] = None) XADiskItemList[source]
+

Returns a list of disk items, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+file_packages(filter: Optional[dict] = None) XAFilePackageList[source]
+

Returns a list of file packages, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+files(filter: Optional[dict] = None) XAFileList[source]
+

Returns a list of files, as PyXA objects, matching the given filter.

+
+

New in version 0.1.0.

+
+
+ +
+
+folders(filter: Optional[dict] = None) XAFolderList[source]
+

Returns a list of folders, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned folders will have, or None

+
+
Returns:
+

The list of folders

+
+
Return type:
+

XAFolderList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.XABase.XAFolderList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XADiskItemList

+

A wrapper around lists of folders that employs fast enumeration techniques.

+

All properties of folders can be called as methods on the wrapped list, returning a list containing each folder’s value for the property.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + +

__init__(properties[, filter])

Creates an efficient wrapper object around a list of scriptable elements.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+class PyXA.XABase.XAFolderPicker(prompt: str = 'Choose Folder', default_location: Optional[str] = None, show_invisibles: bool = False, multiple_selections_allowed: bool = False, show_package_contents: bool = False)[source]
+

Bases: XAObject

+

A folder selection window.

+
+

New in version 0.0.8.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + +

__annotations__

__module__

default_location

The default folder location

multiple_selections_allowed

Whether the user can select multiple folders

prompt

The prompt to display in the dialog box

show_invisibles

Whether invisible files and folders are shown

show_package_contents

Whether to show the contents of packages

+

Methods:

+ + + + + + + + + +

__init__([prompt, default_location, ...])

Instantiates a PyXA scripting object.

display()

Displays the folder chooser, waits for the user to select a folder or cancel, then returns the selected folder URL or None if cancelled.

+
+
+__annotations__ = {'default_location': 'Union[str, None]', 'multiple_selections_allowed': 'bool', 'prompt': 'str', 'show_invisibles': 'bool', 'show_package_contents': 'bool'}
+
+ +
+
+__init__(prompt: str = 'Choose Folder', default_location: Optional[str] = None, show_invisibles: bool = False, multiple_selections_allowed: bool = False, show_package_contents: bool = False)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+default_location: Optional[str]
+

The default folder location

+
+ +
+
+display() Optional[XAPath][source]
+

Displays the folder chooser, waits for the user to select a folder or cancel, then returns the selected folder URL or None if cancelled.

+
+
Returns:
+

The selected folder URL or None if no folder was selected

+
+
Return type:
+

Union[XAPath, None]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+multiple_selections_allowed: bool
+

Whether the user can select multiple folders

+
+ +
+
+prompt: str
+

The prompt to display in the dialog box

+
+ +
+
+show_invisibles: bool
+

Whether invisible files and folders are shown

+
+ +
+
+show_package_contents: bool
+

Whether to show the contents of packages

+
+ +
+ +
+
+class PyXA.XABase.XAImage(image_reference: Optional[Union[str, XAPath, NSURL, NSImage]] = None, data: Optional[NSData] = None)[source]
+

Bases: XAObject, XAClipboardCodable

+

A wrapper around NSImage with specialized automation methods.

+
+

New in version 0.0.2.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__annotations__

__hash__

__module__

color_space_name

The name of the color space that the image currently uses.

data

The TIFF representation of the image

file

The path to the image file, if one exists

gamma

The gamma value for the image, once it has been manually set.

has_alpha_channel

Whether the image has an alpha channel or not.

highlight

The highlight setting for the image, once it has been manually set.

is_opaque

Whether the image contains transparent pixels or not.

modified

Whether the image data has been modified since the object was originally created

shadow

The shadow setting for the image, once it has been manually set.

size

The dimensions of the image

temperature

The temperature setting for the image, once it has been manually set.

tint

The tint setting for the image, once it has been manually set.

vibrance

The vibrance value for the image, once it has been manually set.

white_point

The white point setting for the image, once it has been manually set.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__eq__(other)

Return self==value.

__init__([image_reference, data])

Instantiates a PyXA scripting object.

auto_enhance([correct_red_eye, ...])

Attempts to enhance the image by applying suggested filters.

bloom([intensity])

Applies a bloom effect to the image.

bump([center, radius, curvature])

Creates a concave (inward) or convex (outward) bump at the specified location within the image.

comic()

Applies a comic filter to the image.

crop(size[, corner])

Crops the image to the specified dimensions.

crystallize([crystal_size])

Applies a crystallization filter to the image.

depth_of_field([focal_region, intensity, ...])

Applies a depth of field filter to the image, simulating a tilt & shift effect.

edges([intensity])

Detects the edges in the image and highlights them colorfully, blackening other areas of the image.

extract_text()

Extracts and returns all visible text in the image.

flip_horizontally()

Flips the image horizontally.

flip_vertically()

Flips the image vertically.

gaussian_blur([intensity])

Blurs the image using a Gaussian filter.

get_clipboard_representation()

Gets a clipboard-codable representation of the iimage.

horizontal_stitch()

Horizontally stacks two or more images.

image_from_text(text[, font_size, ...])

Initializes an image of the provided text overlaid on the specified background color.

invert()

Inverts the color of the image.

monochrome(color[, intensity])

Remaps the colors of the image to shades of the specified color.

open()

Initializes one or more images from files.

outline([threshold])

Outlines detected edges within the image in black, leaving the rest transparent.

overlay_image(image[, location, size])

Overlays an image on top of this image, at the specified location, with the specified size.

overlay_text(text[, location, font_size, ...])

Overlays text of the specified size and color at the provided location within the image.

pad([horizontal_border_width, ...])

Pads the image with the specified color; adds a border around the image with the specified vertical and horizontal width.

pinch([center, intensity])

Creates an inward pinch distortion at the specified location within the image.

pixellate([pixel_size])

Pixellates the image.

pointillize([point_size])

Applies a pointillization filter to the image.

reduce_noise([noise_level, sharpness])

Reduces noise in the image by sharpening areas with a luminance delta below the specified noise level threshold.

resize(width[, height])

Resizes the image to the specified width and height.

rotate(degrees)

Rotates the image clockwise by the specified number of degrees.

save([file_path])

Saves the image to a file on the disk.

scale(scale_factor_x[, scale_factor_y])

Scales the image by the specified horizontal and vertical factors.

sepia([intensity])

Applies a sepia filter to the image; maps all colors of the image to shades of brown.

show_in_preview()

Opens the image in preview.

symbol()

Initializes an image from the SF symbol with the specified name, if such a symbol exists.

twirl([center, radius, angle])

Creates a twirl distortion by rotating pixels around the specified location within the image.

vertical_stitch()

Vertically stacks two or more images.

vignette([intensity])

Applies vignette shading to the corners of the image.

+
+
+__annotations__ = {'data': 'str', 'file': 'Union[XAPath, None]', 'modified': 'bool', 'size': 'tuple[int, int]'}
+
+ +
+
+__eq__(other)[source]
+

Return self==value.

+
+ +
+
+__hash__ = None
+
+ +
+
+__init__(image_reference: Optional[Union[str, XAPath, NSURL, NSImage]] = None, data: Optional[NSData] = None)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+auto_enhance(correct_red_eye: bool = False, crop_to_features: bool = False, correct_rotation: bool = False) XAImage[source]
+

Attempts to enhance the image by applying suggested filters.

+
+
Parameters:
+
    +
  • correct_red_eye (bool, optional) – Whether to attempt red eye removal, defaults to False

  • +
  • crop_to_features (bool, optional) – Whether to crop the image to focus on the main features with it, defaults to False

  • +
  • correct_rotation (bool, optional) – Whether attempt perspective correction by rotating the image, defaults to False

  • +
+
+
Returns:
+

The resulting image after applying the enchantments

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+bloom(intensity: float = 0.5) XAImage[source]
+

Applies a bloom effect to the image. Softens edges and adds a glow.

+
+
Parameters:
+

intensity (float) – The strength of the softening and glow effects, defaults to 0.5

+
+
Returns:
+

The resulting image after applying the filter

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+bump(center: Optional[tuple[int, int]] = None, radius: float = 300.0, curvature: float = 0.5) XAImage[source]
+

Creates a concave (inward) or convex (outward) bump at the specified location within the image.

+
+
Parameters:
+
    +
  • center (Union[tuple[int, int], None]) – The center point of the effect, or None to use the center of the image, defaults to None

  • +
  • radius (float) – The radius of the bump in pixels, defaults to 300.0

  • +
  • curvature (float) – Controls the direction and intensity of the bump’s curvature. Positive values create convex bumps while negative values create concave bumps. Defaults to 0.5

  • +
+
+
Returns:
+

The resulting image after applying the distortion

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property color_space_name: Optional[str]
+

The name of the color space that the image currently uses.

+
+

New in version 0.1.0.

+
+
+ +
+
+comic() XAImage[source]
+

Applies a comic filter to the image. Outlines edges and applies a color halftone effect.

+
+
Returns:
+

The resulting image after applying the filter

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+crop(size: tuple[int, int], corner: Optional[tuple[int, int]] = None) XAImage[source]
+

Crops the image to the specified dimensions.

+
+
Parameters:
+
    +
  • size (tuple[int, int]) – The width and height of the resulting image

  • +
  • corner (Union[tuple[int, int], None]) – The bottom-left corner location from which to crop the image, or None to use (0, 0), defaults to None

  • +
+
+
Returns:
+

The image object, modifications included

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+crystallize(crystal_size: float = 20.0) XAImage[source]
+

Applies a crystallization filter to the image. Creates polygon-shaped color blocks by aggregating pixel values.

+
+
Parameters:
+

crystal_size (float) – The radius of the crystals, defaults to 20.0

+
+
Returns:
+

The resulting image after applying the filter

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property data: NSData
+

The TIFF representation of the image

+
+ +
+
+depth_of_field(focal_region: Optional[tuple[tuple[int, int], tuple[int, int]]] = None, intensity: float = 10.0, focal_region_saturation: float = 1.5) XAImage[source]
+

Applies a depth of field filter to the image, simulating a tilt & shift effect.

+
+
Parameters:
+
    +
  • focal_region (Union[tuple[tuple[int, int], tuple[int, int]], None]) – Two points defining a line within the image to focus the effect around (pixels around the line will be in focus), or None to use the center third of the image, defaults to None

  • +
  • intensity (float) – Controls the amount of distance around the focal region to keep in focus. Higher values decrease the distance before the out-of-focus effect starts. Defaults to 10.0

  • +
  • focal_region_saturation (float) – Adjusts the saturation of the focial region. Higher values increase saturation. Defaults to 1.5 (1.5x default saturation)

  • +
+
+
Returns:
+

The resulting image after applying the filter

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+edges(intensity: float = 1.0) XAImage[source]
+

Detects the edges in the image and highlights them colorfully, blackening other areas of the image.

+
+
Parameters:
+

intensity (float) – The degree to which edges are highlighted. Higher is brighter. Defaults to 1.0

+
+
Returns:
+

The resulting image after applying the filter

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+extract_text() list[str][source]
+

Extracts and returns all visible text in the image.

+
+
Returns:
+

The array of extracted text strings

+
+
Return type:
+

list[str]

+
+
Example:
+

+
+
>>> import PyXA
+>>> test = PyXA.XAImage("/Users/ExampleUser/Downloads/Example.jpg")
+>>> print(test.extract_text())
+["HERE'S TO THE", 'CRAZY ONES', 'the MISFITS the REBELS', 'THE TROUBLEMAKERS', ...]
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+file: Optional[XAPath]
+

The path to the image file, if one exists

+
+ +
+
+flip_horizontally() XAImage[source]
+

Flips the image horizontally.

+
+
Returns:
+

The image object, modifications included

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+flip_vertically() XAImage[source]
+

Flips the image vertically.

+
+
Returns:
+

The image object, modifications included

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property gamma: float
+

The gamma value for the image, once it has been manually set. Otherwise, the value is None.

+
+

New in version 0.1.0.

+
+
+ +
+
+gaussian_blur(intensity: float = 10) XAImage[source]
+

Blurs the image using a Gaussian filter.

+
+
Parameters:
+

intensity (float) – The strength of the blur effect, defaults to 10

+
+
Returns:
+

The resulting image after applying the filter

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+get_clipboard_representation() NSImage[source]
+

Gets a clipboard-codable representation of the iimage.

+

When the clipboard content is set to an image, the image itself, including any modifications, is added to the clipboard. Pasting will then insert the image into the active document.

+
+
Returns:
+

The raw NSImage object for this XAIMage

+
+
Return type:
+

AppKit.NSImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property has_alpha_channel: bool
+

Whether the image has an alpha channel or not.

+
+

New in version 0.1.0.

+
+
+ +
+
+property highlight: float
+

The highlight setting for the image, once it has been manually set. Otherwise, the value is None.

+
+

New in version 0.1.0.

+
+
+ +
+
+horizontal_stitch() XAImage[source]
+

Horizontally stacks two or more images.

+

The first image in the list is placed at the left side of the resulting image.

+
+
Parameters:
+

images (Union[list[XAImage], XAImageList]) – The list of images to stitch together

+
+
Returns:
+

The resulting image after stitching

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+static image_from_text(text: str, font_size: int = 15, font_name: str = 'Menlo', font_color: XAColor = None, background_color: XAColor = None, inset: int = 10) XAImage[source]
+

Initializes an image of the provided text overlaid on the specified background color.

+
+
Parameters:
+
    +
  • text (str) – The text to create an image of

  • +
  • font_size (int, optional) – The font size of the text, defaults to 15

  • +
  • font_name (str, optional) – The color of the text, defaults to XAColor.black()

  • +
  • font_color (XAColor, optional) – The name of the font to use for the text, defaults to “.SF NS Mono Light Medium”

  • +
  • background_color (XAColor, optional) – The color to overlay the text on top of, defaults to XAColor.white()

  • +
  • inset (int, optional) – The width of the space between the text and the edge of the background color in the resulting image, defaults to 10

  • +
+
+
Returns:
+

XAImage

+
+
Return type:
+

The resulting image object

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+invert() XAImage[source]
+

Inverts the color of the image.

+
+
Returns:
+

The resulting image after applying the filter

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property is_opaque: bool
+

Whether the image contains transparent pixels or not.

+
+

New in version 0.1.0.

+
+
+ +
+
+modified: bool
+

Whether the image data has been modified since the object was originally created

+
+ +
+
+monochrome(color: XAColor, intensity: float = 1.0) XAImage[source]
+

Remaps the colors of the image to shades of the specified color.

+
+
Parameters:
+
    +
  • color (XAColor) – The color of map the image’s colors to

  • +
  • intensity (float) – The strength of recoloring effect. Higher values map colors to darker shades of the provided color. Defaults to 1.0

  • +
+
+
Returns:
+

The resulting image after applying the filter

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+open() Union[XAImage, XAImageList][source]
+

Initializes one or more images from files.

+
+
Parameters:
+

images (Union[str, XAPath, list[Union[str, XAPath]]]) – The image(s) to open

+
+
Returns:
+

The newly created image object, or a list of image objects

+
+
Return type:
+

Union[XAImage, XAImageList]

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+outline(threshold: float = 0.1) XAImage[source]
+

Outlines detected edges within the image in black, leaving the rest transparent.

+
+
Parameters:
+

threshold (float) – The threshold to use when separating edge and non-edge pixels. Larger values produce thinner edge lines. Defaults to 0.1

+
+
Returns:
+

The resulting image after applying the filter

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+overlay_image(image: XAImage, location: Optional[tuple[int, int]] = None, size: Optional[tuple[int, int]] = None) XAImage[source]
+

Overlays an image on top of this image, at the specified location, with the specified size.

+
+
Parameters:
+
    +
  • image (XAImage) – The image to overlay on top of this image

  • +
  • location (Union[tuple[int, int], None]) – The bottom-left point of the overlaid image in the result, or None to use the bottom-left point of the background image, defaults to None

  • +
  • size (Union[tuple[int, int], None]) – The width and height of the overlaid image, or None to use the overlaid’s images existing width and height, or (-1, -1) to use the dimensions of the background image, defaults to None

  • +
+
+
Returns:
+

The image object, modifications included

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+overlay_text(text: str, location: Optional[tuple[int, int]] = None, font_size: float = 12, font_color: Optional[XAColor] = None) XAImage[source]
+

Overlays text of the specified size and color at the provided location within the image.

+
+
Parameters:
+
    +
  • text (str) – The text to overlay onto the image

  • +
  • location (Union[tuple[int, int], None]) – The bottom-left point of the start of the text, or None to use (5, 5), defaults to None

  • +
  • font_size (float) – The font size, in pixels, of the text, defaults to 12

  • +
  • font_color (XAColor) – The color of the text, or None to use black, defaults to None

  • +
+
+
Returns:
+

The image object, modifications included

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+pad(horizontal_border_width: int = 50, vertical_border_width: int = 50, pad_color: Optional[XAColor] = None) XAImage[source]
+

Pads the image with the specified color; adds a border around the image with the specified vertical and horizontal width.

+
+
Parameters:
+
    +
  • horizontal_border_width (int) – The border width, in pixels, in the x-dimension, defaults to 50

  • +
  • vertical_border_width (int) – The border width, in pixels, in the y-dimension, defaults to 50

  • +
  • pad_color (Union[XAColor, None]) – The color of the border, or None for a white border, defaults to None

  • +
+
+
Returns:
+

The image object, modifications included

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+pinch(center: Optional[tuple[int, int]] = None, intensity: float = 0.5) XAImage[source]
+

Creates an inward pinch distortion at the specified location within the image.

+
+
Parameters:
+
    +
  • center (Union[tuple[int, int], None]) – The center point of the effect, or None to use the center of the image, defaults to None

  • +
  • intensity (float) – Controls the scale of the pinch effect. Higher values stretch pixels away from the specified center to a greater degree. Defaults to 0.5

  • +
+
+
Returns:
+

The resulting image after applying the distortion

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+pixellate(pixel_size: float = 8.0) XAImage[source]
+

Pixellates the image.

+
+
Parameters:
+

pixel_size (float) – The size of the pixels, defaults to 8.0

+
+
Returns:
+

The resulting image after applying the filter

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+pointillize(point_size: float = 20.0) XAImage[source]
+

Applies a pointillization filter to the image.

+
+
Parameters:
+

crystal_size (float) – The radius of the points, defaults to 20.0

+
+
Returns:
+

The resulting image after applying the filter

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+reduce_noise(noise_level: float = 0.02, sharpness: float = 0.4) XAImage[source]
+

Reduces noise in the image by sharpening areas with a luminance delta below the specified noise level threshold.

+
+
Parameters:
+
    +
  • noise_level (float) – The threshold for luminance changes in an area below which will be considered noise, defaults to 0.02

  • +
  • sharpness (float) – The sharpness of the resulting image, defaults to 0.4

  • +
+
+
Returns:
+

The resulting image after applying the filter

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+resize(width: int, height: Optional[int] = None) Self[source]
+

Resizes the image to the specified width and height.

+
+
Parameters:
+
    +
  • width (int) – The width of the resulting image, in pixels

  • +
  • height (Union[int, None]) – The height of the resulting image, in pixels, or None to maintain width:height proportions, defaults to None

  • +
+
+
Returns:
+

The image object, modifications included

+
+
Return type:
+

Self

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+rotate(degrees: float) XAImage[source]
+

Rotates the image clockwise by the specified number of degrees.

+
+
Parameters:
+

degrees (float) – The number of degrees to rotate the image by

+
+
Returns:
+

The image object, modifications included

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+save(file_path: Optional[Union[XAPath, str]] = None)[source]
+

Saves the image to a file on the disk. Saves to the original file (if there was one) by default.

+
+
Parameters:
+

file_path (Union[XAPath, str, None]) – The path at which to save the image file. Any existing file at that location will be overwritten, defaults to None

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+scale(scale_factor_x: float, scale_factor_y: Optional[float] = None) XAImage[source]
+

Scales the image by the specified horizontal and vertical factors.

+
+
Parameters:
+
    +
  • scale_factor_x (float) – The factor by which to scale the image in the X dimension

  • +
  • scale_factor_y (Union[float, None]) – The factor by which to scale the image in the Y dimension, or None to match the horizontal factor, defaults to None

  • +
+
+
Returns:
+

The image object, modifications included

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+sepia(intensity: float = 1.0) XAImage[source]
+

Applies a sepia filter to the image; maps all colors of the image to shades of brown.

+
+
Parameters:
+

intensity (float) – The opacity of the sepia effect. A value of 0 will have no impact on the image. Defaults to 1.0

+
+
Returns:
+

The resulting image after applying the filter

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property shadow: float
+

The shadow setting for the image, once it has been manually set. Otherwise, the value is None.

+
+

New in version 0.1.0.

+
+
+ +
+
+show_in_preview()[source]
+

Opens the image in preview.

+
+

New in version 0.0.8.

+
+
+ +
+
+property size: tuple[int, int]
+

The dimensions of the image

+
+ +
+
+symbol()[source]
+

Initializes an image from the SF symbol with the specified name, if such a symbol exists.

+
+
Parameters:
+

name (str) – The system symbol to create an image of; the name of an SF Symbol symbol.

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+property temperature: Optional[float]
+

The temperature setting for the image, once it has been manually set. Otherwise, the value is None.

+
+

New in version 0.1.0.

+
+
+ +
+
+property tint: Optional[float]
+

The tint setting for the image, once it has been manually set. Otherwise, the value is None.

+
+

New in version 0.1.0.

+
+
+ +
+
+twirl(center: Optional[tuple[int, int]] = None, radius: float = 300.0, angle: float = 3.14) XAImage[source]
+

Creates a twirl distortion by rotating pixels around the specified location within the image.

+
+
Parameters:
+
    +
  • center (Union[tuple[int, int], None]) – The center point of the effect, or None to use the center of the image, defaults to None

  • +
  • radius (float) – The pixel radius around the centerpoint that defines the area to apply the effect to, defaults to 300.0

  • +
  • angle (float) – The angle of the twirl in radians, defaults to 3.14

  • +
+
+
Returns:
+

The resulting image after applying the distortion

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+vertical_stitch() XAImage[source]
+

Vertically stacks two or more images.

+

The first image in the list is placed at the bottom of the resulting image.

+
+
Parameters:
+

images (Union[list[XAImage], XAImageList]) – The list of images to stitch together

+
+
Returns:
+

The resulting image after stitching

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+property vibrance: Optional[float]
+

The vibrance value for the image, once it has been manually set. Otherwise, the value is None.

+
+

New in version 0.1.0.

+
+
+ +
+
+vignette(intensity: float = 1.0) XAImage[source]
+

Applies vignette shading to the corners of the image.

+
+
Parameters:
+

intensity (float) – The intensity of the vignette effect, defaults to 1.0

+
+
Returns:
+

The resulting image after applying the filter

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property white_point: Optional[XAColor]
+

The white point setting for the image, once it has been manually set. Otherwise, the value is None.

+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.XABase.XAImageList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around lists of images that employs fast enumeration techniques.

+
+

New in version 0.0.3.

+
+

Attributes:

+ + + + + + + + + + + + +

__annotations__

__module__

modified

Whether the list of images has been modified since it was initialized

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__(properties[, filter, obj_class])

Creates an efficient wrapper object around a list of scriptable elements.

additive_composition()

Creates a composition image by adding the color values of each image in the list.

auto_enhance([correct_red_eye, ...])

Attempts to enhance each image in the list by applying suggested filters.

bloom([intensity])

Applies a bloom effect to each image in the list.

bump([center, radius, curvature])

Adds a concave (inward) or convex (outward) bump to each image in the list at the specified location within each image.

comic()

Applies a comic filter to each image in the list.

crop(size[, corner])

Crops each image in the list to the specified dimensions.

crystallize([crystal_size])

Applies a crystallization filter to each image in the list.

depth_of_field([focal_region, intensity, ...])

Applies a depth of field filter to each image in the list, simulating a tilt & shift effect.

edges([intensity])

Detects the edges in each image of the list and highlights them colorfully, blackening other areas of the images.

extract_text()

Extracts and returns a list of all visible text in each image of the list.

file()

flip_horizontally()

Flips each image in the list horizontally.

flip_vertically()

Flips each image in the list vertically.

gaussian_blur([intensity])

Blurs each image in the list using a Gaussian filter.

get_clipboard_representation()

Gets a clipboard-codable representation of each image in the list.

horizontal_stitch()

Horizontally stacks each image in the list.

invert()

Inverts the colors of each image in the list.

monochrome(color[, intensity])

Remaps the colors of each image in the list to shades of the specified color.

outline([threshold])

Outlines detected edges within each image of the list in black, leaving the rest transparent.

overlay_image(image[, location, size])

Overlays an image on top of each image in the list, at the specified location, with the specified size.

overlay_text(text[, location, font_size, ...])

Overlays text of the specified size and color at the provided location within each image of the list.

pad([horizontal_border_width, ...])

Pads each image in the list with the specified color; add a border around each image in the list with the specified vertical and horizontal width.

pinch([center, intensity])

Adds an inward pinch distortion to each image in the list at the specified location within each image.

pixellate([pixel_size])

Pixellates each image in the list.

pointillize([point_size])

Applies a pointillization filter to each image in the list.

reduce_noise([noise_level, sharpness])

Reduces noise in each image of the list by sharpening areas with a luminance delta below the specified noise level threshold.

resize(width[, height])

Resizes each image in the list to the specified width and height.

rotate(degrees)

Rotates each image in the list by the specified amount of degrees.

save(file_paths)

Saves each image to a file on the disk.

scale(scale_factor_x[, scale_factor_y])

Scales each image in the list by the specified horizontal and vertical factors.

sepia([intensity])

Applies a sepia filter to each image in the list; maps all colors of the images to shades of brown.

show_in_preview()

Opens each image in the list in Preview.

subtractive_composition()

Creates a composition image by subtracting the color values of each image in the list successively.

twirl([center, radius, angle])

Adds a twirl distortion to each image in the list by rotating pixels around the specified location within each image.

vertical_stitch()

Vertically stacks each image in the list.

vignette([intensity])

Applies vignette shading to the corners of each image in the list.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+additive_composition() XAImage[source]
+

Creates a composition image by adding the color values of each image in the list.

+
+
Parameters:
+

images (list[XAImage]) – The images to add together

+
+
Returns:
+

The resulting image composition

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+auto_enhance(correct_red_eye: bool = False, crop_to_features: bool = False, correct_rotation: bool = False) XAImageList[source]
+

Attempts to enhance each image in the list by applying suggested filters.

+
+
Parameters:
+
    +
  • correct_red_eye (bool, optional) – Whether to attempt red eye removal, defaults to False

  • +
  • crop_to_features (bool, optional) – Whether to crop the images to focus on their main features, defaults to False

  • +
  • correct_rotation (bool, optional) – Whether attempt perspective correction by rotating the images, defaults to False

  • +
+
+
Returns:
+

The list of enhanced images

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+bloom(intensity: float = 0.5) XAImageList[source]
+

Applies a bloom effect to each image in the list. Softens edges and adds a glow.

+
+
Parameters:
+

intensity (float) – The strength of the softening and glow effects, defaults to 0.5

+
+
Returns:
+

The resulting images after applying the filter

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+bump(center: Optional[tuple[int, int]] = None, radius: float = 300.0, curvature: float = 0.5) XAImageList[source]
+

Adds a concave (inward) or convex (outward) bump to each image in the list at the specified location within each image.

+
+
Parameters:
+
    +
  • center (Union[tuple[int, int], None]) – The center point of the effect, or None to use the center of the image, defaults to None

  • +
  • radius (float) – The radius of the bump in pixels, defaults to 300.0

  • +
  • curvature (float) – Controls the direction and intensity of the bump’s curvature. Positive values create convex bumps while negative values create concave bumps. Defaults to 0.5

  • +
+
+
Returns:
+

The resulting images after applying the distortion

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+comic() XAImageList[source]
+

Applies a comic filter to each image in the list. Outlines edges and applies a color halftone effect.

+
+
Returns:
+

The resulting images after applying the filter

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+crop(size: tuple[int, int], corner: Optional[tuple[int, int]] = None) XAImageList[source]
+

Crops each image in the list to the specified dimensions.

+
+
Parameters:
+
    +
  • size (tuple[int, int]) – The dimensions to crop each image to

  • +
  • corner (Union[tuple[int, int], None]) – The bottom-left location to crom each image from, or None to use (0, 0), defaults to None

  • +
+
+
Returns:
+

The list of cropped images

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+crystallize(crystal_size: float = 20.0) XAImageList[source]
+

Applies a crystallization filter to each image in the list. Creates polygon-shaped color blocks by aggregating pixel values.

+
+
Parameters:
+

crystal_size (float) – The radius of the crystals, defaults to 20.0

+
+
Returns:
+

The resulting images after applying the filter

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+depth_of_field(focal_region: Optional[tuple[tuple[int, int], tuple[int, int]]] = None, intensity: float = 10.0, focal_region_saturation: float = 1.5) XAImageList[source]
+

Applies a depth of field filter to each image in the list, simulating a tilt & shift effect.

+
+
Parameters:
+
    +
  • focal_region (Union[tuple[tuple[int, int], tuple[int, int]], None]) – Two points defining a line within each image to focus the effect around (pixels around the line will be in focus), or None to use the center third of the image, defaults to None

  • +
  • intensity (float) – Controls the amount of distance around the focal region to keep in focus. Higher values decrease the distance before the out-of-focus effect starts. Defaults to 10.0

  • +
  • focal_region_saturation (float) – Adjusts the saturation of the focial region. Higher values increase saturation. Defaults to 1.5 (1.5x default saturation)

  • +
+
+
Returns:
+

The resulting images after applying the filter

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+edges(intensity: float = 1.0) XAImageList[source]
+

Detects the edges in each image of the list and highlights them colorfully, blackening other areas of the images.

+
+
Parameters:
+

intensity (float) – The degree to which edges are highlighted. Higher is brighter. Defaults to 1.0

+
+
Returns:
+

The resulting images after applying the filter

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+extract_text() list[str][source]
+

Extracts and returns a list of all visible text in each image of the list.

+
+
Returns:
+

The array of extracted text strings

+
+
Return type:
+

list[str]

+
+
Example:
+

+
+
>>> import PyXA
+>>> test = PyXA.XAImage("/Users/ExampleUser/Downloads/Example.jpg")
+>>> print(test.extract_text())
+["HERE'S TO THE", 'CRAZY ONES', 'the MISFITS the REBELS', 'THE TROUBLEMAKERS', ...]
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+file() list[PyXA.XABase.XAPath][source]
+
+ +
+
+flip_horizontally() XAImageList[source]
+

Flips each image in the list horizontally.

+
+
Returns:
+

The list of flipped images

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+flip_vertically() XAImageList[source]
+

Flips each image in the list vertically.

+
+
Returns:
+

The list of flipped images

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+gaussian_blur(intensity: float = 10) XAImageList[source]
+

Blurs each image in the list using a Gaussian filter.

+
+
Parameters:
+

intensity (float) – The strength of the blur effect, defaults to 10

+
+
Returns:
+

The resulting images after applying the filter

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+get_clipboard_representation() list[objc.NSImage][source]
+

Gets a clipboard-codable representation of each image in the list.

+

When the clipboard content is set to a list of image, the raw data of each image is added to the clipboard. You can then

+
+
Returns:
+

A list of media item file URLs

+
+
Return type:
+

list[NSURL]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+horizontal_stitch() XAImage[source]
+

Horizontally stacks each image in the list.

+

The first image in the list is placed at the left side of the resulting image.

+
+
Returns:
+

The resulting image after stitching

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+invert() XAImageList[source]
+

Inverts the colors of each image in the list.

+
+
Returns:
+

The resulting images after applying the filter

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+modified
+

Whether the list of images has been modified since it was initialized

+
+ +
+
+monochrome(color: XAColor, intensity: float = 1.0) XAImageList[source]
+

Remaps the colors of each image in the list to shades of the specified color.

+
+
Parameters:
+
    +
  • color (XAColor) – The color of map each images colors to

  • +
  • intensity (float) – The strength of recoloring effect. Higher values map colors to darker shades of the provided color. Defaults to 1.0

  • +
+
+
Returns:
+

The resulting images after applying the filter

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+outline(threshold: float = 0.1) XAImageList[source]
+

Outlines detected edges within each image of the list in black, leaving the rest transparent.

+
+
Parameters:
+

threshold (float) – The threshold to use when separating edge and non-edge pixels. Larger values produce thinner edge lines. Defaults to 0.1

+
+
Returns:
+

The resulting images after applying the filter

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+overlay_image(image: XAImage, location: Optional[tuple[int, int]] = None, size: Optional[tuple[int, int]] = None) XAImageList[source]
+

Overlays an image on top of each image in the list, at the specified location, with the specified size.

+
+
Parameters:
+
    +
  • image (XAImage) – The image to overlay on top of each image in the list

  • +
  • location (Union[tuple[int, int], None]) – The bottom-left point of the overlaid image in the results, or None to use the bottom-left point of each background image, defaults to None

  • +
  • size (Union[tuple[int, int], None]) – The width and height of the overlaid image, or None to use the overlaid’s images existing width and height, or (-1, -1) to use the dimensions of each background images, defaults to None

  • +
+
+
Returns:
+

The list of images with the specified image overlaid on top of them

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+overlay_text(text: str, location: Optional[tuple[int, int]] = None, font_size: float = 12, font_color: Optional[XAColor] = None) XAImageList[source]
+

Overlays text of the specified size and color at the provided location within each image of the list.

+
+
Parameters:
+
    +
  • text (str) – The text to overlay onto each image of the list

  • +
  • location (Union[tuple[int, int], None]) – The bottom-left point of the start of the text, or None to use (5, 5), defaults to None

  • +
  • font_size (float) – The font size, in pixels, of the text, defaults to 12

  • +
  • font_color (XAColor) – The color of the text, or None to use black, defaults to None

  • +
+
+
Returns:
+

The list of images with the specified text overlaid on top of them

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+pad(horizontal_border_width: int = 50, vertical_border_width: int = 50, pad_color: Optional[XAColor] = None) XAImageList[source]
+

Pads each image in the list with the specified color; add a border around each image in the list with the specified vertical and horizontal width.

+
+
Parameters:
+
    +
  • horizontal_border_width (int) – The border width, in pixels, in the x-dimension, defaults to 50

  • +
  • vertical_border_width (int) – The border width, in pixels, in the y-dimension, defaults to 50

  • +
  • pad_color (Union[XAColor, None]) – The color of the border, or None for a white border, defaults to None

  • +
+
+
Returns:
+

The list of padded images

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+pinch(center: Optional[tuple[int, int]] = None, intensity: float = 0.5) XAImageList[source]
+

Adds an inward pinch distortion to each image in the list at the specified location within each image.

+
+
Parameters:
+
    +
  • center (Union[tuple[int, int], None]) – The center point of the effect, or None to use the center of the image, defaults to None

  • +
  • intensity (float) – Controls the scale of the pinch effect. Higher values stretch pixels away from the specified center to a greater degree. Defaults to 0.5

  • +
+
+
Returns:
+

The resulting images after applying the distortion

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+pixellate(pixel_size: float = 8.0) XAImageList[source]
+

Pixellates each image in the list.

+
+
Parameters:
+

pixel_size (float) – The size of the pixels, defaults to 8.0

+
+
Returns:
+

The resulting images after applying the filter

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+pointillize(point_size: float = 20.0) XAImageList[source]
+

Applies a pointillization filter to each image in the list.

+
+
Parameters:
+

crystal_size (float) – The radius of the points, defaults to 20.0

+
+
Returns:
+

The resulting images after applying the filter

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+reduce_noise(noise_level: float = 0.02, sharpness: float = 0.4) XAImageList[source]
+

Reduces noise in each image of the list by sharpening areas with a luminance delta below the specified noise level threshold.

+
+
Parameters:
+
    +
  • noise_level (float) – The threshold for luminance changes in an area below which will be considered noise, defaults to 0.02

  • +
  • sharpness (float) – The sharpness of the resulting images, defaults to 0.4

  • +
+
+
Returns:
+

The resulting images after applying the filter

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+resize(width: int, height: Optional[int] = None) Self[source]
+

Resizes each image in the list to the specified width and height.

+
+
Parameters:
+
    +
  • width (int) – The width of the resulting images

  • +
  • height (Union[int, None]) – The height of the resulting images, or None to maintain width:height proportions, defaults to None

  • +
+
+
Returns:
+

The list of scaled images

+
+
Return type:
+

Self

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+rotate(degrees: float) XAImageList[source]
+

Rotates each image in the list by the specified amount of degrees.

+
+
Parameters:
+

degrees (float) – The number of degrees to rotate the images by

+
+
Returns:
+

The list of rotated images

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+save(file_paths: list[Union[PyXA.XABase.XAPath, str]])[source]
+

Saves each image to a file on the disk.

+
+
Parameters:
+

file_path (Union[XAPath, str, None]) – The path at which to save the image file. Any existing file at that location will be overwritten, defaults to None

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+scale(scale_factor_x: float, scale_factor_y: Optional[float] = None) XAImageList[source]
+

Scales each image in the list by the specified horizontal and vertical factors.

+
+
Parameters:
+
    +
  • scale_factor_x (float) – The factor by which to scale each image in the X dimension

  • +
  • scale_factor_y (Union[float, None]) – The factor by which to scale each image in the Y dimension, or None to match the horizontal factor, defaults to None

  • +
+
+
Returns:
+

The list of scaled images

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+sepia(intensity: float = 1.0) XAImageList[source]
+

Applies a sepia filter to each image in the list; maps all colors of the images to shades of brown.

+
+
Parameters:
+

intensity (float) – The opacity of the sepia effect. A value of 0 will have no impact on the image. Defaults to 1.0

+
+
Returns:
+

The resulting images after applying the filter

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+show_in_preview()[source]
+

Opens each image in the list in Preview.

+
+

New in version 0.1.0.

+
+
+ +
+
+subtractive_composition() XAImage[source]
+

Creates a composition image by subtracting the color values of each image in the list successively.

+
+
Parameters:
+

images (list[XAImage]) – The images to create the composition from

+
+
Returns:
+

The resulting image composition

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+twirl(center: Optional[tuple[int, int]] = None, radius: float = 300.0, angle: float = 3.14) XAImageList[source]
+

Adds a twirl distortion to each image in the list by rotating pixels around the specified location within each image.

+
+
Parameters:
+
    +
  • center (Union[tuple[int, int], None]) – The center point of the effect, or None to use the center of the image, defaults to None

  • +
  • radius (float) – The pixel radius around the centerpoint that defines the area to apply the effect to, defaults to 300.0

  • +
  • angle (float) – The angle of the twirl in radians, defaults to 3.14

  • +
+
+
Returns:
+

The resulting images after applying the distortion

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+vertical_stitch() XAImage[source]
+

Vertically stacks each image in the list.

+

The first image in the list is placed at the bottom side of the resulting image.

+
+
Returns:
+

The resulting image after stitching

+
+
Return type:
+

XAImage

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+vignette(intensity: float = 1.0) XAImageList[source]
+

Applies vignette shading to the corners of each image in the list.

+
+
Parameters:
+

intensity (float) – The intensity of the vignette effect, defaults to 1.0

+
+
Returns:
+

The resulting images after applying the filter

+
+
Return type:
+

XAImageList

+
+
+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.XABase.XAList(properties: dict, object_class: type = None, filter: Optional[dict] = None)[source]
+

Bases: XAObject

+

A wrapper around NSArray and NSMutableArray objects enabling fast enumeration and lazy evaluation of Objective-C objects.

+
+

New in version 0.0.3.

+
+

Attributes:

+ + + + + + + + + + + + + + + +

__annotations__

__module__

first

Retrieves the first element of the list as a wrapped PyXA object.

last

Retrieves the last element of the list as a wrapped PyXA object.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__contains__(item)

__getitem__(key)

__init__(properties[, object_class, filter])

Creates an efficient wrapper object around a list of scriptable elements.

__iter__()

__len__()

__repr__()

Return repr(self).

__reversed__()

at(index)

Retrieves the element at the specified index.

beginning_with(property, value)

Retrieves all elements whose property value begins with the given value.

between(property, value1, value2)

Retrieves all elements whose property value is between the given values.

by_property(property, value)

Retrieves the first element whose property value matches the given value, if one exists.

containing(property, value)

Retrieves all elements whose property value contains the given value.

count(count_function)

Counts the number of entries in the list for which the provided function is True.

ending_with(property, value)

Retrieves all elements whose property value ends with the given value.

equalling(property, value)

Retrieves all elements whose property value equals the given value.

extend(ls)

Appends all elements of the supplied list to the end of this list.

filter(filter[, comparison_operation, ...])

Filters the list by the given parameters.

greater_than(property, value)

Retrieves all elements whose property value is greater than the given value.

index(element)

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

insert(element, index)

Inserts the object referenced by the provided PyXA wrapper at the specified index.

less_than(property, value)

Retrieves all elements whose property value is less than the given value.

not_containing(property, value)

Retrieves all elements whose property value does not contain the given value.

not_equalling(property, value)

Retrieves all elements whose property value does not equal the given value.

pop([index])

Removes the object at the specified index from the list and returns it.

push(*elements)

Appends the object referenced by the provided PyXA wrapper to the end of the list.

shuffle()

Randomizes the order of objects in the list.

+
+
+__annotations__ = {}
+
+ +
+
+__contains__(item)[source]
+
+ +
+
+__getitem__(key: Union[int, slice])[source]
+
+ +
+
+__init__(properties: dict, object_class: type = None, filter: Optional[dict] = None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__iter__()[source]
+
+ +
+
+__len__()[source]
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+__repr__()[source]
+

Return repr(self).

+
+ +
+
+__reversed__()[source]
+
+ +
+
+at(index: int) XAObject[source]
+

Retrieves the element at the specified index.

+
+
Parameters:
+

index (int) – The index of the desired element

+
+
Returns:
+

The PyXA-wrapped element object

+
+
Return type:
+

XAObject

+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+beginning_with(property: str, value: str) XAObject[source]
+

Retrieves all elements whose property value begins with the given value.

+
+
Parameters:
+
    +
  • property (str) – The property to match

  • +
  • value (str) – The value to search for

  • +
+
+
Returns:
+

The list of matching elements

+
+
Return type:
+

XAList

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("System Events")
+>>> print(app.downloads_folder.files().beginning_with("name", "Example"))
+<<class 'PyXA.apps.SystemEvents.XASystemEventsFileList'>['Example.png', 'ExampleImage.png', ...]>
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+between(property: str, value1: Union[int, float], value2: Union[int, float]) XAObject[source]
+

Retrieves all elements whose property value is between the given values.

+
+
Parameters:
+
    +
  • property (str) – The property to match

  • +
  • value1 (Union[int, float]) – The lower-end of the range to match

  • +
  • value2 (Union[int, float]) – The upper-end of the range to match

  • +
+
+
Returns:
+

The list of matching elements

+
+
Return type:
+

XAList

+
+
Example:
+

+
+
>>> import PyXA
+>>> from datetime import datetime, timedelta
+>>> 
+>>> app = PyXA.Application("Calendar")
+>>> events = app.calendars()[3].events()
+>>> now = datetime.now()
+>>> print(events.between("startDate", now, now + timedelta(days=1)))
+<<class 'PyXA.apps.Calendar.XACalendarEventList'>['Capstone Meeting', 'Lunch with Dan']>
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+by_property(property: str, value: Any) XAObject[source]
+

Retrieves the first element whose property value matches the given value, if one exists.

+
+
Parameters:
+
    +
  • property (str) – The property to match

  • +
  • value (Any) – The value to match

  • +
+
+
Returns:
+

The matching element, if one is found

+
+
Return type:
+

XAObject

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Photos")
+>>> photo = app.media_items().by_property("id", "CB24FE9F-E9DC-4A5C-A0B0-CC779B1CEDCE/L0/001")
+>>> print(photo)
+<<class 'PyXA.apps.PhotosApp.XAPhotosMediaItem'>id=CB24FE9F-E9DC-4A5C-A0B0-CC779B1CEDCE/L0/001>
+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+containing(property: str, value: str) XAObject[source]
+

Retrieves all elements whose property value contains the given value.

+
+
Parameters:
+
    +
  • property (str) – The property to match

  • +
  • value (str) – The value to search for

  • +
+
+
Returns:
+

The list of matching elements

+
+
Return type:
+

XAList

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Reminders")
+>>> print(app.reminders().containing("name", "PyXA"))
+<<class 'PyXA.apps.Reminders.XARemindersReminderList'>['PyXA v0.1.0 release']>
+
+
+
+

New in version 0.0.6.

+
+
+ +
+
+count(count_function: Callable[[object], bool]) int[source]
+

Counts the number of entries in the list for which the provided function is True.

+
+
Parameters:
+

count_function (Callable[[object], bool]) – The function to check entries against

+
+
Returns:
+

The number of entries for which the given function is True.

+
+
Return type:
+

int

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+ending_with(property: str, value: str) XAObject[source]
+

Retrieves all elements whose property value ends with the given value.

+
+
Parameters:
+
    +
  • property (str) – The property to match

  • +
  • value (str) – The value to search for

  • +
+
+
Returns:
+

The list of matching elements

+
+
Return type:
+

XAList

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("System Events")
+>>> print(app.downloads_folder.files().ending_with("name", ".png"))
+<<class 'PyXA.apps.SystemEvents.XASystemEventsFileList'>['Example.png', 'Image.png', ...]>
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+equalling(property: str, value: str) XAObject[source]
+

Retrieves all elements whose property value equals the given value.

+
+
Parameters:
+
    +
  • property (str) – The property to match

  • +
  • value (str) – The value to search for

  • +
+
+
Returns:
+

The list of matching elements

+
+
Return type:
+

XAList

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("TV")
+>>> print(app.tracks().equalling("playedCount", 0))
+<<class 'PyXA.apps.TV.XATVTrackList'>['Frozen', 'Sunshine', 'The Hunger Games: Mockingjay - Part 2', ...]>
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+extend(ls: Union[XAList, list])[source]
+

Appends all elements of the supplied list to the end of this list.

+
+
Parameters:
+

ls (Union[XAList, list]) – _description_

+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+filter(filter: str, comparison_operation: Optional[str] = None, value1: Optional[Any] = None, value2: Optional[Any] = None) XAList[source]
+

Filters the list by the given parameters.

+

The filter may be either a format string, used to create an NSPredicate, or up to 4 arguments specifying the filtered property name, the comparison operation, and up to two values to compare against.

+
+
Parameters:
+
    +
  • filter (str) – A format string or a property name

  • +
  • comparison_operation (Union[str, None], optional) – The symbol or name of a comparison operation, such as > or <, defaults to None

  • +
  • value1 (Union[Any, None], optional) – The first value to compare each list item’s property value against, defaults to None

  • +
  • value2 (Union[Any, None], optional) – The second value to compare each list item’s property value against, defaults to None

  • +
+
+
Returns:
+

The filtered XAList object

+
+
Return type:
+

XAList

+
+
Example 1:
+

Get the last file sent by you (via this machine) in Messages.app

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Messages")
+>>> last_file_transfer = app.file_transfers().filter("direction", "==", app.MessageDirection.OUTGOING)[-1]
+>>> print(last_file_transfer)
+<<class 'PyXA.apps.Messages.XAMessagesFileTransfer'>Test.jpg>
+
+
+
+
Example 2:
+

Get the list of favorite photos/videos from Photos.app

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Photos")
+>>> favorites = app.media_items().filter("favorite", "==", True)
+>>> print(favorites)
+<<class 'PyXA.apps.PhotosApp.XAPhotosMediaItemList'>['CB24FE9F-E9DC-4A5C-A0B0-CC779B1CEDCE/L0/001', 'EFEB7F37-8373-4972-8E43-21612F597185/L0/001', ...]>
+
+
+
+

Note

+

For properties that appear to be boolean but fail to return expected filter results, try using the corresponding 0 or 1 value instead.

+
+
+
Example 3:
+

Provide a custom format string

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Photos")
+>>> photo = app.media_items().filter("id == 'CB24FE9F-E9DC-4A5C-A0B0-CC779B1CEDCE/L0/001'")[0]
+>>> print(photo)
+<<class 'PyXA.apps.PhotosApp.XAPhotosMediaItem'>id=CB24FE9F-E9DC-4A5C-A0B0-CC779B1CEDCE/L0/001>
+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property first: XAObject
+

Retrieves the first element of the list as a wrapped PyXA object.

+
+
Returns:
+

The wrapped object

+
+
Return type:
+

XAObject

+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+greater_than(property: str, value: Union[int, float]) XAObject[source]
+

Retrieves all elements whose property value is greater than the given value.

+
+
Parameters:
+
    +
  • property (str) – The property to match

  • +
  • value (Union[int, float]) – The value to compare against

  • +
+
+
Returns:
+

The list of matching elements

+
+
Return type:
+

XAList

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Photos")
+>>> print(app.media_items().greater_than("altitude", 10000)[0].spotlight())
+<<class 'PyXA.apps.PhotosApp.XAPhotosMediaItem'>id=53B0F28E-0B39-446B-896C-484CD0DC2D3C/L0/001>
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+index(element: XAObject) int[source]
+

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

+
+

New in version 0.1.2.

+
+
+ +
+
+insert(element: XAObject, index: int)[source]
+

Inserts the object referenced by the provided PyXA wrapper at the specified index.

+
+

New in version 0.0.3.

+
+
+ +
+
+property last: XAObject
+

Retrieves the last element of the list as a wrapped PyXA object.

+
+
Returns:
+

The wrapped object

+
+
Return type:
+

XAObject

+
+
+
+

New in version 0.0.3.

+
+
+ +
+
+less_than(property: str, value: Union[int, float]) XAObject[source]
+

Retrieves all elements whose property value is less than the given value.

+
+
Parameters:
+
    +
  • property (str) – The property to match

  • +
  • value (Union[int, float]) – The value to compare against

  • +
+
+
Returns:
+

The list of matching elements

+
+
Return type:
+

XAList

+
+
Example:
+

+
+
>>> app = PyXA.Application("Music")
+>>> tracks = app.tracks()
+>>> print(tracks.less_than("playedCount", 5).name())
+['Outrunning Karma', 'Death of a Hero', '1994', 'Mind Is a Prison']
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+not_containing(property: str, value: str) XAObject[source]
+

Retrieves all elements whose property value does not contain the given value.

+
+
Parameters:
+
    +
  • property (str) – The property to match

  • +
  • value (str) – The value to search for

  • +
+
+
Returns:
+

The list of matching elements

+
+
Return type:
+

XAList

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Reminders")
+>>> print(app.reminders().not_containing("name", " "))
+<<class 'PyXA.apps.Reminders.XARemindersReminderList'>['Trash', 'Thing', 'Reminder', ...]>
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+not_equalling(property: str, value: str) XAObject[source]
+

Retrieves all elements whose property value does not equal the given value.

+
+
Parameters:
+
    +
  • property (str) – The property to match

  • +
  • value (str) – The value to search for

  • +
+
+
Returns:
+

The list of matching elements

+
+
Return type:
+

XAList

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("TV")
+>>> print(app.tracks().not_equalling("playedCount", 0))
+<<class 'PyXA.apps.TV.XATVTrackList'>['The Avatar State', 'The Cave of Two Lovers', 'Return to Omashu', ...]>
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+pop(index: int = -1) XAObject[source]
+

Removes the object at the specified index from the list and returns it.

+
+

New in version 0.0.3.

+
+
+ +
+
+push(*elements: list[PyXA.XABase.XAObject]) Optional[Union[XAObject, list[PyXA.XABase.XAObject]]][source]
+

Appends the object referenced by the provided PyXA wrapper to the end of the list.

+
+

New in version 0.0.3.

+
+
+ +
+
+shuffle() XAList[source]
+

Randomizes the order of objects in the list.

+
+
Returns:
+

A reference to the shuffled XAList

+
+
Return type:
+

XAList

+
+
+
+

New in version 0.0.3.

+
+
+ +
+ +
+
+class PyXA.XABase.XALocalDomainObject(properties)[source]
+

Bases: XADomain

+

The local domain in the file system.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+class PyXA.XABase.XALocation(raw_value=None, title: str = None, latitude: float = 0, longitude: float = 0, altitude: float = None, radius: int = 0, address: str = None)[source]
+

Bases: XAObject

+

A location with a latitude and longitude, along with other data.

+
+

New in version 0.0.2.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__annotations__

__module__

address

The address of the location

altitude

The altitude of the location

current_location

The current location of the device

latitude

The latitude of the location

longitude

The longitude of the location

radius

The horizontal accuracy of the location measurement

raw_value

The raw CLLocation object

title

The name of the location

+

Methods:

+ + + + + + + + + + + + + + + +

__init__([raw_value, title, latitude, ...])

Instantiates a PyXA scripting object.

__repr__()

Return repr(self).

reverse_geocode()

Obtains reverse-geocode information from the location's latitude and longitude.

show_in_maps()

Shows the location in Maps.app.

+
+
+__annotations__ = {'current_location': 'XALocation'}
+
+ +
+
+__init__(raw_value=None, title: str = None, latitude: float = 0, longitude: float = 0, altitude: float = None, radius: int = 0, address: str = None)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+__repr__()[source]
+

Return repr(self).

+
+ +
+
+address
+

The address of the location

+
+ +
+
+altitude
+

The altitude of the location

+
+ +
+
+property current_location: XALocation
+

The current location of the device

+
+ +
+
+latitude
+

The latitude of the location

+
+ +
+
+longitude
+

The longitude of the location

+
+ +
+
+radius
+

The horizontal accuracy of the location measurement

+
+ +
+
+property raw_value
+

The raw CLLocation object

+
+ +
+
+reverse_geocode() dict[str, str][source]
+

Obtains reverse-geocode information from the location’s latitude and longitude.

+
+
Returns:
+

A dictionary containing the location’s name, street address, locality, state, country, timezone, and notable features.

+
+
Return type:
+

dict[str, str]

+
+
Example:
+

+
+
>>> import PyXA
+>>> loc = PyXA.XALocation(latitude=44.460552, longitude=-110.82807)
+>>> print(loc.reverse_geocode())
+{'name': 'Old Faithful', 'street_number': None, 'street': 'Upper Geyser Basin Trail', 'sub_locality': None, 'locality': 'Alta', 'county': 'Teton County', 'state': 'WY', 'postal_code': '83414', 'country': 'United States', 'timezone': America/Denver (MST) offset -25200, 'notable_features': (
+    "Old Faithful",
+    "Yellowstone National Park"
+)}
+
+
+
+

New in version 0.1.1.

+
+
+ +
+
+show_in_maps()[source]
+

Shows the location in Maps.app.

+
+

New in version 0.0.6.

+
+
+ +
+
+title
+

The name of the location

+
+ +
+ +
+
+class PyXA.XABase.XAMenu(menu_items: list[Any], title: str = 'Select Item', prompt: str = 'Select an item', default_items: Optional[list[str]] = None, ok_button_name: str = 'Okay', cancel_button_name: str = 'Cancel', multiple_selections_allowed: bool = False, empty_selection_allowed: bool = False)[source]
+

Bases: XAObject

+

A custom list item selection menu.

+
+

New in version 0.0.8.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__annotations__

__module__

cancel_button_name

The name of the Cancel button

default_items

The items to initially select

empty_selection_allowed

Whether the user can click OK without selecting anything

menu_items

The items the user can choose from

multiple_selections_allowed

Whether multiple items can be selected

ok_button_name

The name of the OK button

prompt

The prompt to display in the dialog box

title

The title of the dialog window

+

Methods:

+ + + + + + + + + +

__init__(menu_items[, title, prompt, ...])

Instantiates a PyXA scripting object.

display()

Displays the menu, waits for the user to select an option or cancel, then returns the selected value or False if cancelled.

+
+
+__annotations__ = {'cancel_button_name': 'str', 'default_items': 'list[str]', 'empty_selection_allowed': 'bool', 'menu_items': 'list[Union[str, int]]', 'multiple_selections_allowed': 'bool', 'ok_button_name': 'str', 'prompt': 'str', 'title': 'str'}
+
+ +
+
+__init__(menu_items: list[Any], title: str = 'Select Item', prompt: str = 'Select an item', default_items: Optional[list[str]] = None, ok_button_name: str = 'Okay', cancel_button_name: str = 'Cancel', multiple_selections_allowed: bool = False, empty_selection_allowed: bool = False)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+cancel_button_name: str
+

The name of the Cancel button

+
+ +
+
+default_items: list[str]
+

The items to initially select

+
+ +
+
+display() Union[str, int, bool, list[str], list[int]][source]
+

Displays the menu, waits for the user to select an option or cancel, then returns the selected value or False if cancelled.

+
+
Returns:
+

The selected value or False if no value was selected

+
+
Return type:
+

Union[str, int, bool, list[str], list[int]]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+empty_selection_allowed: bool
+

Whether the user can click OK without selecting anything

+
+ +
+
+menu_items: list[Union[str, int]]
+

The items the user can choose from

+
+ +
+
+multiple_selections_allowed: bool
+

Whether multiple items can be selected

+
+ +
+
+ok_button_name: str
+

The name of the OK button

+
+ +
+
+prompt: str
+

The prompt to display in the dialog box

+
+ +
+
+title: str
+

The title of the dialog window

+
+ +
+ +
+
+class PyXA.XABase.XANetworkDomainObject(properties)[source]
+

Bases: XADomain

+

The network domain in the file system.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+class PyXA.XABase.XAObject(properties: dict = None)[source]
+

Bases: object

+

A general class for PyXA scripting objects.

+
+

See also

+

XABaseScriptable.XASBObject

+
+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

__annotations__

__dict__

__hash__

__module__

__weakref__

list of weak references to the object (if defined)

xa_estr

xa_sevt

xa_wksp

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + +

__eq__(other)

Return self==value.

__init__([properties])

Instantiates a PyXA scripting object.

has_element()

Whether this object has an AppleScript/JXA/Objective-C scripting element associated with it.

has_element_properties()

Whether the scripting element associated with this object has properties attached to it.

set_element(element)

Sets the element attribute to the supplied element and updates the properties attribute accordingly.

set_properties(properties)

Updates the value of multiple properties of the scripting element associated with this object.

set_property(property_name, value)

Updates the value of a single property of the scripting element associated with this object.

+
+
+__annotations__ = {}
+
+ +
+
+__dict__ = mappingproxy({'__module__': 'PyXA.XABase', '__doc__': 'A general class for PyXA scripting objects.\n\n    .. seealso:: :class:`XABaseScriptable.XASBObject`\n\n    .. versionadded:: 0.0.1\n    ', '_xa_sevt': None, '_xa_estr': None, '_xa_wksp': None, '__init__': <function XAObject.__init__>, 'xa_wksp': <property object>, 'xa_sevt': <property object>, 'xa_estr': <property object>, '_exec_suppresed': <function XAObject._exec_suppresed>, '_new_element': <function XAObject._new_element>, '_spawn_thread': <function XAObject._spawn_thread>, 'has_element': <function XAObject.has_element>, 'has_element_properties': <function XAObject.has_element_properties>, 'set_element': <function XAObject.set_element>, 'set_properties': <function XAObject.set_properties>, 'set_property': <function XAObject.set_property>, '__eq__': <function XAObject.__eq__>, '__dict__': <attribute '__dict__' of 'XAObject' objects>, '__weakref__': <attribute '__weakref__' of 'XAObject' objects>, '__hash__': None, '__annotations__': {}})
+
+ +
+
+__eq__(other: XAObject)[source]
+

Return self==value.

+
+ +
+
+__hash__ = None
+
+ +
+
+__init__(properties: dict = None)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+__weakref__
+

list of weak references to the object (if defined)

+
+ +
+
+has_element() bool[source]
+

Whether this object has an AppleScript/JXA/Objective-C scripting element associated with it.

+
+
Returns:
+

True if this object’s element attribute is set, False otherwise.

+
+
Return type:
+

bool

+
+
+
+

Deprecated since version 0.0.9: Perform this check manually instead.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+has_element_properties() bool[source]
+

Whether the scripting element associated with this object has properties attached to it.

+
+
Returns:
+

True if this object’s properties attribute is set, False otherwise.

+
+
Return type:
+

bool

+
+
+
+

Deprecated since version 0.0.8: All elements now have a properties dictionary, even if it is empty.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+set_element(element: XAObject) XAObject[source]
+

Sets the element attribute to the supplied element and updates the properties attribute accordingly.

+
+
Parameters:
+

element (XAObject) – The new scripting element to reference via the element attribute.

+
+
Returns:
+

A reference to this PyXA object.

+
+
Return type:
+

XAObject

+
+
+
+

Deprecated since version 0.0.9: Set the element attribute directly instead.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+set_properties(properties: dict) XAObject[source]
+

Updates the value of multiple properties of the scripting element associated with this object.

+
+
Parameters:
+

properties (dict) – A dictionary defining zero or more property names and updated values as key-value pairs.

+
+
Returns:
+

A reference to this PyXA object.

+
+
Return type:
+

XAObject

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+set_property(property_name: str, value: Any) XAObject[source]
+

Updates the value of a single property of the scripting element associated with this object.

+
+
Parameters:
+
    +
  • property (str) – The name of the property to assign a new value to.

  • +
  • value (Any) – The value to assign to the specified property.

  • +
+
+
Returns:
+

A reference to this PyXA object.

+
+
Return type:
+

XAObject

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property xa_estr
+
+ +
+
+property xa_sevt
+
+ +
+
+property xa_wksp
+
+ +
+ +
+
+class PyXA.XABase.XAParagraph(properties)[source]
+

Bases: XAText

+

A class for managing and interacting with paragraphs in text documents.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

+
+
+__annotations__ = {'color': 'XAColor', 'font': 'str', 'size': 'int', 'text': 'str'}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+class PyXA.XABase.XAParagraphList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XATextList

+

A wrapper around lists of paragraphs that employs fast enumeration techniques.

+
+

New in version 0.0.5.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + +

__init__(properties[, filter])

Creates an efficient wrapper object around a list of scriptable elements.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+class PyXA.XABase.XAPath(path: Union[str, NSURL])[source]
+

Bases: XAObject, XAClipboardCodable

+

A path to a file on the disk.

+
+

New in version 0.0.5.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + +

__annotations__

__hash__

__module__

path

The path string without the file:// prefix

url

The path string with the file:// prefix included

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + +

__eq__(other)

Return self==value.

__init__(path)

Instantiates a PyXA scripting object.

__repr__()

Return repr(self).

get_clipboard_representation()

Gets a clipboard-codable representation of the path.

open()

Opens the file in its default application.

select()

Opens a Finder window showing the folder containing this path, with the associated file selected.

show_in_finder()

Opens a Finder window showing the folder containing this path, with the associated file selected.

+
+
+__annotations__ = {}
+
+ +
+
+__eq__(other: XAPath)[source]
+

Return self==value.

+
+ +
+
+__hash__ = None
+
+ +
+
+__init__(path: Union[str, NSURL])[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+__repr__()[source]
+

Return repr(self).

+
+ +
+
+get_clipboard_representation() list[Union[objc.NSURL, str]][source]
+

Gets a clipboard-codable representation of the path.

+

When the clipboard content is set to a path, the raw file URL data and the string representation of the path are added to the clipboard.

+
+
Returns:
+

The clipboard-codable form of the path

+
+
Return type:
+

Any

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+open()[source]
+

Opens the file in its default application.

+
+ +
+
+path
+

The path string without the file:// prefix

+
+ +
+
+select()[source]
+

Opens a Finder window showing the folder containing this path, with the associated file selected. Synonymous with show_in_finder().

+
+ +
+
+show_in_finder()[source]
+

Opens a Finder window showing the folder containing this path, with the associated file selected. Synonymous with select().

+
+ +
+
+url
+

The path string with the file:// prefix included

+
+ +
+ +
+
+class PyXA.XABase.XAPredicate[source]
+

Bases: XAObject, XAClipboardCodable

+

A predicate used to filter arrays.

+
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__()

Instantiates a PyXA scripting object.

add_begins_with_condition(property, value)

Appends a BEGINSWITH condition to the end of the predicate format.

add_between_condition(property, value1, value2)

Appends a BETWEEN condition to the end of the predicate format.

add_contains_condition(property, value)

Appends a CONTAINS condition to the end of the predicate format.

add_ends_with_condition(property, value)

Appends a ENDSWITH condition to the end of the predicate format.

add_eq_condition(property, value)

Appends an == condition to the end of the predicate format.

add_geq_condition(property, value)

Appends a >= condition to the end of the predicate format.

add_gt_condition(property, value)

Appends a > condition to the end of the predicate format.

add_leq_condition(property, value)

Appends a <= condition to the end of the predicate format.

add_lt_condition(property, value)

Appends a < condition to the end of the predicate format.

add_match_condition(property, value)

Appends a MATCHES condition to the end of the predicate format.

add_neq_condition(property, value)

Appends a != condition to the end of the predicate format.

evaluate(target)

Evaluates the predicate on the given array.

evaluate_with_dict(properties_dict)

Evaluates the specified array against a predicate constructed from the supplied dictionary.

evaluate_with_format(fmt)

Evaluates the specified array against a predicate with the given format.

from_args(*args)

Populates the XAPredicate object from the supplied key, value argument pairs.

from_dict(ref_dict)

Populates the XAPredicate object from the supplied dictionary.

get_clipboard_representation()

Gets a clipboard-codable representation of the predicate.

insert_begins_with_condition(index, ...)

Inserts a BEGINSWITH condition to the predicate format at the desired location, specified by index.

insert_between_condition(index, property, ...)

Inserts a BETWEEN condition to the predicate format at the desired location, specified by index.

insert_contains_condition(index, property, value)

Inserts a CONTAINS condition to the predicate format at the desired location, specified by index.

insert_ends_with_condition(index, property, ...)

Inserts a ENDSWITH condition to the predicate format at the desired location, specified by index.

insert_eq_condition(index, property, value)

Inserts an == condition to the predicate format at the desired location, specified by index.

insert_geq_condition(index, property, value)

Inserts a >= condition to the predicate format at the desired location, specified by index.

insert_gt_condition(index, property, value)

Inserts a > condition to the predicate format at the desired location, specified by index.

insert_leq_condition(index, property, value)

Inserts a <= condition to the predicate format at the desired location, specified by index.

insert_lt_condition(index, property, value)

Inserts a < condition to the predicate format at the desired location, specified by index.

insert_match_condition(index, property, value)

Inserts a MATCHES condition to the predicate format at the desired location, specified by index.

insert_neq_condition(index, property, value)

Inserts a != condition to the predicate format at the desired location, specified by index.

+
+
+__annotations__ = {'keys': 'list[str]', 'operators': 'list[str]', 'values': 'list[str]'}
+
+ +
+
+__init__()[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+add_begins_with_condition(property: str, value: Any)[source]
+

Appends a BEGINSWITH condition to the end of the predicate format.

+

The added condition will have the form property BEGINSWITH value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+add_between_condition(property: str, value1: Union[int, float], value2: Union[int, float])[source]
+

Appends a BETWEEN condition to the end of the predicate format.

+

The added condition will have the form property BETWEEN [value1, value2].

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value1 (Union[int, float]) – The lower target value of the condition

  • +
  • value2 (Union[int, float]) – The upper target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+add_contains_condition(property: str, value: Any)[source]
+

Appends a CONTAINS condition to the end of the predicate format.

+

The added condition will have the form property CONTAINS value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+add_ends_with_condition(property: str, value: Any)[source]
+

Appends a ENDSWITH condition to the end of the predicate format.

+

The added condition will have the form property ENDSWITH value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+add_eq_condition(property: str, value: Any)[source]
+

Appends an == condition to the end of the predicate format.

+

The added condition will have the form property == value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+add_geq_condition(property: str, value: Any)[source]
+

Appends a >= condition to the end of the predicate format.

+

The added condition will have the form property >= value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+add_gt_condition(property: str, value: Any)[source]
+

Appends a > condition to the end of the predicate format.

+

The added condition will have the form property > value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+add_leq_condition(property: str, value: Any)[source]
+

Appends a <= condition to the end of the predicate format.

+

The added condition will have the form property <= value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+add_lt_condition(property: str, value: Any)[source]
+

Appends a < condition to the end of the predicate format.

+

The added condition will have the form property < value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+add_match_condition(property: str, value: Any)[source]
+

Appends a MATCHES condition to the end of the predicate format.

+

The added condition will have the form property MATCHES value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+add_neq_condition(property: str, value: Any)[source]
+

Appends a != condition to the end of the predicate format.

+

The added condition will have the form property != value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+evaluate(target: Union[NSArray, XAList]) NSArray[source]
+

Evaluates the predicate on the given array.

+
+
Parameters:
+

target (AppKit.NSArray) – The array to evaluate against the predicate

+
+
Returns:
+

The filtered array

+
+
Return type:
+

AppKit.NSArray

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+evaluate_with_dict(properties_dict: dict) NSArray[source]
+

Evaluates the specified array against a predicate constructed from the supplied dictionary.

+

The predicate will use == for all comparisons.

+
+
Parameters:
+
    +
  • target (AppKit.NSArray) – The array to filter

  • +
  • properties_dict (dict) – The specification of key, value pairs

  • +
+
+
Returns:
+

The filtered array

+
+
Return type:
+

AppKit.NSArray

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+evaluate_with_format(fmt: str) NSArray[source]
+

Evaluates the specified array against a predicate with the given format.

+
+
Parameters:
+
    +
  • target (AppKit.NSArray) – The array to filter

  • +
  • fmt (str) – The format string for the predicate

  • +
+
+
Returns:
+

The filtered array

+
+
Return type:
+

AppKit.NSArray

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+from_args(*args) XAPredicate[source]
+

Populates the XAPredicate object from the supplied key, value argument pairs.

+

The number of keys and values must be equal. The predicate will use == for all comparisons.

+
+
Raises:
+

InvalidPredicateError – Raised when the number of keys does not match the number of values

+
+
Returns:
+

The populated predicate object

+
+
Return type:
+

XAPredicate

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+from_dict(ref_dict: dict) XAPredicate[source]
+

Populates the XAPredicate object from the supplied dictionary.

+

The predicate will use == for all comparisons.

+
+
Parameters:
+

ref_dict (dict) – A specification of key, value pairs

+
+
Returns:
+

The populated predicate object

+
+
Return type:
+

XAPredicate

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the predicate.

+

When a predicate is copied to the clipboard, the string representation of the predicate is added to the clipboard.

+
+
Returns:
+

The string representation of the predicate

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+insert_begins_with_condition(index: int, property: str, value: Any)[source]
+

Inserts a BEGINSWITH condition to the predicate format at the desired location, specified by index.

+

The added condition will have the form property BEGINSWITH value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+insert_between_condition(index: int, property: str, value1: Union[int, float], value2: Union[int, float])[source]
+

Inserts a BETWEEN condition to the predicate format at the desired location, specified by index.

+

The added condition will have the form property BETWEEN [value1, value2].

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value1 (Union[int, float]) – The lower target value of the condition

  • +
  • value2 – The upper target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+insert_contains_condition(index: int, property: str, value: Any)[source]
+

Inserts a CONTAINS condition to the predicate format at the desired location, specified by index.

+

The added condition will have the form property CONTAINS value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+insert_ends_with_condition(index: int, property: str, value: Any)[source]
+

Inserts a ENDSWITH condition to the predicate format at the desired location, specified by index.

+

The added condition will have the form property ENDSWITH value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+insert_eq_condition(index: int, property: str, value: Any)[source]
+

Inserts an == condition to the predicate format at the desired location, specified by index.

+

The added condition will have the form property == value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+insert_geq_condition(index: int, property: str, value: Any)[source]
+

Inserts a >= condition to the predicate format at the desired location, specified by index.

+

The added condition will have the form property >= value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+insert_gt_condition(index: int, property: str, value: Any)[source]
+

Inserts a > condition to the predicate format at the desired location, specified by index.

+

The added condition will have the form property > value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+insert_leq_condition(index: int, property: str, value: Any)[source]
+

Inserts a <= condition to the predicate format at the desired location, specified by index.

+

The added condition will have the form property <= value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+insert_lt_condition(index: int, property: str, value: Any)[source]
+

Inserts a < condition to the predicate format at the desired location, specified by index.

+

The added condition will have the form property < value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+insert_match_condition(index: int, property: str, value: Any)[source]
+

Inserts a MATCHES condition to the predicate format at the desired location, specified by index.

+

The added condition will have the form property MATCHES value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+insert_neq_condition(index: int, property: str, value: Any)[source]
+

Inserts a != condition to the predicate format at the desired location, specified by index.

+

The added condition will have the form property != value.

+
+
Parameters:
+
    +
  • property (str) – A property of an object to check the condition against

  • +
  • value (Any) – The target value of the condition

  • +
+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+keys: list[str]
+
+ +
+
+operators: list[str]
+
+ +
+
+values: list[str]
+
+ +
+ +
+
+class PyXA.XABase.XASentence(properties)[source]
+

Bases: XAText

+

A class for managing and interacting with sentences in text documents.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

+
+
+__annotations__ = {'color': 'XAColor', 'font': 'str', 'size': 'int', 'text': 'str'}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+class PyXA.XABase.XASentenceList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XATextList

+

A wrapper around lists of sentences that employs fast enumeration techniques.

+
+

New in version 0.0.5.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + +

__init__(properties[, filter])

Creates an efficient wrapper object around a list of scriptable elements.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+class PyXA.XABase.XASound(sound_reference: Union[str, XAURL, XAPath])[source]
+

Bases: XAObject, XAClipboardCodable

+

A class for playing and interacting with audio files and data.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + +

__annotations__

__module__

duration

The duration of the sound in seconds

num_sample_frames

The number of sample frames in the audio file.

sample_rate

The sample rate for the sound format, in hertz.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__(sound_reference)

Instantiates a PyXA scripting object.

beep()

Plays the system Beep sound.

get_clipboard_representation()

Gets a clipboard-codable representation of the sound.

loop(times)

Plays the sound the specified number of times.

open()

Initializes one or more sounds from files.

pause()

Pauses the sound.

play()

Plays the sound from the beginning.

resume()

Plays the sound starting from the time it was last paused at.

save(file_path)

Saves the sound to the specified file path.

set_volume(volume)

Sets the volume of the sound.

stop()

Stops playback of the sound and rewinds it to the beginning.

trim(start_time, end_time)

Trims the sound to the specified start and end time, in seconds.

volume()

Returns the current volume of the sound.

+
+
+__annotations__ = {'duration': 'float'}
+
+ +
+
+__init__(sound_reference: Union[str, XAURL, XAPath])[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+beep()[source]
+

Plays the system Beep sound.

+
+

New in version 0.1.0.

+
+
+ +
+
+property duration: float
+

The duration of the sound in seconds

+
+ +
+
+get_clipboard_representation() list[Union[objc.NSSound, objc.NSURL, str]][source]
+

Gets a clipboard-codable representation of the sound.

+

When the clipboard content is set to a sound, the raw sound data, the associated file URL, and the path string of the file are added to the clipboard.

+
+
Returns:
+

The clipboard-codable form of the sound

+
+
Return type:
+

Any

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+loop(times: int) Self[source]
+

Plays the sound the specified number of times.

+

Audio playback runs in a separate thread. For the sound the play properly, you must keep the main thread alive over the duration of the desired playback.

+
+
Parameters:
+

times (int) – The number of times to loop the sound.

+
+
Returns:
+

A reference to this sound object.

+
+
Return type:
+

Self

+
+
Example:
+

+
+
>>> import PyXA
+>>> import time
+>>> glass_sound = PyXA.sound("Glass")
+>>> glass_sound.loop(10)
+>>> time.sleep(glass_sound.duration * 10)
+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property num_sample_frames: int
+

The number of sample frames in the audio file.

+
+

New in version 0.1.0.

+
+
+ +
+
+open() Union[XASound, XASoundList][source]
+

Initializes one or more sounds from files.

+
+
Parameters:
+

sound_references (Union[str, XAPath, list[Union[str, XAPath]]]) – The sound(s) to open

+
+
Returns:
+

The newly created sound object, or a list of sound objects

+
+
Return type:
+

Union[XASound, XASoundList]

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+pause() Self[source]
+

Pauses the sound.

+
+
Returns:
+

A reference to this sound object.

+
+
Return type:
+

Self

+
+
Example:
+

+
+
>>> import PyXA
+>>> glass_sound = PyXA.sound("Glass")
+>>> glass_sound.pause()
+
+
+
+

See also

+

resume(), stop()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+play() Self[source]
+

Plays the sound from the beginning.

+

Audio playback runs in a separate thread. For the sound the play properly, you must keep the main thread alive over the duration of the desired playback.

+
+
Returns:
+

A reference to this sound object.

+
+
Return type:
+

Self

+
+
Example:
+

+
+
>>> import PyXA
+>>> import time
+>>> glass_sound = PyXA.sound("Glass")
+>>> glass_sound.play()
+>>> time.sleep(glass_sound.duration)
+
+
+
+

See also

+

pause(), stop()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+resume() Self[source]
+

Plays the sound starting from the time it was last paused at.

+

Audio playback runs in a separate thread. For the sound the play properly, you must keep the main thread alive over the duration of the desired playback.

+
+
Returns:
+

A reference to this sound object.

+
+
Return type:
+

Self

+
+
Example:
+

+
+
>>> import PyXA
+>>> glass_sound = PyXA.sound("Glass")
+>>> glass_sound.resume()
+
+
+
+

See also

+

pause(), play()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+property sample_rate: float
+

The sample rate for the sound format, in hertz.

+
+

New in version 0.1.0.

+
+
+ +
+
+save(file_path: Union[XAPath, str])[source]
+

Saves the sound to the specified file path.

+
+
Parameters:
+

file_path (Union[XAPath, str]) – The path to save the sound to

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+set_volume(volume: float) Self[source]
+

Sets the volume of the sound.

+
+
Parameters:
+

volume (int) – The desired volume of the sound in the range [0.0, 1.0].

+
+
Returns:
+

A reference to this sound object.

+
+
Return type:
+

Self

+
+
Example:
+

+
+
>>> import PyXA
+>>> glass_sound = PyXA.sound("Glass")
+>>> glass_sound.set_volume(1.0)
+
+
+
+

See also

+

volume()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+stop() XASound[source]
+

Stops playback of the sound and rewinds it to the beginning.

+
+
Returns:
+

A reference to this sound object.

+
+
Return type:
+

XASound

+
+
Example:
+

+
+
>>> import PyXA
+>>> glass_sound = PyXA.sound("Glass")
+>>> glass_sound.stop()
+
+
+
+

See also

+

pause(), play()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+trim(start_time: float, end_time: float) Self[source]
+

Trims the sound to the specified start and end time, in seconds.

+

This will create a momentary sound data file in the current working directory for storing the intermediary trimmed sound data.

+
+
Parameters:
+
    +
  • start_time (float) – The start time in seconds

  • +
  • end_time (float) – The end time in seconds

  • +
+
+
Returns:
+

The updated sound object

+
+
Return type:
+

Self

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+volume() float[source]
+

Returns the current volume of the sound.

+
+
Returns:
+

The volume level of the sound.

+
+
Return type:
+

int

+
+
Example:
+

+
+
>>> import PyXA
+>>> glass_sound = PyXA.sound("Glass")
+>>> print(glass_sound.volume())
+1.0
+
+
+
+

See also

+

set_volume()

+
+
+

New in version 0.0.1.

+
+
+ +
+ +
+
+class PyXA.XABase.XASoundList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around lists of sounds that employs fast enumeration techniques.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__(properties[, filter])

Creates an efficient wrapper object around a list of scriptable elements.

duration()

file()

get_clipboard_representation()

Gets a clipboard-codable representation of each sound in the list.

num_sample_frames()

pause()

Pauses playback of all sounds in the list.

play()

Plays all sounds in the list simultaneously.

resume()

Resumes playback of all sounds in the list.

sample_rate()

stop()

Stops playback of all sounds in the list.

trim(start_time, end_time)

Trims each sound in the list to the specified start and end time, in seconds.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+duration() list[float][source]
+
+ +
+
+file() list[PyXA.XABase.XAPath][source]
+
+ +
+
+get_clipboard_representation() list[Union[objc.NSSound, objc.NSURL, str]][source]
+

Gets a clipboard-codable representation of each sound in the list.

+

When the clipboard content is set to a list of sounds, each sound’s raw sound data, its associated file URL, and its file path string are added to the clipboard.

+
+
Returns:
+

The clipboard-codable form of the sound

+
+
Return type:
+

Any

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+num_sample_frames() list[int][source]
+
+ +
+
+pause() Self[source]
+

Pauses playback of all sounds in the list.

+
+
Returns:
+

The list of sounds.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.1.2.

+
+
+ +
+
+play() Self[source]
+

Plays all sounds in the list simultaneously.

+
+
Returns:
+

The list of sounds.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.1.2.

+
+
+ +
+
+resume() Self[source]
+

Resumes playback of all sounds in the list.

+
+
Returns:
+

The list of sounds.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.1.2.

+
+
+ +
+
+sample_rate() list[float][source]
+
+ +
+
+stop() Self[source]
+

Stops playback of all sounds in the list.

+
+
Returns:
+

The list of sounds.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.1.2.

+
+
+ +
+
+trim(start_time: float, end_time: float) XASoundList[source]
+

Trims each sound in the list to the specified start and end time, in seconds.

+
+
Parameters:
+
    +
  • start_time (float) – The start time in seconds

  • +
  • end_time (float) – The end time in seconds

  • +
+
+
Returns:
+

The list of updated sounds

+
+
Return type:
+

XASoundList

+
+
+
+

New in version 0.1.2.

+
+
+ +
+ +
+
+class PyXA.XABase.XASpotlight(*query: list[Any])[source]
+

Bases: XAObject

+

A Spotlight query for files on the disk.

+
+

New in version 0.0.9.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

__annotations__

__module__

predicate

The predicate to filter search results by

query

The query terms to search

results

The results of the search

timeout

The amount of time in seconds to timeout the search after

+

Methods:

+ + + + + + + + + + + + +

__init__(*query)

Instantiates a PyXA scripting object.

run()

Runs the search.

show_in_finder()

Shows the search in Finder.

+
+
+__annotations__ = {'predicate': 'Union[str, XAPredicate]', 'query': 'list[Any]', 'results': 'list[XAPath]', 'timeout': 'int'}
+
+ +
+
+__init__(*query: list[Any])[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+predicate: Union[str, XAPredicate]
+

The predicate to filter search results by

+
+ +
+
+query: list[Any]
+

The query terms to search

+
+ +
+
+property results: list[PyXA.XABase.XAPath]
+

The results of the search

+
+ +
+
+run()[source]
+

Runs the search.

+
+
Example:
+

+
+
>>> import PyXA
+>>> from datetime import date, datetime, time
+>>> date1 = datetime.combine(date(2022, 5, 17), time(0, 0, 0))
+>>> date2 = datetime.combine(date(2022, 5, 18), time(0, 0, 0))
+>>> search = PyXA.XASpotlight(date1, date2)
+>>> print(search.results)
+[<<class 'PyXA.XAPath'>file:///Users/exampleUser/Downloads/>, <<class 'PyXA.XAPath'>file:///Users/exampleUser/Downloads/Example.txt>, ...]
+
+
+
+

New in version 0.0.9.

+
+
+ +
+
+show_in_finder()[source]
+

Shows the search in Finder. This might not reveal the same search results.

+
+

New in version 0.0.9.

+
+
+ +
+
+timeout: int
+

The amount of time in seconds to timeout the search after

+
+ +
+ +
+
+class PyXA.XABase.XASystemDomainObject(properties)[source]
+

Bases: XADomain

+

The system domain in the file system.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+class PyXA.XABase.XAText(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with the text of documents.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + +

__annotations__

__module__

color

The color of the first character

font

The name of the font of the first character

size

The size in points of the first character

text

The plaintext contents of the rich text

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

__len__()

__repr__()

Return repr(self).

__str__()

Return str(self).

attachments([filter])

Gets a list of attachments of the text.

attribute_runs([filter])

Gets a list of attribute runs in the text.

characters([filter])

Gets a list of characters in the text.

paragraphs([filter])

Gets a list of paragraphs in the text.

sentences()

Gets a list of sentences in the text.

tag_entities([unit])

Tags each word of the text with either the category of entity it represents (i.e.

tag_languages([unit])

Tags each paragraph of the text with its language.

tag_lemmas([unit])

Tags each word of the text with its stem word.

tag_parts_of_speech([unit])

Tags each word of the text with its associated part of speech.

tag_sentiments([sentiment_scale, unit])

Tags each paragraph of the text with a sentiment rating.

words([filter])

Gets a list of words in the text.

+
+
+__annotations__ = {'color': 'XAColor', 'font': 'str', 'size': 'int', 'text': 'str'}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__len__()[source]
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+__repr__()[source]
+

Return repr(self).

+
+ +
+
+__str__()[source]
+

Return str(self).

+
+ +
+
+attachments(filter: dict = None) XAAttachmentList[source]
+

Gets a list of attachments of the text.

+
+
Parameters:
+

filter (dict, optional) – The properties and associated values to filter attachments by, defaults to None

+
+
Returns:
+

The list of attachments

+
+
Return type:
+

XAAttachmentList

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+attribute_runs(filter: dict = None) XAAttributeRunList[source]
+

Gets a list of attribute runs in the text. For formatted text, this returns all sequences of characters sharing the same attributes.

+
+
Parameters:
+

filter (dict, optional) – The properties and associated values to filter attribute runs by, defaults to None

+
+
Returns:
+

The list of attribute runs

+
+
Return type:
+

XAAttributeRunList

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+characters(filter: dict = None) XACharacterList[source]
+

Gets a list of characters in the text.

+
+
Returns:
+

The list of characters

+
+
Return type:
+

XACharacterList

+
+
Example 1:
+

Get all characters in a text

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> note = app.notes()[0]
+>>> text = PyXA.XAText(note.plaintext)
+>>> print(text.characters())
+<<class 'PyXA.XACharacterList'>['T', 'h', 'i', 's', ' ', 'i', 's', ' ', 't', 'h', 'e', ' ', 'f', 'i', 'r', 's', 't', ' ', 'p', 'a', 'r', 'a', 'g', 'r', 'a', 'p', 'h', '.', '\n', '\n', 'T', 'h', 'i', 's', ' ', 'i', 's', ' ', 't', 'h', 'e', ' ', 's', 'e', 'c', 'o', 'n', 'd', ' ', 'p', 'a', 'r', 'a', 'g', 'r', 'a', 'p', 'h', '.', ' ', 'N', 'e', 'a', 't', '!', ' ', 'V', 'e', 'r', 'y', ' ', 'c', 'o', 'o', 'l', '.']>
+
+
+
+
Example 2:
+

Get the characters of the first word in a text

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> note = app.notes()[0]
+>>> text = PyXA.XAText(note.plaintext)
+>>> print(text.words()[0].characters())
+<<class 'PyXA.XACharacterList'>['T', 'h', 'i', 's']>
+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+property color: XAColor
+

The color of the first character

+
+ +
+
+property font: str
+

The name of the font of the first character

+
+ +
+
+paragraphs(filter: dict = None) XAParagraphList[source]
+

Gets a list of paragraphs in the text.

+
+
Parameters:
+

filter (dict, optional) – The properties and associated values to filter paragraphs by, defaults to None

+
+
Returns:
+

The list of paragraphs

+
+
Return type:
+

XAParagraphList

+
+
Example 1:
+

Get paragraphs of a text string

+
+
+
>>> import PyXA
+>>> string = """This is the first paragraph.
+>>> 
+>>> This is the second paragraph."""
+>>> text = PyXA.XAText(string)
+>>> print(text.paragraphs())
+<<class 'PyXA.XAWordList'>['This is the first paragraph.', 'This is the second paragraph. Neat! Very cool.']>
+
+
+
+
Example 2:
+

Get paragraphs of a Note

+
+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> note = app.notes()[0]
+>>> text = PyXA.XAText(note.plaintext)
+>>> print(text.paragraphs())
+<<class 'PyXA.XAWordList'>['This is the first paragraph.', 'This is the second paragraph. Neat! Very cool.']>
+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+sentences() XASentenceList[source]
+

Gets a list of sentences in the text.

+
+
Returns:
+

The list of sentencnes

+
+
Return type:
+

XASentenceList

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> note = app.notes()[0]
+>>> text = PyXA.XAText(note.plaintext)
+>>> print(text.sentences())
+<<class 'PyXA.XASentenceList'>['This is the first paragraph.\n', '\n', 'This is the second paragraph. ', 'Neat! ', 'Very cool.']>
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property size: int
+

The size in points of the first character

+
+ +
+
+tag_entities(unit: Literal['word', 'sentence', 'paragraph', 'document'] = 'word') list[tuple[str, str]][source]
+

Tags each word of the text with either the category of entity it represents (i.e. person, place, or organization) or its part of speech.

+
+
Parameters:
+

unit (Literal["word", "sentence", "paragraph", "document"]) – The grammatical unit to divide the text into for tagging, defaults to “word”

+
+
Returns:
+

A list of tuples identifying each word of the text and its entity category or part of speech

+
+
Return type:
+

list[tuple[str, str]]

+
+
Example:
+

+
+
>>> import PyXA
+>>> text = PyXA.XAText("Tim Cook is the CEO of Apple.")
+>>> print(text.tag_entities())
+[('Tim', 'PersonalName'), ('Cook', 'PersonalName'), ('is', 'Verb'), ('the', 'Determiner'), ('CEO', 'Noun'), ('of', 'Preposition'), ('Apple', 'OrganizationName')]
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+tag_languages(unit: Literal['word', 'sentence', 'paragraph', 'document'] = 'paragraph') list[tuple[str, str]][source]
+

Tags each paragraph of the text with its language.

+
+
Parameters:
+

unit (Literal["word", "sentence", "paragraph", "document"]) – The grammatical unit to divide the text into for tagging, defaults to “paragraph”

+
+
Returns:
+

A list of tuples identifying each paragraph of the text and its language

+
+
Return type:
+

list[tuple[str, str]]

+
+
Example:
+

+
+
>>> import PyXA
+>>> text = PyXA.XAText("This is English.\nQuesto è Italiano.\nDas ist deutsch.\nこれは日本語です。")
+>>> print(text.tag_languages())
+[('This is English.\n', 'en'), ('Questo è Italiano.\n', 'it'), ('Das ist deutsch.\n', 'de'), ('これは日本語です。', 'ja')]
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+tag_lemmas(unit: Literal['word', 'sentence', 'paragraph', 'document'] = 'word') list[tuple[str, str]][source]
+

Tags each word of the text with its stem word.

+
+
Parameters:
+

unit (Literal["word", "sentence", "paragraph", "document"]) – The grammatical unit to divide the text into for tagging, defaults to “word”

+
+
Returns:
+

A list of tuples identifying each word of the text and its stem words

+
+
Return type:
+

list[tuple[str, str]]

+
+
Example 1:
+

Lemmatize each word in a text

+
+
+
>>> import PyXA
+>>> text = PyXA.XAText("Here’s to the crazy ones. The misfits. The rebels.")
+>>> print(text.tag_lemmas())
+[('Here’s', 'here'), ('to', 'to'), ('the', 'the'), ('crazy', 'crazy'), ('ones', 'one'), ('The', 'the'), ('misfits', 'misfit'), ('The', 'the'), ('rebels', 'rebel')]
+
+
+
+
Example 2:
+

Combine parts of speech tagging and lemmatization

+
+
+
>>> import PyXA
+>>> text = PyXA.XAText("The quick brown fox tries to jump over the sleeping lazy dog.")
+>>> verbs = [pos[0] for pos in text.tag_parts_of_speech() if pos[1] == "Verb"]
+>>> for index, verb in enumerate(verbs):
+>>>     print(index, PyXA.XAText(verb).tag_lemmas())
+0 [('tries', 'try')]
+1 [('jump', 'jump')]
+2 [('sleeping', 'sleep')]
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+tag_parts_of_speech(unit: Literal['word', 'sentence', 'paragraph', 'document'] = 'word') list[tuple[str, str]][source]
+

Tags each word of the text with its associated part of speech.

+
+
Parameters:
+

unit (Literal["word", "sentence", "paragraph", "document"]) – The grammatical unit to divide the text into for tagging, defaults to “word”

+
+
Returns:
+

A list of tuples identifying each word of the text and its part of speech

+
+
Return type:
+

list[tuple[str, str]]

+
+
Example 1:
+

Extract nouns from a text

+
+
+
>>> import PyXA
+>>> text = PyXA.XAText("Here’s to the crazy ones. The misfits. The rebels.")
+>>> nouns = [pos[0] for pos in text.tag_parts_of_speech() if pos[1] == "Noun"]
+>>> print(nouns)
+['ones', 'misfits', 'rebels']
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+tag_sentiments(sentiment_scale: list[str] = None, unit: Literal['word', 'sentence', 'paragraph', 'document'] = 'paragraph') list[tuple[str, str]][source]
+

Tags each paragraph of the text with a sentiment rating.

+
+
Parameters:
+
    +
  • sentiment_scale (list[str]) – A list of terms establishing a range of sentiments from most negative to most postive

  • +
  • unit (Literal["word", "sentence", "paragraph", "document"]) – The grammatical unit to divide the text into for tagging, defaults to “paragraph”

  • +
+
+
Returns:
+

A list of tuples identifying each paragraph of the text and its sentiment rating

+
+
Return type:
+

list[tuple[str, str]]

+
+
Example 1:
+

Assess the sentiment of a string

+
+
+
>>> import PyXA
+>>> text = PyXA.XAText("This sucks.\nBut this is great!")
+>>> print(text.tag_sentiments())
+[('This sucks.\n', 'Negative'), ('But this is great!', 'Positive')]
+
+
+
+
Example 2:
+

Use a custom sentiment scale

+
+
+
>>> import PyXA
+>>> text = PyXA.XAText("This sucks.\nBut this is good!\nAnd this is great!")
+>>> print(text.tag_sentiments(sentiment_scale=["Very Negative", "Negative", "Somewhat Negative", "Neutral", "Somewhat Positive", "Positive", "Very Positive"]))
+[('This sucks.\n', 'Very Negative'), ('But this is good!\n', 'Neutral'), ('And this is great!', 'Very Positive')]
+
+
+
+
Example 3:
+

Use other tag units

+
+
+
>>> import PyXA
+>>> text = PyXA.XAText("This sucks.\nBut this is good!\nAnd this is great!")
+>>> print(1, text.tag_sentiments())
+>>> print(2, text.tag_sentiments(unit="word"))
+>>> print(3, text.tag_sentiments(unit="document"))
+1 [('This sucks.\n', 'Negative'), ('But this is good!\n', 'Neutral'), ('And this is great!', 'Positive')]
+2 [('This', 'Negative'), ('sucks', 'Negative'), ('.', 'Negative'), ('But', 'Neutral'), ('this', 'Neutral'), ('is', 'Neutral'), ('good', 'Neutral'), ('!', 'Neutral'), ('And', 'Positive'), ('this', 'Positive'), ('is', 'Positive'), ('great', 'Positive'), ('!', 'Positive')]
+3 [('This sucks.\nBut this is good!\nAnd this is great!', 'Neutral')]
+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+property text: str
+

The plaintext contents of the rich text

+
+ +
+
+words(filter: dict = None) XAWordList[source]
+

Gets a list of words in the text.

+
+
Returns:
+

The list of words

+
+
Return type:
+

XAWordList

+
+
Example:
+

+
+
>>> import PyXA
+>>> app = PyXA.Application("Notes")
+>>> note = app.notes()[0]
+>>> text = PyXA.XAText(note.plaintext)
+>>> print(text.words())
+<<class 'PyXA.XAWordList'>['This', 'is', 'the', 'first', 'paragraph.', 'This', 'is', 'the', 'second', 'paragraph.', 'Neat!', 'Very', 'cool.']>
+
+
+
+

New in version 0.0.1.

+
+
+ +
+ +
+
+class PyXA.XABase.XATextDocument(properties)[source]
+

Bases: XAObject

+

A class for managing and interacting with text documents.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + + + + +

__annotations__

__module__

text

The text of the document.

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

append(text)

Appends the provided text to the end of the document.

attachments([filter])

attribute_runs([filter])

characters([filter])

paragraphs([filter])

prepend(text)

Inserts the provided text at the beginning of the document.

reverse()

Reverses the text of the document.

sentences([filter])

words([filter])

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+append(text: str) XATextDocument[source]
+

Appends the provided text to the end of the document.

+
+
Parameters:
+

text (str) – The text to append.

+
+
Returns:
+

A reference to the document object.

+
+
Return type:
+

XATextDocument

+
+
+
+

See also

+

prepend(), set_text()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+attachments(filter: dict = None) XAAttachmentList[source]
+
+ +
+
+attribute_runs(filter: dict = None) XAAttributeRunList[source]
+
+ +
+
+characters(filter: dict = None) XACharacterList[source]
+
+ +
+
+paragraphs(filter: dict = None) XAParagraphList[source]
+
+ +
+
+prepend(text: str) XATextDocument[source]
+

Inserts the provided text at the beginning of the document.

+
+
Parameters:
+

text (str) – The text to insert.

+
+
Returns:
+

A reference to the document object.

+
+
Return type:
+

XATextDocument

+
+
+
+

See also

+

append(), set_text()

+
+
+

New in version 0.0.1.

+
+
+ +
+
+reverse() XATextDocument[source]
+

Reverses the text of the document.

+
+
Returns:
+

A reference to the document object.

+
+
Return type:
+

XATextDocument

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+sentences(filter: dict = None) XASentenceList[source]
+
+ +
+
+property text: XAText
+

The text of the document.

+
+ +
+
+words(filter: dict = None) XAWordList[source]
+
+ +
+ +
+
+class PyXA.XABase.XATextDocumentList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList, XAClipboardCodable

+

A wrapper around lists of text documents that employs fast enumeration techniques.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__(properties[, filter, obj_class])

Creates an efficient wrapper object around a list of scriptable elements.

__repr__()

Return repr(self).

attachments()

attribute_runs()

by_properties(properties)

by_text(text)

characters()

get_clipboard_representation()

Gets a clipboard-codable representation of each document in the list.

paragraphs()

properties()

text()

words()

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+__repr__()[source]
+

Return repr(self).

+
+ +
+
+attachments() XAAttachmentList[source]
+
+ +
+
+attribute_runs() XAAttributeRunList[source]
+
+ +
+
+by_properties(properties: dict) Optional[XATextDocument][source]
+
+ +
+
+by_text(text: str) Optional[XATextDocument][source]
+
+ +
+
+characters() XACharacterList[source]
+
+ +
+
+get_clipboard_representation() list[Union[str, objc.NSURL]][source]
+

Gets a clipboard-codable representation of each document in the list.

+

When the clipboard content is set to a list of documents, each documents’s file URL and name are added to the clipboard.

+
+
Returns:
+

A list of each document’s file URL and name

+
+
Return type:
+

list[Union[str, AppKit.NSURL]]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+paragraphs() XAParagraphList[source]
+
+ +
+
+properties() list[dict][source]
+
+ +
+
+text() XATextList[source]
+
+ +
+
+words() XAWordList[source]
+
+ +
+ +
+
+class PyXA.XABase.XATextList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList

+

A wrapper around lists of text objects that employs fast enumeration techniques.

+
+

New in version 0.0.4.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__(properties[, filter, obj_class])

Creates an efficient wrapper object around a list of scriptable elements.

__repr__()

Return repr(self).

attachments([filter])

attribute_runs([filter])

characters([filter])

paragraphs([filter])

sentences()

words([filter])

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+__repr__()[source]
+

Return repr(self).

+
+ +
+
+attachments(filter: dict = None) XAAttachmentList[source]
+
+ +
+
+attribute_runs(filter: dict = None) XAAttributeRunList[source]
+
+ +
+
+characters(filter: dict = None) XACharacterList[source]
+
+ +
+
+paragraphs(filter: dict = None) XAParagraphList[source]
+
+ +
+
+sentences() XASentenceList[source]
+
+ +
+
+words(filter: dict = None) XAWordList[source]
+
+ +
+ +
+
+class PyXA.XABase.XAURL(url: Union[str, NSURL, XAURL, XAPath])[source]
+

Bases: XAObject, XAClipboardCodable

+

A URL using any scheme recognized by the system. This can be a file URL.

+
+

New in version 0.0.5.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__annotations__

__hash__

__module__

base_url

fragment

The fragment identifier following a # symbol in the URL.

html

The html of the URL.

parameters

The query parameters of the URL.

port

The port that the URL points to.

scheme

The URI scheme of the URL.

soup

The bs4 object for the URL, starts as None until a bs4-related action is made

title

The title of the URL.

url

The string form of the URL

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

__eq__(other)

Return self==value.

__init__(url)

Instantiates a PyXA scripting object.

__repr__()

Return repr(self).

__str__()

Return str(self).

extract_images()

Extracts all images from HTML of the webpage that the URL points to.

extract_text()

Extracts the visible text from the webpage that the URL points to.

get_clipboard_representation()

Gets a clipboard-codable representation of the URL.

open()

Opens the URL in the appropriate default application.

+
+
+__annotations__ = {'soup': 'BeautifulSoup', 'url': 'str'}
+
+ +
+
+__eq__(other: XAURL)[source]
+

Return self==value.

+
+ +
+
+__hash__ = None
+
+ +
+
+__init__(url: Union[str, NSURL, XAURL, XAPath])[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+__repr__()[source]
+

Return repr(self).

+
+ +
+
+__str__()[source]
+

Return str(self).

+
+ +
+
+property base_url: str
+
+ +
+
+extract_images() list[PyXA.XABase.XAImage][source]
+

Extracts all images from HTML of the webpage that the URL points to.

+
+
Returns:
+

The list of extracted images

+
+
Return type:
+

list[XAImage]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+extract_text() list[str][source]
+

Extracts the visible text from the webpage that the URL points to.

+
+
Returns:
+

The list of extracted lines of text

+
+
Return type:
+

list[str]

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property fragment: str
+

The fragment identifier following a # symbol in the URL.

+
+ +
+
+get_clipboard_representation() list[Union[objc.NSURL, str]][source]
+

Gets a clipboard-codable representation of the URL.

+

When the clipboard content is set to a URL, the raw URL data and the string representation of the URL are added to the clipboard.

+
+
Returns:
+

The clipboard-codable form of the URL

+
+
Return type:
+

Any

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property html: Tag
+

The html of the URL.

+
+ +
+
+open()[source]
+

Opens the URL in the appropriate default application.

+
+

New in version 0.0.5.

+
+
+ +
+
+property parameters: str
+

The query parameters of the URL.

+
+ +
+
+property port: int
+

The port that the URL points to.

+
+ +
+
+property scheme: str
+

The URI scheme of the URL.

+
+ +
+
+soup: BeautifulSoup
+

The bs4 object for the URL, starts as None until a bs4-related action is made

+
+ +
+
+property title: str
+

The title of the URL.

+
+ +
+
+url: str
+

The string form of the URL

+
+ +
+ +
+
+class PyXA.XABase.XAURLList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XAList

+

A list of URLs. Supports bulk operations.

+
+

New in version 0.1.2.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__(properties[, filter])

Creates an efficient wrapper object around a list of scriptable elements.

base_url()

extract_images()

Extracts the images of each URL in the list.

extract_text()

Extracts the visible text of each URL in the list.

fragment()

html()

open()

Opens each URL in the list.

parameters()

port()

scheme()

title()

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+base_url() list[str][source]
+
+ +
+
+extract_images() list[list[PyXA.XABase.XAImage]][source]
+

Extracts the images of each URL in the list.

+
+

New in version 0.1.2.

+
+
+ +
+
+extract_text() list[list[str]][source]
+

Extracts the visible text of each URL in the list.

+
+

New in version 0.1.2.

+
+
+ +
+
+fragment() list[str][source]
+
+ +
+
+html() list[bs4.element.Tag][source]
+
+ +
+
+open()[source]
+

Opens each URL in the list.

+
+

New in version 0.1.2.

+
+
+ +
+
+parameters() list[str][source]
+
+ +
+
+port() list[int][source]
+
+ +
+
+scheme() list[str][source]
+
+ +
+
+title() list[str][source]
+
+ +
+ +
+
+class PyXA.XABase.XAUserDomainObject(properties)[source]
+

Bases: XADomain

+

The user domain in the file system.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__annotations__

__module__

desktop_folder

The user's Desktop folder

documents_folder

The user's Documents folder

downloads_folder

The user's Downloads folder

favorites_folder

The user's Favorites folder

home_folder

The user's Home folder

movies_folder

The user's Movies folder

music_folder

The user's Music folder

pictures_folder

The user's Pictures folder

public_folder

The user's Public folder

sites_folder

The user's Sites folder

temporary_items_folder

The Temporary Items folder

+

Methods:

+ + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+property desktop_folder: XAFolder
+

The user’s Desktop folder

+
+

New in version 0.1.0.

+
+
+ +
+
+property documents_folder: XAFolder
+

The user’s Documents folder

+
+

New in version 0.1.0.

+
+
+ +
+
+property downloads_folder: XAFolder
+

The user’s Downloads folder

+
+

New in version 0.1.0.

+
+
+ +
+
+property favorites_folder: XAFolder
+

The user’s Favorites folder

+
+

New in version 0.1.0.

+
+
+ +
+
+property home_folder: XAFolder
+

The user’s Home folder

+
+

New in version 0.1.0.

+
+
+ +
+
+property movies_folder: XAFolder
+

The user’s Movies folder

+
+

New in version 0.1.0.

+
+
+ +
+
+property music_folder: XAFolder
+

The user’s Music folder

+
+

New in version 0.1.0.

+
+
+ +
+
+property pictures_folder: XAFolder
+

The user’s Pictures folder

+
+

New in version 0.1.0.

+
+
+ +
+
+property public_folder: XAFolder
+

The user’s Public folder

+
+

New in version 0.1.0.

+
+
+ +
+
+property sites_folder: XAFolder
+

The user’s Sites folder

+
+

New in version 0.1.0.

+
+
+ +
+
+property temporary_items_folder: XAFolder
+

The Temporary Items folder

+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.XABase.XAVideo(video_reference: Union[str, XAURL, XAPath])[source]
+

Bases: XAObject

+

A class for interacting with video files and data.

+
+

New in version 0.1.0.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + + + + + + + + + + +

__init__(video_reference)

Instantiates a PyXA scripting object.

reverse(output_file)

Reverses the video and exports the result to the specified output file path.

save(file_path)

Saves the video at the specified file path.

show_in_quicktime()

Shows the video in QuickTime Player.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(video_reference: Union[str, XAURL, XAPath])[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+
+reverse(output_file: Union[XAPath, str])[source]
+

Reverses the video and exports the result to the specified output file path.

+
+
Parameters:
+

output_file (Union[XAPath, str]) – The file to export the reversed video to

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+save(file_path: Union[XAPath, str])[source]
+

Saves the video at the specified file path.

+
+
Parameters:
+

file_path (Union[XAPath, str]) – The path to save the video at

+
+
+
+

New in version 0.1.0.

+
+
+ +
+
+show_in_quicktime()[source]
+

Shows the video in QuickTime Player.

+

This will create a momentary video data file in the current working directory to store intermediary video data.

+
+

New in version 0.1.0.

+
+
+ +
+ +
+
+class PyXA.XABase.XAWord(properties)[source]
+

Bases: XAText

+

A class for managing and interacting with words in text documents.

+
+

New in version 0.0.1.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + +

__init__(properties)

Instantiates a PyXA scripting object.

+
+
+__annotations__ = {'color': 'XAColor', 'font': 'str', 'size': 'int', 'text': 'str'}
+
+ +
+
+__init__(properties)[source]
+

Instantiates a PyXA scripting object.

+
+
Parameters:
+

properties (dict, optional) – A dictionary of properties to assign to this object.

+
+
+
+

Changed in version 0.0.3: Removed on-the-fly creation of class attributes. All objects should concretely define their properties.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+class PyXA.XABase.XAWordList(properties: dict, filter: Optional[dict] = None)[source]
+

Bases: XATextList

+

A wrapper around lists of words that employs fast enumeration techniques.

+
+

New in version 0.0.5.

+
+

Attributes:

+ + + + + + + + + +

__annotations__

__module__

+

Methods:

+ + + + + + +

__init__(properties[, filter])

Creates an efficient wrapper object around a list of scriptable elements.

+
+
+__annotations__ = {}
+
+ +
+
+__init__(properties: dict, filter: Optional[dict] = None)[source]
+

Creates an efficient wrapper object around a list of scriptable elements.

+
+
Parameters:
+
    +
  • properties (dict) – PyXA properties passed to this object for utility purposes

  • +
  • object_class (type, optional) – _description_, defaults to None

  • +
  • filter (Union[dict, None], optional) – A dictionary of properties and values to filter items by, defaults to None

  • +
+
+
+
+

Changed in version 0.0.8: The filter property is deprecated and will be removed in a future version. Use the filter() method instead.

+
+
+

New in version 0.0.3.

+
+
+ +
+
+__module__ = 'PyXA.XABase'
+
+ +
+ +
+
+PyXA.XABase.current_application() XAApplication[source]
+

Retrieves a PyXA representation of the frontmost application.

+
+
Returns:
+

A PyXA application object referencing the current application.

+
+
Return type:
+

XAApplication

+
+
+
+

Changed in version 0.1.1: Moved into the XABase module.

+
+
+

New in version 0.0.1.

+
+
+ +
+
+PyXA.XABase.running_applications() list[PyXA.XABase.XAApplication][source]
+

Gets PyXA references to all currently visible (not hidden or minimized) running applications whose app bundles are stored in typical application directories.

+
+
Returns:
+

A list of PyXA application objects.

+
+
Return type:
+

list[XAApplication]

+
+
Example 1:
+

Get the name of each running application

+
+
+
>>> import PyXA
+>>> apps = PyXA.running_applications()
+>>> print(apps.localized_name())
+['GitHub Desktop', 'Safari', 'Code', 'Terminal', 'Notes', 'Messages', 'TV']
+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+PyXA.XABase.supported_applications: list[str] = ['finder', 'safari', 'music', 'reminders', 'notes', 'messages', 'calendar', 'textedit', 'pages', 'terminal', 'preview', 'tv', 'contacts', 'shortcuts', 'shortcuts events', 'photos', 'system preferences', 'system settings', 'keynote', 'mail', 'automator', 'console', 'font book', 'quicktime player', 'numbers', 'script editor', 'system events', 'image events', 'calculator', 'dictionary', 'maps', 'podcasts', 'stocks', 'chromium', 'brave browser', 'microsoft edge', 'google chrome', 'opera', 'vivaldi', 'blisk', 'iridium', 'alfred', 'drafts', 'hammerspoon', 'rstudio', 'iterm', 'vlc', 'fantastical', 'omnioutliner', 'spotify', 'flow', 'bike', 'adobe acrobat reader', 'cardhop', 'amphetamine']
+

A list of names of supported scriptable applications

+
+ +
+
+PyXA.XABase.unOSType(i: int)[source]
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/xabasescriptable.html b/docs/reference/xabasescriptable.html new file mode 100644 index 0000000..92fcea3 --- /dev/null +++ b/docs/reference/xabasescriptable.html @@ -0,0 +1,808 @@ + + + + + + + XABaseScriptable Module — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

XABaseScriptable Module

+

Classes:

+ + + + + + + + + + + + + + + +

XASBApplication(properties)

An application class for scriptable applications.

XASBPrintable([properties])

XASBWindow(properties)

XASBWindowList(properties[, filter, obj_class])

A wrapper around a list of windows.

+
+
+class PyXA.XABaseScriptable.XASBApplication(properties)[source]
+

Bases: XAApplication

+

An application class for scriptable applications.

+
+

See also

+

XABase.XAApplication

+
+

Classes:

+ + + + + + + + + +

PrintErrorHandling(value[, names, module, ...])

Options for how to handle errors while printing.

SaveOption(value[, names, module, qualname, ...])

Options for whether to save documents when closing them.

+

Methods:

+ + + + + + + + + + + + +

activate()

Activates the application.

set_property(property_name, value)

Updates the value of a single property of the scripting element associated with this object.

windows([filter])

Returns a list of windows, as PyXA objects, matching the given filter.

+

Attributes:

+ + + + + + + + + +

front_window

The front window of the application.

xa_scel

+
+
+class PrintErrorHandling(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for how to handle errors while printing.

+

Attributes:

+ + + + + + + + + +

DETAILED

Print a detailed report of PostScript errors

STANDARD

Standard PostScript error handling

+
+
+DETAILED = 'lwdt'
+

Print a detailed report of PostScript errors

+
+ +
+
+STANDARD = 'lwst'
+

Standard PostScript error handling

+
+ +
+ +
+
+class SaveOption(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
+

Bases: Enum

+

Options for whether to save documents when closing them.

+

Attributes:

+ + + + + + + + + + + + +

ASK

Ask user whether to save the file (bring up dialog)

NO

Do not save the file

YES

Save the file

+
+
+ASK = 1634954016
+

Ask user whether to save the file (bring up dialog)

+
+ +
+
+NO = 1852776480
+

Do not save the file

+
+ +
+
+YES = 2036691744
+

Save the file

+
+ +
+ +
+
+activate() Self[source]
+

Activates the application.

+
+
Returns:
+

The application object

+
+
Return type:
+

Self

+
+
+
+

New in version 0.1.0.2.

+
+
+ +
+
+property front_window: XASBWindow
+

The front window of the application.

+
+ +
+
+set_property(property_name, value)[source]
+

Updates the value of a single property of the scripting element associated with this object.

+
+
Parameters:
+
    +
  • property (str) – The name of the property to assign a new value to.

  • +
  • value (Any) – The value to assign to the specified property.

  • +
+
+
Returns:
+

A reference to this PyXA object.

+
+
Return type:
+

XAObject

+
+
+
+

New in version 0.0.1.

+
+
+ +
+
+windows(filter: dict = None) XASBWindowList[source]
+

Returns a list of windows, as PyXA objects, matching the given filter.

+
+
Parameters:
+

filter (Union[dict, None]) – A dictionary specifying property-value pairs that all returned windows will have, or None

+
+
Returns:
+

The list of windows

+
+
Return type:
+

XASBWindowList

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+property xa_scel: SBApplication
+
+ +
+ +
+
+class PyXA.XABaseScriptable.XASBPrintable(properties: dict = None)[source]
+

Bases: XAObject

+

Methods:

+ + + + + + +

print([properties, print_dialog])

Prints a document, window, or item.

+
+
+print(properties: dict = None, print_dialog=None) XAObject[source]
+

Prints a document, window, or item.

+
+
Returns:
+

A reference to the PyXA objects that called this method.

+
+
Return type:
+

XABase.XAObject

+
+
+
+

Changed in version 0.0.2: Printing now initialized from a separate thread to avoid delaying main thread

+
+
+

New in version 0.0.1.

+
+
+ +
+ +
+
+class PyXA.XABaseScriptable.XASBWindow(properties)[source]
+

Bases: XAObject, XACloseable

+

Attributes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

bounds

The bounding rectangle of the window.

closeable

Whether the window has a close button.

id

The unique identifier for the window.

index

The index of the window, ordered front to back.

miniaturizable

Whether the window can be miniaturized.

miniaturized

Whether the window is currently miniaturized.

name

The title of the window.

resizable

Whether the window can be resized.

visible

Whether the window is currently visible.

zoomable

Whether the window has a zoom button.

zoomed

Whether the window is currently zoomed.

+

Methods:

+ + + + + + + + + + + + + + + +

collapse()

Collapses (minimizes) the window.

get_clipboard_representation()

Gets a clipboard-codable representation of the window.

toggle_zoom()

Uncollapses (unminimizes/expands) the window.

uncollapse()

Uncollapses (unminimizes/expands) the window.

+
+
+property bounds: XARectangle
+

The bounding rectangle of the window.

+
+ +
+
+property closeable: bool
+

Whether the window has a close button.

+
+ +
+
+collapse() Self[source]
+

Collapses (minimizes) the window.

+
+
Returns:
+

A reference to the now-collapsed window object.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of the window.

+

When the clipboard content is set to a window, the name of the window is added to the clipboard.

+
+
Returns:
+

The name of the window

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+property id: int
+

The unique identifier for the window.

+
+ +
+
+property index: int
+

The index of the window, ordered front to back.

+
+ +
+
+property miniaturizable: bool
+

Whether the window can be miniaturized.

+
+ +
+
+property miniaturized: bool
+

Whether the window is currently miniaturized.

+
+ +
+
+property name: str
+

The title of the window.

+
+ +
+
+property resizable: bool
+

Whether the window can be resized.

+
+ +
+
+toggle_zoom() Self[source]
+

Uncollapses (unminimizes/expands) the window.

+
+
Returns:
+

A reference to the uncollapsed window object.

+
+
Return type:
+

Self

+
+
+
+

Deprecated since version 0.1.0.2: Set the zoomed attribute instead.

+
+
+

New in version 0.0.4.

+
+
+ +
+
+uncollapse() Self[source]
+

Uncollapses (unminimizes/expands) the window.

+
+
Returns:
+

A reference to the uncollapsed window object.

+
+
Return type:
+

Self

+
+
+
+

New in version 0.0.4.

+
+
+ +
+
+property visible: bool
+

Whether the window is currently visible.

+
+ +
+
+property zoomable: bool
+

Whether the window has a zoom button.

+
+ +
+
+property zoomed: bool
+

Whether the window is currently zoomed.

+
+ +
+ +
+
+class PyXA.XABaseScriptable.XASBWindowList(properties: dict, filter: Optional[dict] = None, obj_class=None)[source]
+

Bases: XAList

+

A wrapper around a list of windows.

+
+

New in version 0.0.5.

+
+

Methods:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

bounds()

by_bounds(bounds)

by_closeable(closeable)

by_id(id)

by_index(index)

by_miniaturizable(miniaturizable)

by_miniaturized(miniaturized)

by_name(name)

by_resizable(resizable)

by_visible(visible)

by_zoomable(zoomable)

by_zoomed(zoomed)

closeable()

collapse()

Collapses all windows in the list.

get_clipboard_representation()

Gets a clipboard-codable representation of each window in the list.

id()

index()

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

miniaturizable()

miniaturized()

name()

resizable()

uncollapse()

Uncollapses all windows in the list.

visible()

zoomable()

zoomed()

+
+
+bounds() list[PyXA.XATypes.XARectangle][source]
+
+ +
+
+by_bounds(bounds: Union[tuple[int, int, int, int], XARectangle]) Optional[XASBWindow][source]
+
+ +
+
+by_closeable(closeable: bool) Optional[XASBWindow][source]
+
+ +
+
+by_id(id: int) Optional[XASBWindow][source]
+
+ +
+
+by_index(index: int) Optional[XASBWindow][source]
+
+ +
+
+by_miniaturizable(miniaturizable: bool) Optional[XASBWindow][source]
+
+ +
+
+by_miniaturized(miniaturized: bool) Optional[XASBWindow][source]
+
+ +
+
+by_name(name: str) Optional[XASBWindow][source]
+
+ +
+
+by_resizable(resizable: bool) Optional[XASBWindow][source]
+
+ +
+
+by_visible(visible: bool) Optional[XASBWindow][source]
+
+ +
+
+by_zoomable(zoomable: bool) Optional[XASBWindow][source]
+
+ +
+
+by_zoomed(zoomed: bool) Optional[XASBWindow][source]
+
+ +
+
+closeable() list[bool][source]
+
+ +
+
+collapse()[source]
+

Collapses all windows in the list.

+
+

New in version 0.0.5.

+
+
+ +
+
+get_clipboard_representation() str[source]
+

Gets a clipboard-codable representation of each window in the list.

+

When the clipboard content is set to a list of windows, the name of each window is added to the clipboard.

+
+
Returns:
+

A list of window names

+
+
Return type:
+

str

+
+
+
+

New in version 0.0.8.

+
+
+ +
+
+id() list[str][source]
+
+ +
+
+index() list[int][source]
+

Returns the index of the first occurrence of the element in the list, or -1 if no such element exists in the list.

+
+

New in version 0.1.2.

+
+
+ +
+
+miniaturizable() list[bool][source]
+
+ +
+
+miniaturized() list[bool][source]
+
+ +
+
+name() list[str][source]
+
+ +
+
+resizable() list[bool][source]
+
+ +
+
+uncollapse()[source]
+

Uncollapses all windows in the list.

+
+

New in version 0.0.5.

+
+
+ +
+
+visible() list[bool][source]
+
+ +
+
+zoomable() list[bool][source]
+
+ +
+
+zoomed() list[bool][source]
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/xaerrors.html b/docs/reference/xaerrors.html new file mode 100644 index 0000000..2e5a2f3 --- /dev/null +++ b/docs/reference/xaerrors.html @@ -0,0 +1,172 @@ + + + + + + + XAErrors Module — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

XAErrors Module

+

Exceptions:

+ + + + + + + + + + + + + + + +

ApplicationNotFoundError(name)

AuthenticationError(message)

InvalidPredicateError(message)

UnconstructableClassError(message)

+
+
+exception PyXA.XAErrors.ApplicationNotFoundError(name: str)[source]
+

Bases: Exception

+
+ +
+
+exception PyXA.XAErrors.AuthenticationError(message: str)[source]
+

Bases: Exception

+
+ +
+
+exception PyXA.XAErrors.InvalidPredicateError(message: str)[source]
+

Bases: Exception

+
+ +
+
+exception PyXA.XAErrors.UnconstructableClassError(message: str)[source]
+

Bases: Exception

+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/xaprotocols.html b/docs/reference/xaprotocols.html new file mode 100644 index 0000000..98f9297 --- /dev/null +++ b/docs/reference/xaprotocols.html @@ -0,0 +1,555 @@ + + + + + + + XAProtocols Module — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

XAProtocols Module

+

Classes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XACanOpenPath()

A protocol for classes that can open an item at a given path (either in its default application or in an application whose PyXA object extends this class).

XACanPrintPath()

A protocol for classes that can print a file at a given path (either in its default application or in an application whose PyXA object extends this class).

XAClipboardCodable()

A protocol for classes that can be copied to the clipboard.

XACloseable()

XADeletable()

A protocol for classes that can be deleted via a delete() method.

XAImageLike()

A protocol for classes that can be treated the same as XAImage.

XAPathLike()

A protocol for classes that can be treated the same as XAPath.

XAPrintable()

A protocol for classes that can be printed.

XAProtocol()

A meta-class for protocols that other classes can adhere to.

XASelectable()

A protocol for classes that can be selected via a select() method.

XAShowable()

A protocol for classes that can be shown via a show() method.

+
+
+class PyXA.XAProtocols.XACanOpenPath[source]
+

Bases: XAProtocol

+

A protocol for classes that can open an item at a given path (either in its default application or in an application whose PyXA object extends this class).

+
+

Changed in version 0.0.8: Moved from XABase into XAProtocols

+
+
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + +

open(target)

Opens the file/website at the given filepath/URL.

+
+
+open(target: str) Any[source]
+

Opens the file/website at the given filepath/URL.

+

Child classes of XACanOpenPath should redefine this method as necessary.

+
+
Parameters:
+

target (str) – The path to a file or the URL to a website to open.

+
+
Returns:
+

A reference to the opened document or element, or None if no document/element was created or it cannot be found

+
+
Return type:
+

Any

+
+
+
+

New in version 0.0.1.

+
+
+ +
+ +
+
+class PyXA.XAProtocols.XACanPrintPath[source]
+

Bases: XAProtocol

+

A protocol for classes that can print a file at a given path (either in its default application or in an application whose PyXA object extends this class).

+
+

Changed in version 0.0.8: Moved from XABase into XAProtocols

+
+
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + +

print(target)

Prints the file/website at the given filepath/URL.

+
+
+print(target: str) XACanPrintPath[source]
+

Prints the file/website at the given filepath/URL.

+

Child classes of XACanPrintPath should redefine this method as necessary.

+
+
Parameters:
+

target (str) – The path to a file or the URL to a website to print.

+
+
Returns:
+

A reference to the PyXA object that called this method.

+
+
Return type:
+

XACanPrintPath

+
+
+
+

New in version 0.0.1.

+
+
+ +
+ +
+
+class PyXA.XAProtocols.XAClipboardCodable[source]
+

Bases: XAProtocol

+

A protocol for classes that can be copied to the clipboard.

+
+

New in version 0.0.8.

+
+

Methods:

+ + + + + + +

get_clipboard_representation()

Gets a clipboard-codable representation of the object.

+
+
+get_clipboard_representation() Any[source]
+

Gets a clipboard-codable representation of the object.

+

This method should be overriden where reasonable in child classes of XAClipboardCodable.

+
+
Returns:
+

The clipboard-codable form of the content

+
+
Return type:
+

Any

+
+
+
+ +
+ +
+
+class PyXA.XAProtocols.XACloseable[source]
+

Bases: XAProtocol

+

Methods:

+ + + + + + +

close([save, location])

Closes the object.

+
+
+close(save: XACloseable.SaveOption = None, location: Optional[str] = None)[source]
+

Closes the object.

+

Child classes of XACloseable should override this method as necessary.

+
+

New in version 0.0.8.

+
+
+ +
+ +
+
+class PyXA.XAProtocols.XADeletable[source]
+

Bases: XAProtocol

+

A protocol for classes that can be deleted via a delete() method.

+
+

Changed in version 0.0.8: Moved from XABase into XAProtocols

+
+
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + +

delete()

Deletes the object.

+
+
+delete()[source]
+

Deletes the object.

+

Child classes of XADeletable should redefine this method as necessary.

+
+
Returns:
+

A reference to the PyXA object that called this method.

+
+
Return type:
+

XAShowable

+
+
Returns:
+

A reference to the PyXA object that called this method.

+
+
Return type:
+

XAObject

+
+
+
+

New in version 0.0.1.

+
+
+ +
+ +
+
+class PyXA.XAProtocols.XAImageLike[source]
+

Bases: XAProtocol

+

A protocol for classes that can be treated the same as XAImage.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + +

get_image_representation()

Gets a representation of the object that can be used to initialize an XAImage object.

+
+
+get_image_representation() Any[source]
+

Gets a representation of the object that can be used to initialize an XAImage object.

+

This method must be overriden in child classes of XAImageLike.

+
+
Returns:
+

The XAImage-compatible form of the object, or None if no such form exists

+
+
Return type:
+

Any

+
+
+
+ +
+ +
+
+class PyXA.XAProtocols.XAPathLike[source]
+

Bases: XAProtocol

+

A protocol for classes that can be treated the same as XAPath.

+
+

New in version 0.1.0.

+
+

Methods:

+ + + + + + +

get_path_representation()

Gets a representation of the object that can be used to initialize an XAPath object.

+
+
+get_path_representation() Any[source]
+

Gets a representation of the object that can be used to initialize an XAPath object.

+

This method must be overriden in child classes of XAPathLike.

+
+
Returns:
+

The XAPath-compatible form of the object, or None if no such form exists

+
+
Return type:
+

Any

+
+
+
+ +
+ +
+
+class PyXA.XAProtocols.XAPrintable[source]
+

Bases: XAProtocol

+

A protocol for classes that can be printed.

+
+

New in version 0.0.8.

+
+

Methods:

+ + + + + + +

print([print_properties, show_dialog])

Prints the object.

+
+
+print(print_properties: Optional[dict] = None, show_dialog: bool = True) XAPrintable[source]
+

Prints the object.

+

Child classes of XAPrintable should override this method as necessary.

+
+
Parameters:
+
    +
  • show_dialog (bool, optional) – Whether to show the print dialog, defaults to True

  • +
  • print_properties (Union[dict, None], optional) – Properties to set for printing, defaults to None

  • +
+
+
Returns:
+

A reference to the PyXA object that called this method.

+
+
Return type:
+

XACanPrintPath

+
+
+
+

New in version 0.0.8.

+
+
+ +
+ +
+
+class PyXA.XAProtocols.XAProtocol[source]
+

Bases: object

+

A meta-class for protocols that other classes can adhere to.

+
+ +
+
+class PyXA.XAProtocols.XASelectable[source]
+

Bases: XAProtocol

+

A protocol for classes that can be selected via a select() method.

+
+

Changed in version 0.0.8: Moved from XABase into XAProtocols

+
+
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + +

select()

Selects the object This may open a new window, depending on which kind of object and application it acts on.

+
+
+select() XASelectable[source]
+

Selects the object This may open a new window, depending on which kind of object and application it acts on.

+

Child classes of XASelectable should redefine this method as necessary.

+
+
Returns:
+

A reference to the PyXA object that called this method.

+
+
Return type:
+

XASelectable

+
+
+
+

New in version 0.0.1.

+
+
+ +
+ +
+
+class PyXA.XAProtocols.XAShowable[source]
+

Bases: XAProtocol

+

A protocol for classes that can be shown via a show() method.

+
+

Changed in version 0.0.8: Moved from XABase into XAProtocols

+
+
+

New in version 0.0.1.

+
+

Methods:

+ + + + + + +

show()

Shows the object.

+
+
+show() XAShowable[source]
+

Shows the object.

+

Child classes of XAShowable should redefine this method as necessary.

+
+
Returns:
+

A reference to the PyXA object that called this method.

+
+
Return type:
+

XAShowable

+
+
+
+

New in version 0.0.1.

+
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/reference/xatypes.html b/docs/reference/xatypes.html new file mode 100644 index 0000000..e79b2e0 --- /dev/null +++ b/docs/reference/xatypes.html @@ -0,0 +1,222 @@ + + + + + + + XATypes Module — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

XATypes Module

+

Types used throughout PyXA for various purposes.

+
+

New in version 0.1.1.

+
+

Classes:

+ + + + + + + + + +

XAPoint(x, y)

A named tuple representing an (x, y) coordinate.

XARectangle(x, y, width, height)

A named tuple representing a rectangle with an origin point (x, y) and dimensions width x height.

+
+
+class PyXA.XATypes.XAPoint(x, y)
+

Bases: tuple

+

A named tuple representing an (x, y) coordinate.

+

Attributes:

+ + + + + + + + + +

x

Alias for field number 0

y

Alias for field number 1

+
+
+x
+

Alias for field number 0

+
+ +
+
+y
+

Alias for field number 1

+
+ +
+ +
+
+class PyXA.XATypes.XARectangle(x, y, width, height)
+

Bases: tuple

+

A named tuple representing a rectangle with an origin point (x, y) and dimensions width x height.

+

Attributes:

+ + + + + + + + + + + + + + + +

height

Alias for field number 3

width

Alias for field number 2

x

Alias for field number 0

y

Alias for field number 1

+
+
+height
+

Alias for field number 3

+
+ +
+
+width
+

Alias for field number 2

+
+ +
+
+x
+

Alias for field number 0

+
+ +
+
+y
+

Alias for field number 1

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/requirements.txt b/docs/requirements.txt deleted file mode 100644 index c2297fd..0000000 --- a/docs/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -sphinx==5.3.0 -sphinx-automodapi==0.14.1 -sphinx-rtd-theme==1.1.1 -autodocsumm==0.2.9 -sphinx-enum-extend==0.1.3 diff --git a/docs/search.html b/docs/search.html new file mode 100644 index 0000000..aed9954 --- /dev/null +++ b/docs/search.html @@ -0,0 +1,121 @@ + + + + + + Search — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + + + +
+ +
+ +
+
+
+ +
+ +
+

© Copyright 2022, Stephen Kaplan.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/searchindex.js b/docs/searchindex.js new file mode 100644 index 0000000..46ee6e1 --- /dev/null +++ b/docs/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["about/index", "bugs", "index", "reference/additions/learn", "reference/additions/speech", "reference/additions/ui", "reference/additions/utils", "reference/additions/web", "reference/apps/automator", "reference/apps/bike", "reference/apps/calculator", "reference/apps/calendar", "reference/apps/cardhop", "reference/apps/chromium", "reference/apps/console", "reference/apps/contacts", "reference/apps/dictionary", "reference/apps/drafts", "reference/apps/fantastical", "reference/apps/finder", "reference/apps/flow", "reference/apps/fontbook", "reference/apps/hammerspoon", "reference/apps/imageevents", "reference/apps/iterm", "reference/apps/iwork", "reference/apps/keynote", "reference/apps/mail", "reference/apps/maps", "reference/apps/media", "reference/apps/messages", "reference/apps/music", "reference/apps/notes", "reference/apps/numbers", "reference/apps/omnioutliner", "reference/apps/pages", "reference/apps/photos", "reference/apps/preview", "reference/apps/quicktimeplayer", "reference/apps/reminders", "reference/apps/rstudio", "reference/apps/safari", "reference/apps/shortcuts", "reference/apps/spotify", "reference/apps/stocks", "reference/apps/systemevents", "reference/apps/systempreferences", "reference/apps/terminal", "reference/apps/textedit", "reference/apps/tv", "reference/apps/vlc", "reference/index", "reference/pyxa", "reference/xabase", "reference/xabasescriptable", "reference/xaerrors", "reference/xaprotocols", "reference/xatypes", "tutorial/applescript", "tutorial/apps/automator/index", "tutorial/apps/automator/tutorial1", "tutorial/apps/bike/index", "tutorial/apps/calculator/index", "tutorial/apps/calendar/index", "tutorial/apps/cardhop/index", "tutorial/apps/chromium/index", "tutorial/apps/console/index", "tutorial/apps/contacts/index", "tutorial/apps/dictionary/index", "tutorial/apps/drafts/index", "tutorial/apps/fantastical/index", "tutorial/apps/finder/index", "tutorial/apps/flow/index", "tutorial/apps/fontbook/index", "tutorial/apps/hammerspoon/index", "tutorial/apps/imageevents/index", "tutorial/apps/index", "tutorial/apps/iterm/index", "tutorial/apps/keynote/index", "tutorial/apps/mail/index", "tutorial/apps/maps/index", "tutorial/apps/messages/index", "tutorial/apps/music/index", "tutorial/apps/notes/index", "tutorial/apps/numbers/index", "tutorial/apps/omnioutliner/index", "tutorial/apps/pages/index", "tutorial/apps/photos/index", "tutorial/apps/preview/index", "tutorial/apps/quicktimeplayer/index", "tutorial/apps/reminders/index", "tutorial/apps/rstudio/index", "tutorial/apps/safari/index", "tutorial/apps/shortcuts/index", "tutorial/apps/spotify/index", "tutorial/apps/stocks/index", "tutorial/apps/systemevents/index", "tutorial/apps/systempreferences/index", "tutorial/apps/terminal/index", "tutorial/apps/textedit/index", "tutorial/apps/tv/index", "tutorial/apps/vlc/index", "tutorial/appscript", "tutorial/clipboard", "tutorial/extensions/web/rssfeed", "tutorial/images", "tutorial/index", "tutorial/lists", "tutorial/menubar", "tutorial/spotlight", "tutorial/tips_tricks", "tutorial/ui_scripting", "tutorial/user_input"], "filenames": ["about/index.rst", "bugs.rst", "index.rst", "reference/additions/learn.rst", "reference/additions/speech.rst", "reference/additions/ui.rst", "reference/additions/utils.rst", "reference/additions/web.rst", "reference/apps/automator.rst", "reference/apps/bike.rst", "reference/apps/calculator.rst", "reference/apps/calendar.rst", "reference/apps/cardhop.rst", "reference/apps/chromium.rst", "reference/apps/console.rst", "reference/apps/contacts.rst", "reference/apps/dictionary.rst", "reference/apps/drafts.rst", "reference/apps/fantastical.rst", "reference/apps/finder.rst", "reference/apps/flow.rst", "reference/apps/fontbook.rst", "reference/apps/hammerspoon.rst", "reference/apps/imageevents.rst", "reference/apps/iterm.rst", "reference/apps/iwork.rst", "reference/apps/keynote.rst", "reference/apps/mail.rst", "reference/apps/maps.rst", "reference/apps/media.rst", "reference/apps/messages.rst", "reference/apps/music.rst", "reference/apps/notes.rst", "reference/apps/numbers.rst", "reference/apps/omnioutliner.rst", "reference/apps/pages.rst", "reference/apps/photos.rst", "reference/apps/preview.rst", "reference/apps/quicktimeplayer.rst", "reference/apps/reminders.rst", "reference/apps/rstudio.rst", "reference/apps/safari.rst", "reference/apps/shortcuts.rst", "reference/apps/spotify.rst", "reference/apps/stocks.rst", "reference/apps/systemevents.rst", "reference/apps/systempreferences.rst", "reference/apps/terminal.rst", "reference/apps/textedit.rst", "reference/apps/tv.rst", "reference/apps/vlc.rst", "reference/index.rst", "reference/pyxa.rst", "reference/xabase.rst", "reference/xabasescriptable.rst", "reference/xaerrors.rst", "reference/xaprotocols.rst", "reference/xatypes.rst", "tutorial/applescript.rst", "tutorial/apps/automator/index.rst", "tutorial/apps/automator/tutorial1.rst", "tutorial/apps/bike/index.rst", "tutorial/apps/calculator/index.rst", "tutorial/apps/calendar/index.rst", "tutorial/apps/cardhop/index.rst", "tutorial/apps/chromium/index.rst", "tutorial/apps/console/index.rst", "tutorial/apps/contacts/index.rst", "tutorial/apps/dictionary/index.rst", "tutorial/apps/drafts/index.rst", "tutorial/apps/fantastical/index.rst", "tutorial/apps/finder/index.rst", "tutorial/apps/flow/index.rst", "tutorial/apps/fontbook/index.rst", "tutorial/apps/hammerspoon/index.rst", "tutorial/apps/imageevents/index.rst", "tutorial/apps/index.rst", "tutorial/apps/iterm/index.rst", "tutorial/apps/keynote/index.rst", "tutorial/apps/mail/index.rst", "tutorial/apps/maps/index.rst", "tutorial/apps/messages/index.rst", "tutorial/apps/music/index.rst", "tutorial/apps/notes/index.rst", "tutorial/apps/numbers/index.rst", "tutorial/apps/omnioutliner/index.rst", "tutorial/apps/pages/index.rst", "tutorial/apps/photos/index.rst", "tutorial/apps/preview/index.rst", "tutorial/apps/quicktimeplayer/index.rst", "tutorial/apps/reminders/index.rst", "tutorial/apps/rstudio/index.rst", "tutorial/apps/safari/index.rst", "tutorial/apps/shortcuts/index.rst", "tutorial/apps/spotify/index.rst", "tutorial/apps/stocks/index.rst", "tutorial/apps/systemevents/index.rst", "tutorial/apps/systempreferences/index.rst", "tutorial/apps/terminal/index.rst", "tutorial/apps/textedit/index.rst", "tutorial/apps/tv/index.rst", "tutorial/apps/vlc/index.rst", "tutorial/appscript.rst", "tutorial/clipboard.rst", "tutorial/extensions/web/rssfeed.rst", "tutorial/images.rst", "tutorial/index.rst", "tutorial/lists.rst", "tutorial/menubar.rst", "tutorial/spotlight.rst", "tutorial/tips_tricks.rst", "tutorial/ui_scripting.rst", "tutorial/user_input.rst"], "titles": ["Project Overview", "Bugs", "PyXA Documentation", "Learn Module", "Speech Module", "UI Module", "Utils Module", "Web Module", "Automator Module Reference", "Bike Module Reference", "Calculator Module Reference", "Calendar Module Reference", "Cardhop Module Reference", "Chromium Module Reference", "Console Module Reference", "Contacts Module Reference", "Dictionary Module Reference", "Drafts Module Reference", "Fantastical Module Reference", "Finder Module Reference", "Flow Module Reference", "FontBook Module Reference", "Hammerspoon Module Reference", "Image Events Module Reference", "iTerm Module Reference", "iWork Base Reference", "Keynote Module Reference", "Mail Module Reference", "Maps Module Reference", "Media Application Reference", "Messages Module Reference", "Music Module Reference", "Notes Module Reference", "Numbers Module Reference", "OmniOutliner Module Reference", "Pages Module Reference", "Photos Module Reference", "Preview Module Reference", "QuickTime Module Reference", "Reminders Module Reference", "RStudio Module Reference", "Safari Module Reference", "Shortcuts Module Reference", "Spotify Module Reference", "Stocks Module Reference", "System Events Module Reference", "System Preferences Module Reference", "Terminal Module Reference", "TextEdit Module Reference", "TV Module Reference", "VLC Module Reference", "Code Documentation and Reference", "PyXA Module", "XABase Module", "XABaseScriptable Module", "XAErrors Module", "XAProtocols Module", "XATypes Module", "Running AppleScripts", "Automator Module", "Making a Combined Workflow for Creating Image Mosaic", "Bike Module Overview", "Calculator Module Overview", "Calendar Module Overview", "Cardhop Module Overview", "Chromium Module Overview", "Console Module Overview", "Contacts Module Overview", "Dictionary Module Overview", "Drafts Module Overview", "Fantastical Module Overview", "Finder Module Overview", "Flow Module Overview", "Font Book Module Overview", "Hammerspoon Module Overview", "Image Events Module Overview", "Application Module Overviews", "iTerm Module Overview", "Keynote Module Overview", "Mail Module Overview", "Maps Module Overview", "Messages Module Overview", "Music Module Overview", "Notes Module Overview", "Numbers Module Overview", "OmniOutliner Module Overview", "Pages Module Overview", "Photos Module Overview", "Preview Module Overview", "QuickTime Module Overview", "Reminders Module Overview", "RStudio Module Overview", "Safari Module Overview", "Shortcuts Module Overview", "Spotify Module Overview", "Stocks Module Overview", "System Events Module Overview", "System Preferences Module Overview", "Terminal Module Overview", "TextEdit Module Overview", "TV Module Overview", "VLC Module Overview", "Using Appscript to Work With Unsupported Applications", "Working With The Clipboard", "Reading RSS Feeds", "Working with Images", "Tutorial", "Working With Lists", "Add Items to the Menu Bar", "Searching Spotlight", "Tips and Tricks", "UI Scripting", "Getting User Input"], "terms": {"python": [0, 2, 24, 58, 59, 60, 72, 74, 83, 96, 98, 103, 106, 112], "autom": [0, 2, 7, 23, 45, 51, 52, 53, 58, 60, 75, 76, 81, 105, 106, 107], "short": [0, 34, 42, 45, 50, 53, 59, 81], "wrapper": [0, 2, 5, 8, 9, 11, 12, 13, 15, 17, 18, 19, 21, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 107], "around": [0, 2, 5, 8, 9, 11, 12, 13, 15, 17, 18, 19, 21, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 75], "sever": [0, 58, 63, 75, 103, 105, 107, 111, 112], "maco": [0, 2, 3, 6, 10, 11, 14, 15, 16, 19, 21, 26, 27, 28, 30, 31, 32, 33, 35, 36, 37, 38, 39, 42, 44, 45, 46, 47, 48, 49, 53, 93, 111, 112], "framework": [0, 2, 63, 66, 93], "enabl": [0, 2, 5, 8, 21, 27, 29, 30, 31, 34, 43, 45, 50, 53, 60, 62, 96, 98, 106, 107, 108], "applescript": [0, 2, 27, 34, 45, 51, 53, 63, 65, 83, 96, 102, 106, 111], "jxa": [0, 2, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 53, 63, 75, 106, 110], "like": [0, 2, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 58, 65, 75, 106, 107, 109], "control": [0, 2, 3, 4, 5, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 53, 58, 65, 72, 96, 98, 101, 111, 112], "over": [0, 2, 5, 19, 32, 33, 45, 53, 60, 63, 65, 72, 75, 96, 98, 105, 107, 109, 110], "applic": [0, 2, 4, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 56, 58, 59, 60, 62, 63, 65, 70, 72, 74, 75, 81, 82, 83, 92, 93, 96, 98, 99, 100, 101, 103, 105, 106, 107, 110, 111, 112], "from": [0, 2, 3, 5, 7, 8, 11, 15, 18, 19, 23, 25, 26, 27, 28, 29, 30, 31, 34, 36, 38, 39, 41, 44, 45, 46, 48, 50, 52, 53, 54, 56, 58, 60, 63, 65, 66, 70, 72, 74, 75, 83, 96, 98, 103, 104, 105, 106, 107, 108, 109, 111], "within": [0, 1, 2, 7, 11, 13, 19, 25, 26, 29, 31, 34, 43, 45, 53, 58, 60, 70, 72, 74, 75, 96, 98, 103, 105, 106, 108, 109], "": [0, 1, 2, 3, 5, 7, 8, 9, 10, 11, 12, 13, 15, 16, 18, 19, 21, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 53, 58, 59, 60, 62, 63, 65, 70, 72, 75, 81, 93, 103, 104, 105, 106, 108, 109, 110, 111, 112], "object": [0, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 15, 17, 18, 19, 21, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 44, 45, 46, 47, 48, 50, 52, 53, 54, 56, 58, 59, 60, 65, 66, 75, 81, 99, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112], "method": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 56, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 93, 95, 96, 97, 100, 104, 105, 106, 107, 108, 109, 110, 111, 112], "ar": [0, 9, 10, 11, 12, 13, 15, 18, 19, 21, 25, 26, 27, 28, 29, 31, 32, 33, 34, 39, 42, 44, 45, 47, 48, 50, 52, 53, 58, 60, 62, 63, 65, 66, 75, 81, 92, 93, 99, 104, 105, 106, 107, 108, 109, 110, 111], "base": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 58, 60, 72, 78, 84, 86, 103, 107, 108, 109], "script": [0, 2, 7, 11, 13, 19, 23, 24, 25, 34, 35, 39, 41, 45, 47, 50, 52, 53, 54, 60, 61, 62, 63, 65, 66, 70, 72, 74, 75, 93, 96, 98, 105, 106, 107, 108], "dictionari": [0, 2, 3, 4, 9, 11, 12, 15, 25, 26, 29, 31, 35, 36, 38, 39, 45, 46, 47, 48, 51, 52, 53, 54, 58, 70, 75, 76, 103, 106, 111], "coupl": 0, "addit": [0, 2, 3, 4, 5, 6, 7, 19, 23, 45, 53, 60, 62, 63, 65, 75, 99, 101, 102, 105, 107, 108, 109, 112], "featur": [0, 3, 6, 7, 9, 22, 26, 53, 58, 59, 62, 66, 70, 81, 92, 93, 102, 105, 108, 111], "support": [0, 22, 23, 30, 31, 34, 36, 45, 52, 53, 58, 59, 62, 63, 65, 66, 75, 81, 92, 93, 98, 99, 101, 104, 105, 111, 112], "appl": [0, 2, 7, 16, 27, 29, 31, 46, 53, 58, 59, 60, 62, 63, 65, 66, 70, 75, 81, 83, 92, 93, 98, 99, 101, 103, 104, 107, 108, 109, 111], "api": [0, 24, 72, 75, 105], "wa": [0, 3, 9, 11, 15, 17, 18, 19, 23, 26, 27, 29, 31, 32, 33, 34, 39, 45, 48, 50, 53, 56, 58, 60, 103, 112], "creat": [0, 1, 3, 5, 8, 9, 11, 13, 15, 17, 18, 19, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 41, 45, 47, 48, 50, 53, 56, 61, 65, 72, 75, 93, 96, 104, 105, 106, 107, 108, 109], "goal": [0, 60, 106], "simplifi": [0, 65, 105], "wai": [0, 3, 6, 46, 58, 60, 63, 75, 93, 99, 103, 105, 106, 107, 108, 109, 112], "task": [0, 18, 58, 60, 63, 65, 93, 99, 108, 109], "can": [0, 1, 3, 5, 8, 9, 11, 12, 13, 15, 18, 19, 21, 23, 25, 26, 27, 29, 30, 31, 34, 35, 36, 37, 38, 39, 41, 42, 45, 46, 47, 48, 49, 53, 54, 56, 58, 59, 60, 62, 63, 65, 72, 74, 75, 81, 93, 101, 103, 104, 105, 106, 107, 108, 109, 111, 112], "accomplish": [0, 58, 60, 65, 93, 99, 106], "via": [0, 9, 12, 22, 30, 31, 42, 53, 56, 60, 65, 83, 93, 104, 105, 106, 107, 110, 111, 112], "introduc": [0, 106], "new": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 56, 57, 59, 60, 63, 75, 81, 92, 93, 99, 104, 106, 108, 109, 112], "complex": [0, 93, 104, 105], "procedur": 0, "simpl": [0, 18, 83, 107], "declar": 0, "disambigu": 0, "capabl": [0, 45, 58, 59, 62, 63, 65, 75, 81, 92, 93, 99, 104, 105, 107], "provid": [0, 3, 4, 11, 16, 19, 24, 27, 28, 29, 30, 32, 33, 36, 37, 39, 42, 47, 48, 53, 58, 59, 60, 62, 63, 65, 70, 74, 75, 81, 83, 92, 93, 99, 101, 103, 104, 105, 107, 108, 109, 111, 112], "easi": [0, 58, 103, 105], "follow": [0, 1, 10, 34, 45, 53, 58, 60, 62, 63, 65, 103, 106, 108, 109], "document": [0, 5, 8, 9, 11, 12, 13, 15, 18, 19, 21, 23, 25, 26, 27, 30, 32, 33, 34, 35, 37, 38, 39, 41, 42, 45, 48, 50, 53, 54, 56, 58, 60, 83, 92, 96, 102, 103, 106, 107, 108, 109], "throughout": [0, 57, 108], "entir": [0, 18, 19, 25, 34, 47, 62, 75, 107], "fill": [0, 3, 16, 25, 53], "gap": 0, "where": [0, 3, 21, 27, 34, 50, 56, 60, 75, 103, 109, 110], "current": [0, 3, 5, 8, 9, 10, 11, 13, 15, 16, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 43, 44, 45, 46, 47, 48, 50, 52, 53, 54, 59, 62, 63, 65, 66, 81, 92, 93, 96, 98, 99, 103, 105, 106, 108], "avail": [0, 4, 5, 25, 26, 30, 31, 34, 45, 65, 93, 98, 104, 107, 108], "ultim": 0, "fall": [0, 26, 102], "aim": [0, 15, 102, 105, 107], "learn": [0, 2, 11, 18, 51, 63], "user": [0, 2, 3, 4, 5, 8, 9, 11, 12, 13, 15, 19, 23, 25, 27, 29, 30, 31, 32, 33, 34, 37, 39, 41, 45, 48, 50, 53, 54, 58, 59, 62, 63, 65, 66, 75, 81, 83, 93, 96, 98, 99, 101, 103, 105, 106, 108, 109], "accustom": 0, "who": [0, 3, 29], "_must_": 0, "us": [0, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 52, 53, 56, 57, 58, 59, 60, 61, 62, 63, 65, 72, 83, 93, 96, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112], "To": [0, 5, 27, 34, 60, 63, 65, 74, 75, 102, 103, 104, 105, 106, 107, 108, 109], "end": [0, 3, 9, 11, 18, 19, 25, 26, 28, 35, 36, 39, 45, 48, 53, 58, 106], "packag": [0, 19, 23, 45, 53, 112], "contain": [0, 1, 5, 7, 8, 9, 11, 12, 15, 16, 18, 19, 21, 23, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 45, 46, 47, 48, 49, 52, 53, 58, 63, 65, 75, 83, 103, 104, 105, 106, 107, 109, 111], "numer": [0, 8, 25, 34, 107], "exampl": [0, 3, 4, 5, 7, 9, 10, 11, 13, 15, 18, 19, 22, 25, 26, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 45, 46, 48, 50, 52, 53, 58, 60, 103, 104, 105, 106, 107, 109, 111, 112], "how": [0, 3, 25, 27, 31, 34, 45, 54, 58, 60, 63, 65, 72, 75, 93, 99, 103, 104, 105, 107, 109], "just": [0, 3, 7, 32, 33, 34, 60, 105, 107, 108, 109], "about": [0, 3, 10, 11, 16, 60, 98, 101, 105, 111], "everi": [0, 7, 9, 11, 19, 25, 26, 27, 29, 30, 34, 38, 45, 48, 52, 53, 107], "cover": [0, 26, 43], "specif": [0, 8, 11, 15, 18, 27, 34, 39, 45, 53, 58, 63, 75, 83, 105, 106, 107, 108, 109, 111], "case": [0, 31, 60, 72, 75, 83, 103, 104, 105], "code": [0, 1, 2, 8, 15, 18, 22, 40, 42, 45, 52, 53, 60, 72, 75, 99, 101, 103, 104, 105, 106, 107, 108, 109, 110], "also": [0, 9, 45, 58, 59, 75, 103, 104, 105, 106, 107, 108, 109], "serv": 0, "sourc": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 92, 93, 105, 108], "pyobjc": [0, 75], "interact": [0, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 53, 58, 59, 93, 102, 105, 108], "variou": [0, 5, 6, 19, 29, 57, 75, 105, 111], "intend": [0, 23, 60], "replac": [0, 3, 4, 5, 34], "even": [0, 3, 53, 58, 107, 108], "100": [0, 3, 5, 25, 29, 31, 35, 38, 43, 45, 50, 53, 75, 83, 105, 108], "instead": [0, 5, 11, 12, 19, 25, 29, 30, 32, 33, 34, 37, 38, 41, 42, 46, 48, 52, 53, 54, 60, 75, 103, 106, 108], "meant": 0, "gener": [0, 3, 8, 11, 19, 29, 32, 33, 34, 41, 53, 58, 59, 63, 65, 75, 99, 101, 103, 105], "conveni": [0, 58, 65, 75, 83, 103, 105, 106, 107, 108], "other": [0, 9, 13, 25, 27, 30, 34, 53, 56, 58, 60, 64, 65, 66, 70, 72, 103, 104, 105, 108, 110, 112], "most": [0, 3, 7, 8, 13, 34, 53, 59, 63, 65, 75, 81, 92, 93, 99, 103, 106], "commonli": 0, "If": [0, 1, 3, 11, 13, 24, 25, 27, 28, 29, 32, 33, 34, 37, 39, 41, 47, 48, 58, 60, 106, 108, 109, 110, 112], "you": [0, 1, 3, 4, 7, 11, 22, 25, 27, 30, 34, 53, 58, 59, 60, 62, 63, 65, 72, 74, 75, 81, 83, 93, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112], "need": [0, 3, 5, 34, 58, 60, 72, 103, 105, 106, 110], "complet": [0, 3, 39, 41, 45, 92, 106, 107, 109], "event": [0, 2, 11, 18, 27, 34, 51, 52, 53, 58, 76, 83, 105, 107, 111], "bridg": [0, 2], "find": [0, 1, 3, 34, 58, 63, 105, 107, 109], "cannot": [0, 13, 23, 32, 33, 34, 48, 56, 75, 105], "handl": [0, 3, 4, 30, 31, 34, 45, 54, 60, 103, 104, 106, 108], "your": [0, 1, 3, 22, 34, 58, 60, 63, 65, 72, 74, 104, 105, 106, 108, 109, 110, 112], "particular": [0, 36, 58, 75, 105, 106, 109, 111], "consid": [0, 34, 53], "appscript": [0, 2, 106], "one": [0, 3, 5, 9, 11, 12, 13, 15, 16, 23, 25, 26, 27, 30, 32, 33, 34, 39, 41, 45, 50, 53, 59, 60, 63, 103, 105, 106, 109, 111], "its": [0, 8, 9, 11, 12, 13, 19, 21, 24, 25, 26, 29, 30, 34, 37, 41, 43, 45, 47, 53, 56, 60, 63, 70, 75, 99, 102, 103, 105, 106, 107, 108, 109, 110, 111], "deriv": [0, 65], "someth": [0, 60, 108], "work": [0, 2, 3, 11, 15, 22, 31, 53, 58, 60, 62, 63, 104, 106, 108], "circumst": [0, 1], "ha": [0, 8, 9, 11, 12, 15, 18, 19, 21, 23, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 39, 41, 43, 45, 48, 50, 53, 54, 58, 60, 65, 66, 75, 92, 105, 106, 109], "abund": 0, "refer": [0, 2, 5, 52, 53, 54, 56, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 93, 95, 96, 97, 98, 99, 100, 101, 103, 105, 106, 107, 109, 110, 111], "some": [0, 3, 4, 48, 58, 59, 60, 63, 65, 75, 81, 83, 92, 93, 103, 104, 105, 106, 108, 109], "open": [0, 4, 5, 8, 9, 10, 11, 12, 13, 15, 16, 19, 23, 25, 26, 27, 28, 29, 32, 33, 36, 37, 38, 41, 43, 44, 45, 48, 50, 53, 56, 58, 59, 60, 75, 81, 92, 93, 96, 99, 101, 104, 105, 106, 108, 109, 112], "map": [0, 2, 3, 51, 52, 53, 76, 111], "address": [0, 11, 15, 25, 27, 28, 29, 31, 42, 45, 53], "might": [0, 1, 3, 11, 34, 53, 60, 66, 72, 83, 105, 106, 108, 110], "good": [0, 3, 25, 53], "fit": [0, 3], "ani": [1, 4, 5, 8, 9, 11, 13, 15, 17, 22, 23, 24, 25, 26, 27, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 45, 48, 50, 53, 54, 56, 58, 60, 62, 63, 65, 75, 93, 102, 105, 106, 107, 108, 109, 112], "github": [1, 52, 53, 106, 108, 109], "repositori": [1, 106], "pleas": [1, 3], "issu": 1, "describ": [1, 8, 11, 105, 106], "caus": [1, 23, 45, 107, 111], "occur": [1, 11, 63, 112], "descript": [1, 7, 11, 19, 23, 25, 28, 29, 30, 34, 36, 45, 104, 111], "configur": [1, 45], "potenti": [1, 99], "solut": 1, "have": [1, 3, 9, 11, 12, 15, 19, 25, 26, 27, 29, 30, 31, 35, 36, 38, 39, 45, 46, 47, 48, 53, 54, 60, 75, 99, 102, 105, 106, 107, 110, 111], "thought": 1, "after": [1, 3, 8, 13, 19, 24, 26, 27, 29, 34, 41, 45, 46, 48, 53, 58, 60, 75, 103, 105], "an": [1, 3, 4, 5, 7, 9, 11, 15, 18, 19, 23, 24, 25, 27, 29, 30, 31, 32, 33, 34, 36, 37, 39, 41, 42, 45, 46, 48, 50, 52, 53, 54, 56, 57, 58, 59, 60, 62, 63, 65, 66, 74, 75, 81, 83, 92, 93, 99, 102, 103, 104, 105, 106, 107, 108, 109, 111, 112], "time": [1, 3, 4, 5, 7, 11, 18, 20, 23, 25, 27, 29, 30, 32, 33, 34, 38, 39, 43, 45, 46, 50, 53, 63, 65, 72, 75, 99, 104, 105, 106, 107, 109, 111], "expertis": 1, "implement": [1, 58, 72, 75, 92, 93, 99, 105, 107], "fix": [1, 3, 27, 29], "pull": [1, 3], "request": [1, 7, 24, 107, 108], "chang": [1, 3, 5, 8, 12, 15, 19, 25, 32, 33, 34, 37, 41, 42, 44, 45, 46, 47, 48, 53, 54, 56, 59, 60, 63, 75, 81, 106, 108], "make": [1, 3, 8, 9, 11, 13, 15, 17, 26, 32, 33, 34, 35, 36, 39, 41, 42, 45, 48, 50, 58, 59, 63, 70, 81, 83, 96, 99, 102, 103, 104, 105, 106, 107, 110, 111], "sure": [1, 60], "guidelin": 1, "contribut": 1, "thi": [1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 15, 18, 19, 22, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 39, 41, 43, 45, 48, 49, 52, 53, 54, 56, 58, 60, 62, 65, 72, 74, 75, 92, 93, 96, 98, 99, 101, 102, 103, 104, 105, 106, 107, 108, 109, 111, 112], "idea": [1, 7, 58, 83, 105], "includ": [1, 19, 23, 27, 30, 31, 34, 48, 53, 58, 59, 60, 75, 93, 96, 98, 103, 105, 106, 107, 111], "i": [2, 3, 4, 5, 7, 8, 9, 11, 12, 13, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 50, 53, 54, 58, 59, 60, 63, 65, 66, 75, 81, 93, 99, 103, 104, 105, 106, 107, 108, 109, 111, 112], "project": [2, 26, 35, 106], "overview": [2, 39, 106], "what": [2, 3, 4, 26, 35, 41, 45, 105, 112], "me": [2, 3, 7, 63, 70, 104, 107, 112], "tutori": [2, 39, 60], "instal": [2, 16, 21, 45, 53, 93], "basic": [2, 10, 26, 31, 58], "usag": 2, "topic": [2, 34, 99], "modul": [2, 25, 29, 106], "With": [2, 3, 7, 59, 60, 64, 70, 81, 104, 105, 106, 109], "list": [2, 3, 4, 5, 7, 8, 9, 11, 12, 13, 15, 17, 18, 19, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 58, 59, 60, 65, 81, 83, 99, 103, 104, 106, 109, 110, 111], "imag": [2, 5, 7, 11, 15, 24, 25, 26, 27, 34, 35, 36, 42, 43, 45, 51, 52, 53, 59, 65, 76, 83, 93, 96, 103, 104, 106, 108], "The": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 56, 58, 59, 60, 62, 63, 65, 70, 72, 74, 75, 81, 83, 92, 93, 96, 98, 99, 104, 105, 106, 107, 109, 111, 112], "clipboard": [2, 12, 13, 16, 18, 19, 21, 29, 30, 32, 33, 34, 36, 37, 41, 42, 44, 47, 48, 50, 53, 54, 56, 75, 105, 106], "get": [2, 3, 4, 7, 11, 12, 13, 16, 18, 19, 20, 21, 28, 29, 30, 32, 33, 34, 36, 37, 41, 42, 44, 46, 47, 48, 50, 52, 53, 54, 56, 58, 63, 65, 72, 75, 83, 92, 93, 98, 99, 101, 104, 105, 106, 107, 108, 111], "input": [2, 3, 4, 8, 10, 23, 24, 29, 39, 42, 53, 62, 106], "search": [2, 16, 19, 28, 29, 31, 36, 41, 43, 53, 92, 106], "spotlight": [2, 36, 53, 106], "ui": [2, 45, 51, 60, 62, 65, 66, 106], "run": [2, 4, 5, 7, 8, 19, 24, 27, 36, 41, 42, 45, 47, 52, 53, 60, 74, 96, 98, 103, 104, 106, 108, 109, 110], "add": [2, 3, 4, 5, 8, 9, 10, 11, 15, 18, 22, 24, 26, 32, 33, 34, 35, 36, 41, 45, 53, 58, 59, 63, 75, 81, 83, 96, 103, 106, 107], "item": [2, 5, 7, 9, 13, 16, 18, 19, 23, 25, 26, 27, 29, 30, 31, 34, 35, 36, 41, 45, 50, 53, 54, 56, 65, 96, 98, 103, 104, 105, 106, 107, 109, 112], "menu": [2, 5, 25, 45, 50, 53, 106], "bar": [2, 3, 5, 8, 13, 19, 21, 25, 37, 45, 46, 48, 50, 53, 65, 106], "read": [2, 19, 25, 27, 39, 41, 45, 106], "rss": [2, 7, 106], "feed": [2, 7, 106], "unsupport": [2, 106], "tip": [2, 3, 106], "trick": [2, 3, 106], "top": [2, 7, 9, 19, 25, 27, 34, 50, 53, 60, 75, 83, 99, 104, 105, 106, 108, 111], "level": [2, 5, 8, 9, 19, 27, 31, 34, 45, 50, 53, 83, 99], "xabas": [2, 3, 5, 7, 8, 9, 11, 12, 13, 15, 17, 18, 19, 21, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 41, 42, 45, 47, 48, 50, 51, 52, 54, 56, 58, 65, 103, 104, 105, 107, 108, 109, 112], "xabasescript": [2, 25, 41, 51, 53, 65], "xatyp": [2, 19, 51, 54], "xaprotocol": [2, 51], "xaerror": [2, 51], "first": [2, 8, 11, 13, 15, 17, 19, 25, 29, 30, 32, 33, 34, 41, 45, 52, 53, 54, 58, 60, 63, 66, 72, 75, 83, 93, 99, 104, 105, 106, 107, 109], "parti": [2, 7, 34], "calcul": [2, 19, 34, 51, 52, 53, 60, 76], "calendar": [2, 4, 18, 34, 51, 52, 53, 76], "consol": [2, 51, 52, 53, 76, 106], "contact": [2, 27, 30, 51, 52, 53, 76], "finder": [2, 22, 36, 51, 52, 53, 74, 76, 106], "fontbook": [2, 51], "keynot": [2, 4, 25, 51, 52, 53, 76], "mail": [2, 4, 11, 51, 52, 53, 76], "messag": [2, 3, 4, 5, 8, 15, 27, 47, 51, 52, 53, 55, 58, 76, 108, 112], "music": [2, 4, 7, 19, 23, 29, 42, 45, 51, 52, 53, 76, 103, 105, 107], "note": [2, 4, 9, 11, 15, 18, 26, 29, 33, 34, 39, 48, 51, 52, 53, 58, 65, 72, 75, 76, 93, 99, 103, 105, 106, 107, 108, 109, 110, 112], "number": [2, 3, 4, 5, 10, 15, 18, 19, 23, 24, 25, 26, 27, 29, 30, 31, 32, 34, 36, 39, 41, 42, 43, 45, 47, 51, 52, 53, 57, 58, 60, 62, 63, 75, 76, 98, 105], "page": [2, 4, 10, 16, 30, 41, 44, 45, 51, 52, 53, 58, 76, 99, 103, 105], "photo": [2, 26, 30, 51, 52, 53, 60, 76, 105, 107], "preview": [2, 19, 27, 36, 38, 51, 52, 53, 60, 75, 76, 104], "quicktim": [2, 23, 51, 52, 53, 76], "remind": [2, 3, 51, 52, 53, 70, 76], "safari": [2, 4, 42, 51, 52, 53, 58, 76, 93, 99, 106, 107, 108], "shortcut": [2, 4, 51, 52, 53, 60, 76, 99, 108], "stock": [2, 51, 52, 53, 76, 111], "system": [2, 4, 5, 11, 19, 23, 25, 29, 34, 51, 52, 53, 58, 72, 76, 103, 108, 109, 111], "prefer": [2, 9, 16, 19, 23, 27, 30, 34, 45, 50, 51, 52, 53, 63, 75, 76, 106], "termin": [2, 24, 51, 52, 53, 76, 96, 106, 108], "textedit": [2, 25, 26, 51, 52, 53, 76, 101], "tv": [2, 4, 29, 31, 51, 52, 53, 76], "third": [2, 7, 9, 34, 53, 58], "bike": [2, 51, 52, 53, 76], "cardhop": [2, 51, 52, 53, 76], "chromium": [2, 51, 52, 53, 76, 93], "fantast": [2, 51, 52, 53, 76], "flow": [2, 45, 51, 52, 53, 76], "draft": [2, 23, 26, 27, 41, 51, 52, 53, 76], "hammerspoon": [2, 51, 52, 53, 76], "iterm": [2, 51, 52, 53, 76], "omnioutlin": [2, 51, 52, 53, 76], "spotifi": [2, 51, 52, 53, 76], "vlc": [2, 51, 52, 53, 76], "rstudio": [2, 51, 52, 53, 76], "speech": [2, 51, 53], "util": [2, 8, 19, 23, 45, 51, 53, 58, 60, 66, 74, 93, 98, 99, 101, 104, 105, 108], "web": [2, 29, 41, 51, 53, 104, 105], "bug": 2, "index": [2, 5, 8, 13, 19, 24, 25, 26, 29, 30, 31, 34, 41, 43, 52, 53, 54, 60, 104, 105, 107], "under": [2, 34, 107], "activ": [2, 3, 4, 5, 8, 12, 13, 18, 19, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 37, 39, 41, 42, 43, 45, 46, 47, 48, 50, 52, 53, 54, 58, 65, 93, 99, 106, 108], "develop": [2, 11, 18, 62, 63, 65, 108], "version": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 56, 57, 60, 66, 92, 93, 104, 107, 112], "0": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 56, 57, 58, 59, 60, 62, 63, 65, 75, 81, 83, 93, 98, 99, 101, 103, 105, 106, 107, 108, 109, 111, 112], "1": [3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 15, 18, 19, 20, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 50, 52, 53, 54, 56, 57, 58, 103, 104, 105, 106, 107, 111, 112], "A": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 56, 57, 63, 83, 104, 105, 108], "collect": [3, 4, 6, 21, 23, 45, 107], "class": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 56, 57, 58, 59, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 93, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 107, 108, 109, 110, 112], "interfac": [3, 8, 26, 34, 45, 53, 58, 93, 112], "built": [3, 23, 34, 45, 103, 111, 112], "ml": 3, "ai": 3, "pyxa": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 65, 66, 70, 72, 74, 81, 83, 92, 93, 96, 98, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112], "xalsm": [3, 51], "dataset": 3, "option": [3, 4, 5, 7, 8, 9, 11, 12, 13, 15, 17, 18, 19, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 56, 75, 108, 112], "dict": [3, 4, 8, 9, 11, 12, 13, 15, 17, 18, 19, 21, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 56], "str": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 75, 108, 112], "none": [3, 4, 5, 8, 9, 11, 12, 13, 15, 17, 18, 19, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 56, 58, 103, 112], "from_fil": 3, "bool": [3, 4, 5, 8, 9, 11, 12, 13, 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 50, 53, 54, 56, 58, 112], "fals": [3, 5, 9, 18, 19, 26, 27, 34, 36, 45, 47, 48, 53, 72, 83, 101, 108, 112], "add_categori": 3, "name": [3, 4, 5, 8, 9, 11, 12, 13, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 50, 52, 53, 54, 55, 57, 58, 59, 75, 81, 83, 92, 93, 96, 103, 106, 107, 108, 109], "initial_data": 3, "int": [3, 4, 5, 8, 9, 11, 13, 18, 19, 23, 24, 25, 26, 27, 29, 30, 31, 34, 36, 38, 39, 41, 42, 43, 45, 47, 50, 52, 53, 54, 58, 60, 105], "categori": [3, 7, 8, 29, 53, 96], "initi": [3, 24, 26, 32, 33, 35, 36, 48, 53, 54, 56, 58, 60, 105, 108], "text": [3, 5, 7, 8, 9, 13, 16, 18, 19, 23, 24, 25, 26, 27, 29, 32, 33, 34, 35, 39, 41, 42, 45, 47, 48, 53, 58, 60, 75, 92, 103, 107, 108, 109, 110, 112], "data": [3, 7, 8, 19, 25, 26, 29, 31, 32, 33, 34, 38, 42, 45, 52, 53, 58, 60, 65, 75, 83, 103, 105], "paramet": [3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 50, 52, 53, 54, 56, 63, 75, 105], "_description_": [3, 13, 29, 30, 45, 53], "return": [3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 56, 58, 59, 60, 74, 96, 98, 104, 105, 106, 107, 108, 109, 111, 112], "id": [3, 5, 8, 9, 13, 15, 17, 18, 19, 21, 24, 25, 26, 27, 29, 30, 32, 33, 34, 35, 36, 38, 39, 42, 43, 45, 46, 47, 53, 54, 58, 60, 83, 108], "type": [3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 50, 52, 53, 54, 56, 57, 58, 60, 65, 75, 103, 104, 107, 111, 112], "clean": [3, 70], "relat": [3, 7, 15, 18, 32, 33, 53, 103], "reddit": 3, "post": 3, "previou": [3, 9, 13, 16, 20, 27, 29, 34, 36, 43, 50, 62, 63, 65, 75, 83, 92, 93, 99, 101, 104, 107], "import": [3, 4, 5, 7, 9, 10, 11, 13, 15, 18, 19, 22, 25, 26, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 45, 46, 48, 50, 52, 53, 58, 59, 60, 62, 63, 65, 70, 72, 74, 75, 81, 83, 92, 93, 96, 98, 99, 101, 103, 104, 105, 106, 107, 108, 109, 111, 112], "lsm": 3, "load": [3, 13, 23, 34, 41, 45, 53, 60, 65, 93, 99], "steven": [3, 4, 5, 37, 53, 58, 60, 75, 83, 99, 103, 105, 112], "download": [3, 4, 5, 8, 16, 19, 23, 27, 29, 32, 33, 37, 45, 48, 50, 53, 58, 59, 65, 81, 83, 103, 105, 109], "game": [3, 53], "product": [3, 53], "curtain": 3, "stain": 3, "eyelet": 3, "reaction": 3, "dry": 3, "cleaner": 3, "do": [3, 4, 27, 34, 54, 60, 62, 63, 65, 74, 75, 93, 103, 106, 107, 108, 109, 111], "out": [3, 5, 11, 12, 26, 27, 28, 34, 45, 53, 93, 106, 109, 111], "my": [3, 7, 27, 104, 107], "pink": 3, "denim": 3, "overal": [3, 45, 107, 110], "black": [3, 5, 26, 34, 53, 75, 105, 107, 108], "jacket": 3, "next": [3, 8, 9, 11, 13, 16, 20, 29, 34, 36, 43, 45, 50, 59, 60, 81, 101, 105], "them": [3, 21, 34, 53, 54, 60, 75, 93, 105, 108], "depress": 3, "room": 3, "month": [3, 11, 63], "30": [3, 5, 18, 75, 107], "minut": [3, 11, 18, 27, 31, 48, 70, 107, 109], "soak": 3, "vinegar": 3, "regular": [3, 34, 107, 110], "floor": 3, "squeege": 3, "surpris": 3, "amount": [3, 4, 5, 19, 25, 27, 53, 104, 107], "pet": 3, "hair": 3, "carpet": 3, "befor": [3, 9, 18, 19, 21, 23, 26, 27, 29, 39, 45, 53, 58, 70, 103, 106, 109], "It": [3, 34, 60, 65, 93], "actual": [3, 19, 53, 106, 109], "clr": 3, "magic": 3, "elbow": 3, "greas": 3, "worth": 3, "scrape": 3, "old": [3, 7, 53, 104], "moldi": 3, "caulk": 3, "5": [3, 4, 5, 8, 9, 10, 13, 14, 26, 27, 35, 39, 40, 41, 45, 46, 52, 53, 54, 59, 62, 81, 83, 92, 93, 99, 101, 105, 108, 109], "dollar": 3, "bit": [3, 23, 107], "shower": 3, "look": [3, 11, 26, 45, 60, 106, 109], "so": [3, 34, 53, 58, 60, 63, 75, 106, 107, 111], "much": [3, 75], "thank": [3, 112], "person": [3, 15, 18, 29, 30, 53, 58], "recommend": [3, 105], "clorox": 3, "foamer": 3, "pic": 3, "til": 3, "dissolv": [3, 26], "inkstain": 3, "milk": 3, "cat": [3, 108], "scratch": 3, "mark": [3, 27, 58], "couch": 3, "felt": 3, "needl": 3, "turn": [3, 5, 45, 75, 106], "bkf": 3, "isn": [3, 34], "t": [3, 7, 34, 48, 53, 58, 99, 104, 107, 108, 109], "meme": 3, "realli": 3, "satisfi": 3, "stuff": [3, 18, 32, 33], "print": [3, 4, 5, 7, 9, 10, 11, 13, 15, 16, 18, 25, 26, 30, 31, 32, 33, 37, 39, 41, 42, 45, 46, 48, 52, 53, 54, 56, 58, 59, 60, 62, 70, 74, 75, 81, 83, 93, 98, 99, 103, 104, 105, 106, 107, 108, 109, 112], "categorize_queri": 3, "hidden": [3, 19, 34, 36, 45, 52, 53], "surviv": 3, "our": [3, 60, 106, 108, 109], "server": [3, 19, 27, 30, 45, 53], "memori": [3, 19, 23, 29, 45], "far": [3, 75, 107], "more": [3, 34, 45, 53, 58, 62, 63, 65, 83, 92, 93, 99, 103, 105, 106, 107, 109, 111], "power": [3, 58], "than": [3, 27, 53, 58, 60, 107, 109, 110], "think": [3, 59, 60, 81], "school": 3, "never": [3, 27, 34, 45], "taught": 3, "u": [3, 5, 7, 83, 108], "properli": [3, 53, 58], "rake": 3, "life": [3, 7, 63, 104], "7474805116653442": 3, "2": [3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 15, 16, 18, 19, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 39, 41, 42, 45, 46, 48, 50, 53, 54, 57, 58, 62, 83, 92, 98, 103, 104, 105, 107, 109, 111, 112], "7167008519172668": 3, "3": [3, 4, 5, 10, 11, 12, 13, 18, 19, 25, 26, 28, 30, 32, 33, 35, 36, 42, 45, 48, 50, 53, 57, 58, 62, 70, 75, 83, 92, 98, 99, 103, 107, 112], "797333300113678": 3, "add_data": 3, "union": [3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 15, 18, 19, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 50, 53, 54, 56], "organ": [3, 15, 53, 83, 105], "specifi": [3, 4, 5, 8, 9, 11, 12, 13, 15, 17, 18, 19, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 44, 45, 46, 47, 48, 50, 52, 53, 54, 58, 60, 65, 75, 106, 108, 112], "exist": [3, 5, 8, 9, 13, 15, 19, 23, 25, 26, 27, 29, 30, 32, 33, 41, 53, 54, 56, 58, 75, 93, 99, 102, 105, 108, 112], "along": [3, 28, 53, 108], "newli": [3, 5, 11, 13, 17, 19, 24, 25, 26, 32, 33, 34, 35, 36, 38, 39, 41, 48, 53, 106], "classifi": 3, "languag": [3, 19, 53, 58], "english": [3, 53], "brillianc": 3, "outer": 3, "artist": [3, 7, 29, 31, 43, 107], "flat": [3, 34, 103], "mosquito": 3, "recov": 3, "restrict": [3, 29, 108], "offici": [3, 53, 62], "ga": 3, "ratio": 3, "publish": 3, "domest": 3, "realiz": 3, "pure": [3, 53], "offset": [3, 53], "obstacl": 3, "thigh": 3, "favorit": [3, 23, 30, 36, 45, 53, 106, 107], "demonstr": 3, "reviv": 3, "nest": 3, "reader": [3, 7, 52, 53, 83, 104], "slide": [3, 25, 26, 36], "pud": 3, "symptom": 3, "ballot": 3, "auction": 3, "characterist": 3, "mar": 3, "ridg": 3, "student": 3, "explos": 3, "dive": 3, "emphasi": 3, "bui": 3, "perfect": 3, "motif": 3, "penni": 3, "errand": 3, "fur": 3, "spirit": 3, "random": [3, 5, 31, 45, 53, 83, 99, 108], "integr": [3, 64, 70], "italian": 3, "da": [3, 53], "piazza": 3, "proposta": 3, "di": 3, "legg": 3, "legar": 3, "nazional": 3, "volt": 3, "la": 3, "salut": 3, "farti": 3, "farmi": 3, "il": 3, "pane": [3, 19, 27, 46], "aggiunta": 3, "valor": 3, "artista": 3, "chiamata": 3, "settentrional": 3, "scuro": 3, "buio": 3, "signori": 3, "investitor": 3, "grado": 3, "fidanzato": 3, "tagliar": 3, "arriva": 3, "successo": 3, "altrimenti": 3, "special": [3, 19, 29, 52, 53, 58, 60, 107], "esattament": 3, "definizion": 3, "sorriso": 3, "chiamo": 3, "madr": 3, "pulir": 3, "esperto": 3, "rural": 3, "vedo": 3, "malattia": 3, "era": 3, "amici": 3, "libert\u00e0": 3, "l": [3, 42, 53, 98], "account": [3, 15, 27, 30, 32, 33, 34, 39, 83], "immaginar": 3, "lingua": 3, "soldi": 3, "pi\u00f9": 3, "perch\u00e9": 3, "here": [3, 34, 45, 53, 59, 75, 81, 103], "crazi": [3, 53], "ones": [3, 53, 59, 81, 102, 107, 109], "potet": 3, "parlarmi": 3, "italiano": [3, 53], "add_text": 3, "weight": 3, "float": [3, 4, 5, 8, 9, 10, 19, 21, 23, 24, 25, 26, 27, 28, 29, 31, 34, 36, 37, 38, 43, 44, 45, 48, 50, 53, 58, 109], "given": [3, 4, 8, 9, 11, 12, 13, 15, 17, 18, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 45, 46, 47, 48, 50, 53, 54, 56, 63, 106, 107, 108, 109], "appli": [3, 26, 27, 34, 45, 46, 48, 53, 109], "assign": [3, 11, 17, 19, 24, 25, 26, 35, 53, 54, 59], "entri": [3, 7, 15, 34, 53, 58, 93, 105], "default": [3, 4, 5, 8, 9, 11, 12, 13, 15, 17, 18, 19, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 39, 41, 42, 43, 45, 46, 47, 48, 50, 53, 56, 63, 108], "rais": [3, 53], "valueerror": 3, "must": [3, 22, 27, 28, 34, 53, 56, 59, 62, 63, 65, 81, 109], "valid": [3, 10, 21, 34, 62, 106], "color": [3, 5, 9, 11, 19, 23, 24, 25, 26, 27, 34, 39, 42, 45, 47, 53, 75], "One": [3, 63, 72], "two": [3, 13, 18, 25, 27, 30, 34, 41, 46, 53, 63, 105, 106, 109], "three": [3, 25, 27, 53, 103, 108], "red": [3, 5, 27, 34, 45, 53, 75, 105, 108], "orang": [3, 27, 45, 53], "yellow": [3, 27, 34, 53], "green": [3, 27, 34, 45, 53, 108], "blue": [3, 27, 34, 45, 53], "purpl": [3, 27, 45, 53], "white": [3, 26, 34, 53, 75, 107], "grei": 3, "grai": [3, 5, 23, 27, 53, 75, 105, 108], "brown": [3, 53], "queri": [3, 4, 11, 18, 19, 28, 29, 31, 36, 53, 63, 107, 109, 112], "num_result": 3, "tupl": [3, 5, 19, 23, 24, 25, 29, 30, 36, 38, 45, 47, 53, 54, 57, 58], "categor": 3, "show": [3, 8, 10, 11, 15, 18, 20, 25, 26, 28, 29, 32, 33, 34, 36, 37, 39, 42, 44, 45, 46, 47, 48, 53, 56, 58, 60, 62, 63, 65, 70, 72, 75, 83, 92, 93, 99, 103, 104, 105, 106, 107, 108, 109, 112], "identifi": [3, 5, 8, 9, 11, 13, 15, 17, 18, 19, 21, 24, 25, 26, 27, 29, 30, 32, 33, 34, 35, 38, 39, 42, 45, 46, 47, 52, 53, 54, 63, 111], "associ": [3, 4, 5, 8, 11, 15, 25, 27, 36, 45, 53, 54, 58, 65, 103, 104, 105, 107, 108], "score": 3, "higher": [3, 18, 53], "indic": [3, 25, 27, 29, 34, 45, 50, 107], "better": [3, 25, 63], "match": [3, 4, 8, 9, 11, 12, 13, 15, 17, 18, 19, 21, 23, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 45, 46, 47, 48, 50, 53, 54, 63, 103, 107, 109, 112], "found": [3, 23, 26, 32, 33, 48, 53, 56, 101, 103, 105, 109], "empti": [3, 19, 34, 53, 58, 59, 60, 81], "emerald": 3, "four": [3, 105, 108], "five": [3, 59, 81, 99], "six": 3, "seven": 3, "eight": 3, "nine": 3, "ten": 3, "hundr": 3, "o": [3, 23, 45, 48, 53, 99, 105], "clock": [3, 45], "sky": 3, "nineti": 3, "unknown": [3, 11, 19, 27, 29, 31, 45, 53], "categorization_tupl": 3, "len": [3, 42, 60, 98, 99, 109], "kei": [3, 5, 8, 13, 17, 25, 26, 27, 32, 33, 35, 45, 50, 53, 58, 75, 103], "extern": [3, 13, 19, 27, 34, 41, 103], "file": [3, 4, 5, 6, 8, 9, 10, 11, 12, 15, 16, 18, 19, 21, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 45, 48, 50, 53, 54, 56, 58, 59, 60, 65, 75, 81, 93, 96, 99, 101, 103, 104, 105, 106, 108, 109], "file_path": [3, 11, 13, 15, 26, 27, 30, 35, 36, 37, 48, 53, 75, 99], "xapath": [3, 4, 5, 6, 8, 9, 11, 12, 18, 19, 21, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 41, 45, 48, 50, 51, 53, 56, 103, 105, 109, 112], "path": [3, 4, 5, 6, 8, 9, 11, 15, 18, 19, 21, 23, 24, 25, 26, 27, 30, 32, 33, 34, 35, 36, 37, 38, 41, 45, 47, 48, 50, 52, 53, 56, 58, 60, 65, 75, 93, 96, 99, 103, 105], "popul": [3, 25, 39, 53, 60], "v": [3, 5, 19, 34, 50, 53], "7313863635063171": 3, "9422407150268555": 3, "save": [3, 8, 9, 10, 11, 12, 13, 15, 18, 21, 23, 25, 26, 27, 30, 32, 33, 34, 35, 37, 39, 41, 42, 44, 45, 48, 50, 53, 54, 56, 59, 60, 75, 81, 92, 93, 99, 103, 104, 105, 106], "true": [3, 4, 5, 7, 9, 12, 13, 18, 19, 22, 24, 25, 27, 28, 30, 34, 36, 37, 39, 41, 46, 47, 48, 53, 56, 58, 72, 83, 92, 98, 99, 101, 103, 105, 106, 107, 108, 112], "successfulli": [3, 65, 93], "could": [3, 58, 99, 104, 108], "vote": 3, "2017": 3, "mob": 3, "again": [3, 60, 65], "which": [3, 5, 8, 19, 23, 25, 26, 27, 28, 29, 30, 34, 45, 47, 48, 53, 56, 58, 59, 60, 63, 81, 99, 102, 104, 105, 111], "would": [3, 19, 26, 60, 75, 93, 106, 107, 109], "choos": [3, 27, 53, 60, 112], "why": 3, "take": [3, 4, 11, 30, 34, 45, 58, 104, 107, 109], "got": 3, "parent": [3, 5, 13, 15, 19, 24, 25, 26, 27, 29, 34, 36, 99], "late": 3, "70": 3, "ps5": 3, "christma": 3, "own": [3, 19, 34, 53, 105, 109], "playstat": 3, "off": [3, 5, 31, 34, 39, 43, 45], "hors": 3, "accid": 3, "right": [3, 19, 25, 34, 39, 41, 45, 50, 60, 105, 106, 108], "cutscen": 3, "dead": 3, "boi": 3, "gamer": 3, "minesweep": 3, "99": 3, "x": [3, 19, 23, 25, 32, 33, 34, 45, 53, 57, 58, 62, 70, 83, 93, 104, 106, 112], "1500": 3, "mine": 3, "took": [3, 107], "hour": [3, 7, 11, 39, 63, 83, 109], "finish": [3, 29, 30, 46, 65, 93, 109], "nerv": 3, "wrack": 3, "No": [3, 11, 34], "care": 3, "want": [3, 4, 7, 34, 72, 104, 105, 106, 108, 112], "share": [3, 19, 23, 29, 32, 33, 39, 42, 45, 53, 83, 107, 112], "cosplai": 3, "doesn": [3, 99, 108], "ex": 3, "plai": [3, 5, 26, 27, 29, 31, 36, 38, 43, 50, 53, 101, 104, 105, 111], "until": [3, 4, 29, 53, 58, 65, 72, 104, 107, 108, 109], "we": [3, 58, 59, 60, 75, 81, 103, 106, 107, 108, 109, 111], "lose": [3, 58], "boycott": 3, "star": [3, 43], "war": 3, "battlefront": 3, "ea": 3, "remov": [3, 5, 15, 23, 25, 31, 34, 52, 53, 58, 106], "refund": 3, "button": [3, 5, 10, 30, 44, 45, 53, 54, 60, 62, 108, 111, 112], "webpag": [3, 13, 41, 53, 93, 99, 106], "now": [3, 11, 32, 33, 34, 37, 39, 41, 42, 45, 46, 47, 48, 53, 54, 59, 60, 63, 81, 83, 93, 104, 105, 106, 107, 109], "call": [3, 4, 5, 8, 9, 11, 12, 15, 18, 19, 21, 23, 25, 26, 27, 29, 30, 31, 34, 35, 36, 37, 38, 39, 41, 42, 45, 46, 47, 48, 49, 53, 54, 56, 58, 65, 74, 75, 104, 105, 106, 107, 108, 111], "wait": [3, 5, 7, 30, 45, 46, 53, 59, 65, 81, 93, 99, 104], "train": 3, "simul": [3, 53], "immers": 3, "been": [3, 8, 9, 11, 12, 15, 18, 21, 23, 25, 26, 27, 29, 30, 32, 33, 34, 36, 37, 39, 41, 43, 45, 48, 50, 53, 75, 106], "dude": 3, "15": [3, 5, 42, 53, 109], "year": [3, 11, 29, 31, 105], "sinc": [3, 4, 5, 8, 9, 11, 12, 15, 18, 19, 21, 23, 25, 26, 27, 29, 30, 32, 33, 34, 37, 38, 39, 41, 45, 48, 50, 52, 53, 54, 60, 75, 106, 107], "rainbow": 3, "vega": 3, "360": 3, "him": 3, "he": [3, 27], "tri": [3, 53], "couldn": 3, "littl": 3, "did": [3, 106], "know": [3, 34, 60, 110], "abl": [3, 29, 60, 93, 106], "forward": [3, 26, 27, 29, 50, 111], "anoth": [3, 9, 11, 25, 27, 30, 48, 53, 60, 104, 105, 106, 107, 108], "longer": [3, 107, 109], "exclus": [3, 45], "ziplin": 3, "contrapt": 3, "1000": [3, 45, 112], "command": [3, 4, 24, 34, 45, 60, 62, 63, 106, 110], "block": [3, 53, 58, 75, 108], "steepest": 3, "walkabl": 3, "staircas": 3, "possibl": [3, 65, 72, 93, 111], "16": [3, 31, 83, 103], "made": [3, 53, 59, 65, 81, 108], "textur": 3, "pack": 3, "give": [3, 8, 9, 11, 13, 15, 17, 24, 26, 32, 33, 35, 36, 39, 41, 45, 48, 75, 106, 108], "differ": [3, 19, 34, 53, 60, 63, 103, 105, 106, 108], "facial": 3, "express": [3, 24, 27, 31, 34, 62, 108, 109], "should": [3, 5, 8, 10, 11, 18, 19, 25, 26, 27, 32, 33, 34, 45, 48, 53, 56, 60, 63, 106, 108, 110], "keep": [3, 53, 105, 106], "go": [3, 4, 26, 39, 50, 106, 107, 110, 112], "alarm": [3, 11, 39, 63], "app": [3, 4, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 58, 59, 64, 65, 66, 70, 74, 81, 93, 96, 98, 101, 105, 106, 107, 108, 111], "small": [3, 19, 104, 108], "switch": [3, 5, 10, 11, 16, 26, 27], "repeat": [3, 18, 25, 29, 31, 43, 58], "build": [3, 26, 27, 34, 108], "second": [3, 5, 13, 19, 23, 29, 30, 38, 43, 45, 50, 53, 58, 59, 75, 81, 99, 107, 109], "brain": 3, "m": [3, 34, 35, 106], "lost": 3, "don": [3, 7, 104, 107], "start": [3, 4, 5, 8, 9, 11, 12, 15, 18, 19, 20, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 43, 45, 50, 53, 54, 59, 60, 65, 72, 81, 92, 96, 106, 108, 111], "nois": [3, 53], "cancel": [3, 5, 11, 45, 53, 112], "earplug": 3, "stress": 3, "track": [3, 29, 31, 43, 45, 49, 53, 72, 103, 107], "platform": [3, 23], "cope": 3, "move": [3, 9, 11, 13, 19, 27, 32, 33, 34, 36, 39, 41, 50, 53, 56, 60, 106], "ikigai": 3, "reason": [3, 56, 110], "Being": 3, "minimalist": 3, "comput": [3, 19, 23, 29, 31, 45, 70, 83, 99], "normal": [3, 13, 19, 23, 29, 34, 47, 107, 108], "leisur": 3, "busi": [3, 44, 45, 47, 53], "onli": [3, 7, 9, 13, 15, 19, 25, 27, 29, 34, 39, 41, 45, 53, 75, 103, 104, 107], "noth": [3, 13, 34, 60], "except": [3, 11, 34, 53, 55], "essenti": 3, "log": [3, 23, 45], "Not": 3, "youtub": [3, 50, 72], "revolution": 3, "yourself": 3, "same": [3, 9, 11, 19, 25, 27, 34, 53, 56, 58, 60, 63, 103, 105, 106, 108], "procrastin": 3, "spent": 3, "40": 3, "sift": 3, "through": [3, 9, 11, 58, 66, 102, 104, 105, 106], "research": 3, "paper": [3, 10, 26], "mental": 3, "clariti": [3, 110], "focu": [3, 41, 45, 50, 53], "up": [3, 7, 18, 25, 30, 34, 45, 50, 53, 54, 58, 75, 102, 104, 105], "down": [3, 19, 34, 45, 50, 60, 75, 105, 107, 108, 109], "rabbit": 3, "hole": 3, "figur": 3, "all": [3, 7, 8, 9, 11, 12, 13, 15, 16, 18, 19, 21, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 93, 95, 96, 97, 98, 99, 100, 101, 103, 105, 106, 107, 108, 109, 111], "ti": 3, "sleep": [3, 5, 7, 45, 46, 52, 53, 65, 72, 93, 99, 104, 111], "though": [3, 108], "well": [3, 9, 11, 45, 58, 63, 65, 70, 75, 93, 104, 105, 106, 107, 108, 112], "cycl": 3, "alwai": [3, 19, 27, 34, 45, 60, 63, 109], "peopl": [3, 15], "underestim": 3, "thei": [3, 45, 62, 63, 65, 75, 93, 105, 107, 108], "overestim": 3, "dai": [3, 11, 18, 27, 39, 53, 63, 70], "when": [3, 4, 5, 8, 12, 13, 15, 18, 19, 21, 25, 26, 27, 29, 30, 31, 32, 33, 34, 36, 37, 39, 41, 42, 44, 45, 47, 48, 49, 50, 53, 54, 58, 60, 63, 65, 72, 102, 103, 104, 105, 106, 107, 108, 109, 110], "each": [3, 7, 8, 9, 11, 12, 13, 15, 18, 19, 21, 23, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 58, 60, 63, 93, 99, 103, 104, 105, 107, 108, 110, 111], "won": [3, 58, 107, 109], "recogn": [3, 4, 53], "speak": [4, 105, 112], "output": [4, 8, 10, 23, 29, 31, 34, 43, 53, 60, 62, 63, 65, 75, 83, 92, 99, 103, 105], "xacommanddetector": [4, 51, 112], "command_function_map": 4, "callabl": [4, 5, 53], "detector": 4, "9": [4, 5, 10, 18, 34, 39, 47, 50, 53, 58, 62, 108], "attribut": [4, 5, 6, 7, 8, 9, 11, 12, 13, 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 57, 59, 75, 104, 108, 111], "correspond": [4, 10, 12, 18, 30, 53, 62, 103, 107], "function": [4, 5, 7, 16, 23, 24, 41, 45, 52, 53, 58, 62, 65, 75, 92, 93, 99, 101, 103, 105, 106, 108, 111, 112], "upon": [4, 5, 24, 27, 58, 96, 108, 111], "detect": [4, 53, 112], "listen": [4, 31, 104, 112], "begin": [4, 9, 11, 16, 29, 48, 53, 59, 65, 81, 93, 109], "execut": [4, 5, 8, 10, 13, 22, 24, 27, 40, 41, 42, 47, 52, 53, 59, 60, 62, 63, 75, 81, 96, 98, 106, 107, 108], "valu": [4, 5, 8, 9, 10, 11, 12, 13, 15, 17, 18, 19, 21, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 45, 46, 47, 48, 49, 50, 53, 54, 58, 59, 60, 74, 75, 81, 96, 98, 103, 107, 108, 111], "on_detect": [4, 112], "heard": 4, "googl": [4, 13, 15, 41, 52, 53, 58, 65, 93, 98, 106, 107, 112], "xaurl": [4, 5, 7, 9, 11, 13, 15, 18, 25, 26, 29, 31, 32, 33, 34, 39, 41, 43, 50, 51, 52, 53, 65, 103, 104, 105, 108, 112], "http": [4, 5, 7, 9, 13, 41, 50, 65, 83, 92, 93, 99, 101, 103, 104, 105, 106, 107, 108, 112], "com": [4, 5, 7, 9, 13, 15, 34, 41, 50, 53, 60, 65, 70, 83, 92, 93, 98, 103, 104, 105, 106, 107, 108, 112], "xaspeech": [4, 51], "voic": [4, 112], "volum": [4, 19, 25, 29, 31, 38, 43, 45, 50, 53, 101], "rate": [4, 25, 29, 38, 53], "200": [4, 35, 60, 99, 105], "desir": [4, 11, 25, 29, 38, 44, 53, 58, 59, 75, 81, 107], "aiff": [4, 96], "sound": [4, 5, 11, 27, 29, 43, 53, 103, 104], "aloud": [4, 25], "test": [4, 18, 30, 34, 42, 53, 58, 60, 63, 92, 98, 103, 106, 109], "spoken": [4, 112], "speaker": 4, "hello": [4, 30, 83, 92, 107, 108], "world": [4, 83, 107], "alex": 4, "500": [4, 31, 101, 108], "agn": 4, "alic": 4, "allison": 4, "xaspeechrecogn": [4, 51, 112], "finish_condit": 4, "rule": [4, 27, 39, 63, 112], "evalu": [4, 27, 40, 53, 104, 111], "invok": [4, 24, 45], "set": [4, 5, 8, 12, 13, 18, 19, 21, 23, 24, 25, 26, 27, 29, 30, 32, 33, 34, 36, 37, 38, 39, 41, 42, 44, 45, 47, 48, 50, 52, 53, 54, 56, 58, 59, 60, 75, 81, 96, 98, 99, 102, 103, 105, 107, 108], "pass": [4, 5, 8, 24, 34, 42, 53, 65, 106, 108, 109, 112], "boolean": [4, 30, 45, 53, 58], "depend": [4, 34, 46, 56, 106, 109], "whether": [4, 5, 8, 9, 10, 11, 12, 13, 15, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 50, 53, 54, 56, 58, 105, 112], "act": [4, 5, 56], "spoken_queri": 4, "start_tim": [4, 38, 53], "datetim": [4, 7, 11, 15, 17, 18, 19, 23, 25, 27, 29, 30, 31, 32, 33, 34, 36, 39, 45, 48, 52, 53, 63, 83, 107, 109], "time_elaps": 4, "timedelta": [4, 11, 20, 39, 48, 53, 63, 83, 109], "displai": [5, 8, 9, 10, 11, 12, 15, 16, 18, 19, 21, 23, 25, 26, 27, 28, 29, 31, 34, 35, 37, 38, 39, 41, 42, 44, 45, 46, 47, 50, 53, 59, 60, 81, 93, 106, 108, 109, 112], "element": [5, 7, 8, 9, 11, 13, 15, 17, 19, 25, 26, 28, 29, 32, 33, 34, 35, 36, 39, 41, 45, 48, 50, 52, 53, 54, 56, 60, 65, 75, 99, 103, 104, 111], "xaalert": [5, 51, 112], "titl": [5, 7, 8, 11, 12, 13, 15, 18, 19, 21, 26, 28, 30, 34, 36, 37, 39, 41, 45, 46, 47, 48, 50, 53, 54, 59, 63, 74, 81, 83, 104, 106, 107, 108, 112], "alert": [5, 18, 70, 92], "style": [5, 21, 34, 45, 53, 63, 75, 83, 107, 112], "xaalertstyl": [5, 51, 112], "inform": [5, 15, 19, 30, 39, 53, 58, 72, 98, 101, 103, 104, 111, 112], "ok": [5, 53, 112], "icon": [5, 8, 19, 39, 42, 53, 106, 108, 112], "xaimag": [5, 7, 15, 19, 23, 29, 35, 36, 42, 43, 51, 53, 56, 103, 104, 105, 108], "dialog": [5, 10, 13, 16, 18, 19, 25, 37, 39, 41, 48, 53, 54, 56], "window": [5, 8, 9, 10, 11, 12, 13, 15, 16, 18, 19, 20, 21, 22, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 56, 58, 74, 92, 101, 106, 108, 111], "click": [5, 10, 16, 44, 45, 53, 60, 62, 106, 108, 111], "repres": [5, 10, 19, 29, 31, 32, 33, 34, 53, 57, 62, 103], "select": [5, 9, 13, 14, 15, 16, 18, 19, 21, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 36, 41, 44, 45, 46, 47, 53, 56, 60, 63, 99, 112], "detail": [5, 31, 48, 54, 62, 63, 65, 75, 83, 92, 93, 99, 104], "deprec": [5, 11, 19, 25, 27, 29, 38, 52, 53, 54], "custom": [5, 15, 16, 30, 34, 47, 53], "qualnam": [5, 8, 9, 11, 12, 15, 19, 23, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 43, 45, 53, 54], "boundari": [5, 8, 9, 11, 12, 15, 19, 23, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 43, 45, 53, 54], "enum": [5, 8, 9, 11, 12, 15, 19, 23, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 43, 45, 53, 54], "critic": 5, "warn": [5, 8, 28], "xahud": [5, 51], "font_siz": [5, 9, 25, 47, 53, 98], "20": [5, 11, 53, 63, 70, 107, 108], "durat": [5, 25, 26, 28, 29, 34, 36, 38, 43, 50, 53, 104], "background_color": [5, 9, 19, 24, 25, 27, 34, 47, 53, 98], "xacolor": [5, 9, 11, 19, 24, 25, 34, 42, 47, 51, 53, 75, 98, 105, 108, 112], "text_color": [5, 25], "momentari": [5, 53], "hud": 5, "background": [5, 9, 19, 24, 25, 27, 34, 45, 47, 53, 96, 107], "center": [5, 25, 28, 34, 53, 75], "screen": [5, 24, 27, 29, 38, 45, 59, 81], "font": [5, 9, 21, 23, 25, 27, 34, 45, 47, 52, 53, 76, 83], "size": [5, 9, 19, 23, 25, 27, 29, 30, 36, 38, 45, 47, 53, 60, 75, 83, 104, 105, 108], "xaimagemenuitem": [5, 51], "xamenubarmenu": [5, 51, 108], "tooltip": 5, "xamenubarmenuitem": [5, 51], "xamenubar": [5, 51, 108], "add_item": 5, "item_nam": 5, "action": [5, 8, 12, 13, 23, 26, 27, 42, 45, 53, 59, 60, 63, 81, 93, 103, 104, 106, 108, 109, 111], "img_width": 5, "img_height": 5, "necessari": [5, 18, 32, 33, 48, 52, 53, 56, 63, 65, 93, 105], "width": [5, 19, 23, 25, 26, 27, 34, 36, 50, 53, 57, 60, 75, 83, 108], "pixel": [5, 19, 23, 25, 34, 36, 53, 75, 105], "height": [5, 19, 23, 25, 26, 36, 45, 53, 57, 60, 75, 83, 108], "menu_bar": [5, 45, 53, 108], "add_menu": 5, "lambda": [5, 104, 108, 112], "img": [5, 60, 83, 105, 108], "exampleus": [5, 9, 11, 13, 19, 30, 31, 32, 33, 41, 48, 50, 53, 58, 59, 60, 65, 75, 81, 96, 99, 101, 103, 105, 108, 109, 112], "jpg": [5, 30, 36, 53, 96, 103, 105, 107, 108], "new_item": [5, 96, 108], "tool_tip": 5, "hover": 5, "new_menu": [5, 108], "fire": 5, "water": 5, "statu": [5, 11, 17, 19, 27, 30, 31, 34, 108], "content": [5, 7, 9, 11, 12, 13, 16, 17, 18, 19, 21, 24, 25, 27, 29, 30, 32, 33, 34, 36, 37, 39, 41, 42, 43, 44, 45, 47, 48, 50, 53, 54, 56, 104, 105, 106, 108, 109, 111], "icon_dimens": [5, 108], "string": [5, 7, 10, 11, 15, 18, 21, 24, 27, 29, 30, 31, 34, 36, 41, 42, 45, 48, 49, 53, 58, 62, 65, 103, 105, 109], "shown": [5, 10, 19, 27, 45, 50, 53, 56, 58, 63, 103, 104], "menubar": 5, "uniqu": [5, 8, 9, 11, 13, 15, 17, 18, 19, 21, 24, 25, 26, 27, 29, 30, 32, 33, 34, 35, 36, 38, 39, 42, 45, 46, 47, 53, 54, 63], "posit": [5, 19, 24, 25, 29, 43, 45, 47, 53], "insert": [5, 9, 18, 25, 31, 45, 48, 53, 58], "label": [5, 15, 19, 43, 60], "thread": [5, 53, 54, 108], "emoji": 5, "emoji_bar": 5, "def": [5, 75, 105, 108, 112], "update_displai": [5, 108], "while": [5, 7, 19, 27, 34, 53, 54, 58, 60, 63, 65, 75, 99, 102, 103, 105, 106, 107, 108], "new_emoji": 5, "choic": [5, 99, 106], "25": [5, 63, 75, 83], "target": [5, 8, 11, 19, 25, 29, 32, 33, 36, 38, 45, 48, 50, 52, 53, 56, 108], "remove_menu": 5, "set_imag": 5, "updat": [5, 7, 25, 31, 34, 45, 53, 54, 108], "state": [5, 15, 25, 29, 34, 36, 43, 45, 53, 63, 108], "current_st": 5, "On": [5, 107, 110], "img_on": 5, "img_off": 5, "update_st": 5, "global": [5, 108], "set_text": [5, 53], "els": [5, 19, 58, 98, 105, 108], "directli": [5, 9, 25, 27, 37, 38, 53, 63, 75, 103], "xaobject": [5, 7, 8, 9, 11, 12, 13, 15, 17, 18, 19, 21, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 56], "add_separ": [5, 108], "separ": [5, 10, 13, 27, 32, 33, 34, 41, 53, 54, 103, 105, 108, 109, 110], "point": [5, 18, 19, 25, 26, 34, 44, 45, 53, 57, 107], "new_separ": 5, "properti": [5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 56, 58, 60, 63, 65, 92, 98, 103, 106, 107, 111], "delet": [5, 8, 11, 13, 15, 19, 21, 25, 26, 27, 31, 32, 33, 36, 39, 45, 56, 63, 83], "new_image_item": 5, "cursor": [5, 47], "arg": [5, 53, 105, 108], "multiselect": 5, "argument": [5, 24, 30, 53, 58, 60, 65, 74, 104, 106, 108, 109, 112], "left": [5, 19, 24, 25, 29, 34, 41, 45, 50, 53, 60, 75, 93, 108], "multipl": [5, 19, 53, 63, 65, 103, 105, 106, 109], "segment": 5, "onc": [5, 53, 58, 111], "img1": [5, 105], "make_swatch": [5, 53, 108], "10": [5, 7, 34, 45, 48, 53, 63, 83, 98, 104, 105, 107, 108, 109], "img2": [5, 105], "avatar": [5, 53], "githubusercont": [5, 105], "7865925": 5, "4": [5, 8, 9, 11, 12, 13, 19, 27, 30, 31, 32, 33, 37, 39, 41, 42, 45, 46, 48, 50, 53, 54, 58, 75, 83], "img3": 5, "symbol": [5, 30, 39, 44, 53, 108], "flame": 5, "circl": [5, 108], "m1": [5, 75, 108], "_": [5, 112], "m2": [5, 108], "50": [5, 19, 53, 75, 98, 105, 108], "new_segmented_control_item": 5, "xaslid": [5, 51], "xasegmentedcontrolmenuitem": [5, 51], "deactiv": 5, "new_slider_item": [5, 108], "xaslidermenuitem": [5, 51], "slider": [5, 25, 45, 108], "new_switch_item": 5, "xaswitchmenuitem": [5, 51], "new_url_item": 5, "url": [5, 7, 8, 9, 11, 12, 13, 15, 17, 18, 19, 23, 29, 30, 31, 32, 33, 36, 37, 38, 39, 41, 42, 43, 48, 50, 52, 53, 56, 65, 70, 83, 92, 93, 99, 101, 103, 104, 105, 106, 107, 112], "xaurlmenuitem": [5, 51], "link": [5, 7, 9, 23, 41, 63, 93, 104, 106], "full": [5, 6, 7, 17, 27, 29, 30, 34, 38, 45, 60, 63, 65, 75, 92, 93, 103, 104], "dimens": [5, 23, 38, 53, 57, 60, 75], "standard": [5, 26, 31, 45, 54, 105, 106, 112], "remove_item": 5, "appear": [5, 19, 30, 45, 46, 47, 53, 109], "place": [5, 11, 25, 30, 34, 41, 53, 60, 66, 75, 103, 108], "submenu": [5, 108], "append": [5, 36, 48, 53, 75, 99, 105, 107], "alreadi": [5, 50, 58, 60, 99, 106, 108, 112], "i1": 5, "i2": 5, "new_subitem": [5, 108], "i3": 5, "i4": 5, "subitem": [5, 108], "remove_subitem": 5, "xanotif": [5, 51], "subtitl": [5, 42], "sound_nam": [5, 11], "primary_button_titl": 5, "show_reply_button": 5, "click_act": 5, "primary_act": 5, "reply_act": 5, "timeout": [5, 53], "manag": [5, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37, 38, 39, 42, 43, 44, 45, 46, 47, 48, 49, 53, 59, 72, 75, 105], "notif": [5, 42, 59, 81], "primari": [5, 27, 45, 63], "repli": [5, 27], "overrid": [5, 18, 56, 75], "main": [5, 19, 21, 32, 33, 36, 45, 46, 53, 54, 60, 63, 105, 106], "infinit": [5, 18, 70], "xasegmentedcontrol": [5, 51], "appkit": [5, 8, 12, 13, 18, 19, 30, 32, 33, 35, 37, 38, 41, 42, 48, 53], "nssegmentedcontrol": 5, "run_action_": 5, "xaseparatormenuitem": [5, 51], "min_valu": 5, "max_valu": 5, "nsslider": 5, "maximum": [5, 19, 26, 34, 43, 45], "minimum": [5, 8, 19, 34, 43, 45], "xaswitch": [5, 51], "nsswitch": 5, "attach": [5, 11, 18, 27, 30, 32, 33, 34, 39, 45, 53, 108], "toggl": [5, 10, 16, 24, 28, 29, 43, 50, 96, 108], "xatextmenuitem": [5, 51], "indent": [5, 9, 27, 34], "locat": [5, 8, 9, 11, 12, 13, 15, 18, 19, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36, 39, 41, 45, 48, 53, 56, 60, 63, 65, 75, 93, 99, 106, 109], "sdefpars": [6, 51], "sdef_fil": 6, "export": [6, 25, 26, 34, 35, 36, 53], "output_fil": [6, 53], "sdef": 6, "pars": [6, 11, 12, 18, 103, 104], "internet": [7, 19], "extend": [7, 34, 45, 53, 56, 63, 75, 108], "rssfeed": [7, 51, 104], "rssitemlist": [7, 51, 104], "retriev": [7, 10, 24, 28, 32, 33, 52, 53, 59, 60, 62, 75, 81, 99, 104, 106, 107, 108, 111], "tag": [7, 17, 23, 35, 53, 63, 106], "rssitem": [7, 51, 104], "ax": [7, 104], "itun": [7, 29, 104], "webobject": [7, 104], "mzstoreservic": [7, 104], "woa": [7, 104], "w": [7, 28, 34, 99, 104], "topsong": [7, 104], "limit": [7, 45, 59, 62, 93, 102, 104, 108], "xml": [7, 34, 45, 104], "extens": [7, 19, 34, 37, 48, 53, 61, 104, 105, 106], "xaweb": [7, 104], "hold": [7, 104], "closer": [7, 104], "elton": [7, 104], "john": [7, 104], "britnei": [7, 104], "spear": [7, 104], "ever": [7, 102, 104], "timcast": [7, 104], "ain": [7, 104], "worri": [7, 104], "onerepubl": [7, 104], "truck": [7, 104], "hardi": [7, 104], "lainei": [7, 104], "wilson": [7, 104], "bring": [7, 22, 50, 53, 54, 104], "evanesc": [7, 104], "That": [7, 93, 104], "hill": [7, 104], "deal": [7, 19, 34, 58, 104, 110], "god": [7, 104], "kate": [7, 104], "bush": [7, 104], "beer": [7, 104], "friend": [7, 30, 104], "kenni": [7, 104], "chesnei": [7, 104], "dominion": [7, 104], "american": [7, 16, 104], "pie": [7, 25, 104], "length": [7, 29, 42, 43, 53, 58, 103, 104], "mclean": [7, 104], "she": [7, 104], "had": [7, 104], "At": [7, 104, 107], "head": [7, 9, 104], "carolina": [7, 104], "cole": [7, 104], "swindel": [7, 104], "proof": [7, 104], "morgan": [7, 104], "wallen": [7, 104], "refetch": 7, "resend": 7, "accordingli": [7, 53, 106], "song": [7, 29, 31, 104, 105, 107], "3600": 7, "author": [7, 46], "comment": [7, 8, 19, 29], "raw": [7, 16, 27, 53, 58, 60, 75, 103, 105, 109], "copyright": [7, 21], "enclosur": 7, "media": [7, 15, 31, 36, 45, 50, 53, 60, 82, 100], "enclos": [7, 23], "hyperlink": 7, "referenc": [7, 34, 36, 52, 53, 75, 106], "audio": [7, 19, 25, 29, 31, 35, 38, 50, 53, 96], "ssl": [7, 27], "asset": [7, 105], "audiopreview122": 7, "v4": 7, "7a": 7, "24": [7, 11, 98, 109], "60": [7, 108], "7a246091": 7, "cef8": 7, "1df4": 7, "1435": 7, "a107ed3c6980": 7, "mzaf_8623157179635634843": 7, "plu": [7, 109], "aac": 7, "p": [7, 28, 38, 53, 107], "m4a": [7, 104], "album": [7, 29, 31, 36, 43, 105], "singl": [7, 25, 34, 53, 54, 58, 60, 93, 103, 105, 107, 108], "1641082201": 7, "uo": 7, "1641082205": 7, "publication_d": 7, "recent": [7, 8, 13, 34, 36, 45, 74, 83], "public": [7, 19, 23, 28, 34, 45, 53, 103, 104, 108], "date": [7, 11, 15, 17, 18, 19, 23, 25, 27, 29, 30, 32, 33, 34, 36, 39, 45, 46, 52, 53, 58, 63, 70, 83, 107], "rssitemcont": [7, 51, 104], "html": [7, 13, 26, 27, 32, 33, 41, 53, 65, 92, 93, 106], "0x10635ee80": 7, "0x10635ebb0": 7, "anchor": [7, 46, 106], "54657": 7, "genr": [7, 29, 31, 43, 107], "pop": [7, 25, 27, 45, 52, 53, 58, 107], "id14": 7, "visibl": [7, 9, 13, 19, 24, 26, 27, 29, 30, 34, 41, 45, 47, 52, 53, 54, 99], "rssitemcontentlist": [7, 51], "xalist": [7, 8, 9, 11, 12, 13, 15, 17, 18, 19, 21, 23, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 75, 99, 103, 104, 105, 107, 110, 111], "syntax": [8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 106, 109], "xaautomatoract": [8, 51], "xaautomatorappl": [8, 51], "bundle_id": 8, "bundl": [8, 19, 34, 45, 52, 53], "execution_error_messag": 8, "error": [8, 31, 34, 37, 45, 54, 58, 59, 60, 81], "execution_error_numb": 8, "execution_result": [8, 59, 81], "result": [8, 10, 11, 12, 18, 22, 28, 29, 30, 34, 40, 45, 47, 53, 59, 60, 62, 65, 74, 75, 81, 105, 109, 112], "icon_nam": 8, "ignores_input": 8, "ignor": [8, 19, 45, 47, 53], "workflow": [8, 23, 45, 53, 105, 106, 107], "input_typ": 8, "accept": [8, 11, 42, 45, 105, 108], "keyword": [8, 36], "local": [8, 11, 13, 19, 23, 29, 30, 34, 35, 41, 45, 46, 52, 53, 93, 108], "output_typ": 8, "produc": [8, 34, 53, 60, 105, 108], "parent_workflow": 8, "xaautomatorworkflow": [8, 51], "required_resourc": 8, "filter": [8, 9, 11, 12, 13, 15, 17, 18, 19, 21, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 63, 92, 96, 104, 109], "xaautomatorrequiredresourcelist": [8, 51], "requir": [8, 9, 45, 59, 81, 107], "resourc": 8, "wrap": [8, 9, 11, 12, 13, 15, 17, 18, 19, 21, 23, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 45, 46, 47, 48, 49, 50, 52, 53, 104, 107], "xaautomatorvariablelist": [8, 51], "xaautomatorsettinglist": [8, 51], "xaautomatorworkflowlist": [8, 51], "show_action_when_run": 8, "target_appl": 8, "commun": 8, "warning_act": 8, "suggest": [8, 53], "warning_level": 8, "warninglevel": 8, "increas": [8, 19, 25, 34, 53, 75, 109], "likelihood": 8, "loss": 8, "warning_messag": 8, "accompani": 8, "xaautomatoractionlist": [8, 51], "fast": [8, 9, 11, 12, 15, 18, 19, 21, 23, 25, 26, 27, 29, 30, 31, 34, 35, 36, 37, 38, 39, 41, 42, 45, 46, 47, 48, 49, 53, 105, 107], "enumer": [8, 9, 11, 12, 15, 18, 19, 21, 23, 25, 26, 27, 29, 30, 31, 34, 35, 36, 37, 38, 39, 41, 42, 45, 46, 47, 48, 49, 53, 104, 105, 107], "techniqu": [8, 9, 11, 12, 15, 18, 19, 21, 23, 25, 26, 27, 29, 30, 31, 34, 35, 36, 37, 38, 39, 41, 42, 45, 46, 47, 48, 49, 53], "by_bundle_id": 8, "by_categori": [8, 29], "by_com": [8, 19, 29], "by_en": [8, 21, 27, 29, 30, 45], "by_execution_error_messag": 8, "by_execution_error_numb": 8, "by_execution_result": 8, "by_icon_nam": 8, "by_id": [8, 9, 13, 15, 17, 18, 19, 21, 25, 26, 27, 29, 30, 32, 33, 35, 36, 39, 42, 45, 46, 47, 53, 54, 58], "by_ignores_input": 8, "by_input_typ": 8, "by_keyword": [8, 36], "by_nam": [8, 9, 11, 12, 15, 17, 18, 19, 21, 23, 25, 26, 27, 29, 30, 32, 33, 35, 36, 37, 39, 41, 42, 45, 46, 47, 48, 50, 53, 54, 59, 75, 81, 83, 92, 93, 105], "by_output_typ": 8, "by_parent_workflow": 8, "by_path": [8, 21, 37, 45, 48, 50, 53], "by_show_action_when_run": 8, "by_target_appl": 8, "by_vers": [8, 19, 23, 53], "by_warning_act": 8, "by_warning_level": 8, "by_warning_messag": 8, "occurr": [8, 13, 19, 29, 41, 53, 54], "xasbappl": [8, 9, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 30, 32, 33, 34, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 50, 51, 54], "xacanopenpath": [8, 9, 11, 12, 13, 15, 17, 19, 23, 25, 29, 32, 33, 34, 36, 37, 38, 41, 42, 47, 48, 50, 51, 53, 56], "xaautomatorwindow": [8, 51], "xaautomatordocu": [8, 51], "regard": [8, 66], "irrevers": 8, "1769108086": 8, "1852796517": [8, 19, 45], "revers": [8, 10, 19, 34, 48, 53], "1920361068": 8, "automator_act": [8, 59, 81], "xaautomatordocumentlist": [8, 51], "frontmost": [8, 9, 11, 12, 13, 15, 18, 19, 22, 23, 24, 25, 27, 29, 30, 32, 33, 34, 36, 37, 38, 39, 41, 42, 43, 45, 46, 47, 48, 50, 52, 53, 106], "without": [8, 9, 11, 13, 15, 17, 18, 23, 26, 32, 33, 34, 35, 36, 39, 41, 42, 45, 47, 48, 50, 52, 53, 58, 59, 65, 75, 81, 101, 105, 107, 111, 112], "ad": [8, 9, 11, 12, 13, 15, 17, 18, 19, 21, 26, 29, 30, 32, 33, 35, 36, 37, 39, 41, 42, 44, 45, 47, 48, 50, 53, 54, 58, 59, 60, 63, 65, 66, 81, 103, 108, 109, 112], "push": [8, 9, 11, 13, 15, 17, 26, 32, 33, 35, 36, 39, 41, 45, 48, 53, 59, 65, 81, 83, 96, 99, 107], "onto": [8, 9, 11, 13, 15, 17, 26, 32, 33, 35, 36, 39, 41, 45, 48, 53, 65, 105], "classnam": [8, 9, 11, 13, 15, 17, 26, 32, 33, 35, 36, 39, 41, 45, 48], "form": [8, 9, 11, 13, 15, 16, 17, 25, 26, 29, 32, 33, 35, 36, 39, 41, 45, 48, 53, 56, 58, 59, 81, 103, 104, 105, 107, 112], "nsurl": [8, 12, 13, 18, 19, 27, 30, 31, 32, 33, 35, 36, 37, 38, 39, 41, 44, 48, 53], "filepath": [8, 23, 25, 32, 33, 36, 38, 48, 50, 56], "websit": [8, 23, 32, 33, 48, 50, 56, 65, 83, 93, 112], "variabl": [8, 24, 59, 106, 110], "modifi": [8, 9, 11, 12, 15, 17, 18, 19, 21, 23, 25, 26, 27, 30, 31, 32, 33, 34, 35, 37, 39, 41, 45, 48, 50, 53, 58, 59, 75, 98, 108, 109], "last": [8, 9, 11, 12, 13, 15, 17, 18, 19, 21, 23, 25, 26, 27, 29, 30, 32, 33, 34, 36, 37, 39, 41, 42, 45, 48, 50, 52, 53, 65, 83, 105, 107], "disk": [8, 9, 11, 12, 15, 19, 23, 25, 26, 27, 30, 32, 33, 34, 36, 39, 41, 45, 48, 53, 59, 65, 75, 81, 93, 99, 105], "by_index": [8, 13, 19, 29, 41, 54, 92], "by_titl": [8, 13, 15, 18, 19, 36, 45, 105], "xaautomatorrequiredresourc": [8, 51], "kind": [8, 19, 29, 31, 45, 53, 56, 60, 105, 106], "by_kind": [8, 19, 29, 31, 45, 53], "by_resourc": 8, "xaautomatorset": [8, 51], "e": [8, 11, 19, 20, 27, 29, 39, 45, 48, 53, 65, 93, 101, 104], "default_valu": [8, 34], "by_default_valu": 8, "by_valu": [8, 9, 15, 23, 25, 45], "xaautomatorvari": [8, 51], "settabl": [8, 45], "by_sett": [8, 45], "xasbwindow": [8, 9, 11, 12, 13, 15, 18, 19, 21, 24, 25, 27, 29, 30, 31, 32, 33, 34, 37, 38, 39, 41, 45, 46, 47, 48, 49, 50, 51, 52, 54], "modal": [8, 19, 21, 37, 48, 50], "current_act": 8, "close": [8, 9, 13, 24, 27, 28, 30, 39, 41, 45, 47, 48, 54, 56, 92, 93, 99, 106], "execution_id": 8, "resent": 8, "folder": [8, 13, 16, 19, 23, 29, 32, 33, 34, 36, 42, 45, 48, 53, 60, 65, 93, 96, 99, 105, 106], "by_current_act": 8, "by_execution_id": 8, "xabikeappl": [9, 51], "fileformat": [9, 32, 33], "1112237670": 9, "opml": 9, "1330670956": 9, "plaintext": [9, 32, 33, 35, 53, 83, 103, 107, 110], "1347708525": 9, "xabikedocumentlist": [9, 51], "pair": [9, 11, 12, 15, 25, 26, 29, 31, 35, 36, 38, 39, 45, 46, 47, 48, 53, 54], "untitl": [9, 26, 35, 48], "foreground_color": [9, 24], "foreground": 9, "row": [9, 24, 25, 26, 34, 45, 47, 60], "front_doc_row": 9, "front_window": [9, 13, 41, 45, 53, 54, 65, 83, 92, 99, 101, 106, 107, 111], "row1": 9, "row2": 9, "row3": 9, "middl": [9, 15], "xabikeattribut": [9, 51], "container_row": 9, "xabikerow": [9, 51], "xabikeattributelist": [9, 51], "access": [9, 17, 19, 34, 45, 46, 53, 58, 59, 65, 70, 75, 81, 99, 102, 103, 104, 107, 109, 111], "by_container_row": 9, "xabikerowlist": [9, 51], "xabikedocu": [9, 51], "xaclos": [9, 18, 24, 25, 34, 37, 41, 45, 48, 50, 51, 54, 56], "entire_cont": [9, 19, 45], "focused_row": 9, "focus": [9, 36, 45, 50], "hoisted_row": 9, "hoist": [9, 34], "persist": [9, 15, 19, 34, 108], "root_row": 9, "root": [9, 34, 60, 93], "outlin": [9, 34, 45, 53, 105], "editor": [9, 52, 53, 106], "doc": [9, 26, 37, 41, 48, 99, 105], "format": [9, 11, 15, 19, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 37, 45, 53, 58, 60, 103, 105, 106], "selected_text": 9, "selection_row": 9, "intersect": 9, "xaclipboardcod": [9, 12, 13, 18, 19, 21, 30, 32, 33, 36, 37, 41, 42, 44, 47, 48, 50, 51, 53, 56, 75], "emploi": [9, 11, 12, 15, 18, 19, 21, 23, 25, 26, 27, 29, 30, 31, 34, 35, 36, 37, 38, 39, 41, 42, 45, 46, 47, 48, 49, 53], "by_entire_cont": [9, 19, 45], "by_fil": [9, 11, 12, 15, 18, 21, 25, 27, 30, 32, 33, 35, 39, 41, 45], "by_focused_row": 9, "by_hoisted_row": 9, "by_modifi": [9, 11, 12, 15, 18, 21, 25, 27, 30, 31, 32, 33, 35, 37, 39, 41, 45, 48, 50], "by_root_row": 9, "by_selected_text": 9, "by_selection_row": 9, "by_url": [9, 11, 13, 15, 18, 19, 32, 33, 41, 53, 92], "saveopt": [9, 27, 54, 56], "leav": [9, 34, 53], "ye": [9, 27, 54], "entirecont": 9, "xadelet": [9, 18, 19, 32, 33, 34, 51, 56], "collaps": [9, 19, 29, 34, 45, 52, 53, 54, 108], "recurs": [9, 107], "container_docu": 9, "contains_row": 9, "expand": [9, 27, 34, 45, 54, 66, 102], "move_to": [9, 11, 13, 19, 24, 29, 32, 33, 34, 39, 41, 63, 92, 96], "child": [9, 15, 18, 32, 33, 34, 45, 48, 53, 56, 110], "plain": [9, 27, 34, 103], "next_sibling_row": 9, "prev_sibling_row": 9, "watch": [9, 50], "intro": 9, "movi": [9, 19, 23, 25, 35, 38, 45, 53], "glanc": 9, "www": [9, 13, 15, 41, 50, 65, 98, 104, 106, 107, 108], "hogbaysoftwar": 9, "combin": [9, 42, 52, 53, 58, 59, 104, 105, 109], "mai": [9, 30, 34, 45, 53, 56, 58, 59, 60, 63, 75, 81, 93, 108], "scroll": [9, 45, 47], "by_collaps": [9, 19, 29], "by_contain": [9, 19, 27, 29, 32, 33, 39, 53], "by_container_docu": 9, "by_contains_row": 9, "by_expand": 9, "by_level": 9, "by_next_sibling_row": 9, "by_prev_sibling_row": 9, "by_select": [9, 15, 25, 26, 29, 31, 45, 47], "by_vis": [9, 19, 27, 29, 41, 45, 53, 54, 92], "children": [9, 19, 34, 99], "xabikewindow": [9, 51], "whose": [9, 12, 24, 25, 34, 39, 45, 50, 52, 53, 56, 105, 107], "xacalculatorappl": [10, 51, 62], "xaapplic": [10, 16, 28, 44, 51, 52, 53, 54], "clear_valu": 10, "clear": [10, 25, 27, 34, 53, 62], "mimic": [10, 16], "c": [10, 19, 34, 53, 62, 66, 75, 98, 103, 105], "copy_valu": 10, "copi": [10, 11, 13, 19, 26, 27, 29, 34, 39, 41, 45, 48, 53, 56, 59, 75, 81, 103, 105], "edit": [10, 18, 34, 83, 99], "current_valu": [10, 62], "sequenc": [10, 11, 53, 62, 93], "oper": [10, 25, 30, 34, 36, 52, 53, 60, 63, 65, 75, 92, 93, 99, 104, 107, 110], "mimick": [10, 26], "doe": [10, 13, 19, 25, 31, 40, 45, 48, 53, 60, 105, 109], "obtain": [10, 19, 31, 53, 59, 63, 65, 75, 81, 93, 99, 103, 104, 105, 106, 107, 109, 110, 111], "For": [10, 30, 34, 42, 53, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 93, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 111], "continu": [10, 62, 72, 108, 112], "space": [10, 19, 23, 29, 34, 53, 62, 75, 103, 108], "charact": [10, 34, 48, 53, 62, 99, 105], "Their": [10, 62], "mean": [10, 18, 34, 62, 66, 104, 112], "usual": [10, 62, 109], "design": [10, 62, 75, 106], "percentag": [10, 25, 44, 62], "negat": [10, 62], "equal": [10, 31, 53, 62, 75, 107], "denot": [10, 62], "c2": 10, "14": [10, 30, 53, 70], "34": [10, 103], "54": 10, "open_about_panel": [10, 16], "panel": [10, 16, 19, 53], "open_page_setup": 10, "setup": 10, "print_tap": 10, "tape": 10, "save_tap": 10, "As": [10, 19, 58, 60, 104, 105, 106, 107], "show_basic_calcul": 10, "view": [10, 11, 18, 19, 24, 29, 34, 37, 44, 46, 53, 75, 104], "show_help": [10, 16], "help": [10, 16, 45, 64, 70, 83, 108, 109, 111], "show_paper_tap": 10, "show_programmer_calcul": 10, "programm": 10, "show_scientific_calcul": 10, "scientif": [10, 25], "toggle_rpn_mod": 10, "polish": 10, "notat": [10, 25, 106], "rpn": 10, "mode": [10, 13, 31, 50, 107], "toggle_thousands_separ": 10, "comma": [10, 27], "thousand": 10, "interv": [10, 11, 27, 39, 45, 108], "xacalendaralarm": [11, 51], "6": [11, 21, 28, 35, 36, 38, 39, 44, 45, 53, 63, 112], "trigger_d": 11, "trigger_interv": 11, "between": [11, 18, 27, 34, 39, 45, 50, 53, 58, 63, 105, 106, 107], "xacalendarappl": [11, 51], "xacalendarcalendar": [11, 51], "xacalendarev": [11, 51, 63], "eventstatu": 11, "confirm": [11, 12, 45, 60], "status": [11, 31], "1161061217": 11, "1161061230": 11, "1161064047": 11, "tent": 11, "1161065573": 11, "participationstatu": 11, "particip": [11, 30], "1161191792": 11, "invit": [11, 18], "declin": 11, "1161192560": 11, "1161196656": 11, "1161195105": 11, "answer": [11, 83], "yet": [11, 58, 99, 107, 108], "prioriti": [11, 18, 39], "high": [11, 23, 39, 45], "1952739377": 11, "low": [11, 23, 39], "1952739385": 11, "medium": [11, 23, 34, 39, 45, 50, 53], "1952739381": 11, "1952739376": 11, "viewtyp": 11, "1161127009": 11, "ical": 11, "1161129327": 11, "week": [11, 18, 63], "1161131877": 11, "1161132389": 11, "xacalendarcalendarlist": [11, 51], "calendar2": 11, "calendar3": 11, "default_calendar": [11, 63], "xacalendardocumentlist": [11, 51], "xaremindersdocumentlist": [11, 39, 51], "new_calendar": [11, 63], "start_dat": [11, 18, 63], "end_dat": [11, 18, 39, 63], "new_ev": [11, 63], "summari": [11, 34, 39, 63], "startdat": [11, 53, 63], "enddat": [11, 63], "reload_calendar": 11, "reload": [11, 13, 20, 41, 92], "subscribe_to": 11, "subscrib": [11, 39], "switch_view_to": [11, 63], "view_calendar_at": [11, 63], "date1": [11, 53, 109], "2022": [11, 53, 63, 70, 75, 83, 107, 109], "7": [11, 15, 29, 31, 47, 49, 53, 63], "xacalendarattach": [11, 51], "file_nam": [11, 25, 34], "filenam": [11, 30, 36, 107, 109], "origin": [11, 19, 23, 27, 29, 36, 37, 41, 53, 57, 59, 75, 81], "events_todai": [11, 63], "g": [11, 19, 20, 27, 29, 34, 42, 53, 65, 93, 112], "png": [11, 23, 26, 30, 34, 37, 53, 75, 83, 96, 105, 107, 112], "icloud": [11, 27, 31, 53, 60, 83], "uuid": [11, 14], "xacalendarattachmentlist": [11, 51], "by_file_nam": [11, 25], "by_typ": 11, "by_uuid": 11, "xacalendarattende": [11, 51], "attende": [11, 18], "display_nam": [11, 21, 34, 45], "email": [11, 15, 27, 41, 92], "participation_statu": 11, "xacalendarattendeelist": [11, 51], "by_display_nam": [11, 21, 45], "by_email": 11, "by_participation_statu": 11, "by_properti": [11, 19, 21, 25, 26, 29, 35, 36, 37, 38, 39, 48, 53, 107], "calendar_obj": 11, "ekcalendar": 11, "xacalendareventlist": [11, 51, 53], "events_in_rang": [11, 63], "earliest": 11, "latest": 11, "0x105b83d90": 11, "0x105b90bb0": 11, "0x105b90dc0": 11, "wide": [11, 26, 75], "rang": [11, 25, 36, 53, 60, 109], "signific": [11, 75, 93, 104, 107], "subset": 11, "larg": [11, 18, 19, 75, 104, 107, 108], "faster": [11, 58, 75, 107, 110], "construct": [11, 53, 58, 65, 93, 108], "iter": [11, 32, 33, 75, 105, 107, 110], "arrai": [11, 26, 53, 92, 93], "outsid": [11, 34, 75, 102], "week_ev": [11, 63], "writabl": [11, 34], "by_color": [11, 39, 42], "by_descript": [11, 19, 23, 25], "by_writ": 11, "xacalendardisplayalarm": [11, 51], "xacalendardocu": [11, 51], "add_attach": [11, 63], "allday_ev": 11, "duplic": [11, 13, 19, 21, 25, 26, 31, 34, 36, 39, 41, 63], "rtype": [11, 19, 112], "duplicate_to": [11, 13, 41, 92], "todai": [11, 18, 63, 70, 108], "excluded_d": 11, "xacalendar": [11, 63], "recurr": [11, 39], "front": [11, 16, 19, 22, 25, 30, 36, 38, 39, 41, 44, 45, 53, 54], "stamp_dat": 11, "uid": [11, 63], "xa_event_obj": 11, "by_allday_ev": 11, "by_end_d": [11, 18], "by_excluded_d": 11, "by_loc": [11, 19, 23, 29, 31, 36, 39], "by_recurr": 11, "by_sequ": 11, "by_stamp_d": 11, "by_start_d": [11, 18], "by_statu": 11, "by_summari": 11, "by_uid": 11, "xacalendarmailalarm": [11, 51], "xacalendaropenfilealarm": [11, 51], "xacalendarsoundalarm": [11, 51], "sound_fil": 11, "xacalendarwindow": [11, 51], "xacardhopapppl": [12, 51], "xacanprintpath": [12, 18, 32, 33, 34, 37, 45, 48, 50, 51, 56], "zoomtyp": 12, "zoom": [12, 28, 29, 30, 45, 54, 63, 101], "fit_height": 12, "fit_pag": 12, "fit_visible_width": 12, "fit_width": 12, "no_vari": 12, "xacardhopdocumentlist": [12, 51], "parse_sent": [12, 18, 70], "sentenc": [12, 18, 53, 99], "add_immedi": [12, 18], "carri": [12, 93, 109, 111], "immedi": [12, 27, 105], "gui": 12, "xacardhopdocu": [12, 51], "xaprint": [12, 18, 34, 37, 45, 48, 51, 56], "get_clipboard_represent": [12, 13, 18, 19, 21, 29, 30, 32, 33, 36, 37, 41, 42, 44, 47, 48, 50, 53, 54, 56, 75], "objc": [12, 13, 18, 19, 30, 31, 32, 33, 36, 37, 41, 42, 44, 48, 53], "codabl": [12, 13, 18, 19, 21, 29, 30, 32, 33, 36, 37, 41, 42, 44, 47, 48, 50, 53, 54, 56], "represent": [12, 13, 18, 19, 21, 23, 29, 30, 32, 33, 34, 36, 37, 41, 42, 44, 45, 47, 48, 50, 52, 53, 54, 56, 75, 103, 104], "8": [12, 13, 17, 19, 21, 22, 26, 29, 30, 31, 32, 33, 35, 36, 37, 41, 42, 44, 47, 48, 50, 53, 54, 56, 93, 99, 107], "xacardhopwindow": [12, 51], "xachromiumappl": [13, 51, 65], "xachromiumwindow": [13, 51], "xachromiumbookmarkfold": [13, 51, 65], "xachromiumbookmarkitem": [13, 51], "xachromiumtab": [13, 51], "bookmark_fold": [13, 65], "xachromiumbookmarkfolderlist": [13, 51], "bookmark": [13, 29, 41], "bookmarks_bar": [13, 65], "new_window": [13, 16, 65], "new_tab": [13, 16, 28, 41, 44, 65], "tab": [13, 16, 19, 24, 28, 36, 41, 43, 44, 45, 47, 53, 58, 60, 92, 93, 98, 99, 106, 107], "homepag": [13, 15, 93], "other_bookmark": [13, 65], "bookmark_item": [13, 65], "xachromiumbookmarkitemlist": [13, 51], "perman": [13, 19, 21, 27, 32, 33, 75], "respect": [13, 23, 63, 65], "xachromiumtablist": [13, 51, 65], "copy_select": 13, "cut_select": 13, "attempt": [13, 34, 37, 48, 53, 63, 107, 109], "cut": 13, "xasafariwindow": [13, 41, 51], "xasafaritab": [13, 41, 51], "active_tab": 13, "window2": [13, 41, 92], "javascript": [13, 41, 65, 75, 93], "go_back": [13, 16, 44], "goe": [13, 16, 26, 60], "histori": [13, 47], "go_forward": [13, 16], "xasafarigener": [13, 41, 51], "paste_select": 13, "past": [13, 16, 26, 34, 41, 53, 60, 75, 83], "redo": [13, 34], "done": [13, 27, 59, 60, 63, 75, 81, 105, 107], "save_asset": 13, "select_al": 13, "stop": [13, 20, 26, 27, 29, 31, 36, 38, 43, 45, 50, 53, 72, 101], "forc": 13, "undo": [13, 34], "view_sourc": 13, "by_load": 13, "active_tab_index": 13, "given_nam": 13, "minimiz": 13, "minim": [13, 29, 30, 45, 52, 53, 54, 66, 108], "either": [13, 27, 30, 53, 56, 60, 65, 105, 109], "incognito": 13, "xaconsoleappl": [14, 51], "select_devic": 14, "self": [14, 25, 37, 41, 48, 53, 54], "devic": [14, 23, 31, 34, 38, 47, 53], "ject": 14, "xacontactsaddress": [15, 51], "citi": 15, "part": [15, 53], "countri": [15, 53], "country_cod": 15, "formatted_address": 15, "provinc": 15, "region": [15, 53], "street": [15, 53, 63], "zip": 15, "postal": 15, "xacontactsaddresslist": [15, 51], "by_citi": 15, "by_countri": 15, "by_country_cod": 15, "by_formatted_address": 15, "by_label": [15, 19], "by_stat": 15, "by_street": 15, "by_zip": 15, "xacontactsappl": [15, 51], "xacontactsgroup": [15, 51], "xacontactsperson": [15, 51], "archiv": [15, 34], "1633837685": 15, "nativ": [15, 27, 32, 33, 34, 35, 45], "book": [15, 21, 26, 52, 53, 76, 83, 108], "servicetyp": [15, 30], "servic": [15, 30, 45], "social": 15, "1635399733": 15, "facebook": [15, 42], "1635399988": 15, "gadu_gadu": 15, "1635399734": 15, "google_talk": 15, "1635399735": 15, "icq": 15, "1635399736": 15, "jabber": 15, "1635399737": 15, "msn": 15, "1635399984": 15, "qq": 15, "1635399985": 15, "skype": 15, "1635399986": 15, "yahoo": [15, 112], "1635399987": 15, "default_country_cod": 15, "xacontactsdocumentlist": [15, 51], "group": [15, 19, 25, 26, 27, 29, 30, 31, 34, 35, 45, 111], "xacontactsgrouplist": [15, 51], "new_url": 15, "my_card": 15, "card": [15, 30], "prompt": [15, 24, 27, 34, 46, 47, 53, 60, 112], "xacontactspersonlist": [15, 51], "unsav": 15, "xacontactscontactinfo": [15, 51], "xacontactscontactinfolist": [15, 51], "obj_class": [15, 18, 19, 21, 25, 26, 27, 29, 31, 34, 35, 36, 45, 49, 53, 54], "xacontactscustomd": [15, 51], "xacontactscustomdatelist": [15, 51], "xacontactsdocu": [15, 51], "xacontactsemail": [15, 51], "xacontactsemaillist": [15, 51], "xacontactsentri": [15, 51], "add_to": [15, 34], "creation_d": [15, 19, 23, 32, 33, 36, 39, 53, 83], "creation": [15, 23, 24, 36, 39, 53, 63, 65, 83, 108], "session": [15, 20, 24, 34, 44, 45, 108], "modification_d": [15, 19, 29, 31, 32, 33, 36, 39, 53, 83], "modif": [15, 23, 29, 34, 36, 39, 53, 75, 83, 105, 108], "remove_from": [15, 34], "elem": 15, "xacontactsentrylist": [15, 51], "by_creation_d": [15, 19, 23, 32, 33, 39, 53], "by_modification_d": [15, 19, 29, 31, 32, 33, 39, 53], "xacontactsinstantmessag": [15, 51], "instant": 15, "im": 15, "service_nam": 15, "service_typ": [15, 30], "user_nam": [15, 27], "xacontactsinstantmessagelist": [15, 51], "by_service_nam": 15, "by_service_typ": [15, 30], "by_user_nam": [15, 27], "birth_dat": 15, "birthdat": 15, "compani": [15, 44], "record": [15, 31, 34, 38, 45], "custom_d": 15, "depart": [15, 39], "first_nam": [15, 30], "home_pag": 15, "instant_messag": 15, "job_titl": 15, "job": 15, "last_nam": [15, 30], "maiden_nam": 15, "maiden": 15, "middle_nam": 15, "nicknam": 15, "phone": 15, "xacontactsphonelist": [15, 51], "phonetic_first_nam": 15, "phonet": 15, "phonetic_last_nam": 15, "phonetic_middle_nam": 15, "related_nam": 15, "xacontactsrelatednamelist": [15, 51], "social_profil": 15, "xacontactssocialprofilelist": [15, 51], "profil": [15, 23, 24, 75, 105], "suffix": [15, 93], "xacontactsurllist": [15, 51], "vcard": 15, "by_birth_d": 15, "by_compani": 15, "by_depart": 15, "by_first_nam": [15, 30], "by_home_pag": 15, "by_imag": 15, "by_job_titl": 15, "by_last_nam": [15, 30], "by_maiden_nam": 15, "by_middle_nam": 15, "by_nicknam": 15, "by_not": [15, 18], "by_organ": 15, "by_phonetic_first_nam": 15, "by_phonetic_last_nam": 15, "by_phonetic_middle_nam": 15, "by_suffix": 15, "by_vcard": 15, "xacontactsphon": [15, 51], "xacontactsrelatednam": [15, 51], "xacontactssocialprofil": [15, 51], "user_identifi": 15, "by_user_identifi": 15, "xacontactsurl": [15, 51], "xacontactswindow": [15, 51], "dcscopytextdefinit": [16, 51], "arg0": [16, 52], "arg1": [16, 52], "arg2": 16, "cfstringref": 16, "dcsdictionaryref": 16, "corefound": 16, "cfrang": 16, "xadictionaryappl": [16, 51], "xadictionarydefinit": 16, "defin": [16, 30, 34, 45, 53, 58, 60], "word": [16, 35, 48, 53, 72, 99, 105, 106, 109], "definit": [16, 45, 96, 102], "fullscreen": [16, 29, 50, 101], "open_dictionaries_fold": 16, "open_prefer": 16, "term": [16, 19, 28, 41, 53, 103, 109], "search_al": 16, "search_apple_dictionari": 16, "search_new_oxford": 16, "oxford": 16, "search_oxford_thesauru": 16, "writer": 16, "thesauru": 16, "search_wikipedia": 16, "wikipedia": [16, 50, 99, 101], "start_dict": 16, "dictat": 16, "switch_to_al": 16, "switch_to_apple_dictionari": 16, "switch_to_new_oxford": 16, "switch_to_oxford_thesauru": 16, "switch_to_wikipedia": 16, "view_front_back_matt": 16, "back": [16, 19, 25, 26, 30, 44, 54, 72, 102], "matter": 16, "xadraftsappl": [17, 51], "xadraftsdraftlist": [17, 51], "new_draft": 17, "xadraftsdraft": [17, 51], "line": [17, 24, 25, 32, 33, 34, 35, 53, 58, 60, 63, 99, 105, 106, 108], "accessed_at": 17, "created_at": 17, "flag": [17, 27, 34, 39], "modified_at": 17, "permalink": 17, "by_accessed_at": 17, "by_cont": [17, 27, 45, 47], "by_created_at": 17, "by_flag": [17, 39], "by_modified_at": 17, "by_permalink": 17, "by_tag": [17, 35], "xafantasticalappl": [18, 51], "xafantasticalcalendarlist": [18, 51], "xafantasticaldocumentlist": [18, 51], "xafantasticalcalendar": [18, 51], "add_attende": 18, "cal": 18, "adjust": [18, 29, 53, 60, 108], "automat": [18, 23, 25, 26, 27, 37, 45, 72, 99, 104, 106], "8am": 18, "wake": [18, 45], "todo": 18, "weekli": [18, 39], "meet": [18, 53, 70], "10am": 18, "loop": [18, 25, 38, 53, 58, 60, 70, 75, 105], "cupertino": [18, 70], "ca": [18, 70, 108], "span": [18, 83], "august": [18, 70], "22": 18, "29": 18, "selected_calendar_item": [18, 70], "xafantasticalselectedcalendaritemlist": [18, 51], "show_calendar_view": 18, "show_mini_view": 18, "mini": 18, "xafantasticalcalendarev": [18, 51], "xafantasticalcalendaritem": [18, 51], "is_all_dai": 18, "is_recur": 18, "recur": 18, "show_url": [18, 70], "xafantasticalcalendaritemlist": [18, 51], "by_is_all_dai": 18, "by_is_recur": 18, "by_show_url": 18, "xafantasticaldocu": [18, 51], "print_properti": [18, 25, 37, 48, 56], "show_dialog": [18, 25, 30, 37, 39, 41, 48, 56], "xafantasticalselectedcalendaritem": [18, 51], "xafantasticaltaskitem": [18, 51], "lower": [18, 53, 112], "xafantasticalwindow": [18, 51], "xafinderaliasfil": [19, 51], "xafinderfil": [19, 51], "alia": [19, 53, 57], "original_item": 19, "xafinderitem": [19, 51], "xafinderaliasfilelist": [19, 51], "xafinderfilelist": [19, 51], "by_original_item": 19, "xafinderappl": [19, 51], "reach": [19, 111], "pariti": 19, "h": [19, 22, 34, 48, 53, 74], "arrang": [19, 59], "1667527777": 19, "1802071649": 19, "1818321505": 19, "1835299937": 19, "1851878753": 19, "by_siz": [19, 23, 29, 36, 45, 53], "1936292449": 19, "not_arrang": 19, "1851880050": 19, "snap_to_grid": 19, "1735550049": 19, "columnnam": 19, "column": [19, 24, 25, 26, 27, 34, 41, 45, 47, 60], "1701606211": 19, "1701606243": 19, "1701606251": 19, "1701606252": 19, "modificate_d": 19, "1701606253": 19, "1702063214": 19, "1701606259": 19, "1701606262": 19, "icons": 19, "1818716515": 19, "1936550243": 19, "itemformat": 19, "apf": 19, "1684431216": 19, "apple_photo": [19, 53], "1684435048": [19, 53], "apple_shar": 19, "1684431219": [19, 53], "1684431221": [19, 53], "exfat": 19, "1684437094": 19, "ftp": 19, "1684432500": 19, "high_sierra": [19, 53], "1684433011": [19, 53], "iso9660": 19, "1684420918": 19, "1684432998": [19, 53], "macos_extend": [19, 53], "1684432939": [19, 53], "msdo": [19, 53], "1684434291": [19, 53], "nf": [19, 53], "1684434534": [19, 53], "ntf": 19, "1684434548": 19, "packet_written_udf": 19, "1684435061": 19, "pro_do": 19, "1684435058": [19, 53], "quicktak": [19, 53], "1684435316": [19, 53], "smb": 19, "1684435821": 19, "udf": [19, 53], "1684436324": [19, 53], "uf": [19, 53], "1684436326": [19, 53], "110390797098047": 19, "webdav": [19, 53], "1684436836": [19, 53], "xsan": 19, "1684431203": 19, "labelposit": 19, "bottom": [19, 25, 34, 45, 53, 75], "1818390388": 19, "1819436916": 19, "advanced_prefer": 19, "1885430902": 19, "1634758252": 19, "burn": 19, "1651535468": 19, "1668312684": 19, "content_index": 19, "1667853932": 19, "general_inform": 19, "1735421548": 19, "general_prefer": 19, "1885826672": 19, "label_prefer": 19, "1886151280": 19, "1886088295": 19, "1836084844": 19, "more_info": 19, "1835626092": 19, "name_extens": [19, 53], "1852862060": 19, "plugin": [19, 34], "1886089319": 19, "1987079788": 19, "1936748140": 19, "sidebar_prefer": 19, "1886611812": 19, "simple_head": 19, "1936223852": 19, "privacyset": 19, "privaci": 19, "read_onli": 19, "1919246692": [19, 45], "read_writ": [19, 45], "1919186802": [19, 45], "write_onli": 19, "2003986804": [19, 45], "sortdirect": [19, 25], "sort": [19, 25, 27, 29, 31, 34, 49, 105], "direct": [19, 25, 28, 30, 34, 45, 53, 60, 105], "1936618093": 19, "1936881267": 19, "viewset": 19, "column_view": 19, "1668052599": 19, "flow_view": 19, "1718384247": 19, "group_view": 19, "icon_view": 19, "1768124022": 19, "list_view": 19, "1819506295": 19, "alias_fil": 19, "application_fil": [19, 45], "xafinderapplicationfilelist": [19, 51], "applications_directori": 19, "xafinderfold": [19, 51], "directori": [19, 27, 32, 33, 34, 45, 52, 53, 106], "clipping_window": 19, "xafinderclippingwindowlist": [19, 51], "clip": [19, 25, 35], "xafinderclippinglist": [19, 51], "computer_contain": 19, "xafindercomput": [19, 51], "xafindercontainerlist": [19, 51], "delete_item": 19, "param": [19, 112], "txt": [19, 48, 53, 58, 99, 109], "improv": [19, 26, 75, 105, 106, 107, 110], "perform": [19, 34, 45, 53, 63, 75, 104, 105, 109, 111], "repeatedli": [19, 25, 26, 29], "especi": [19, 58], "desktop": [19, 23, 45, 52, 53, 75, 105, 106, 108, 112], "xafinderdesktop": [19, 51], "desktop_pictur": 19, "pictur": [19, 23, 29, 45, 53, 96], "monitor": [19, 23, 108], "xafinderdisklist": [19, 51], "document_fil": 19, "xafinderdocumentfilelist": [19, 51], "documents_directori": 19, "downloads_directori": 19, "duplicate_item": 19, "empty_trash": 19, "trash": [19, 23, 27, 45, 53], "finder_prefer": 19, "xafinderprefer": [19, 51], "whole": [19, 25, 35], "finder_window": 19, "xafinderfinderwindowlist": [19, 51], "xafinderfolderlist": [19, 51], "get_label": 19, "home": [19, 23, 45, 53], "home_directori": [19, 45], "insertion_loc": 19, "internet_location_fil": 19, "xafinderinternetlocationfilelist": [19, 51], "xafinderitemlist": [19, 51], "movies_directori": 19, "music_directori": 19, "xafinderpackagelist": [19, 51], "pictures_directori": 19, "product_vers": [19, 53], "softwar": 19, "public_directori": 19, "recycle_item": 19, "recycl": 19, "select_item": 19, "unless": 19, "startup_disk": [19, 23, 45], "xafinderdisk": [19, 51], "startup": [19, 47, 53, 108], "temp_directori": 19, "temporari": [19, 23, 45, 53, 93], "xafindertrash": [19, 51], "trash_directori": 19, "xafinderapplicationfil": [19, 51], "has_scripting_terminologi": [19, 45], "process": [19, 24, 34, 45, 47, 52, 53, 59, 75, 81, 93, 98, 107, 111], "creator": [19, 23, 45], "by_has_scripting_terminologi": [19, 45], "xafinderclip": [19, 51], "xafinderclippingwindow": [19, 51], "xafinderwindow": [19, 51], "xasbprint": [19, 25, 37, 41, 42, 47, 48, 51, 54], "xafinderwindowlist": [19, 51], "xafindercolumn": [19, 51], "order": [19, 22, 25, 29, 30, 31, 34, 36, 41, 45, 53, 54, 63, 65, 93, 103, 108], "maximum_width": 19, "allow": [19, 25, 28, 45, 53, 58, 59, 65, 72, 102, 104, 105, 106, 107, 108, 109, 111], "minimum_width": 19, "sort_direct": 19, "xafindercolumnlist": [19, 51], "by_maximum_width": 19, "by_minimum_width": 19, "by_sort_direct": 19, "by_width": [19, 25, 26, 36], "xafindercolumnviewopt": [19, 51], "discloses_preview_pan": 19, "disclos": 19, "shows_icon": 19, "shows_icon_preview": 19, "shows_preview_column": 19, "text_siz": 19, "xafindercontain": [19, 51], "container_window": 19, "object_class": [19, 27, 53], "by_container_window": 19, "xafinderfinderwindow": [19, 51], "xafinderdesktopwindow": [19, 51], "capac": [19, 29, 53], "total": [19, 29, 30, 31, 34, 53, 60], "byte": [19, 23, 27, 29, 30, 38, 45, 53, 58, 93, 103], "eject": [19, 53], "free_spac": [19, 29, 53], "free": [19, 29, 53], "long": [19, 29, 34, 50, 72, 109], "disc": [19, 29, 31, 43], "connect": [19, 23, 27, 30, 45, 105], "ignore_privileg": [19, 53], "permiss": [19, 37, 53], "journaling_en": 19, "journal": 19, "local_volum": [19, 53], "boot": [19, 53], "by_capac": [19, 29, 53], "by_eject": [19, 53], "by_format": [19, 25, 29, 31, 53], "by_free_spac": [19, 29, 53], "by_ignore_privileg": [19, 53], "by_journaling_en": 19, "by_local_volum": [19, 53], "by_startup": [19, 53], "xafinderdocumentfil": [19, 51], "creator_typ": [19, 45, 53], "ostyp": [19, 45, 51, 53], "file_typ": [19, 23, 45, 53, 75], "stationeri": [19, 53], "pad": [19, 53, 75, 105], "by_creator_typ": [19, 45, 53], "by_file_typ": [19, 23, 45, 53, 75], "by_product_vers": [19, 53], "by_stationeri": [19, 53], "intern": [19, 29], "column_view_opt": 19, "current_view": 19, "icon_view_opt": 19, "xafindericonviewopt": [19, 51], "list_view_opt": 19, "xafinderlistviewopt": [19, 51], "pathbar_vis": 19, "sidebar_width": 19, "sidebar": [19, 28, 44, 60], "statusbar_vis": 19, "viewer": [19, 27], "toolbar_vis": 19, "toolbar": [19, 45, 111], "by_column_view_opt": 19, "by_current_view": 19, "by_icon_view_opt": 19, "by_list_view_opt": 19, "by_pathbar_vis": 19, "by_sidebar_width": 19, "by_statusbar_vis": 19, "by_target": 19, "by_toolbar_vis": 19, "background_pictur": 19, "icon_s": 19, "label_posit": 19, "shows_item_info": 19, "xafinderinformationwindow": [19, 51], "current_panel": 19, "xafinderinformationwindowlist": [19, 51], "info": [19, 53], "by_current_panel": 19, "by_item": 19, "xafinderinternetlocationfil": [19, 51], "xaselect": [19, 24, 45, 51, 56], "common": [19, 26, 29, 45, 50, 63, 65, 92, 99, 101, 103, 105], "bound": [19, 29, 30, 45, 54, 101], "xarectangl": [19, 51, 54, 57], "rectangl": [19, 30, 54, 57, 108], "desktop_posit": 19, "xapoint": [19, 51, 57], "store": [19, 23, 25, 27, 29, 32, 33, 34, 36, 45, 48, 52, 53, 104, 105, 106, 110], "displayed_nam": [19, 21, 45, 53], "everyone_privileg": 19, "privileg": [19, 106], "everyon": 19, "check": [19, 27, 34, 36, 47, 53, 58, 60, 105, 109], "otherwis": [19, 45, 53, 111], "extension_hidden": 19, "group_privileg": 19, "write": [19, 24, 34, 45, 93, 99, 104, 106, 108], "bitmap": 19, "information_window": 19, "label_index": 19, "lock": [19, 25], "new_path": 19, "overwrit": 19, "owner": 19, "owner_privileg": 19, "physical_s": [19, 53], "reveal": [19, 24, 26, 29, 46, 53], "logic": [19, 45, 53, 58, 65], "by_bound": [19, 29, 54], "by_desktop_posit": 19, "by_disk": 19, "by_displayed_nam": [19, 21, 45, 53], "by_everyone_privileg": 19, "by_extension_hidden": 19, "by_group": [19, 29], "by_group_privileg": 19, "by_icon": [19, 42], "by_information_window": 19, "by_label_index": 19, "by_lock": [19, 25], "by_name_extens": [19, 53], "by_own": 19, "by_owner_privileg": 19, "by_physical_s": [19, 53], "by_posit": [19, 25, 29, 45], "xaimagelist": [19, 23, 42, 51, 53, 105], "calculates_folder_s": 19, "sort_column": [19, 27], "uses_relative_d": 19, "rel": [19, 24], "xafinderpackag": [19, 51], "all_name_extensions_show": 19, "regardless": [19, 47, 104], "delay_before_spring": 19, "delai": [19, 53, 54, 58, 107], "spring": 19, "desktop_shows_connected_serv": 19, "desktop_shows_external_hard_disk": 19, "hard": [19, 26], "desktop_shows_hard_disk": 19, "drive": [19, 28], "desktop_shows_removable_media": 19, "cd": [19, 29, 31, 45, 53, 106], "dvd": [19, 45, 50], "ipod": 19, "folders_open_in_new_tab": 19, "folders_open_in_new_window": 19, "folders_spring_open": 19, "new_window_target": 19, "new_windows_open_in_column_view": 19, "xafinderpreferenceswindow": [19, 51], "warns_before_empti": 19, "old_w": 19, "old_h": 19, "y": [19, 25, 34, 53, 57], "drag": [19, 60], "set_properti": [19, 25, 38, 53, 54, 59, 63, 81], "2000": [19, 70, 107], "55": 19, "upper": [19, 24, 29, 53], "xasbwindowlist": [19, 27, 45, 51, 54, 65], "by_float": 19, "by_mod": 19, "xaflowappl": [20, 51], "get_phas": 20, "phase": 20, "break": [20, 58], "get_tim": 20, "remain": [20, 96, 106, 107], "hide": [20, 24, 26, 34, 52, 53, 108], "pend": 20, "reset": [20, 38], "progress": [20, 45], "skip": [20, 25, 26, 29, 36, 37, 39, 43, 111], "resum": [20, 29, 36, 38, 43, 53], "xafontbookappl": [21, 51], "xafontbookdocumentlist": [21, 51], "font_collect": 21, "xafontbookfontcollectionlist": [21, 51], "font_contain": 21, "xafontbookfontcontainerlist": [21, 51], "font_domain": 21, "xafontbookfontdomainlist": [21, 51], "domain": [21, 23, 34, 45, 53], "font_famili": 21, "xafontbookfontfamilylist": [21, 51], "famili": 21, "font_librari": 21, "xafontbookfontlibrarylist": [21, 51], "librari": [21, 23, 29, 30, 36, 45, 53, 58, 60, 105, 106, 108, 112], "fonts_librari": 21, "xafontbookfontbookallfontslibraryobject": [21, 51], "installation_target": 21, "xafontbookfontlibrari": [21, 51], "selected_collect": 21, "selected_font_famili": 21, "xafontbooktypefacelist": [21, 51], "typefac": [21, 106], "validate_fonts_before_instal": 21, "xafontbookdocu": [21, 51], "xafontbookfontdomain": [21, 51], "xafontbookfontcollect": [21, 51], "xafontbookfontcontain": [21, 51], "by_domain": 21, "xafontbookfontfamili": [21, 51], "teh": 21, "face": [21, 28, 35], "by_dupl": 21, "xafontbooktypefac": [21, 51], "family_nam": 21, "font_typ": 21, "post_script_nam": 21, "postscript": [21, 31, 54], "style_nam": 21, "by_copyright": 21, "by_family_nam": 21, "by_font_contain": 21, "by_font_famili": 21, "by_font_typ": 21, "by_post_script_nam": 21, "by_style_nam": 21, "xafontbookwindow": [21, 51], "xahammerspoonappl": [22, 51], "execute_lua_cod": [22, 74], "lua": [22, 74], "In": [22, 53, 58, 59, 60, 63, 75, 81, 103, 104, 105, 106, 107, 109, 111], "allowapplescript": 22, "config": 22, "appfind": [22, 74], "appfromnam": [22, 74], "selectmenuitem": 22, "imageev": [23, 75, 105], "xaimageeventsappl": [23, 51, 75, 105], "xaeventsappl": [23, 45, 51, 53], "bitdepth": [23, 75], "depth": [23, 53, 62, 63, 65, 75, 83, 92, 93, 99], "best": [23, 25, 60], "1650815860": 23, "black_and_whit": 23, "7072447387494217504": 23, "1668246642": 23, "four_color": 23, "878931058": 23, "four_grai": 23, "879194745": 23, "grayscal": [23, 53, 75], "1735549305": 23, "millions_of_color": [23, 75], "1835625580": [23, 75], "millions_of_colors_plu": 23, "1835625515": 23, "sixteen_color": 23, "825647980": 23, "sixteen_grai": 23, "825649010": 23, "thousands_of_color": 23, "1953001333": 23, "two_hundred_fifty_six_color": 23, "842348131": 23, "two_hundred_fifty_six_grai": 23, "842348135": 23, "colorspac": [23, 75], "cmyk": [23, 34, 75], "1129142603": 23, "eight_channel": 23, "1296255032": 23, "eight_color": 23, "943934546": 23, "five_channel": 23, "1296255029": 23, "five_color": 23, "893602898": 23, "1196573017": 23, "lab": 23, "1281450528": 23, "1312902469": 23, "rgb": [23, 34, 53, 60, 75], "1380401696": [23, 75], "seven_channel": 23, "1296255031": 23, "seven_color": 23, "927157330": 23, "six_channel": 23, "1296255030": 23, "six_color": 23, "910380114": 23, "xyz": 23, "1482250784": 23, "compressionlevel": 23, "compress": [23, 34, 38], "1751738216": 23, "1819244320": 23, "1835361385": [23, 45], "connectionspac": 23, "deviceclass": 23, "abstract": 23, "1633842036": 23, "1936744803": 23, "1935896178": 23, "1818848875": 23, "1835955314": 23, "1852662636": 23, "1886549106": 23, "filetyp": [23, 75], "bmp": 23, "1112363110": 23, "gif": 23, "1195984416": 23, "jpeg": [23, 26, 75, 96, 103, 105], "1246774599": 23, "jpeg2": 23, "1785751346": 23, "macpaint": 23, "1347310663": 23, "pdf": [23, 26, 32, 33, 35, 37, 42, 83, 109], "1346651680": 23, "photoshop": 23, "943870035": 23, "pict": 23, "1346978644": 23, "1347307366": [23, 75], "psd": 23, "1886610464": 23, "1903454566": 23, "sgi": 23, "777209673": 23, "1413830740": 23, "tga": 23, "1952932128": 23, "tiff": [23, 26, 34, 53, 75, 83], "1414088262": 23, "imagequ": [23, 25], "qualiti": [23, 25, 63], "least": 23, "1818583411": 23, "profilequ": 23, "1366647090": 23, "1366647089": 23, "1366647088": 23, "renderingint": 23, "render": [23, 36], "intent": [23, 93], "absolute_colorimetr": 23, "1382314547": 23, "perceptu": 23, "1382314544": 23, "relative_colorimetr": 23, "1378972210": 23, "satur": [23, 34, 53], "1382314546": 23, "alias": [23, 45, 53], "xaaliaslist": [23, 45, 51, 53], "application_support_fold": [23, 45, 53], "xafold": [23, 45, 51, 53], "applications_fold": [23, 45, 53], "classic_domain": [23, 45], "xaclassicdomainobject": [23, 45, 51, 53], "belong": [23, 29, 32, 33, 45, 52, 53], "classic": [23, 26, 45, 53], "default_cmyk_profil": 23, "xaimageeventsprofil": [23, 51, 75], "default_cmyk_profile_loc": 23, "xafil": [23, 45, 51, 53], "default_gray_profil": 23, "default_gray_profile_loc": 23, "default_lab_profil": 23, "default_lab_profile_loc": 23, "default_rgb_profil": 23, "default_rgb_profile_loc": 23, "default_xyz_profil": 23, "default_xyz_profile_loc": 23, "desktop_fold": [23, 45, 53, 96], "desktop_pictures_fold": [23, 45, 53], "disk_item": [23, 45, 53], "xadiskitemlist": [23, 45, 51, 53], "xadisklist": [23, 45, 51, 53], "xaimageeventsdisplaylist": [23, 51], "documents_fold": [23, 45, 53, 96], "xadomainlist": [23, 45, 51, 53], "downloads_fold": [23, 45, 53], "favorites_fold": [23, 45, 53], "file_packag": [23, 45, 53], "xafilepackagelist": [23, 45, 51, 53], "xafilelist": [23, 45, 51, 53], "folder_action_scripts_fold": [23, 45, 53], "xafolderlist": [23, 45, 51, 53], "fonts_fold": [23, 45, 53], "home_fold": [23, 45, 53], "xaimageeventsimagelist": [23, 51, 75], "library_fold": [23, 45, 53], "local_domain": [23, 45], "xalocaldomainobject": [23, 45, 51, 53], "resid": [23, 34, 45, 53], "machin": [23, 30, 45, 53, 107], "movies_fold": [23, 45, 53], "music_fold": [23, 45, 53], "network_domain": [23, 45], "xanetworkdomainobject": [23, 45, 51, 53], "network": [23, 45, 53], "xaimageeventsimag": [23, 51, 75, 105], "pictures_fold": [23, 45, 53], "preferences_fold": [23, 45, 53], "preferred_cmm": 23, "profile_fold": 23, "xaalia": [23, 45, 51, 53], "colorsync": 23, "xaimageeventsprofilelist": [23, 51], "public_fold": [23, 45, 53], "quit_delai": [23, 45], "idl": [23, 26, 45], "quit": [23, 27, 45, 52, 53, 108], "zero": [23, 34, 45, 53], "scripting_additions_fold": [23, 45, 53], "scripts_fold": [23, 45, 53], "shared_documents_fold": [23, 45, 53], "sites_fold": [23, 45, 53], "site": [23, 45, 53, 65, 93, 106, 108, 112], "speakable_items_fold": [23, 45, 53], "speakabl": [23, 45, 53], "xadisk": [23, 45, 51, 53], "mac": [23, 31, 45, 75, 106, 108], "system_domain": [23, 45], "xasystemdomainobject": [23, 45, 51, 53], "system_profil": 23, "system_profile_loc": 23, "temporary_items_fold": [23, 45, 53], "user_domain": [23, 45], "xauserdomainobject": [23, 45, 51, 53], "utilities_fold": [23, 45, 53], "workflows_fold": [23, 45, 53], "xaimageeventsdisplai": [23, 51], "display_numb": 23, "display_profil": 23, "by_display_numb": 23, "by_display_profil": 23, "bit_depth": [23, 75], "color_spac": [23, 75], "embed_profil": [23, 75, 105], "emb": [23, 75], "icc": 23, "embedded_profil": [23, 75], "embed": [23, 41], "image_fil": [23, 25, 75, 96], "xadiskitem": [23, 51, 53], "metadata_tag": 23, "xaimageeventsmetadatataglist": [23, 51], "metadata": [23, 109], "modified_image_object": [23, 75], "original_image_object": [23, 75], "resolut": [23, 75], "horizont": [23, 24, 25, 53, 75, 105], "vertic": [23, 24, 25, 53, 75, 105], "densiti": 23, "dot": [23, 34, 106], "per": [23, 31, 38, 75, 83, 102, 106], "inch": 23, "unemb": 23, "by_bit_depth": [23, 75], "by_color_spac": [23, 75], "by_dimens": [23, 75], "by_embedded_profil": 23, "by_image_fil": 23, "by_resolut": 23, "xaimageeventsmetadatatag": [23, 51], "exif": 23, "iptc": 23, "etc": [23, 27, 29, 34], "connection_spac": 23, "device_class": 23, "device_manufactur": 23, "manufactur": 23, "device_model": 23, "model": 23, "cmm": 23, "rendering_int": 23, "by_connection_spac": 23, "by_creat": 23, "by_device_class": 23, "by_device_manufactur": 23, "by_device_model": 23, "by_platform": 23, "by_preferred_cmm": 23, "by_qual": 23, "by_rendering_int": 23, "xaitermappl": [24, 51], "create_hotkey_window": 24, "xaitermhotkeywindow": [24, 51], "hotkei": 24, "create_window": 24, "xaitermwindow": [24, 51], "current_window": 24, "invoke_api_express": 24, "regist": [24, 34], "launch_api_script": 24, "script_nam": 24, "launch": [24, 45, 52, 53, 75], "request_cookie_and_kei": 24, "cooki": 24, "hide_hotkey_window": 24, "reveal_hotkey_window": 24, "toggle_hotkey_window": 24, "xaitermsess": [24, 51], "ansi_black_color": 24, "ansi_blue_color": 24, "ansi_bright_black_color": 24, "ansi_bright_blue_color": 24, "ansi_bright_cyan_color": 24, "ansi_bright_green_color": 24, "ansi_bright_magenta_color": 24, "ansi_bright_red_color": 24, "ansi_bright_white_color": 24, "ansi_bright_yellow_color": 24, "ansi_cyan_color": 24, "ansi_green_color": 24, "ansi_magenta_color": 24, "ansi_red_color": 24, "ansi_white_color": 24, "ansi_yellow_color": 24, "answerback_str": 24, "enq": 24, "answerback": 24, "background_imag": 24, "bold_color": 24, "color_preset": 24, "preset": [24, 31, 38, 48], "cursor_color": [24, 47], "cursor_text_color": 24, "is_at_shell_prompt": 24, "shell": [24, 47], "is_process": 24, "profile_nam": 24, "selected_text_color": 24, "selection_color": 24, "set_vari": 24, "variable_nam": 24, "split_horizont": 24, "split": [24, 65, 98], "instanti": [24, 53, 58, 103, 104, 108, 109], "split_horizontally_with_default_profil": 24, "split_vert": 24, "split_vertically_with_default_profil": 24, "transpar": [24, 53, 105], "tty": [24, 47], "underline_color": 24, "unique_id": 24, "use_underline_color": 24, "dedic": [24, 58, 60, 105], "underlin": [24, 34], "add_newlin": 24, "xaitermtab": [24, 51], "current_sess": 24, "alternate_identifi": 24, "altern": [24, 65, 106, 109], "create_tab": 24, "current_tab": [24, 41, 47, 83, 92, 98, 99, 106], "hotkey_window_profil": 24, "is_hotkey_window": 24, "corner": [24, 53, 60], "iworkapplicationbas": [25, 26, 35], "xaiworkappl": [25, 26, 35], "align": [25, 34], "tabl": [25, 35, 45], "auto": [25, 45, 105], "1633777012": 25, "1635148404": 25, "center_horizont": 25, "1633907826": 25, "center_vert": 25, "justifi": [25, 34], "1634366324": 25, "fulli": [25, 66, 99, 104, 107], "1634494068": 25, "1634888052": 25, "1635153008": 25, "cellformat": 25, "cell": [25, 34, 41], "1717663092": 25, "checkbox": [25, 34, 45], "1717789544": 25, "currenc": [25, 34], "1717794162": 25, "date_and_tim": 25, "1717859437": 25, "decimal_numb": 25, "1852662386": 25, "decim": 25, "1717859698": 25, "fraction": [25, 53], "1717989985": 25, "numeral_system": 25, "1717792371": 25, "percent": 25, "1718642034": 25, "popup_menu": 25, "1717792880": 25, "1718772084": 25, "1718838121": 25, "1717793644": 25, "stepper": 25, "1717793652": 25, "1668577396": 25, "chartgroup": 25, "chart": [25, 26, 35], "1262708579": 25, "1262708594": [25, 26], "charttyp": 25, "area_2d": 25, "1634886962": 25, "dimension": 25, "area": [25, 45, 53, 60, 75], "area_3d": 25, "1634886963": 25, "horizontal_bar_2d": 25, "1751282226": 25, "horizontal_bar_3d": 25, "1751282227": 25, "line_2d": 25, "1818848818": [25, 26], "line_3d": 25, "1818848819": 25, "pie_2d": 25, "1885955378": 25, "pie_3d": 25, "1885955379": 25, "scatterplot_2d": 25, "1935896626": 25, "scatterplot": 25, "stacked_area_2d": 25, "1935766066": 25, "stack": [25, 53], "stacked_area_3d": 25, "1935766067": 25, "stacked_horizontal_bar_2d": 25, "1936220722": 25, "stacked_horizontal_bar_3d": 25, "1936220723": 25, "stacked_vertical_bar_2d": 25, "1937138226": 25, "stacked_vertical_bar_3d": 25, "1937138227": 25, "vertical_bar_2d": 25, "1986163250": 25, "vertical_bar_3d": 25, "1986163251": 25, "fillopt": 25, "advanced_gradient_fil": 25, "1718182247": 25, "advanced_image_fil": 25, "1718182249": 25, "color_fil": 25, "1718182767": 25, "gradient_fil": 25, "1718183794": 25, "1718184301": 25, "no_fil": 25, "1718185583": 25, "1265520690": 25, "1265520689": 25, "1265520688": 25, "keyact": 25, "command_down": 25, "1264807268": 25, "control_down": 25, "1264809068": 25, "option_down": 25, "1265594484": 25, "shift_down": 25, "1265854068": 25, "repetitionmethod": 25, "1836477552": 25, "sequenti": [25, 27], "loop_back_and_forth": 25, "1836474982": 25, "boomerang": 25, "forth": 25, "1836479086": 25, "ascend": [25, 27, 34], "1634952046": 25, "descend": [25, 34], "1685283694": 25, "decreas": [25, 34, 53, 63, 75], "current_docu": [25, 38, 41, 92, 99, 106], "xaiworkdocu": [25, 26, 35], "pre": [25, 39, 41], "remove_password": 25, "password": [25, 26, 27, 31, 32, 33, 45], "set_password": 25, "hint": [25, 99], "save_in_keychain": 25, "unencrypt": 25, "keychain": [25, 45], "xaiworkaudioclip": 25, "xaiworkiworkitem": [25, 26, 35], "clip_volum": 25, "repetition_method": 25, "xaiworkaudiocliplist": [25, 35], "xaiworkiworkitemlist": [25, 26, 35], "by_clip_volum": 25, "by_repetition_method": 25, "xaiworkcel": 25, "xaiworkrang": 25, "xaiworkcolumn": 25, "formatted_valu": 25, "formula": 25, "xaiworkrow": 25, "xaiworkcelllist": 25, "xaiworkrangelist": 25, "by_column": 25, "by_formatted_valu": 25, "by_formula": 25, "by_row": 25, "xaiworkcolumnlist": 25, "xaiworkrowlist": 25, "xaiworkchart": [25, 26], "xaiworkchartlist": [25, 35], "theme": [25, 26, 35, 38], "by_address": [25, 27, 29], "xaiworkcontain": [25, 26, 35], "audio_clip": [25, 35], "xaiworkgrouplist": [25, 35], "xaiworkimagelist": [25, 35], "iwork_item": [25, 35], "xaiworklinelist": [25, 35], "xaiworkmovielist": [25, 35], "shape": [25, 35, 53], "xaiworkshapelist": [25, 26, 35], "xaiworktablelist": [25, 35], "text_item": [25, 35], "xaiworktextitemlist": [25, 35], "xaiworkcontainerlist": [25, 26, 35], "password_protect": [25, 26, 32, 33], "protect": [25, 26, 31, 32, 33], "xaiworkdocumentlist": [25, 26, 35], "by_password_protect": [25, 26, 32, 33], "xaiworkgroup": 25, "coordin": [25, 28, 34, 45, 57], "rotat": [25, 36, 45, 53, 75, 105], "degre": [25, 53], "359": 25, "by_height": [25, 26, 36], "by_par": [25, 29, 36], "by_rot": 25, "xaiworkimag": [25, 26, 35], "voiceov": 25, "opac": [25, 53], "reflection_show": 25, "reflect": [25, 26, 106], "reflection_valu": 25, "replace_with": 25, "img_path": 25, "by_opac": 25, "by_reflection_show": 25, "by_reflection_valu": 25, "xaiworklin": 25, "end_point": 25, "start_point": 25, "by_end_point": 25, "by_start_point": 25, "xaiworkmovi": 25, "movie_volum": 25, "by_movie_volum": 25, "cell_rang": 25, "font_nam": [25, 47, 53], "merg": [25, 105], "col": [25, 60], "flip": [25, 26, 36, 53, 75], "text_wrap": 25, "unmerg": 25, "vertical_align": 25, "by_align": 25, "by_background_color": [25, 27, 47], "by_font_nam": [25, 47], "by_font_s": [25, 47], "by_text_color": 25, "by_text_wrap": 25, "by_vertical_align": 25, "xaiworkshap": [25, 26], "background_fill_typ": 25, "object_text": 25, "xatext": [25, 26, 27, 34, 35, 41, 51, 53], "relfect": 25, "property_nam": [25, 38, 53, 54], "by_background_fill_typ": 25, "by_object_text": 25, "xatextlist": [25, 26, 27, 34, 35, 51, 53], "xaiworkt": 25, "column_count": 25, "footer_row_count": 25, "footer": 25, "header_column_count": 25, "header": [25, 27], "header_row_count": 25, "row_count": 25, "selection_rang": 25, "in_row": 25, "accord": [25, 105, 111], "by_cell_rang": 25, "by_column_count": 25, "by_footer_row_count": 25, "by_header_column_count": 25, "by_header_row_count": 25, "by_row_count": 25, "by_selection_rang": 25, "xaiworktextitem": 25, "by_text": [25, 41, 45, 53], "xaiworkwindow": [25, 26, 35], "prevent": 25, "resiz": [25, 29, 30, 53, 54, 60], "set_posit": 25, "unlock": [25, 45], "xakeynoteappl": [26, 51], "xakeynotewindow": [26, 51], "xakeynotedocu": [26, 51], "codec": 26, "video": [26, 29, 30, 31, 36, 38, 45, 53, 60, 96], "apple_pro_res_422": 26, "1265460018": 26, "apple_pro_res_422hq": 26, "1265460021": 26, "apple_pro_res_422lt": 26, "1265460020": 26, "apple_pro_res_422proxi": 26, "1265460022": 26, "apple_pro_res_4444": 26, "1265460019": 26, "h264": 26, "1265460017": 26, "hevc": 26, "1265460023": 26, "exportformat": [26, 35], "1265136749": 26, "1265198698": 26, "1265526374": 26, "keynote_09": 26, "1265329529": 26, "microsoft_powerpoint": 26, "1265660020": 26, "natives": 26, "1265460814": 26, "1265656934": 26, "1265198704": 26, "quicktime_movi": 26, "1265463158": 26, "slide_imag": 26, "1265200487": 26, "1265198708": 26, "f1080p": 26, "1265460792": 26, "f2160p": 26, "1265460788": 26, "f360p": 26, "1265460787": 26, "f540p": 26, "1265460789": 26, "f720p": 26, "1265460791": 26, "framer": 26, "fps_12": 26, "1265005105": 26, "fps_2398": 26, "1265005106": 26, "fps_24": 26, "1265005107": 26, "fps_25": 26, "1265005108": 26, "fps_2997": 26, "1265005109": 26, "fps_30": 26, "1265005110": 26, "fps_50": 26, "1265005111": 26, "fps_5994": 26, "1265005112": 26, "fps_60": 26, "1265005113": 26, "printset": [26, 31], "detailed_error_handl": [26, 31], "1819763828": [26, 31], "handout": 26, "1265661800": 26, "individual_slid": 26, "1265661801": 26, "slide_with_not": 26, "1265661806": 26, "standard_error_handl": [26, 31], "1819767668": [26, 31], "transit": [26, 28], "blind": 26, "1952607332": 26, "clotheslin": 26, "1952672879": 26, "color_pan": 26, "1952673900": 26, "confetti": 26, "1952671348": 26, "cube": 26, "1952675170": 26, "1952737651": 26, "doorwai": 26, "1952741241": 26, "drop": [26, 28, 60], "1952739952": 26, "droplet": 26, "1952739436": 26, "fade_and_mov": 26, "1952866660": 26, "fade_through_color": 26, "1952871523": 26, "1952866668": 26, "1952868720": 26, "flop": 26, "1952870256": 26, "grid": [26, 108], "1952936548": 26, "iri": 26, "1953067635": 26, "magic_mov": 26, "1953327734": 26, "mosaic": [26, 45, 59, 105], "1953330019": 26, "move_in": 26, "1953330793": 26, "1953393004": 26, "object_cub": 26, "1953456994": 26, "object_flip": 26, "1953457776": 26, "object_pop": 26, "1953460336": 26, "object_push": 26, "1953460328": 26, "object_revolv": 26, "1953460854": 26, "object_zoom": 26, "1953462893": 26, "page_flip": 26, "1953523308": 26, "perspect": [26, 53], "1953526387": 26, "pivot": 26, "1953527412": 26, "1953526632": 26, "1953654380": 26, "1953658476": 26, "revolving_door": 26, "1953654134": 26, "scale": [26, 45, 53, 60, 75, 105], "1953719148": 26, "shimmer": 26, "1953720429": 26, "sparkl": 26, "1953722475": 26, "swap": 26, "1953724272": 26, "swing": 26, "1953724263": 26, "1953724265": 26, "swoosh": 26, "1953724275": 26, "twirl": [26, 53, 105], "1953789804": 26, "twist": 26, "1953789801": 26, "wipe": 26, "1953984613": 26, "xakeynotedocumentlist": [26, 51], "example1": [26, 30, 37, 75], "example2": [26, 30, 37, 75], "new_docu": [26, 35, 48, 99], "xakeynotethem": [26, 51], "templat": [26, 35, 59, 81], "slideshow": [26, 36, 45], "show_next": 26, "advanc": [26, 29, 105], "anim": [26, 45, 46], "show_previ": 26, "slide_switcher_vis": 26, "switcher": 26, "xakeynotethemelist": [26, 51], "gradient": 26, "light": [26, 45, 53], "showroom": 26, "modern": 26, "portfolio": 26, "slate": 26, "essai": 26, "bold": [26, 34, 47, 106], "showcas": [26, 98, 104, 107, 109], "brief": 26, "academi": 26, "exhibit": 26, "stori": 26, "editori": 26, "cream": 26, "industri": 26, "blueprint": 26, "graph": [26, 108], "chalkboard": 26, "leather": 26, "artisan": 26, "kyoto": 26, "brush": 26, "canva": [26, 60], "craft": 26, "parchment": 26, "renaiss": 26, "moroccan": 26, "linen": 26, "vintag": 26, "typeset": 26, "harmoni": 26, "formal": 26, "xakeynotecontain": [26, 51], "xakeynotecontainerlist": [26, 51], "accept_slide_switch": 26, "auto_loop": 26, "auto_plai": 26, "auto_restart": 26, "restart": [26, 29, 45], "inact": [26, 45], "cancel_slide_switch": 26, "dismiss": 26, "current_slid": 26, "xakeynoteslid": [26, 51], "present": [26, 34, 38, 103, 104], "document_them": 26, "768": 26, "1080": 26, "hide_slide_switch": 26, "make_image_slid": 26, "set_titl": 26, "slide_layout": 26, "xakeynoteslidelayout": [26, 51], "layout": 26, "maximum_idle_dur": 26, "due": [26, 31, 39, 70, 75, 107], "move_slide_switcher_backward": 26, "move_slide_switcher_forward": 26, "new_slid": 26, "show_slide_switch": 26, "xakeynoteslidelayoutlist": [26, 51], "slide_numbers_show": 26, "xakeynoteslidelist": [26, 51], "greater_than": [26, 53, 83, 107], "slidenumb": 26, "start_from": 26, "1920": 26, "by_auto_loop": 26, "by_auto_plai": 26, "by_auto_restart": 26, "by_current_slid": 26, "by_document_them": 26, "by_maximum_idle_dur": 26, "by_slide_numbers_show": 26, "add_chart": 26, "row_nam": 26, "column_nam": 26, "group_bi": 26, "_summary_": 26, "_extended_summary_": [26, 30], "2d": 26, "_keynotelegacycharttyp": 26, "keynotelegacycharttypeline_2d": 26, "schema": 26, "_keynotelegacychartgroup": 26, "keynotelegacychartgroupingchartrow": 26, "add_imag": [26, 35], "base_layout": 26, "body_show": 26, "bodi": [26, 32, 33, 35, 39, 48, 83, 107], "default_body_item": 26, "default_title_item": 26, "manual": [26, 53, 65], "presenter_not": 26, "slide_numb": 26, "title_show": 26, "transition_properti": 26, "by_base_layout": 26, "by_body_show": 26, "by_default_body_item": 26, "by_default_text_item": 26, "default_text_item": 26, "by_presenter_not": 26, "by_skip": 26, "by_slide_numb": 26, "by_title_show": 26, "by_transition_properti": 26, "xakeynotetransitionset": [26, 51], "transtion": 26, "automatic_transit": 26, "transition_delai": 26, "transition_dur": 26, "transition_effect": 26, "xamailaccount": [27, 51], "account_directori": 27, "account_typ": 27, "accounttyp": 27, "smtp": 27, "imap": 27, "authent": [27, 45], "authenticationmethod": 27, "scheme": [27, 53, 65, 70, 93], "apop": 27, "kerbero": 27, "ntlm": 27, "md5": 27, "token": 27, "delivery_account": 27, "xamailsmtpserv": [27, 51], "deliveri": 27, "send": [27, 30, 75, 107, 111], "email_address": 27, "empty_junk_messages_frequ": 27, "junk": 27, "empty_junk_messages_on_quit": 27, "empty_trash_frequ": 27, "empty_trash_on_quit": 27, "full_nam": [27, 30, 45], "mailbox": 27, "xamailboxlist": [27, 51], "move_deleted_messages_to_trash": 27, "port": [27, 53], "server_nam": 27, "host": [27, 65], "uses_ssl": 27, "receiv": [27, 60, 96, 98, 103, 105], "xamailaccountlist": [27, 51], "xamailappl": [27, 51], "by_account_directori": 27, "by_account_typ": 27, "by_authent": 27, "by_delivery_account": 27, "by_email_address": 27, "by_empty_junk_messages_frequ": 27, "by_empty_junk_messages_on_quit": 27, "by_empty_trash_frequ": 27, "by_empty_trash_on_quit": 27, "by_full_nam": [27, 30, 45], "by_move_deleted_messages_to_trash": 27, "by_port": 27, "by_server_nam": 27, "by_uses_ssl": 27, "xamailsmtpserverlist": [27, 51], "1702127988": 27, "1702127981": 27, "1702129775": 27, "1702130541": 27, "1702131054": 27, "1633775727": 27, "apple_token": 27, "1635020651": 27, "1634039924": 27, "tl": 27, "client": 27, "certif": 27, "kerberos5": 27, "1635281717": 27, "v5": 27, "gssapi": 27, "1635282276": 27, "cram": 27, "1667460719": 27, "1635282548": 27, "1635279732": 27, "cachingpolici": 27, "all_messages_and_their_attach": 27, "2017026412": 27, "all_messages_but_omit_attach": 27, "2017026671": 27, "omit": [27, 34], "do_not_keep_copies_of_any_messag": 27, "2017029743": 27, "polici": 27, "only_messages_i_have_read": 27, "2017032050": 27, "1769235821": [27, 32, 33], "plain_messag": 27, "1684893812": 27, "rich_messag": 27, "1684894324": 27, "highlightcolor": [27, 45], "highlight": [27, 45, 53, 60, 75, 93, 103, 105, 109], "1667457644": 27, "1667458937": 27, "1667458930": 27, "1667460978": 27, "1667460980": 27, "1667461237": 27, "1667461733": 27, "1667463525": 27, "quotingcolor": 27, "quot": [27, 34, 58], "rulequalifi": 27, "qualifi": 27, "begins_with_valu": 27, "1920033399": 27, "does_contain_valu": 27, "1920033647": 27, "does_not_contain_valu": 27, "1920033902": 27, "ends_with_valu": 27, "1920034167": 27, "equal_to_valu": 27, "1920035173": 27, "greater_than_valu": 27, "1920034676": 27, "less_than_valu": 27, "1920035956": 27, "1920036463": 27, "ruletyp": 27, "1952539491": 27, "any_recipi": 27, "1952542322": 27, "recipi": 27, "attachment_typ": 27, "1952543860": 27, "cc_header": 27, "1952670563": 27, "cc": 27, "from_head": 27, "1952871023": 27, "header_kei": 27, "1952998507": 27, "arbitrari": 27, "matches_every_messag": 27, "1952806509": 27, "message_cont": 27, "1953326435": 27, "message_is_junk_mail": 27, "1953327466": 27, "sender_is_in_my_contact": 27, "1953720681": 27, "sender": 27, "sender_is_in_my_previous_recipi": 27, "1953718632": 27, "sender_is_member_of_group": 27, "1953720685": 27, "member": [27, 34, 59, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 93, 95, 96, 97, 98, 99, 100, 101, 107], "sender_is_not_in_my_contact": 27, "1953720686": 27, "sender_is_not_in_my_previous_recipi": 27, "1953390952": 27, "sender_is_not_member_of_group": 27, "1953720679": 27, "sender_is_vip": 27, "vip": 27, "subject_head": 27, "1953723746": 27, "subject": 27, "to_head": 27, "1953787759": 27, "to_or_cc_head": 27, "1953787747": 27, "viewercolumn": 27, "1701011828": 27, "date_last_sav": 27, "1701014643": 27, "date_receiv": 27, "1701012594": 27, "date_s": 27, "1701012595": 27, "sent": [27, 30, 45, 53, 105, 111], "1701013100": 27, "1701013106": 27, "1701014882": 27, "message_color": 27, "1701012332": 27, "message_statu": 27, "1701014899": 27, "unread": [27, 58], "1701015149": 27, "1701016687": 27, "1701016442": 27, "1701016437": 27, "always_bcc_myself": 27, "bcc": 27, "field": [27, 30, 45, 53, 57], "compos": [27, 29, 31], "always_cc_myself": 27, "application_vers": 27, "background_activity_count": 27, "check_for_new_mail": 27, "check_spelling_while_typ": 27, "spell": 27, "choose_signature_when_compos": 27, "signatur": [27, 45], "color_quoted_text": 27, "default_message_format": 27, "being": [27, 30, 31, 34, 45, 50], "download_html_attach": 27, "drafts_mailbox": 27, "xamailbox": [27, 51], "expand_group_address": 27, "enter": [27, 45, 112], "fetch_interv": 27, "fetch": [27, 107], "determin": [27, 34, 53], "fetches_automat": 27, "fixed_width_font": 27, "fixed_width_font_s": 27, "highlight_selected_convers": 27, "convers": [27, 37, 104], "imap_account": 27, "import_mailbox": 27, "inbox": 27, "include_all_original_message_text": 27, "junk_mailbox": 27, "level_one_quoting_color": 27, "level_three_quoting_color": 27, "level_two_quoting_color": 27, "message_font": 27, "message_font_s": 27, "message_list_font": 27, "message_list_font_s": 27, "message_view": 27, "xamailmessageviewerlist": [27, 51], "new_mail_sound": 27, "outbox": 27, "outgoing_messag": 27, "pop_account": 27, "primary_email": 27, "quote_original_messag": 27, "xamailrulelist": [27, 51], "same_reply_format": 27, "selected_signatur": 27, "randomli": [27, 99], "xamailmessagelist": [27, 51], "sent_mailbox": 27, "should_play_other_mail_sound": 27, "xamailsignaturelist": [27, 51], "smtp_server": 27, "synchron": 27, "trash_mailbox": 27, "use_fixed_width_font": 27, "xamailattach": [27, 51], "file_s": [27, 30], "approxim": 27, "mime_typ": 27, "mime": 27, "xamailattachmentlist": [27, 51], "by_download": [27, 29], "by_file_s": [27, 30], "by_mime_typ": 27, "xamailbccrecipi": [27, 51], "xamailrecipi": [27, 51], "xamailbccrecipientlist": [27, 51], "xamailrecipientlist": [27, 51], "xamailccrecipi": [27, 51], "xamailccrecipientlist": [27, 51], "xamailcontain": [27, 51], "xamailcontainerlist": [27, 51], "xamaildocu": [27, 51], "xamaildocumentlist": [27, 51], "xamailhead": [27, 51], "xamailheaderlist": [27, 51], "xamailicloudaccount": [27, 51], "xamailicloudaccountlist": [27, 51], "xamailimapaccount": [27, 51], "compact_mailboxes_when_clos": 27, "compact": 27, "message_cach": 27, "cach": 27, "store_deleted_messages_on_serv": 27, "store_drafts_on_serv": 27, "store_junk_mail_on_serv": 27, "store_sent_messages_on_serv": 27, "xamailimapaccountlist": [27, 51], "by_compact_mailboxes_when_clos": 27, "xamailpopaccount": [27, 51], "by_message_cach": 27, "by_store_deleted_messages_on_serv": 27, "by_store_drafts_on_serv": 27, "by_store_junk_mail_on_serv": 27, "by_store_sent_messages_on_serv": 27, "xamailmessag": [27, 51], "all_head": 27, "bcc_recipi": 27, "cc_recpient": 27, "deleted_statu": 27, "flag_index": 27, "flagged_statu": 27, "open_window": 27, "xamailoutgoingmessag": [27, 51], "junk_mail_statu": 27, "mail_attach": 27, "message_id": 27, "message_s": 27, "read_statu": 27, "redirect": 27, "reply_al": 27, "reply_to": 27, "to_recipi": 27, "xamailtorecipientlist": [27, 51], "was_forward": 27, "was_redirect": 27, "was_replied_to": 27, "by_all_head": 27, "by_date_receiv": 27, "by_date_s": 27, "by_deleted_statu": 27, "by_flag_index": 27, "by_flagged_statu": 27, "by_junk_mail_statu": 27, "by_mailbox": 27, "by_message_id": 27, "by_message_s": 27, "by_read_statu": 27, "by_reply_to": 27, "by_send": 27, "by_sourc": [27, 41], "by_subject": 27, "by_was_forward": 27, "by_was_redirect": 27, "by_was_replied_to": 27, "xamailmessageview": [27, 51], "mailbox_list_vis": 27, "preview_pane_is_vis": 27, "selected_mailbox": 27, "selected_messag": 27, "sort_ascend": 27, "visible_column": 27, "visible_messag": 27, "xamailwindow": [27, 51], "by_drafts_mailbox": 27, "by_inbox": 27, "by_junk_mailbox": 27, "by_mailbox_list_vis": 27, "by_outbox": 27, "by_preview_pane_is_vis": 27, "by_selected_mailbox": 27, "by_selected_messag": 27, "by_sent_mailbox": 27, "by_sort_column": 27, "by_sorted_ascend": 27, "sorted_ascend": 27, "by_trash_mailbox": 27, "by_visible_column": 27, "by_visible_messag": 27, "by_window": 27, "outgo": [27, 30, 53], "message_signatur": 27, "xamailsignatur": [27, 51], "xamailoutgoingmessagelist": [27, 51], "by_message_signatur": 27, "big_message_warning_s": 27, "max": [27, 60, 83, 108], "delayed_message_deletion_interv": 27, "delete_mail_on_serv": 27, "delete_messages_when_moved_from_inbox": 27, "xamailpopaccountlist": [27, 51], "by_big_message_warning_s": 27, "by_delayed_message_deletion_interv": 27, "by_delete_mail_on_serv": 27, "by_delete_messages_when_moved_from_inbox": 27, "xamailrul": [27, 51], "all_conditions_must_be_met": 27, "condit": [27, 53, 109], "met": 27, "color_messag": 27, "copy_messag": 27, "delete_messag": 27, "forward_messag": 27, "forward_text": 27, "prepend": [27, 48, 53], "highlight_text_using_color": 27, "mark_flag_index": 27, "disabl": [27, 34], "mark_flag": 27, "mark_read": 27, "move_messag": 27, "play_sound": 27, "redirect_messag": 27, "suppli": [27, 48, 53, 74, 109], "reply_text": 27, "rule_condit": 27, "xamailruleconditionlist": [27, 51], "run_script": 27, "should_copy_messag": 27, "should_move_messag": 27, "stop_evaluating_rul": 27, "xamailrulecondit": [27, 51], "rule_typ": 27, "by_express": 27, "by_head": 27, "by_qualifi": 27, "by_rule_typ": 27, "by_all_conditions_must_be_met": 27, "by_color_messag": 27, "by_copy_messag": 27, "by_delete_messag": 27, "deletemessag": 27, "by_forward_messag": 27, "by_forward_text": 27, "by_highlight_text_using_color": 27, "by_mark_flag_index": 27, "by_mark_flag": 27, "by_mark_read": 27, "by_move_messag": 27, "by_play_sound": 27, "by_redirect_messag": 27, "by_reply_text": 27, "by_run_script": 27, "by_should_copy_messag": 27, "by_should_move_messag": 27, "by_stop_evaluating_rul": 27, "xamailtorecipi": [27, 51], "unread_count": 27, "by_account": [27, 30], "by_unread_count": 27, "xamapsappl": [28, 51], "xamapssidebarloc": [28, 51], "xamapsdirect": [28, 51], "directions_to": 28, "destination_address": 28, "source_address": 28, "transport_typ": 28, "liter": [28, 29, 31, 39, 53, 103], "d": [28, 53], "walk": [28, 106], "pt": 28, "r": [28, 34, 40, 42, 53, 112], "destin": [28, 34, 58], "drop_pin": 28, "latitud": [28, 36, 53], "longitud": [28, 36, 53], "pin": 28, "orient_north": 28, "orient": [28, 45], "north": 28, "upward": 28, "exact": [28, 103, 112], "versu": 28, "further": [28, 34, 58, 63, 104, 108], "awai": [28, 53], "show_address": 28, "show_coordin": 28, "sidebar_loc": 28, "xamapssidebarlocationlist": [28, 51], "sidebar_show": [28, 44], "xamapstablist": [28, 51], "toggle_sidebar": 28, "zoom_in": 28, "zoom_out": 28, "rout": 28, "has_tol": 28, "toll": 28, "has_weather_warn": 28, "weather": [28, 108], "xamapsdirectionslist": [28, 51], "show_directions_to": 28, "xamapstab": [28, 51], "mediaapplicationbas": [29, 31], "xamediaappl": [29, 31, 49], "xamediawindow": [29, 31, 49], "xamediasourc": [29, 31], "xamediaplaylist": [29, 31], "xamediatrack": [29, 31], "mediakind": 29, "music_video": 29, "1800823894": 29, "1800234067": 29, "1800760939": [29, 31], "playerst": [29, 43], "player": [29, 43, 52, 53], "fast_forward": 29, "1800426310": 29, "paus": [29, 31, 36, 38, 43, 50, 53, 59, 72, 81], "1800426352": [29, 43], "1800426320": [29, 43], "rewind": [29, 53, 111], "1800426322": 29, "1800426323": [29, 43], "playlistkind": 29, "playlist": [29, 31, 50, 105, 107], "1800630342": 29, "geniu": [29, 31], "1800630343": 29, "smart": 29, "1800630348": 29, "1800630362": 29, "1800302446": 29, "purchased_mus": 29, "1800630349": 29, "purchas": [29, 31], "1666544464": 29, "user_librari": 29, "1665952080": 29, "ratingkind": 29, "1800565827": 29, "1800565845": 29, "searchfilt": 29, "1800630860": 29, "1799449708": [29, 31], "1800630866": 29, "1800630851": 29, "1800630870": 29, "1800630867": 29, "sourcekind": 29, "audio_cd": 29, "1799439172": 29, "itunes_stor": 29, "1799967827": 29, "1800169826": 29, "mp3_cd": 29, "1800225604": 29, "mp3": [29, 50, 96, 103], "radio_tun": 29, "1800697198": 29, "radio": [29, 31, 45], "shared_librari": 29, "1800628324": 29, "back_track": 29, "playback": [29, 31, 43, 53, 101, 111], "next_track": [29, 43], "previous_track": [29, 43], "browser_window": 29, "xamediabrowserwindowlist": 29, "browser": [29, 45, 52, 53, 93], "current_playlist": 29, "current_stream_titl": 29, "stream": [29, 38], "current_stream_url": 29, "current_track": [29, 31, 43], "fixed_index": 29, "independ": [29, 46], "full_screen": 29, "mute": [29, 38, 50, 101], "open_loc": 29, "video_url": 29, "audio_url": 29, "playpaus": [29, 43], "xamediaitem": [29, 31, 49], "_xamediaitem": 29, "player_posit": [29, 43], "elaps": 29, "player_st": [29, 43], "playlist_window": 29, "xamediaplaylistwindowlist": 29, "xamediaplaylistlist": [29, 31], "backward": [29, 50], "xamediaitemlist": [29, 31, 49], "set_volum": [29, 53], "new_volum": 29, "sound_volum": [29, 31, 43], "xamediasourcelist": [29, 31], "subsequ": 29, "xamediatracklist": [29, 31], "video_window": 29, "xamediavideowindowlist": 29, "xamediaartwork": 29, "artwork": [29, 43, 105], "purpos": [29, 53, 57], "object_descript": [29, 30, 36, 45, 111], "raw_data": 29, "xamediaartworklist": 29, "by_data": 29, "by_object_descript": [29, 30, 36, 45, 111], "by_raw_data": 29, "xamediabrowserwindow": 29, "xamediawindowlist": [29, 31], "xamediaplaylistwindow": 29, "by_view": 29, "xamediafiletrack": [29, 31], "xamediafiletracklist": [29, 31], "xamediafolderplaylist": 29, "xamediauserplaylist": 29, "xamediafolderplaylistlist": 29, "xamediauserplaylistlist": 29, "playabl": 29, "persistent_id": 29, "constant": [29, 34], "by_persistent_id": 29, "xamedialibraryplaylist": 29, "file_track": [29, 31], "shared_track": 29, "xamediasharedtracklist": 29, "url_track": [29, 31], "xamediaurltracklist": [29, 31], "xamedialibraryplaylistlist": 29, "parent_playlist": 29, "special_kind": 29, "mm": 29, "ss": 29, "by_dur": [29, 38], "by_special_kind": 29, "by_tim": 29, "xamediasharedtrack": 29, "library_playlist": 29, "user_playlist": 29, "xamediaremoteurltrack": 29, "album_r": 29, "album_rating_kind": 29, "bit_rat": 29, "bitrat": 29, "kbp": 29, "kept": 29, "database_id": 29, "date_ad": 29, "disc_count": [29, 31], "disc_numb": [29, 31, 43], "downloader_apple_id": 29, "downloader_nam": 29, "episode_id": 29, "episod": 29, "episode_numb": 29, "section": [29, 34, 35, 62, 63, 65, 75, 83, 92, 93, 99], "chapter": [29, 50], "movement": [29, 31], "long_descript": 29, "media_kind": 29, "played_count": [29, 43], "played_d": 29, "purchaser_apple_id": 29, "bought": 29, "purchaser_nam": 29, "rating_kind": 29, "release_d": 29, "releas": [29, 31, 34, 53, 63, 65], "sample_r": [29, 53], "sampl": [29, 53, 105, 106], "hz": [29, 31], "season_numb": 29, "season": 29, "skipped_count": 29, "skipped_d": 29, "sort_album": 29, "sort_nam": 29, "sort_show": 29, "hh": 29, "track_count": 29, "track_numb": [29, 43], "unplai": 29, "volume_adjust": 29, "by_album": 29, "by_album_r": 29, "by_album_rating_kind": 29, "by_bit_r": 29, "by_bookmark": 29, "by_database_id": 29, "by_date_ad": 29, "by_disc_count": [29, 31], "by_disc_numb": [29, 31], "by_downloader_apple_id": 29, "by_downloader_nam": 29, "by_episode_id": 29, "by_episode_numb": 29, "by_finish": 29, "by_genr": [29, 31], "by_long_descript": 29, "by_media_kind": 29, "by_played_count": 29, "by_played_d": 29, "by_purchaser_apple_id": 29, "by_purchaser_nam": 29, "by_rat": [29, 38], "by_rating_kind": 29, "by_release_d": 29, "by_sample_r": 29, "by_season_numb": 29, "by_show": 29, "by_skipped_count": 29, "by_skipped_d": 29, "by_sort_album": 29, "by_sort_nam": 29, "by_sort_show": 29, "by_start": [29, 30], "by_track_count": 29, "by_track_numb": 29, "by_unplai": 29, "by_volume_adjust": 29, "by_year": [29, 31], "xamediaurltrack": 29, "by_shar": [29, 32, 33], "by_smart": 29, "xamediavideowindow": 29, "miniaturiz": [29, 30, 54], "miniatur": [29, 30, 34, 53, 54, 58], "by_clos": [29, 54], "closeabl": [29, 30, 54], "by_full_screen": 29, "by_resiz": [29, 54], "by_zoom": [29, 54], "zoomabl": [29, 30, 54], "xamessagesaccount": [30, 51], "chat": [30, 53, 58], "xamessageschatlist": [30, 51], "connection_statu": 30, "connectionstatu": 30, "xamessagesparticipantlist": [30, 51, 58], "xamessagesaccountlist": [30, 51], "by_connection_statu": 30, "xamessagesappl": [30, 51], "xamessageschat": [30, 51, 58], "xamessagesfiletransf": [30, 51, 53], "xamessagesparticip": [30, 51], "transfer": 30, "1668247150": 30, "1668247143": 30, "disconnect": [30, 45], "1684238190": 30, "1684237927": 30, "messagedirect": [30, 53], "incom": 30, "1179937123": 30, "1179938663": 30, "imessag": [30, 42, 53, 58], "1936289139": 30, "sm": 30, "1936944499": 30, "transferstatu": 30, "stage": 30, "fail": [30, 37, 53], "1179939685": 30, "final": [30, 60, 104, 106], "1179939706": 30, "1179939686": 30, "prepar": [30, 109], "1179939696": 30, "1179939687": 30, "1179939703": 30, "bec519ea": 30, "dd88": 30, "5574": 30, "bdb9": 30, "c48486d3111b": 30, "0x126de2340": 30, "11234567891": [30, 58], "12234567891": 30, "dev": [30, 42], "n": [30, 48, 53, 60, 83, 98, 103], "0x10871e100": 30, "123": 30, "456": 30, "7891": 30, "xamessagesdocumentlist": [30, 51], "file_transf": [30, 53], "xamessagesfiletransferlist": [30, 51], "at_0_8bec6b47": 30, "3b43": 30, "4d14": 30, "87c1": 30, "221c2bded01c": 30, "at_0_9c0dc423": 30, "f6ab": 30, "4a98": 30, "8532": 30, "1c4d250160cd": 30, "de": [30, 53], "c4": 30, "04": 30, "888": 30, "8888": 30, "by_particip": 30, "_type_": 30, "xamessagesdocu": [30, 51], "file_progress": 30, "transfer_statu": 30, "by_direct": 30, "by_file_path": 30, "by_file_progress": 30, "by_transfer_statu": 30, "comparison_oper": [30, 53], "value1": [30, 53], "value2": [30, 53], "nspredic": [30, 53], "comparison": [30, 53, 103, 107], "compar": [30, 53, 60, 106], "against": [30, 53], "last_file_transf": [30, 53], "media_item": [30, 36, 53, 105, 107], "photosapp": [30, 36, 53, 107], "xaphotosmediaitemlist": [30, 36, 51, 53, 107], "cb24fe9f": [30, 53, 107], "e9dc": [30, 53, 107], "4a5c": [30, 53, 107], "a0b0": [30, 53, 107], "cc779b1cedc": [30, 53, 107], "l0": [30, 53, 107], "001": [30, 53, 107], "efeb7f37": [30, 53], "8373": [30, 53], "4972": [30, 53], "8e43": [30, 53], "21612f597185": [30, 53], "expect": [30, 53], "try": [30, 34, 53, 106], "xaphotosmediaitem": [30, 36, 51, 53, 105], "taken": [30, 105], "by_handl": 30, "xamessageswindow": [30, 51], "xamusicairplaydevic": [31, 51], "airplai": 31, "devicekind": 31, "network_address": 31, "passcod": 31, "supports_audio": 31, "supports_video": 31, "xamusicairplaydevicelist": [31, 51], "by_act": [31, 45], "by_avail": 31, "by_network_address": 31, "by_protect": 31, "by_sound_volum": 31, "by_supports_audio": 31, "by_supports_video": 31, "xamusicappl": [31, 51], "xamusicwindow": [31, 51], "xamusicsourc": [31, 51], "xamusicplaylist": [31, 51], "xamusictrack": [31, 51], "airplay_devic": 31, "1799442511": 31, "airport_express": 31, "1799442520": 31, "airport": 31, "apple_tv": 31, "1799442516": 31, "bluetooth_devic": 31, "1799442498": 31, "bluetooth": [31, 46], "1799442499": 31, "homepod": 31, "1799442504": 31, "1799442517": 31, "album_list": 31, "1799449698": 31, "cd_insert": 31, "1799570537": 31, "printout": 31, "jewel": 31, "report": [31, 54], "track_list": 31, "1800696427": 31, "repeatmod": 31, "1800564815": 31, "ONE": 31, "1800564785": 31, "shufflemod": 31, "shuffl": [31, 43, 53, 104], "1800628289": 31, "1800628295": 31, "1800628307": 31, "add_to_playlist": 31, "macbook": [31, 75], "pro": [31, 75], "airplay_en": 31, "convert": [31, 42, 58, 75, 104], "current_airplay_devic": 31, "current_encod": 31, "xamusicencod": [31, 51], "encod": [31, 45], "current_eq_preset": 31, "xamusiceqpreset": [31, 51], "current_visu": 31, "xamusicvisu": [31, 51], "visual": [31, 106, 108], "plug": 31, "xamusicencoderlist": [31, 51], "eq_en": 31, "eq_preset": 31, "xamusiceqpresetlist": [31, 51], "eq": 31, "eq_window": 31, "xamusiceqwindowlist": [31, 51], "icloudstatu": 31, "1799648624": 31, "1799713394": 31, "unavail": [31, 92], "inelig": 31, "1800562026": 31, "1800233332": 31, "not_upload": 31, "1800761424": 31, "non": [31, 34, 52, 53, 60, 75, 105, 108, 110, 111], "upload": [31, 50, 101], "no_longer_avail": 31, "1800562038": 31, "expir": 31, "1800435058": 31, "1800562029": 31, "subscript": 31, "1800631650": 31, "cloud": 31, "1800761452": 31, "unload": 31, "miniplayer_window": 31, "xamusicminiplayerwindowlist": [31, 51], "miniplay": 31, "xamusicminiplaywindowlist": 31, "shuffle_en": 31, "shuffle_mod": 31, "song_repeat": 31, "xamusictracklist": [31, 51, 107], "xamusicvisuallist": [31, 51], "visuals_en": 31, "xamusicaudiocdplaylist": [31, 51], "xamusiclibraryplaylist": 31, "xamusicuserplaylist": [31, 51], "audio_cd_track": 31, "xamusicaudiocdtracklist": [31, 51], "compil": [31, 53, 58, 112], "xamusicaudiocdplaylistlist": [31, 51], "xamusicplaylistlist": [31, 51], "by_artist": 31, "by_compil": 31, "by_compos": 31, "xamusicaudiocdtrack": [31, 51], "band1": 31, "32": [31, 50, 83], "band": 31, "12": [31, 42, 53, 63, 83, 109], "db": 31, "band10": 31, "khz": 31, "band2": 31, "64": [31, 107], "band3": 31, "125": 31, "band4": 31, "250": [31, 108], "band5": 31, "band6": 31, "band7": 31, "band8": 31, "band9": 31, "preamp": 31, "update_track": 31, "renam": [31, 63], "by_band1": 31, "by_band10": 31, "by_band2": 31, "by_band3": 31, "by_band4": 31, "by_band5": 31, "by_band6": 31, "by_band7": 31, "by_band8": 31, "by_band9": 31, "by_preamp": 31, "by_update_track": 31, "xamusiceqwindow": [31, 51], "xamusicwindowlist": [31, 51], "xamusicminiplayerwindow": [31, 51], "minipplay": 31, "dislik": 31, "love": 31, "by_dislik": 31, "by_lov": 31, "xamusicradiotunerplaylist": [31, 51], "xamusicradiotunerplaylistlist": [31, 51], "tuner": 31, "audio_cd_playlist": 31, "radio_tuner_playlist": 31, "subscription_playlist": 31, "xamusicsubscriptionplaylistlist": [31, 51], "xamusicsourcelist": [31, 51], "xamusicsubscriptionplaylist": [31, 51], "xamusicsharedtrack": 31, "xamusicremoteurltrack": 31, "album_artist": [31, 43], "album_dislik": 31, "album_lov": 31, "bpm": 31, "tempo": 31, "beat": 31, "cloud_statu": 31, "gapless": 31, "lyric": 31, "movement_count": 31, "movement_numb": 31, "shufflabl": 31, "sort_album_artist": 31, "sort_artist": 31, "sort_compos": 31, "by_album_artist": 31, "by_album_dislik": 31, "by_album_lov": 31, "by_bpm": 31, "by_cloud_statu": 31, "by_eq": 31, "by_gapless": 31, "by_lyr": 31, "by_mov": 31, "by_movement_count": 31, "by_movement_numb": 31, "by_shuffl": 31, "by_sort_album_artist": 31, "by_sort_artist": 31, "by_sort_compos": 31, "by_work": 31, "xamusicuserplaylistlist": [31, 51], "by_geniu": 31, "xamusicbrowserwindow": 31, "xamusicplaylistwindow": 31, "xamusicvideowindow": 31, "xanot": [32, 33, 51, 83], "xashow": [32, 33, 51, 56], "xanotesfold": [32, 33, 51, 83], "show_separ": [32, 33], "xanotesattachmentlist": [32, 33, 51, 83], "coredata": [32, 33, 83], "224d909c": [32, 33], "b449": [32, 33], "42b0": [32, 33], "96ec": [32, 33], "380ee22332e2": [32, 33], "icattach": [32, 33, 83], "p526": [32, 33], "xanoteattach": [32, 33, 51], "content_identifi": [32, 33, 83], "xanotelist": [32, 33, 51, 83], "by_bodi": [32, 33, 39], "by_plaintext": [32, 33], "xanotesfolderlist": [32, 33, 51, 83], "xanotesaccount": [32, 33, 51], "default_fold": [32, 33, 83], "icfold": [32, 33, 83], "p3104": [32, 33], "p3123": [32, 33], "icnot": [32, 33, 83], "p3380": [32, 33], "p614": [32, 33], "upgrad": [32, 33, 83], "xanotesaccountlist": [32, 33, 51, 83], "by_default_fold": [32, 33], "by_upgrad": [32, 33], "xanotesappl": [32, 33, 51, 58], "xanoteswindow": [32, 33, 51], "default_account": [32, 33, 39], "xanotesdocumentlist": [32, 33, 51], "examplefolder1": [32, 33], "examplefolder2": [32, 33], "examplefolder3": [32, 33], "new_fold": [32, 33, 83], "new_not": [32, 33, 83, 106], "p3389": [32, 33], "p3388": [32, 33], "examplename1": [32, 33], "examplename2": [32, 33], "examplename3": [32, 33], "fanci": [32, 33], "213d109c": [32, 33], "b439": [32, 33], "42a0": [32, 33, 83], "380de31393e2": [32, 33], "p2964": [32, 33], "examplename11": [32, 33], "p2963": [32, 33], "file_ref": [32, 33], "redefin": [32, 33, 48, 56], "by_content_identifi": [32, 33], "xanotesdocu": [32, 33, 51], "xaomnioutlinerancestor": [34, 51], "xaomnioutlinerrow": [34, 51], "xaomnioutlinerancestorlist": [34, 51], "xaomnioutlinerrowlist": [34, 51], "ancestor": 34, "xaomnioutlinerappl": [34, 51], "1330929969": 34, "1330929971": 34, "1330929968": 34, "natur": 34, "1330929972": 34, "1330929970": 34, "checkboxst": 34, "1330598706": 34, "indetermin": 34, "1330598705": 34, "1330605679": 34, "uncheck": 34, "1330598704": 34, "columnsummarytyp": 34, "averag": 34, "1332964662": 34, "1332964658": 34, "1332964657": 34, "1332964660": 34, "1332964661": 34, "1332964659": 34, "columntyp": 34, "1331917873": 34, "1331917874": 34, "1331917875": 34, "1331917877": 34, "popup": [34, 45], "1331917876": 34, "styled_text": 34, "1331917872": 34, "displaytyp": 34, "inlin": 34, "1332634673": 34, "out_of_lin": 34, "1332634674": 34, "formatstyl": 34, "1330595398": 34, "1330595404": 34, "1330595405": 34, "1330595411": 34, "sortord": 34, "1330606897": 34, "1330606898": 34, "build_numb": 34, "63": 34, "major": 34, "minor": 34, "come": [34, 105, 109], "document_typ": 34, "xaomnioutlinerdocumenttypelist": [34, 51], "xaomnioutlinerdocumentlist": [34, 51], "imported_files_should_store_compress": 34, "xaomnioutlinerpreferencelist": [34, 51], "prompt_on_file_format_upgrad": 34, "older": 34, "newer": 34, "readable_document_typ": 34, "xaomnioutlinerreadabledocumenttypelist": [34, 51], "readabl": [34, 104, 106], "writable_document_typ": 34, "xaomnioutlinerwritabledocumenttypelist": [34, 51], "xsl_transform": 34, "xaomnioutlinerxsltransformlist": [34, 51], "xsl": 34, "transform": [34, 93], "xaomnioutlinerarchivedata": [34, 51], "xaomnioutlinerattribut": [34, 51], "xaomnioutlinergenericcolor": [34, 51], "xaomnioutlinerpoint": [34, 51], "defining_styl": 34, "xaomnioutlinerstyl": [34, 51], "respons": [34, 53, 108, 112], "effect": [34, 45, 53, 93, 108, 111], "inherit": [34, 45, 59, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 93, 95, 96, 97, 98, 99, 100, 101], "cascad": 34, "chain": [34, 75, 83, 104, 105, 110], "has_local_valu": 34, "xaomnioutlinerattributelist": [34, 51], "xaomnioutlinercel": [34, 51], "xaomnioutlinercolumn": [34, 51], "regex_to_find": 34, "string_to_find": 34, "xaomnioutlinerrichtext": [34, 51], "xaomnioutlinerenumer": [34, 51], "whatev": 34, "xaomnioutlinercelllist": [34, 51], "xaomnioutlinerchild": [34, 51], "below": [34, 53, 58, 59, 62, 63, 65, 72, 75, 81, 83, 92, 93, 99, 103, 104, 105, 107, 108, 109, 111], "xaomnioutlinerchildlist": [34, 51], "xaomnioutlinercolumformat": [34, 51], "iso": 34, "usd": 34, "jpy": 34, "date_styl": 34, "icu": 34, "en_u": 34, "ja_jp": 34, "time_styl": 34, "timezon": [34, 53], "zone": [34, 53], "column_format": 34, "aspect": [34, 75, 104], "column_styl": 34, "overriden": [34, 53, 56], "column_typ": 34, "xaomnioutlinerdocu": [34, 51], "xaomnioutlinerenumerationlist": [34, 51], "format_str": 34, "futur": [34, 53, 62, 65, 66, 92, 93, 108, 112], "sort_ord": 34, "summary_typ": 34, "xaomnioutlinercolumnlist": [34, 51], "xaomnioutlinerconduitsettingdomain": [34, 51], "conduit": 34, "external_id": 34, "databas": 34, "These": [34, 58, 63, 92, 103, 104, 105, 107, 111], "typic": [34, 52, 53], "dn": 34, "mycompani": 34, "myproduct": 34, "miss": [34, 36, 63], "concaten": [34, 105], "re": [34, 58, 60, 72, 93, 106, 110, 112], "crash": 34, "xaomnioutlinerconduitsettingdomainlist": [34, 51], "alternate_color": 34, "canredo": 34, "undon": 34, "canundo": 34, "children_are_sect": 34, "easier": [34, 60], "mix": [34, 53], "collapse_al": 34, "column_title_styl": 34, "let": [34, 60, 106, 107, 108], "avoid": [34, 37, 54, 107], "expand_al": 34, "unlik": [34, 60, 75, 108], "appropri": [34, 53, 60, 75, 96, 105, 107], "folded_editing_en": 34, "fold": 34, "has_subtop": 34, "subtop": 34, "horizontal_grid_color": 34, "hairlin": 34, "divid": [34, 53], "xaomnioutlinerleaflist": [34, 51], "level_styl": 34, "xaomnioutlinerlevelstylelist": [34, 51], "named_styl": 34, "xaomnioutlinernamedstylelist": [34, 51], "note_column": 34, "note_displai": 34, "notescolumnid": 34, "pbcopi": 34, "clipboard_nam": 34, "node": 34, "tree": [34, 45], "pbpast": 34, "save_identifi": 34, "save_identifier_en": 34, "emit": 34, "tool": [34, 42, 60, 99], "quickli": [34, 99, 105, 107, 109, 111], "reli": 34, "xaomnioutlinersectionlist": [34, 51], "selected_column": 34, "xaomnioutlinerselectedcolumnlist": [34, 51], "selected_row": 34, "xaomnioutlinerselectedrowlist": [34, 51], "sorting_postpon": 34, "postpon": 34, "status_sort_ord": 34, "status_vis": 34, "store_compress": 34, "topic_column": 34, "hierarchi": [34, 111], "topiccolumnid": 34, "undo_en": 34, "veri": [34, 53, 58, 104, 107], "carefulli": 34, "previous": [34, 60, 109], "ungroup": 34, "step": [34, 50, 59, 81], "unhoist": 34, "unhoist_al": 34, "vertical_grid_color": 34, "count": [34, 53], "mostli": 34, "writes_wrapp": 34, "itself": [34, 53], "xaomnioutlinerstylelist": [34, 51], "notecolumnid": 34, "verticalgridcolor": 34, "xaomnioutlinerdocumenttyp": [34, 51], "file_extens": 34, "uti": 34, "uniform": 34, "xaomnioutlinerfileattach": [34, 51], "embded": 34, "insid": 34, "xaomnioutlinerfileattachmentlist": [34, 51], "xaomnioutlinerfollowings": [34, 51], "xaomnioutlinerfollowingsiblinglist": [34, 51], "sibl": 34, "binari": 34, "b": [34, 42, 83, 112], "calibr": 34, "compon": [34, 60], "cyan": [34, 53], "There": [34, 50, 59, 62, 63, 65, 66, 81, 92, 93, 99], "cymk": 34, "catalog": 34, "hsv": 34, "hue": [34, 53], "k": 34, "magenta": [34, 53], "xaomnioutlinerpngdata": [34, 51], "pattern": 34, "xaomnioutlinertiffdata": [34, 51], "xaomnioutlinerleaf": [34, 51], "leaf": 34, "underneath": 34, "xaomnioutlinerlevelstyl": [34, 51], "xaomnioutlinernamedstyl": [34, 51], "xaomnioutlinerpathcompon": [34, 51], "xaomnioutlinerpathcomponentlist": [34, 51], "xaomnioutlinerprecedings": [34, 51], "preced": 34, "xaomnioutlinerprecedingsiblinglist": [34, 51], "xaomnioutlinerprefer": [34, 51], "xaomnioutlinerreadabledocumenttyp": [34, 51], "baseline_offset": 34, "shift": [34, 45, 53], "abov": [34, 58, 75, 104, 105, 106, 108, 109], "baselin": 34, "file_attach": 34, "italic": 34, "strng": 34, "superscript": 34, "unbold": 34, "unitalic": 34, "ununderlin": 34, "xaomnioutlinerrichtextlist": [34, 51], "rich": [34, 53], "treat": [34, 56, 58], "conduit_setting_domain": 34, "following_s": 34, "import_fil": [34, 36], "among": 34, "deep": [34, 107], "those": [34, 60, 106, 107], "note_cel": 34, "note_expand": 34, "outdent": 34, "paragraph": [34, 48, 53, 99], "xaparagraphlist": [34, 51, 53], "preceding_s": 34, "rowpath": 34, "silent": 34, "box": [34, 45, 53], "topic_cel": 34, "xaomnioutlinersect": [34, 51], "xaomnioutlinerselectedcolumn": [34, 51], "xaomnioutlinerselectedrow": [34, 51], "xaomnioutlinerwindow": [34, 51], "xaomnioutlinerwritabledocumenttyp": [34, 51], "xaomnioutlinerxsltransform": [34, 51], "directory_extens": 34, "directory_index_file_nam": 34, "written": [34, 58], "human": 34, "get_paramet": 34, "parameter_nam": 34, "xpath": 34, "is_export": 34, "is_import": 34, "result_format": 34, "dtd": 34, "set_paramet": 34, "foo": 34, "source_format": 34, "consum": 34, "stylesheet": 34, "write_attach": 34, "xapagesappl": [35, 51], "xapageswindow": [35, 51], "xapagesdocu": [35, 51], "epub": 35, "1348825205": 35, "microsoft_word": 35, "1350005348": 35, "pages_09": 35, "1347445095": 35, "09": [35, 83], "1349543014": 35, "1349810278": 35, "1348953702": 35, "rtf": [35, 103], "1349678182": 35, "xapagesdocumentlist": [35, 51], "new_doc": [35, 41, 48, 107], "bodytext": 35, "new_lin": 35, "startpoint": 35, "endpoint": [35, 104], "xapagestempl": [35, 51], "xapagespag": [35, 51], "xapagestemplatelist": [35, 51], "xapagescontain": [35, 51], "xapagescontainerlist": [35, 51], "body_text": 35, "current_pag": 35, "document_bodi": 35, "document_templ": 35, "facing_pag": 35, "iwork": [35, 53, 78, 84, 86], "new_pag": 35, "xapagespagelist": [35, 51], "placeholder_text": 35, "xapagesplaceholdertextlist": [35, 51], "placehold": 35, "xapagessectionlist": [35, 51], "by_body_text": 35, "by_current_pag": 35, "by_document_bodi": 35, "by_document_templ": 35, "by_facing_pag": 35, "xapagesplaceholdertext": [35, 51], "xapagessect": [35, 51], "abil": [36, 58, 60, 65, 74, 75, 93, 96, 98, 102, 104], "xaphotosalbum": [36, 51], "xaphotoscontain": [36, 51], "xaphotosalbumlist": [36, 51], "xaphotoscontainerlist": [36, 51], "xaphotosappl": [36, 51], "destination_path": 36, "use_origin": 36, "favorites_album": 36, "xaphotosfolderlist": [36, 51], "destination_album": 36, "skip_duplicate_check": 36, "everyth": 36, "library_path": 36, "new_album": 36, "next_slid": 36, "pause_slideshow": 36, "previous_slid": 36, "recently_deleted_album": 36, "resume_slideshow": 36, "slideshow_run": 36, "start_slideshow": 36, "item_list": 36, "xaphotosfold": [36, 51], "hoc": 36, "stop_slideshow": 36, "xaimagelik": [36, 51, 56, 105], "altitud": [36, 53], "gp": 36, "meter": 36, "get_image_represent": [36, 56], "compat": [36, 37, 53, 56, 102, 107], "is_burst": 36, "burst": 36, "is_hidden": 36, "is_photo": 36, "is_video": 36, "xaloc": [36, 39, 51, 53], "90": 36, "180": 36, "reveal_in_find": 36, "show_in_preview": [36, 53, 75, 104, 105], "by_altitud": 36, "by_dat": [36, 39], "by_favorit": 36, "by_filenam": [36, 107], "xapreviewappl": [37, 51], "xapreviewwindow": [37, 51], "xapreviewdocu": [37, 51], "xapreviewdocumentlist": [37, 51], "show_prompt": [37, 48], "xatextdocu": [37, 48, 51, 53], "quicktimeplay": 38, "xaquicktimeappl": [38, 51], "xaquicktimewindow": [38, 51], "xaquicktimedocu": [38, 51], "xaquicktimeaudiorecordingdevic": [38, 51], "xaquicktimevideorecordingdevic": [38, 51], "xaquicktimeaudiocompressionpreset": [38, 51], "xaquicktimemoviecompressionpreset": [38, 51], "xaquicktimescreencompressionpreset": [38, 51], "audio_compression_preset": 38, "xaquicktimeaudiocompressionpresetlist": [38, 51], "audio_recording_devic": 38, "xaquicktimeaudiorecordingdevicelist": [38, 51], "xaquicktimedocumentlist": [38, 51], "movie_compression_preset": 38, "xaquicktimemoviecompressionpresetlist": [38, 51], "new_audio_record": 38, "new_movie_record": 38, "new_screen_record": 38, "open_url": [38, 50], "remot": [38, 45], "screen_compression_preset": 38, "xaquicktimescreencompressionpresetlist": [38, 51], "video_recording_devic": 38, "xaquicktimevideorecordingdevicelist": [38, 51], "microphon": 38, "audio_volum": [38, 50, 101], "current_audio_compress": 38, "current_camera": 38, "current_microphon": 38, "current_movie_compress": 38, "current_screen_compress": 38, "current_tim": [38, 50, 101], "data_r": 38, "data_s": 38, "natural_dimens": 38, "nation": [38, 53], "step_backward": [38, 50, 101], "num_step": 38, "step_forward": [38, 50, 101], "trim": [38, 53], "end_tim": [38, 53], "by_audio_volum": 38, "by_current_audio_compress": 38, "by_current_camera": 38, "by_current_microphon": 38, "by_current_movie_compress": 38, "by_current_screen_compress": 38, "by_current_tim": 38, "by_data_r": 38, "by_data_s": 38, "by_loop": 38, "by_mut": 38, "by_natural_dimens": 38, "by_plai": 38, "by_pres": 38, "camera": 38, "xaremindersaccount": [39, 51], "xaremindersaccountlist": [39, 51], "xaremindersalarm": [39, 51], "xaremindersremind": [39, 51], "proximity_direct": 39, "arriv": 39, "set_dat": 39, "absolut": 39, "set_loc": 39, "radiu": [39, 53, 105], "snooz": 39, "xaremindersalarmlist": [39, 51], "by_proximity_direct": 39, "by_snooz": 39, "xaremindersappl": [39, 51], "xareminderslist": [39, 51], "default_list": 39, "xareminderslistlist": [39, 51], "new_list": 39, "ff0000": 39, "emblem": 39, "symbol0": 39, "hex": [39, 53], "xareminderlist": 39, "new_remind": 39, "due_dat": 39, "reminder_list": 39, "xaremind": 39, "listat": 39, "b0dd7836": 39, "7c05": 39, "48d4": 39, "b806": 39, "d6a76317452": 39, "xaremindersreminderlist": [39, 51, 53], "xaremindersdocu": [39, 51], "xareminderswindow": [39, 51], "individu": [39, 41, 65, 83, 104, 105, 111], "whom": 39, "sharing_statu": 39, "subscription_url": 39, "by_emblem": 39, "xaremindersrecurrencerul": [39, 51], "frequenc": 39, "unit": [39, 45, 53], "daili": [39, 63], "monthli": 39, "yearli": 39, "set_end_d": 39, "set_frequ": 39, "set_interv": 39, "all_dai": 39, "allday_due_d": 39, "completion_d": 39, "both": [39, 52, 53, 58, 60, 65, 70, 93, 104, 105, 106, 109], "recurrence_rul": 39, "remind_me_d": 39, "by_allday_due_d": 39, "by_complet": 39, "by_completion_d": 39, "by_due_d": 39, "by_prior": 39, "by_remind_me_d": 39, "xarstudioappl": [40, 51], "cmd": 40, "NOT": 40, "xasafariappl": [41, 51, 93], "xasafaridocu": [41, 51], "xasbsav": 41, "add_to_reading_list": [41, 92], "do_javascript": [41, 92, 107], "xasafaridocumentlist": [41, 51], "engin": 41, "search_in_tab": 41, "conduct": [41, 75, 99], "show_bookmark": 41, "relev": [41, 45, 65], "xasafaritablist": [41, 51], "refocu": 41, "xashortcut": [42, 51], "xashortcutsappl": [42, 51], "accepts_input": 42, "action_count": 42, "xashortcutfold": [42, 51], "nsimag": [42, 53, 60], "ip": 42, "xashortcutlist": [42, 51], "shazam": 42, "qr": 42, "quiz": 42, "21521323919296265": 42, "7715266942977905": 42, "32515448331832886": 42, "2379034161567688": 42, "3681696951389313": 42, "7627069354057312": 42, "xashortcutfolderlist": [42, 51], "by_accepts_input": 42, "by_action_count": 42, "by_fold": 42, "by_subtitl": 42, "starter": 42, "all_shortcut": 42, "screenshot": 42, "travel": 42, "plan": [42, 62, 63, 65], "paywal": 42, "bypass": 42, "xaspotifyappl": [43, 51], "xaspotifytrack": [43, 51], "play_track": 43, "track_uri": 43, "context_uri": 43, "context": [43, 63, 72, 105], "uri": [43, 44, 53, 93], "4lrpixqciklln15c3yimp7": 43, "repeating_en": 43, "search_str": 43, "start_year": 43, "end_year": 43, "mood": 43, "shuffling_en": 43, "artwork_url": 43, "millisecond": [43, 107], "popular": 43, "spotify_url": 43, "xastocksappl": [44, 51], "xastockssavedstock": [44, 51], "articl": [44, 99], "saved_stock": 44, "xastockssavedstocklist": [44, 51], "xastocksstocklist": 44, "show_business_new": 44, "show_symbol": 44, "ticker": 44, "trade": 44, "price": 44, "systemev": [45, 53], "xasystemeventsact": [45, 51], "xasystemeventsactionlist": [45, 51], "xasystemeventsappearancepreferencesobject": [45, 51], "dark_mod": [45, 96], "dark": [45, 107], "dock": [45, 106, 108], "font_smooth": 45, "smooth": 45, "font_smoothing_styl": 45, "fontsmoothingstyl": 45, "highlight_color": 45, "hightlight": 45, "recent_applications_limit": 45, "recent_documents_limit": 45, "recent_servers_limit": 45, "scroll_bar_act": 45, "scrollpagebehavior": 45, "smooth_scrol": 45, "xasystemeventsappl": [45, 51], "accessright": 45, "1651275109": 45, "graphit": 45, "1735550580": 45, "doubleclickbehavior": 45, "doubl": [45, 106], "behavior": [45, 47, 111], "1684303209": 45, "1684303718": 45, "1684306543": 45, "dynamicstyl": 45, "dynam": [45, 58], "1635020148": 45, "1684107883": 45, "1685679725": 45, "1818850405": 45, "504363703359": 45, "1635087469": 45, "1937010276": 45, "strong": 45, "1937011303": 45, "gold": 45, "1735355492": 45, "1735550318": 45, "1869770343": 45, "1886548076": 45, "1919247392": 45, "silver": 45, "1936488050": 45, "caps_lock": 45, "mediainsertionact": 45, "ask_what_to_do": 45, "1684562291": 45, "1684564327": 45, "open_appl": 45, "1684562288": 45, "run_a_script": 45, "1684566643": 45, "minimizeeffect": 45, "geni": 45, "1734700649": 45, "1935892844": 45, "picturerot": 45, "after_sleep": 45, "using_interv": 45, "using_login": 45, "screenloc": 45, "1651471476": 45, "1818584692": 45, "side": [45, 53, 60, 75, 108], "1919510376": 45, "jump_to_her": 45, "1953458290": 45, "jump": [45, 53, 112], "jump_to_next_pag": 45, "1853386855": 45, "abort_transact": 45, "abort": 45, "transact": 45, "appearance_prefer": [45, 96], "application_process": 45, "xasystemeventsapplicationprocesslist": [45, 51], "begin_transact": 45, "discard": [45, 75], "cd_and_dvd_prefer": 45, "xasystemeventscdanddvdpreferencesobject": [45, 51], "current_desktop": [45, 96], "xasystemeventsdesktop": [45, 51], "current_screen_sav": [45, 96], "xasystemeventsscreensav": [45, 51], "saver": [45, 59, 81], "current_us": 45, "xasystemeventsus": [45, 51], "desk_accessory_process": 45, "xasystemeventsdeskaccessoryprocesslist": [45, 51], "desk": 45, "accessori": 45, "xasystemeventsdesktoplist": [45, 51], "dock_prefer": 45, "xasystemeventsdockpreferencesobject": [45, 51], "xasystemeventsdocumentlist": [45, 51], "end_transact": 45, "gracefulli": 45, "folder_act": 45, "xafolderactionlist": 45, "folder_actions_en": 45, "key_cod": 45, "behav": [45, 107], "were": [45, 60], "key_strok": 45, "keystrok": [45, 112], "log_out": 45, "login_item": [45, 96], "xasystemeventsloginitemlist": [45, 51], "login": [45, 96, 98], "network_prefer": 45, "xasystemeventsnetworkpreferencesobject": [45, 51], "xasystemeventsprocesslist": [45, 51], "property_list_fil": 45, "xasystemeventspropertylistfilelist": [45, 51], "property_list_item": 45, "xasystemeventspropertylistitemlist": [45, 51], "state_saving_prefer": 45, "screen_saver_prefer": 45, "xasystemeventsscreensaverpreferencesobject": [45, 51], "screen_sav": 45, "xasystemeventsscreensaverlist": [45, 51], "script_menu_en": 45, "scripting_definit": 45, "xasystemeventsscriptingdefinitionobject": [45, 51], "security_prefer": 45, "xasystemeventssecuritypreferencesobject": [45, 51], "secur": 45, "shut_down": 45, "shut": 45, "put": 45, "ui_el": 45, "xasystemeventsuielementlist": [45, 51, 111], "ui_elements_en": 45, "xasystemeventsuserlist": [45, 51], "xml_data": 45, "xasystemeventsxmldatalist": [45, 51], "xml_file": 45, "xasystemeventsxmlfilelist": [45, 51], "xasystemeventsapplicationprocess": [45, 51], "xasystemeventsprocess": [45, 51], "by_application_fil": 45, "xasystemeventsattribut": [45, 51], "xasystemeventsattributelist": [45, 51], "xasystemeventsbrows": [45, 51], "xasystemeventsuiel": [45, 51, 111], "xasystemeventsbrowserlist": [45, 51], "xasystemeventsbusyind": [45, 51], "xasystemeventsbusyindicatorlist": [45, 51], "xasystemeventsbutton": [45, 51], "xasystemeventsbuttonlist": [45, 51], "blank_bd": 45, "xasystemeventsinsertionprefer": [45, 51], "blank": 45, "bd": 45, "blank_cd": 45, "blank_dvd": 45, "music_cd": 45, "picture_cd": 45, "video_bd": 45, "video_dvd": 45, "xasystemeventscheckbox": [45, 51], "xasystemeventscheckboxlist": [45, 51], "xasystemeventscolorwel": [45, 51], "xasystemeventscolorwelllist": [45, 51], "xasystemeventscolumn": [45, 51], "xasystemeventscolumnlist": [45, 51], "xasystemeventscombobox": [45, 51], "combo": 45, "xasystemeventscomboboxlist": [45, 51], "xasystemeventsconfigur": [45, 51], "account_nam": 45, "xasystemeventsconfigurationlist": [45, 51], "by_account_nam": 45, "by_connect": 45, "xasystemeventsdeskaccessoryprocess": [45, 51], "desk_accessory_fil": 45, "by_desk_accessory_fil": 45, "change_interv": 45, "dynamic_styl": 45, "picture_rot": 45, "random_ord": 45, "translucent_menu_bar": 45, "transluc": 45, "transluscent_menu_bar": 45, "by_change_interv": 45, "by_dynamic_styl": 45, "by_pictur": 45, "by_picture_rot": 45, "by_pictures_fold": 45, "by_random_ord": 45, "by_translucent_menu_bar": 45, "random_fold": 45, "autohid": 45, "autohide_menu_bar": 45, "dock_siz": 45, "double_click_behavior": 45, "magnif": 45, "magnification_s": 45, "minimize_effect": 45, "minimize_into_appl": 45, "screen_edg": 45, "show_ind": 45, "show_rec": 45, "xasystemeventsdocu": [45, 51], "Its": 45, "xasystemeventsdraw": [45, 51], "drawer": 45, "xasystemeventsdrawerlist": [45, 51], "xasystemeventsfolderact": [45, 51], "xasystemeventsscriptlist": [45, 51], "xasystemeventsfolderactionlist": [45, 51], "xafolderact": 45, "by_volum": [45, 53], "xasystemeventsgroup": [45, 51], "xasystemeventsgrouplist": [45, 51], "xasystemeventsgrowarea": [45, 51], "grow": 45, "xasystemeventsgrowarealist": [45, 51], "xasystemeventsimag": [45, 51], "static": [45, 53], "xasystemeventsimagelist": [45, 51], "xasystemeventsincrementor": [45, 51], "incrementor": 45, "xasystemeventsincrementorlist": [45, 51], "custom_appl": 45, "custom_script": 45, "insertion_act": 45, "xasystemeventsinterfac": [45, 51], "speed": [45, 107], "duplex": 45, "mtu": 45, "half": [45, 99, 107], "mac_address": 45, "packet": [45, 98], "ethernet": 45, "xasystemeventsinterfacelist": [45, 51], "by_automat": 45, "by_duplex": 45, "by_mac_address": 45, "by_mtu": 45, "by_spe": 45, "xasystemeventslist": [45, 51], "xasystemeventslistlist": [45, 51], "xasystemeventsloc": [45, 51], "xasystemeventslocationlist": [45, 51], "xasystemeventsloginitem": [45, 51], "by_hidden": 45, "xasystemeventsmenu": [45, 51], "xasystemeventsmenubar": [45, 51], "xasystemeventsmenubaritem": [45, 51], "xasystemeventsmenubaritemlist": [45, 51], "xasystemeventsmenubarlist": [45, 51], "xasystemeventsmenubutton": [45, 51], "xasystemeventsmenubuttonlist": [45, 51], "xasystemeventsmenuitem": [45, 51], "xasystemeventsmenuitemlist": [45, 51], "xasystemeventsmenulist": [45, 51], "current_loc": [45, 53], "xasystemeventsservicelist": [45, 51], "xasystemeventsoutlin": [45, 51], "xasystemeventsoutlinelist": [45, 51], "xasystemeventspopov": [45, 51], "xasystemeventspopoverlist": [45, 51], "popov": 45, "xasystemeventspopupbutton": [45, 51], "xasystemeventspopupbuttonlist": [45, 51], "xasystemeventsprintset": [45, 51], "collat": [45, 48], "ending_pag": 45, "error_handl": 45, "printerrorhandl": [45, 48, 54], "fax_numb": 45, "fax": 45, "pages_across": 45, "laid": 45, "across": [45, 65], "physic": 45, "pages_down": 45, "requested_print_tim": 45, "printer": 45, "starting_pag": 45, "target_print": 45, "accepts_high_level_ev": 45, "awar": 45, "accepts_remote_ev": 45, "architectur": 45, "background_onli": 45, "bundle_identifi": [45, 52, 53], "environ": 45, "terminologi": 45, "partition_space_us": 45, "partit": 45, "short_nam": 45, "total_partition_s": 45, "unix_id": 45, "unix": 45, "layer": 45, "by_accepts_high_level_ev": 45, "by_accepts_remote_ev": 45, "by_architectur": 45, "by_background_onli": 45, "by_bundle_identifi": [45, 53], "by_class": 45, "by_frontmost": 45, "by_partition_space_us": 45, "by_short_nam": 45, "by_total_partition_s": 45, "by_unix_id": 45, "xasystemeventsprogressind": [45, 51], "xasystemeventsprogressindicatorlist": [45, 51], "xasystemeventspropertylistfil": [45, 51], "xasystemeventspropertylistitem": [45, 51], "xasystemeventsradiobutton": [45, 51], "xasystemeventsradiobuttonlist": [45, 51], "xasystemeventsradiogroup": [45, 51], "xasystemeventsradiogrouplist": [45, 51], "xasystemeventsrelevanceind": [45, 51], "xasystemeventsrelevanceindicatorlist": [45, 51], "xasystemeventsrow": [45, 51], "xasystemeventsrowlist": [45, 51], "displayednam": 45, "picture_display_styl": 45, "collag": 45, "by_picture_display_styl": 45, "delay_interv": 45, "main_screen_onli": 45, "show_clock": 45, "xasystemeventsscript": [45, 51], "posix_path": [45, 53], "posix": [45, 53], "by_posix_path": [45, 53], "xasystemeventsscriptingclass": [45, 51], "suit": [45, 60, 104], "plural_nam": 45, "plural": 45, "scripting_el": 45, "xasystemeventsscriptingelementlist": [45, 51], "scripting_properti": 45, "xasystemeventsscriptingpropertylist": [45, 51], "suite_nam": 45, "superclass": 45, "xasystemeventsscriptingclasslist": [45, 51], "by_plural_nam": 45, "by_suite_nam": 45, "by_superclass": 45, "xasystemeventsscriptingcommand": [45, 51], "direct_paramet": 45, "xasystemeventsscriptingparamet": [45, 51], "scripting_paramet": 45, "xasystemeventsscriptingparameterlist": [45, 51], "scripting_result": 45, "xasystemeventsscriptingresultobject": [45, 51], "xasystemeventsscriptingcommandlist": [45, 51], "by_direct_paramet": 45, "by_scripting_result": 45, "xasystemeventsscriptingresultobjectlist": [45, 51], "scripting_suit": 45, "xasystemeventsscriptingsuitelist": [45, 51], "xasystemeventsscriptingel": [45, 51], "xasystemeventsscriptingenumer": [45, 51], "scripting_enumer": 45, "xasystemeventsscriptingenumeratorlist": [45, 51], "xasystemeventsscriptingenumerationlist": [45, 51], "by_opt": 45, "xasystemeventsscriptingproperti": [45, 51], "by_access": 45, "by_enumer": 45, "by_list": 45, "xasystemeventsscriptingsuit": [45, 51], "scripting_class": 45, "scripting_command": 45, "xasystemeventsscrollarea": [45, 51], "xasystemeventsscrollarealist": [45, 51], "xasystemeventsscrollbar": [45, 51], "xasystemeventsscrollbarlist": [45, 51], "automatic_login": 45, "log_out_when_inact": 45, "Will": 45, "log_out_when_inactive_interv": 45, "require_password_to_unlock": 45, "require_password_to_wak": 45, "secure_virtual_memori": 45, "virtual": 45, "xasystemeventsservic": [45, 51], "current_configur": 45, "by_current_configur": 45, "by_interfac": 45, "xasystemeventssheet": [45, 51], "sheet": 45, "xasystemeventssheetlist": [45, 51], "xasystemeventsslid": [45, 51], "xasystemeventssliderlist": [45, 51], "xasystemeventssplitt": [45, 51], "splitter": 45, "xasystemeventssplittergroup": [45, 51], "xasystemeventssplittergrouplist": [45, 51], "xasystemeventssplitterlist": [45, 51], "xasystemeventsstatictext": [45, 51], "xasystemeventsstatictextlist": [45, 51], "xasystemeventstabgroup": [45, 51], "xasystemeventstabgrouplist": [45, 51], "xasystemeventst": [45, 51], "xasystemeventstablelist": [45, 51], "xasystemeventstextarea": [45, 51], "xasystemeventstextarealist": [45, 51], "xasystemeventstextfield": [45, 51], "xasystemeventstextfieldlist": [45, 51], "xasystemeventstoolbar": [45, 51], "xasystemeventstoolbarlist": [45, 51], "piec": 45, "accessibility_descript": 45, "busy_ind": 45, "color_wel": 45, "combo_box": 45, "decrement": 45, "grow_area": 45, "elabor": 45, "increment": 45, "maximum_valu": 45, "menu_bar_item": 45, "menu_button": 45, "menu_item": [45, 53, 112], "minimum_valu": 45, "role": [45, 111], "pick": 45, "pop_ov": 45, "pop_up_button": 45, "progress_ind": 45, "radio_button": 45, "radio_group": 45, "relevance_ind": 45, "role_descript": 45, "scroll_area": 45, "scroll_bar": 45, "splitter_group": 45, "static_text": 45, "subrol": 45, "tab_group": 45, "text_area": 45, "text_field": 45, "value_ind": 45, "xasystemeventsvalueindicatorlist": [45, 51], "by_accessibility_descript": 45, "by_focus": 45, "by_help": 45, "by_maximum_valu": 45, "by_minimum_valu": 45, "by_orient": 45, "by_rol": 45, "by_role_descript": 45, "by_subrol": 45, "xasystemeventswindowlist": [45, 51], "picture_path": 45, "by_home_directori": 45, "by_picture_path": 45, "xasystemeventsvalueind": [45, 51], "thumb": [45, 63], "xasystemeventswindow": [45, 51], "uncollaps": [45, 52, 53, 54], "unminim": [45, 54], "xasystemeventsxmlattribut": [45, 51], "xasystemeventsxmlattributelist": [45, 51], "xasystemeventsxmldata": [45, 51], "xml_element": 45, "xasystemeventsxmlelementlist": [45, 51], "xasystemeventsxmlel": [45, 51], "xml_attribut": 45, "xasystemeventsxmlfil": [45, 51], "systemprefer": 46, "xapreferenceanchor": [46, 51], "siri": 46, "xapreferenceanchorlist": [46, 51], "xapreferencepan": [46, 51], "accessibility_shortcut": 46, "seeing_cursor": 46, "localized_nam": [46, 52, 53, 72], "xapreferencepanelist": [46, 51], "batteri": 46, "pane1": 46, "pane2": 46, "by_localized_nam": [46, 53], "xasystempreferencesappl": [46, 51], "current_pan": 46, "preferences_window": 46, "show_al": 46, "xaterminalappl": [47, 51], "xaterminalwindow": [47, 51], "xaterminaltab": [47, 51], "xaterminalsettingsset": [47, 51], "default_set": 47, "do_script": [47, 98], "window_tab": 47, "return_result": [47, 98], "settings_set": 47, "xaterminalsettingssetlist": [47, 51], "startup_set": 47, "bold_text_color": 47, "clean_command": 47, "custom_titl": [47, 98], "font_antialias": 47, "antialias": 47, "normal_text_color": 47, "number_of_column": [47, 98], "number_of_row": [47, 98], "title_displays_custom_titl": [47, 98], "title_displays_device_nam": 47, "title_displays_settings_nam": 47, "title_displays_shell_path": 47, "title_displays_window_s": 47, "by_bold_text_color": 47, "by_clean_command": 47, "by_cursor_color": 47, "by_custom_titl": 47, "by_font_antialias": 47, "by_normal_text_color": 47, "by_number_of_column": 47, "by_number_of_row": 47, "by_title_displays_custom_titl": 47, "by_title_displays_device_nam": 47, "by_title_displays_settings_nam": 47, "by_title_displays_shell_path": 47, "by_title_displays_windows_s": 47, "title_displays_windows_s": 47, "current_set": [47, 98], "buffer": 47, "xaterminaltablist": [47, 51], "by_busi": 47, "by_current_set": 47, "by_histori": 47, "by_process": 47, "by_tti": 47, "selected_tab": 47, "xatexteditappl": [48, 51], "xatexteditdocumentlist": [48, 51], "xatexteditdocu": [48, 51], "objectclass": 48, "nsappleeventdescriptor": [48, 53, 58], "docu": 48, "print_tim": 48, "startingpag": 48, "endingpag": 48, "pagesacross": 48, "pagesdown": 48, "requestedprinttim": 48, "errorhandl": 48, "faxnumb": 48, "targetprint": 48, "xatextdocumentlist": [48, 51, 53], "Of": 48, "xatexteditwindow": [48, 51], "xatvappl": [49, 51], "xatvwindow": [49, 51], "xatvsourc": 49, "xatvplaylist": 49, "xatvtrack": [49, 51], "xatvsharedtrack": 49, "xatvfiletrack": 49, "xatvremoteurltrack": 49, "sort_director": 49, "director": 49, "xatvtracklist": [49, 51, 53], "by_sort_director": 49, "xavlcappl": [50, 51], "activate_menu_item": 50, "audio_desync": 50, "desynchron": 50, "2147483648": 50, "2147483647": 50, "512": 50, "256": [50, 101], "xavlcdocumentlist": [50, 51], "duration_of_current_item": 50, "fullscreen_mod": [50, 101], "get_url": [50, 53, 101, 103], "move_menu_focus_down": 50, "move_menu_focus_left": 50, "move_menu_focus_right": 50, "move_menu_focus_up": 50, "unmut": 50, "name_of_current_item": 50, "vcd": 50, "avi": [50, 96], "m4v": [50, 96, 101], "wikimedia": [50, 101], "org": [50, 99, 101, 103, 108], "transcod": [50, 101], "0f": 50, "baby_pelican": 50, "ogg": [50, 96], "e9b3e_dnnww": 50, "path_of_current_item": [50, 101], "playlistitem": 50, "playback_shows_menu": 50, "extrashort": 50, "volume_down": [50, 101], "400": [50, 60], "volume_up": [50, 101], "xavlcdocu": [50, 51], "xavlcwindow": [50, 51], "cgwindowlistcopywindowinfo": [51, 52], "xaapplicationlist": [51, 52, 53], "xacombinedwindowlist": [51, 52, 53], "current_appl": [51, 52, 53], "running_appl": [51, 52, 53, 72, 108], "supported_appl": [51, 52, 53], "xaapplicationpick": [51, 53], "xaattach": [51, 53], "xaattachmentlist": [51, 53], "xaattributerun": [51, 53], "xaattributerunlist": [51, 53], "xacharact": [51, 53], "xacharacterlist": [51, 53], "xaclipboard": [51, 53, 75, 103], "xacolorlist": [51, 53], "xacolorpick": [51, 53, 112], "xacolorpickerstyl": [51, 53, 112], "xadialog": [51, 53, 112], "xadomain": [51, 53], "xafilenamedialog": [51, 53, 112], "xafilepackag": [51, 53], "xafilepick": [51, 53, 112], "xafolderpick": [51, 53, 112], "xamenu": [51, 53, 112], "xaparagraph": [51, 53], "xapred": [51, 53, 109], "xasent": [51, 53], "xasentencelist": [51, 53], "xasound": [51, 53, 103, 104], "xasoundlist": [51, 53], "xaspotlight": [51, 53, 109], "xaurllist": [51, 53], "xavideo": [51, 53], "xaword": [51, 53], "xawordlist": [51, 53], "unostyp": [51, 53], "xapathlik": [51, 53, 56], "applicationnotfounderror": [51, 55], "authenticationerror": [51, 55], "invalidpredicateerror": [51, 53, 55], "unconstructableclasserror": [51, 55], "app_nam": [52, 53], "app_path": [52, 53], "shared_app": 52, "workspac": 52, "cfarrayref": 52, "unsign": 52, "bundle_url": [52, 53], "executable_url": [52, 53], "unhid": [52, 53], "launch_dat": [52, 53], "process_identifi": [52, 53], "synonym": [52, 53], "scriptabl": [52, 53, 54, 107, 111], "xawindow": 52, "app_identifi": 52, "podcast": [52, 53, 111], "brave": [52, 53, 65], "microsoft": [52, 53, 65], "edg": [52, 53, 65, 105], "chrome": [52, 53, 65], "opera": [52, 53, 65], "vivaldi": [52, 53, 65], "blisk": [52, 53], "iridium": [52, 53], "alfr": [52, 53], "adob": [52, 53], "acrobat": [52, 53, 83], "amphetamin": [52, 53], "__annotations__": 53, "last_result": 53, "__dict__": 53, "mappingproxi": 53, "__module__": 53, "__doc__": 53, "versionad": 53, "__init__": 53, "parse_result_data": [53, 58], "__repr__": 53, "__weakref__": 53, "repr": 53, "weak": 53, "tell": [53, 58, 106, 108], "scpt": [53, 58], "runnabl": 53, "file_url": [53, 58], "type_cod": [53, 58], "845507684": 53, "8962": 53, "0x646c6532": 53, "00000000": [53, 103], "6c697374": 53, "000022f2": 53, "6e756c6c": 53, "obj": 53, "extract": [53, 58, 60, 99], "structur": [53, 58, 65, 103], "tget": 53, "12345678910": 53, "12345678911": 53, "f": [53, 105], "0x03000000": 53, "fly": [53, 58], "concret": 53, "default_appl": 53, "short_vers": 53, "type_identifi": 53, "effici": [53, 106, 107, 111], "by_default_appl": 53, "by_short_vers": 53, "by_type_identifi": 53, "__getattr__": 53, "attr": 53, "beforehand": 53, "unfocu": 53, "owns_menu_bar": 53, "instanc": [53, 103, 104, 105, 111], "xa_apsc": 53, "xa_prc": 53, "__contains__": 53, "__getitem__": 53, "slice": [53, 107], "__iter__": 53, "by_bundle_url": 53, "by_executable_url": 53, "by_launch_d": 53, "by_process_identifi": 53, "xawindowlist": 53, "multiple_selections_allow": [53, 112], "chooser": 53, "apple_menu_fold": 53, "control_panels_fold": 53, "control_strip_modules_fold": 53, "strip": 53, "extensions_fold": 53, "launcher_items_fold": 53, "launcher": 53, "shutdown_fold": 53, "shutdown": 53, "startup_items_fold": 53, "startupitem": 53, "system_fold": 53, "get_imag": [53, 103], "get_str": [53, 103], "set_cont": 53, "alpha_valu": 53, "alpha": [53, 105], "blue_valu": 53, "brighten": 53, "brightness_valu": 53, "bright": 53, "copy_color": 53, "nscolor": 53, "darken": 53, "green_valu": 53, "hex_valu": 53, "hue_valu": 53, "swatch": 53, "mix_with": 53, "blend": [53, 105], "red_valu": 53, "saturation_valu": 53, "statur": 53, "set_hsla": 53, "hsla": 53, "set_rgba": 53, "rgba": 53, "color_wheel": 53, "picker": 53, "cmyk_slid": 53, "color_list": 53, "crayon": [53, 112], "hsb_slider": 53, "image_palett": 53, "rgb_slider": 53, "hidden_answ": [53, 112], "default_button": [53, 112], "cancel_button": 53, "caution": [53, 112], "default_answ": [53, 112], "floppi": 53, "oppos": 53, "afp": 53, "busy_statu": 53, "get_path_represent": [53, 56], "portion": [53, 65, 107], "package_fold": 53, "by_busy_statu": 53, "by_package_fold": 53, "by_serv": 53, "by_zon": 53, "appleshar": 53, "iso_9660": 53, "1717844278": 53, "prodo": 53, "1684415524": 53, "default_nam": [53, 112], "default_loc": [53, 112], "show_invis": [53, 112], "show_package_cont": [53, 112], "invis": 53, "image_refer": [53, 105], "nsdata": [53, 103], "__eq__": 53, "__hash__": 53, "auto_enh": 53, "correct_red_ey": 53, "crop_to_featur": 53, "correct_rot": 53, "enhanc": [53, 105], "ey": [53, 108], "crop": [53, 75, 105], "correct": 53, "enchant": 53, "bloom": [53, 105], "intens": [53, 105], "soften": 53, "glow": 53, "strength": 53, "bump": [53, 105], "300": [53, 75, 108], "curvatur": [53, 105], "concav": 53, "inward": 53, "convex": 53, "outward": 53, "neg": 53, "distort": 53, "color_space_nam": [53, 105], "comic": [53, 105], "halfton": 53, "crystal": [53, 105], "crystal_s": 53, "polygon": 53, "aggreg": 53, "depth_of_field": [53, 105], "focal_region": 53, "focal_region_satur": 53, "tilt": 53, "distanc": 53, "focal": 53, "focial": 53, "5x": 53, "colorfulli": 53, "blacken": 53, "brighter": 53, "extract_text": [53, 75, 105], "TO": 53, "THE": 53, "ONES": 53, "misfit": 53, "rebel": 53, "troublemak": 53, "flip_horizont": [53, 75, 105], "flip_vert": [53, 75, 105], "gamma": [53, 105], "gaussian_blur": [53, 105], "blur": [53, 106], "gaussian": 53, "iimag": 53, "has_alpha_channel": [53, 105], "channel": [53, 105], "horizontal_stitch": [53, 105], "stitch": [53, 105], "togeth": [53, 105], "image_from_text": 53, "menlo": 53, "font_color": 53, "inset": 53, "overlaid": 53, "sf": 53, "mono": 53, "overlai": [53, 105], "invert": [53, 105], "is_opaqu": [53, 105], "monochrom": [53, 105], "remap": 53, "shade": 53, "recolor": 53, "darker": 53, "threshold": 53, "rest": [53, 60, 105], "larger": [53, 93], "thinner": 53, "overlay_imag": 53, "overlay_text": 53, "horizontal_border_width": 53, "vertical_border_width": 53, "pad_color": [53, 105], "border": [53, 75], "pinch": [53, 105], "stretch": 53, "greater": [53, 106], "pixel_s": 53, "pointil": [53, 105], "point_siz": 53, "reduce_nois": [53, 105], "noise_level": 53, "02": [53, 70], "sharp": 53, "reduc": 53, "sharpen": 53, "lumin": 53, "delta": 53, "maintain": [53, 60, 63, 75, 110], "proport": [53, 60], "clockwis": 53, "overwritten": 53, "scale_factor_x": 53, "scale_factor_i": 53, "factor": 53, "sepia": [53, 105], "impact": 53, "shadow": [53, 105], "temperatur": [53, 105], "tint": [53, 105], "angl": 53, "centerpoint": 53, "radian": 53, "vertical_stitch": [53, 105, 108], "vibranc": [53, 105], "vignett": [53, 105], "white_point": [53, 105], "additive_composit": [53, 105], "composit": 53, "crom": 53, "subtractive_composit": [53, 105], "subtract": 53, "success": 53, "nsarrai": 53, "nsmutablearrai": 53, "lazi": [53, 107], "__len__": 53, "__reversed__": 53, "beginning_with": [53, 107], "xasystemeventsfilelist": 53, "exampleimag": 53, "capston": 53, "lunch": 53, "dan": 53, "v0": 53, "count_funct": 53, "ending_with": 53, "playedcount": [53, 107], "frozen": 53, "sunshin": 53, "hunger": 53, "mockingjai": 53, "10000": 53, "53b0f28e": 53, "0b39": 53, "446b": 53, "896c": 53, "484cd0dc2d3c": 53, "less_than": [53, 107], "less": [53, 109], "outrun": 53, "karma": 53, "death": 53, "hero": 53, "1994": 53, "mind": [53, 107], "prison": 53, "not_contain": [53, 107], "thing": 53, "not_equal": [53, 107], "cave": 53, "lover": 53, "omashu": 53, "raw_valu": 53, "accuraci": 53, "measur": 53, "cllocat": 53, "reverse_geocod": 53, "geocod": 53, "notabl": [53, 106], "loc": 53, "44": [53, 108], "460552": 53, "110": 53, "82807": 53, "faith": 53, "street_numb": 53, "geyser": 53, "basin": 53, "trail": 53, "sub_loc": 53, "alta": 53, "counti": 53, "teton": 53, "wy": 53, "postal_cod": 53, "83414": 53, "america": 53, "denver": 53, "mst": 53, "25200": 53, "notable_featur": 53, "yellowston": 53, "park": 53, "show_in_map": 53, "default_item": [53, 112], "ok_button_nam": [53, 112], "okai": [53, 112], "cancel_button_nam": [53, 112], "empty_selection_allow": [53, 112], "anyth": [53, 58, 108], "xasbobject": 53, "seealso": 53, "_xa_sevt": 53, "_xa_estr": 53, "_xa_wksp": 53, "xa_wksp": 53, "xa_sevt": 53, "xa_estr": 53, "_exec_suppres": 53, "_new_el": 53, "_spawn_thread": 53, "has_el": 53, "has_element_properti": 53, "set_el": 53, "prefix": 53, "show_in_find": [53, 101], "predic": 53, "add_begins_with_condit": 53, "beginswith": 53, "add_between_condit": 53, "add_contains_condit": 53, "add_ends_with_condit": 53, "endswith": [53, 96, 112], "add_eq_condit": [53, 109], "add_geq_condit": 53, "add_gt_condit": 53, "add_leq_condit": 53, "add_lt_condit": 53, "add_match_condit": 53, "add_neq_condit": 53, "evaluate_with_dict": 53, "properties_dict": 53, "evaluate_with_format": 53, "fmt": 53, "from_arg": 53, "from_dict": 53, "ref_dict": 53, "insert_begins_with_condit": 53, "insert_between_condit": 53, "insert_contains_condit": 53, "insert_ends_with_condit": 53, "insert_eq_condit": 53, "insert_geq_condit": 53, "insert_gt_condit": 53, "insert_leq_condit": 53, "insert_lt_condit": 53, "insert_match_condit": 53, "insert_neq_condit": 53, "sound_refer": 53, "beep": 53, "nssound": 53, "aliv": 53, "glass_sound": 53, "glass": 53, "num_sample_fram": 53, "frame": 53, "hertz": 53, "intermediari": 53, "simultan": 53, "17": [53, 109], "date2": [53, 109], "18": [53, 63, 109], "__str__": 53, "attribute_run": 53, "neat": 53, "cool": [53, 106, 112], "sentencn": 53, "tag_ent": 53, "entiti": 53, "grammat": 53, "tim": 53, "cook": 53, "ceo": 53, "personalnam": 53, "verb": 53, "noun": 53, "preposit": 53, "organizationnam": 53, "tag_languag": 53, "nquesto": 53, "\u00e8": 53, "nda": 53, "ist": 53, "deutsch": 53, "n\u3053\u308c\u306f\u65e5\u672c\u8a9e\u3067\u3059": 53, "en": [53, 99], "questo": 53, "\u3053\u308c\u306f\u65e5\u672c\u8a9e\u3067\u3059": 53, "ja": 53, "tag_lemma": 53, "stem": 53, "lemmat": 53, "quick": [53, 65, 83, 92, 107], "fox": [53, 108], "dog": 53, "po": 53, "tag_parts_of_speech": 53, "tag_senti": 53, "sentiment_scal": 53, "sentiment": 53, "establish": 53, "postiv": 53, "assess": [53, 112], "suck": 53, "nbut": 53, "great": 53, "But": 53, "nand": 53, "somewhat": 53, "neutral": 53, "And": [53, 106], "soup": 53, "beautifulsoup": 53, "base_url": 53, "extract_imag": 53, "fragment": 53, "bs4": 53, "bulk": [53, 75, 83, 92, 99, 104, 110, 111], "video_refer": 53, "show_in_quicktim": 53, "lwdt": 54, "lwst": 54, "ask": [54, 60], "1634954016": 54, "NO": 54, "1852776480": 54, "2036691744": 54, "xa_scel": 54, "sbapplic": 54, "print_dialog": 54, "toggle_zoom": 54, "by_miniaturiz": 54, "by_miniatur": 54, "protocol": [56, 75, 105], "meta": 56, "adher": 56, "therebi": [58, 107], "entireti": 58, "easiest": [58, 106, 109], "seen": [58, 105, 106, 108, 109], "escap": 58, "quotat": 58, "tripl": 58, "preserv": 58, "unescap": 58, "benefit": 58, "multilin": 58, "elif": [58, 72, 105], "lengthi": 58, "note1": [58, 83], "intertwin": [58, 60, 75, 93], "6881357": 58, "108": 58, "0x4d006900": 58, "6e006500": 58, "63007200": 58, "61006600": 58, "54007500": 58, "62006500": 58, "utxt": 58, "integ": [58, 60, 109], "isol": [58, 75], "sub": [58, 92], "descriptor": 58, "snippet": [58, 109], "tabnam": 58, "bing": [58, 112], "11234567890": 58, "particularli": [58, 60], "straightforward": [58, 75, 93, 104, 106, 108], "still": [58, 107, 109, 112], "situat": [58, 63, 107], "see": [58, 59, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 93, 95, 96, 97, 98, 99, 100, 101, 104, 106, 107, 108], "ve": [58, 59, 81], "instruct": [58, 60, 106, 109], "osa": [59, 81], "thereof": [59, 75], "observ": [59, 111], "aongsid": 59, "encount": [59, 81], "easili": [59, 75, 81, 105, 108, 109], "mutabl": [59, 81, 105], "howev": [59, 62, 63, 81, 93], "new_workflow": [59, 81], "action1": [59, 81], "action2": [59, 81], "action3": [59, 81], "notification_text": [59, 81], "pause_dur": [59, 81], "pausedur": [59, 81], "guid": [59, 61, 62, 63, 65, 66, 70, 75, 81, 92, 93, 96, 98, 99, 101], "mani": [60, 72, 75, 98, 105, 107, 108, 109], "technologi": 60, "moreov": 60, "highli": [60, 104], "intuit": [60, 105], "opt": 60, "tandem": 60, "pillow": 60, "guess": 60, "expos": 60, "assum": 60, "ll": [60, 105, 106], "moment": 60, "primarili": 60, "slower": 60, "ideal": 60, "press": 60, "hoorai": 60, "thu": [60, 105, 106, 109], "mobil": 60, "believ": 60, "apart": 60, "math": 60, "pil": 60, "400x200": 60, "simplic": 60, "smaller": 60, "base_width": 60, "base_height": 60, "nxn": 60, "forgo": 60, "niceti": 60, "wish": 60, "remak": 60, "sqrt": [60, 93], "image_path": 60, "dim": 60, "squar": [60, 108], "sit": 60, "slot": 60, "antialia": 60, "proportion": 60, "wiki": [61, 99], "despit": [62, 65, 107], "explan": [62, 63, 65, 75, 83, 92, 93, 99], "14159265": 62, "nearli": [63, 92], "eventkit": 63, "offer": [63, 66, 112], "few": [63, 72, 105, 108], "likewis": [63, 105, 108], "narrow": [63, 107, 109], "helper": 63, "assist": 63, "concern": 63, "guarante": 63, "consist": 63, "therefor": 63, "all_calendar": 63, "calendar0": 63, "calendar1": 63, "named_calendar": 63, "all_ev": 63, "events_at_loc": 63, "nportland": 63, "04101": 63, "nunit": 63, "named_ev": 63, "events_between_d": 63, "events_this_week": 63, "event0": 63, "first_ev": 63, "last_ev": 63, "event_by_id": 63, "a54cf13a": 63, "36d2": 63, "5de1": 63, "9980": 63, "be19c4c102a4": 63, "new_start_d": 63, "new_end_d": 63, "copy_to": 63, "relativeuri": 65, "similarli": 65, "influenc": 65, "lack": 65, "css": [65, 93], "explor": 66, "7d627e52": 70, "ae3d": 70, "39eb": 70, "b86b": 70, "57b037f92cab": 70, "calendaridentifi": 70, "a5e06b53": 70, "667f": 70, "42ee": 70, "a6fd": 70, "99609f6711e3": 70, "21": 70, "00": [70, 83, 107], "e4bcc8c4": 70, "cd34": 70, "3c1d": 70, "b273": 70, "def4ecd47ea": 70, "2pm": 70, "joe": 70, "birthdai": 70, "26th": 70, "scienc": 70, "homework": 70, "tuesdai": 70, "vacat": 70, "26": 70, "septemb": 70, "attend": 70, "9am": 70, "wednesdai": 70, "programmat": 72, "timer": 72, "counter": 72, "distract": 72, "wander": 72, "in_sess": 72, "metric": 72, "simpli": [74, 75, 106, 109], "program": 74, "mainwindow": 74, "similar": [75, 108, 110], "elev": 75, "xaimageeventsfil": 75, "1106": 75, "278": 75, "xaimageeventsfold": 75, "srgb": 75, "iec61966": 75, "72": 75, "alter": 75, "gray_profil": 75, "uniformli": 75, "thick": 75, "150": 75, "3x": 75, "ride": 75, "syntact": [75, 110], "convent": [75, 106], "spend": 75, "dereferenc": 75, "scriptingbridg": 75, "pointer": 75, "fewer": 75, "lead": 75, "evidenc": 75, "timeit": [75, 105], "without_xalist": [75, 105], "img_data": 75, "example3": 75, "45": [75, 105], "with_xalist": [75, 105], "r1": 75, "r2": 75, "avg": [75, 105], "trial": [75, 105], "835": 75, "076": 75, "equip": 75, "yeild": 75, "concis": [75, 105, 108], "approach": [75, 106, 107], "image_with_modif": 75, "original_imag": 75, "By": [75, 108], "1542": 75, "newexample1": 75, "newexample2": 75, "newexample3": 75, "fact": [75, 111], "modified_imag": 75, "newexample4": 75, "234d909c": 83, "b445": 83, "967l": 83, "380df21392d2": 83, "icaccount": 83, "p3": 83, "co": 83, "573": 83, "vision": 83, "p4176": 83, "p5232": 83, "p4122": 83, "p4174": 83, "p4175": 83, "p4827": 83, "p4935": 83, "note2": 83, "recently_edit": 83, "modificationd": 83, "note1_attach": 83, "fnote": 83, "p1": 83, "nbodi": 83, "nplaintext": 83, "ncreation": 83, "nid": 83, "div": 83, "24px": 83, "br": 83, "src": 83, "base64": 83, "0000": 83, "38": 83, "p5303": 83, "owl": [83, 105], "cid": 83, "64d2b218": 83, "576e": 83, "405f": 83, "a147": 83, "34d2c8b86e6b": 83, "598": 83, "nlp": 83, "raycast": 83, "lectur": 83, "nimport": 83, "nsupport": 83, "nadob": 83, "namphetamin": 83, "nbike": 83, "nflow": 83, "nimag": 83, "niterm": 83, "nrstudio": 83, "nspotifi": 83, "nsystem": 83, "naddit": 83, "nxalsm": 83, "classif": 83, "graphic": [83, 112], "id383961702": 83, "question": 83, "2020": 83, "id1491304822": 83, "new_folder_1": 83, "new_folder_2": 83, "new_note_1": 83, "h1": 83, "new_note_2": 83, "new_attach": 83, "spark": 83, "usr": [83, 106], "bin": [83, 96, 106], "env": [83, 106], "tab_nam": 83, "tab_text": 83, "window1": 92, "current_doc": 92, "doc1": 92, "doc2": 92, "tab1": 92, "tab2": 92, "some_tab": 92, "sandbox": 93, "constraint": 93, "unabl": 93, "said": 93, "feasibl": [93, 107], "atom": 93, "institut": 93, "exercis": 93, "sin": 93, "81": 93, "sin_root": 93, "tempfil": 93, "alongsid": [93, 108], "s1": 93, "temp": 93, "namedtemporaryfil": 93, "utf": 93, "darkmod": 96, "screensav": 96, "desktop_fil": 96, "images_fold": 96, "videos_fold": 96, "audio_fold": 96, "image_pred": 96, "OR": 96, "video_pred": 96, "mov": 96, "mp4": 96, "video_fil": 96, "audio_pred": 96, "audio_fil": 96, "zsh": 98, "80": [98, 108], "stdout": 98, "ping": 98, "onlin": [98, 105, 108], "offlin": 98, "255": 98, "new_doc_1": 99, "new_doc_2": 99, "newdocument2": 99, "combined_word": 99, "na": 99, "sentences2": 99, "words2": 99, "characters2": 99, "crude": 99, "flashcard": 99, "studi": 99, "summar": 99, "pprint": [99, 103], "doc_text": 99, "folder_path": 99, "makedir": [99, 105], "exist_ok": [99, 105], "examplefil": 101, "e1": 101, "black_hole_merger_simulation_gw170104": 101, "webm": 101, "1080p": 101, "vp9": 101, "fine": 102, "grain": 102, "basi": [102, 106], "greatli": 102, "explicitli": 102, "mention": 102, "afford": [103, 105], "pasteboard": 103, "cb": 103, "utf8": 103, "0x54657374696e672031203220332e2e2": 103, "involv": [103, 107], "rtfd": 103, "408": 103, "0x72746664": 103, "03000000": 103, "02000000": 103, "317": 103, "0x7b5c7274": 103, "66315c61": 103, "6e73695c": 103, "616e7369": 103, "20322033": 103, "2e2e2e7d": 103, "rtf1": 103, "ansi": 103, "ansicpg1252": 103, "cocoartf2638": 103, "cocoatextscaling0": 103, "cocoaplatform0": 103, "fonttbl": 103, "f0": 103, "fnil": 103, "fcharset0": 103, "helveticaneu": 103, "colortbl": 103, "red255": 103, "green255": 103, "blue255": 103, "red0": 103, "green0": 103, "blue0": 103, "expandedcolortbl": 103, "cssrgb": 103, "c0": 103, "deftab720": 103, "pard": 103, "pardeftab720": 103, "partightenfactor0": 103, "fs22": 103, "cf2": 103, "up0": 103, "nosupersub": 103, "ulnon": 103, "utf16": 103, "0xfffe5400": 103, "65007300": 103, "74006900": 103, "6e006700": 103, "33002e00": 103, "2e002e00": 103, "nspasteboard": 103, "transienttyp": 103, "0x": 103, "autogeneratedtyp": 103, "0x11c551e20": 103, "0x11c551fa0": 103, "0x100cb9310": 103, "42": [103, 109, 112], "macrumor": 103, "materi": 103, "vari": [103, 107], "latter": [104, 107], "summer": 104, "69": 104, "bryan": 104, "adam": 104, "streamlin": 104, "nhc": 104, "noaa": 104, "gov": [104, 108], "gtwo": 104, "cours": 104, "condens": 104, "advantag": 104, "sacrific": 104, "too": [104, 109], "extrem": 104, "decid": 104, "tast": 104, "interweav": 104, "understand": 105, "underli": 105, "mechan": [105, 109], "elsewher": 105, "certain": [105, 112], "phrase": 105, "init": 105, "filesystem": 105, "pyxalogotranspar": 105, "0x104b385b0": 105, "skaplanoffici": 105, "_static": 105, "logo": 105, "addition": 105, "subclass": [105, 111], "ie": 105, "ie_img": 105, "later": 105, "12000": 105, "cat2": 105, "600": 105, "800": [105, 109], "871": 105, "seri": 105, "newlin": 105, "handwritingimag": 105, "handwritten": 105, "codeimag": 105, "signimag": 105, "sample_fold": 105, "output_fold": 105, "listdir": 105, "analyz": 105, "known": 105, "image_text": 105, "twrite": 105, "twice": 105, "dog1": 105, "flipped_imag": 105, "t1": 105, "t2": 105, "53993887584": 105, "6404187591799999": 105, "relationship": 105, "pip": 106, "clone": 106, "ins": 106, "Then": 106, "py": 106, "studio": [106, 108], "fell": 106, "swoop": 106, "mkdir": 106, "touch": 106, "suppos": 106, "visit": 106, "navig": 106, "fairli": 106, "nonetheless": 106, "equival": 106, "currenttab": 106, "multi": 106, "snake_cas": 106, "camelcas": 106, "beyond": 106, "often": [106, 110], "flexibl": 106, "temporarili": 106, "current_url": 106, "nice": 106, "clickabl": 106, "surround": [106, 109], "becom": 106, "href": 106, "current_nam": 106, "shebang": 106, "interpret": 106, "grant": 106, "mv": 106, "chmod": 106, "distinct": 106, "anywher": 106, "batch": [107, 110], "excess": 107, "lazili": 107, "evid": 107, "8000": 107, "music_app": 107, "notes_app": 107, "photos_app": 107, "time_1": 107, "time_2": 107, "063908": 107, "illustr": 107, "img_0497": 107, "img_4341": 107, "img_2482": 107, "img_0488": 107, "691846": 107, "speedi": 107, "multithread": 107, "unicod": [107, 110], "photo_1": 107, "photo_2": 107, "photo_3": 107, "photo_4": 107, "photo_5": 107, "photo_6": 107, "photo_7": 107, "01": 107, "201319": 107, "didn": 107, "almost": 107, "33": 107, "767063": 107, "adel": 107, "chase": 107, "pavement": 107, "skyfal": 107, "076569": 107, "ending_width": 107, "creationd": 107, "aug": 107, "31st": 107, "irresist": 107, "absent": 107, "piano": 107, "sai": 107, "roll": 107, "0ba38221": 107, "c569": 107, "4acf": 107, "a3bd": 107, "967cb87eb7eb": 107, "exactli": 107, "track_1": 107, "yfal": 107, "track_2": 107, "name_1": 107, "name_2": 107, "144339": 107, "strategi": [107, 109], "rudimentari": 107, "safari_app": 107, "backgroundcolor": 107, "textcolor": 107, "haven": 108, "stai": 108, "hi": [108, 112], "achiev": 108, "print_hi": 108, "on_icon": 108, "sun": 108, "off_icon": 108, "moon": 108, "toggle_st": 108, "discord": 108, "vscode": 108, "app_menu": 108, "2x2": 108, "esqu": 108, "accuweath": 108, "swift": 108, "fundament": 108, "id1511184145": 108, "nytim": 108, "york": 108, "nypl": 108, "m3": 108, "randomfox": 108, "duck": 108, "generatorfun": 108, "genrandom": 108, "arrow": 108, "slash": 108, "xmark": 108, "draw": 108, "image_dimens": 108, "nasa": 108, "thumbnail": 108, "main_image_star": 108, "forming_region_carina_nircam_fin": 108, "5mb": 108, "dure": 108, "runtim": 108, "random_fox_link": 108, "floof": 108, "json_data": 108, "json": 108, "update_imag": 108, "manner": 108, "icon1": 108, "icon2": 108, "icon3": 108, "live": 108, "cpu": 108, "psutil": 108, "update_interv": 108, "set_update_interv": 108, "graph_menu": 108, "text_menu": 108, "slider_label": 108, "interval_slid": 108, "cpu_usag": 108, "cpu_perc": 108, "used_graph_height": 108, "used_color": 108, "used_swatch": 108, "divider_swatch": 108, "free_swatch": 108, "graph_img": 108, "cpu_monitor": 108, "examplefile1": 109, "examplefile2": 109, "awesom": 109, "40022": 109, "49": 109, "notic": [109, 112], "avocado": 109, "quack": 109, "period": 109, "minu": 109, "former": 109, "kmditemdisplaynam": 109, "tempt": 110, "_only_": 110, "hand": 110, "whenev": 110, "significantli": 110, "sometim": 110, "56x": 110, "fashion": 111, "filtrat": 111, "travers": 111, "unnecessari": 111, "slowdown": 111, "playback_button": 111, "rewind_button": 111, "play_button": 111, "skip_button": 111, "inspector": 111, "familiar": 112, "keyboard": 112, "commandlin": 112, "mouseclick": 112, "secret": 112, "super": 112, "20file": 112, "8323456645": 112, "4732058644": 112, "open_googl": 112, "hei": 112, "regex": 112, "ing": 112, "detect_website_queri": 112, "site_nam": 112, "duckduckgo": 112, "startswith": 112, "go_to_websit": 112, "respond": 112}, "objects": {"PyXA.Additions": [[3, 0, 0, "-", "Learn"], [4, 0, 0, "-", "Speech"], [5, 0, 0, "-", "UI"], [6, 0, 0, "-", "Utils"], [7, 0, 0, "-", "Web"]], "PyXA.Additions.Learn": [[3, 1, 1, "", "XALSM"]], "PyXA.Additions.Learn.XALSM": [[3, 2, 1, "", "add_category"], [3, 2, 1, "", "add_data"], [3, 2, 1, "", "add_text"], [3, 2, 1, "", "categorize_query"], [3, 2, 1, "", "load"], [3, 2, 1, "", "save"]], "PyXA.Additions.Speech": [[4, 1, 1, "", "XACommandDetector"], [4, 1, 1, "", "XASpeech"], [4, 1, 1, "", "XASpeechRecognizer"]], "PyXA.Additions.Speech.XACommandDetector": [[4, 3, 1, "", "command_function_map"], [4, 2, 1, "", "listen"], [4, 2, 1, "", "on_detect"]], "PyXA.Additions.Speech.XASpeech": [[4, 3, 1, "", "message"], [4, 3, 1, "", "rate"], [4, 2, 1, "", "speak"], [4, 3, 1, "", "voice"], [4, 2, 1, "", "voices"], [4, 3, 1, "", "volume"]], "PyXA.Additions.Speech.XASpeechRecognizer": [[4, 3, 1, "", "finish_conditions"], [4, 2, 1, "", "listen"], [4, 2, 1, "", "on_detect"], [4, 3, 1, "", "spoken_query"], [4, 3, 1, "", "start_time"], [4, 3, 1, "", "time_elapsed"]], "PyXA.Additions.UI": [[5, 1, 1, "", "XAAlert"], [5, 1, 1, "", "XAAlertStyle"], [5, 1, 1, "", "XAHUD"], [5, 1, 1, "", "XAImageMenuItem"], [5, 1, 1, "", "XAMenuBar"], [5, 1, 1, "", "XAMenuBarMenu"], [5, 1, 1, "", "XAMenuBarMenuItem"], [5, 1, 1, "", "XANotification"], [5, 1, 1, "", "XASegmentedControl"], [5, 1, 1, "", "XASegmentedControlMenuItem"], [5, 1, 1, "", "XASeparatorMenuItem"], [5, 1, 1, "", "XASlider"], [5, 1, 1, "", "XASliderMenuItem"], [5, 1, 1, "", "XASwitch"], [5, 1, 1, "", "XASwitchMenuItem"], [5, 1, 1, "", "XATextMenuItem"], [5, 1, 1, "", "XAURLMenuItem"]], "PyXA.Additions.UI.XAAlert": [[5, 3, 1, "", "buttons"], [5, 2, 1, "", "display"], [5, 3, 1, "", "icon"], [5, 3, 1, "", "message"], [5, 3, 1, "", "style"], [5, 3, 1, "", "title"]], "PyXA.Additions.UI.XAAlertStyle": [[5, 3, 1, "", "CRITICAL"], [5, 3, 1, "", "INFORMATIONAL"], [5, 3, 1, "", "WARNING"]], "PyXA.Additions.UI.XAHUD": [[5, 3, 1, "", "background_color"], [5, 2, 1, "", "display"], [5, 3, 1, "", "duration"], [5, 3, 1, "", "font_size"], [5, 3, 1, "", "message"], [5, 3, 1, "", "text_color"]], "PyXA.Additions.UI.XAMenuBar": [[5, 2, 1, "", "add_item"], [5, 2, 1, "", "add_menu"], [5, 2, 1, "", "display"], [5, 3, 1, "", "menus"], [5, 2, 1, "", "new_menu"], [5, 2, 1, "", "remove_menu"], [5, 2, 1, "", "set_image"], [5, 2, 1, "", "set_text"]], "PyXA.Additions.UI.XAMenuBarMenu": [[5, 3, 1, "", "action"], [5, 2, 1, "", "add_separator"], [5, 4, 1, "", "content"], [5, 2, 1, "", "delete"], [5, 4, 1, "", "icon"], [5, 4, 1, "", "icon_dimensions"], [5, 3, 1, "", "id"], [5, 3, 1, "", "items"], [5, 2, 1, "", "new_image_item"], [5, 2, 1, "", "new_item"], [5, 2, 1, "", "new_segmented_control_item"], [5, 2, 1, "", "new_separator"], [5, 2, 1, "", "new_slider_item"], [5, 2, 1, "", "new_switch_item"], [5, 2, 1, "", "new_url_item"], [5, 2, 1, "", "remove_item"], [5, 4, 1, "", "tooltip"]], "PyXA.Additions.UI.XAMenuBarMenuItem": [[5, 3, 1, "", "action"], [5, 3, 1, "", "args"], [5, 2, 1, "", "delete"], [5, 2, 1, "", "new_item"], [5, 2, 1, "", "new_subitem"], [5, 3, 1, "", "parent"], [5, 2, 1, "", "remove_item"], [5, 2, 1, "", "remove_subitem"], [5, 4, 1, "", "tooltip"]], "PyXA.Additions.UI.XANotification": [[5, 3, 1, "", "click_action"], [5, 2, 1, "", "display"], [5, 3, 1, "", "image"], [5, 3, 1, "", "primary_action"], [5, 3, 1, "", "primary_button_title"], [5, 3, 1, "", "reply_action"], [5, 3, 1, "", "sound_name"], [5, 3, 1, "", "subtitle"], [5, 3, 1, "", "text"], [5, 3, 1, "", "timeout"], [5, 3, 1, "", "title"]], "PyXA.Additions.UI.XASegmentedControl": [[5, 3, 1, "", "action"], [5, 3, 1, "", "args"], [5, 2, 1, "", "run_action_"], [5, 4, 1, "", "selection"]], "PyXA.Additions.UI.XASlider": [[5, 3, 1, "", "action"], [5, 3, 1, "", "args"], [5, 4, 1, "", "max_value"], [5, 4, 1, "", "min_value"], [5, 2, 1, "", "run_action_"], [5, 4, 1, "", "value"]], "PyXA.Additions.UI.XASliderMenuItem": [[5, 4, 1, "", "value"]], "PyXA.Additions.UI.XASwitch": [[5, 3, 1, "", "action"], [5, 3, 1, "", "args"], [5, 2, 1, "", "run_action_"], [5, 4, 1, "", "state"], [5, 2, 1, "", "toggle"]], "PyXA.Additions.UI.XASwitchMenuItem": [[5, 4, 1, "", "label"]], "PyXA.Additions.UI.XATextMenuItem": [[5, 4, 1, "", "enabled"], [5, 4, 1, "", "icon"], [5, 4, 1, "", "icon_dimensions"], [5, 4, 1, "", "indent"], [5, 2, 1, "", "new_subitem"], [5, 2, 1, "", "remove_subitem"], [5, 4, 1, "", "text"]], "PyXA.Additions.UI.XAURLMenuItem": [[5, 4, 1, "", "label"], [5, 4, 1, "", "location"]], "PyXA.Additions.Utils": [[6, 1, 1, "", "SDEFParser"]], "PyXA.Additions.Utils.SDEFParser": [[6, 2, 1, "", "export"], [6, 3, 1, "", "file"], [6, 2, 1, "", "parse"]], "PyXA.Additions.Web": [[7, 1, 1, "", "RSSFeed"], [7, 1, 1, "", "RSSItem"], [7, 1, 1, "", "RSSItemContent"], [7, 1, 1, "", "RSSItemContentList"], [7, 1, 1, "", "RSSItemList"]], "PyXA.Additions.Web.RSSFeed": [[7, 2, 1, "", "items"], [7, 2, 1, "", "refetch"]], "PyXA.Additions.Web.RSSItem": [[7, 4, 1, "", "author"], [7, 4, 1, "", "category"], [7, 4, 1, "", "comments"], [7, 4, 1, "", "content"], [7, 4, 1, "", "copyright"], [7, 4, 1, "", "description"], [7, 4, 1, "", "enclosure"], [7, 4, 1, "", "link"], [7, 2, 1, "", "links"], [7, 4, 1, "", "publication_date"], [7, 4, 1, "", "source"], [7, 4, 1, "", "text"], [7, 4, 1, "", "title"], [7, 4, 1, "", "xml"]], "PyXA.Additions.Web.RSSItemContent": [[7, 4, 1, "", "html"], [7, 2, 1, "", "images"], [7, 2, 1, "", "links"], [7, 4, 1, "", "text"]], "PyXA.Additions.Web.RSSItemContentList": [[7, 2, 1, "", "html"], [7, 2, 1, "", "images"], [7, 2, 1, "", "links"], [7, 2, 1, "", "text"]], "PyXA.Additions.Web.RSSItemList": [[7, 2, 1, "", "author"], [7, 2, 1, "", "category"], [7, 2, 1, "", "comments"], [7, 2, 1, "", "content"], [7, 2, 1, "", "copyright"], [7, 2, 1, "", "description"], [7, 2, 1, "", "enclosure"], [7, 2, 1, "", "link"], [7, 2, 1, "", "links"], [7, 2, 1, "", "publication_date"], [7, 2, 1, "", "source"], [7, 2, 1, "", "text"], [7, 2, 1, "", "title"], [7, 2, 1, "", "xml"]], "PyXA": [[52, 0, 0, "-", "PyXA"], [53, 0, 0, "-", "XABase"], [54, 0, 0, "-", "XABaseScriptable"], [55, 0, 0, "-", "XAErrors"], [56, 0, 0, "-", "XAProtocols"], [57, 0, 0, "-", "XATypes"]], "PyXA.PyXA": [[52, 1, 1, "", "Application"], [52, 5, 1, "", "CGWindowListCopyWindowInfo"], [52, 1, 1, "", "XAApplicationList"], [52, 1, 1, "", "XACombinedWindowList"], [52, 5, 1, "", "application"], [52, 5, 1, "", "current_application"], [52, 5, 1, "", "running_applications"], [52, 6, 1, "", "supported_applications"]], "PyXA.PyXA.Application": [[52, 3, 1, "", "app_paths"], [52, 4, 1, "", "shared_app"], [52, 4, 1, "", "workspace"]], "PyXA.PyXA.XAApplicationList": [[52, 2, 1, "", "bundle_identifier"], [52, 2, 1, "", "bundle_url"], [52, 2, 1, "", "executable_url"], [52, 2, 1, "", "first"], [52, 2, 1, "", "hide"], [52, 2, 1, "", "last"], [52, 2, 1, "", "launch_date"], [52, 2, 1, "", "localized_name"], [52, 2, 1, "", "pop"], [52, 2, 1, "", "process_identifier"], [52, 2, 1, "", "quit"], [52, 2, 1, "", "terminate"], [52, 2, 1, "", "unhide"], [52, 2, 1, "", "windows"]], "PyXA.PyXA.XACombinedWindowList": [[52, 2, 1, "", "collapse"], [52, 2, 1, "", "uncollapse"]], "PyXA.XABase": [[53, 1, 1, "", "AppleScript"], [53, 1, 1, "", "Application"], [53, 5, 1, "", "OSType"], [53, 6, 1, "", "VERSION"], [53, 1, 1, "", "XAAlias"], [53, 1, 1, "", "XAAliasList"], [53, 1, 1, "", "XAApplication"], [53, 1, 1, "", "XAApplicationList"], [53, 1, 1, "", "XAApplicationPicker"], [53, 1, 1, "", "XAAttachment"], [53, 1, 1, "", "XAAttachmentList"], [53, 1, 1, "", "XAAttributeRun"], [53, 1, 1, "", "XAAttributeRunList"], [53, 1, 1, "", "XACharacter"], [53, 1, 1, "", "XACharacterList"], [53, 1, 1, "", "XAClassicDomainObject"], [53, 1, 1, "", "XAClipboard"], [53, 1, 1, "", "XAColor"], [53, 1, 1, "", "XAColorList"], [53, 1, 1, "", "XAColorPicker"], [53, 1, 1, "", "XAColorPickerStyle"], [53, 1, 1, "", "XADialog"], [53, 1, 1, "", "XADisk"], [53, 1, 1, "", "XADiskItem"], [53, 1, 1, "", "XADiskItemList"], [53, 1, 1, "", "XADiskList"], [53, 1, 1, "", "XADomain"], [53, 1, 1, "", "XADomainList"], [53, 1, 1, "", "XAEventsApplication"], [53, 1, 1, "", "XAFile"], [53, 1, 1, "", "XAFileList"], [53, 1, 1, "", "XAFileNameDialog"], [53, 1, 1, "", "XAFilePackage"], [53, 1, 1, "", "XAFilePackageList"], [53, 1, 1, "", "XAFilePicker"], [53, 1, 1, "", "XAFolder"], [53, 1, 1, "", "XAFolderList"], [53, 1, 1, "", "XAFolderPicker"], [53, 1, 1, "", "XAImage"], [53, 1, 1, "", "XAImageList"], [53, 1, 1, "", "XAList"], [53, 1, 1, "", "XALocalDomainObject"], [53, 1, 1, "", "XALocation"], [53, 1, 1, "", "XAMenu"], [53, 1, 1, "", "XANetworkDomainObject"], [53, 1, 1, "", "XAObject"], [53, 1, 1, "", "XAParagraph"], [53, 1, 1, "", "XAParagraphList"], [53, 1, 1, "", "XAPath"], [53, 1, 1, "", "XAPredicate"], [53, 1, 1, "", "XASentence"], [53, 1, 1, "", "XASentenceList"], [53, 1, 1, "", "XASound"], [53, 1, 1, "", "XASoundList"], [53, 1, 1, "", "XASpotlight"], [53, 1, 1, "", "XASystemDomainObject"], [53, 1, 1, "", "XAText"], [53, 1, 1, "", "XATextDocument"], [53, 1, 1, "", "XATextDocumentList"], [53, 1, 1, "", "XATextList"], [53, 1, 1, "", "XAURL"], [53, 1, 1, "", "XAURLList"], [53, 1, 1, "", "XAUserDomainObject"], [53, 1, 1, "", "XAVideo"], [53, 1, 1, "", "XAWord"], [53, 1, 1, "", "XAWordList"], [53, 5, 1, "", "current_application"], [53, 5, 1, "", "running_applications"], [53, 6, 1, "", "supported_applications"], [53, 5, 1, "", "unOSType"]], "PyXA.XABase.AppleScript": [[53, 3, 1, "", "__annotations__"], [53, 3, 1, "", "__dict__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "__repr__"], [53, 3, 1, "", "__weakref__"], [53, 2, 1, "", "add"], [53, 4, 1, "", "file_path"], [53, 2, 1, "", "insert"], [53, 4, 1, "", "last_result"], [53, 2, 1, "", "load"], [53, 2, 1, "", "parse_result_data"], [53, 2, 1, "", "pop"], [53, 2, 1, "", "run"], [53, 2, 1, "", "save"], [53, 3, 1, "", "script"]], "PyXA.XABase.Application": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 3, 1, "", "app_paths"]], "PyXA.XABase.XAAlias": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "aliases"], [53, 4, 1, "", "creator_type"], [53, 4, 1, "", "default_application"], [53, 2, 1, "", "disk_items"], [53, 2, 1, "", "file_packages"], [53, 4, 1, "", "file_type"], [53, 2, 1, "", "files"], [53, 2, 1, "", "folders"], [53, 4, 1, "", "kind"], [53, 4, 1, "", "product_version"], [53, 4, 1, "", "short_version"], [53, 4, 1, "", "stationery"], [53, 4, 1, "", "type_identifier"], [53, 4, 1, "", "version"]], "PyXA.XABase.XAAliasList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "by_creator_type"], [53, 2, 1, "", "by_default_application"], [53, 2, 1, "", "by_file_type"], [53, 2, 1, "", "by_kind"], [53, 2, 1, "", "by_product_version"], [53, 2, 1, "", "by_short_version"], [53, 2, 1, "", "by_stationery"], [53, 2, 1, "", "by_type_identifier"], [53, 2, 1, "", "by_version"], [53, 2, 1, "", "creator_type"], [53, 2, 1, "", "default_application"], [53, 2, 1, "", "file_type"], [53, 2, 1, "", "kind"], [53, 2, 1, "", "product_version"], [53, 2, 1, "", "short_version"], [53, 2, 1, "", "stationery"], [53, 2, 1, "", "type_identifier"], [53, 2, 1, "", "version"]], "PyXA.XABase.XAApplication": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__getattr__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "activate"], [53, 4, 1, "", "bundle_identifier"], [53, 4, 1, "", "bundle_url"], [53, 4, 1, "", "executable_url"], [53, 2, 1, "", "focus"], [53, 4, 1, "", "front_window"], [53, 4, 1, "", "frontmost"], [53, 2, 1, "", "get_clipboard_representation"], [53, 2, 1, "", "hide"], [53, 4, 1, "", "icon"], [53, 2, 1, "", "launch"], [53, 4, 1, "", "launch_date"], [53, 4, 1, "", "localized_name"], [53, 2, 1, "", "menu_bars"], [53, 4, 1, "", "owns_menu_bar"], [53, 4, 1, "", "process_identifier"], [53, 2, 1, "", "quit"], [53, 2, 1, "", "terminate"], [53, 2, 1, "", "unfocus"], [53, 2, 1, "", "unhide"], [53, 2, 1, "", "windows"], [53, 4, 1, "", "xa_apsc"], [53, 4, 1, "", "xa_prcs"]], "PyXA.XABase.XAApplicationList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__contains__"], [53, 2, 1, "", "__getitem__"], [53, 2, 1, "", "__init__"], [53, 2, 1, "", "__iter__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "__repr__"], [53, 2, 1, "", "bundle_identifier"], [53, 2, 1, "", "bundle_url"], [53, 2, 1, "", "by_bundle_identifier"], [53, 2, 1, "", "by_bundle_url"], [53, 2, 1, "", "by_executable_url"], [53, 2, 1, "", "by_launch_date"], [53, 2, 1, "", "by_localized_name"], [53, 2, 1, "", "by_process_identifier"], [53, 2, 1, "", "executable_url"], [53, 2, 1, "", "first"], [53, 2, 1, "", "hide"], [53, 2, 1, "", "last"], [53, 2, 1, "", "launch_date"], [53, 2, 1, "", "localized_name"], [53, 2, 1, "", "pop"], [53, 2, 1, "", "process_identifier"], [53, 2, 1, "", "quit"], [53, 2, 1, "", "terminate"], [53, 2, 1, "", "unhide"], [53, 2, 1, "", "windows"]], "PyXA.XABase.XAApplicationPicker": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "display"], [53, 3, 1, "", "multiple_selections_allowed"], [53, 3, 1, "", "prompt"], [53, 3, 1, "", "title"]], "PyXA.XABase.XAAttachment": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XAAttachmentList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XAAttributeRun": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XAAttributeRunList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XACharacter": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XACharacterList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XAClassicDomainObject": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 4, 1, "", "apple_menu_folder"], [53, 4, 1, "", "control_panels_folder"], [53, 4, 1, "", "control_strip_modules_folder"], [53, 4, 1, "", "desktop_folder"], [53, 4, 1, "", "extensions_folder"], [53, 2, 1, "", "folders"], [53, 4, 1, "", "fonts_folder"], [53, 4, 1, "", "launcher_items_folder"], [53, 4, 1, "", "preferences_folder"], [53, 4, 1, "", "shutdown_folder"], [53, 4, 1, "", "startup_items_folder"], [53, 4, 1, "", "system_folder"]], "PyXA.XABase.XAClipboard": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "clear"], [53, 4, 1, "", "content"], [53, 2, 1, "", "get_images"], [53, 2, 1, "", "get_strings"], [53, 2, 1, "", "get_urls"], [53, 2, 1, "", "set_contents"]], "PyXA.XABase.XAColor": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "__repr__"], [53, 4, 1, "", "alpha_value"], [53, 2, 1, "", "black"], [53, 2, 1, "", "blue"], [53, 4, 1, "", "blue_value"], [53, 2, 1, "", "brighten"], [53, 4, 1, "", "brightness_value"], [53, 2, 1, "", "brown"], [53, 2, 1, "", "clear"], [53, 2, 1, "", "copy_color"], [53, 2, 1, "", "cyan"], [53, 2, 1, "", "darken"], [53, 2, 1, "", "get_clipboard_representation"], [53, 2, 1, "", "gray"], [53, 2, 1, "", "green"], [53, 4, 1, "", "green_value"], [53, 4, 1, "", "hex_value"], [53, 4, 1, "", "hue_value"], [53, 2, 1, "", "magenta"], [53, 2, 1, "", "make_swatch"], [53, 2, 1, "", "mix_with"], [53, 2, 1, "", "orange"], [53, 2, 1, "", "purple"], [53, 2, 1, "", "red"], [53, 4, 1, "", "red_value"], [53, 4, 1, "", "saturation_value"], [53, 2, 1, "", "set_hsla"], [53, 2, 1, "", "set_rgba"], [53, 2, 1, "", "white"], [53, 2, 1, "", "yellow"]], "PyXA.XABase.XAColorList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XAColorPicker": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "display"]], "PyXA.XABase.XAColorPickerStyle": [[53, 3, 1, "", "CMYK_SLIDERS"], [53, 3, 1, "", "COLOR_LIST"], [53, 3, 1, "", "COLOR_WHEEL"], [53, 3, 1, "", "CRAYONS"], [53, 3, 1, "", "GRAYSCALE"], [53, 3, 1, "", "HSB_SLIDERS"], [53, 3, 1, "", "IMAGE_PALETTE"], [53, 3, 1, "", "RGB_SLIDERS"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XADialog": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 3, 1, "", "buttons"], [53, 3, 1, "", "cancel_button"], [53, 3, 1, "", "default_answer"], [53, 3, 1, "", "default_button"], [53, 2, 1, "", "display"], [53, 3, 1, "", "hidden_answer"], [53, 3, 1, "", "icon"], [53, 3, 1, "", "text"], [53, 3, 1, "", "title"]], "PyXA.XABase.XADisk": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "aliases"], [53, 4, 1, "", "capacity"], [53, 2, 1, "", "disk_items"], [53, 4, 1, "", "ejectable"], [53, 2, 1, "", "file_packages"], [53, 2, 1, "", "files"], [53, 2, 1, "", "folders"], [53, 4, 1, "", "format"], [53, 4, 1, "", "free_space"], [53, 4, 1, "", "ignore_privileges"], [53, 4, 1, "", "local_volume"], [53, 4, 1, "", "server"], [53, 4, 1, "", "startup"], [53, 4, 1, "", "zone"]], "PyXA.XABase.XADiskItem": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "__repr__"], [53, 4, 1, "", "busy_status"], [53, 4, 1, "", "container"], [53, 4, 1, "", "creation_date"], [53, 4, 1, "", "displayed_name"], [53, 2, 1, "", "get_path_representation"], [53, 4, 1, "", "id"], [53, 4, 1, "", "modification_date"], [53, 4, 1, "", "name"], [53, 4, 1, "", "name_extension"], [53, 2, 1, "", "open"], [53, 4, 1, "", "package_folder"], [53, 4, 1, "", "path"], [53, 4, 1, "", "physical_size"], [53, 4, 1, "", "posix_path"], [53, 4, 1, "", "size"], [53, 4, 1, "", "url"], [53, 4, 1, "", "visible"], [53, 4, 1, "", "volume"]], "PyXA.XABase.XADiskItemList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "__repr__"], [53, 2, 1, "", "busy_status"], [53, 2, 1, "", "by_busy_status"], [53, 2, 1, "", "by_container"], [53, 2, 1, "", "by_creation_date"], [53, 2, 1, "", "by_displayed_name"], [53, 2, 1, "", "by_id"], [53, 2, 1, "", "by_modification_date"], [53, 2, 1, "", "by_name"], [53, 2, 1, "", "by_name_extension"], [53, 2, 1, "", "by_package_folder"], [53, 2, 1, "", "by_path"], [53, 2, 1, "", "by_physical_size"], [53, 2, 1, "", "by_posix_path"], [53, 2, 1, "", "by_size"], [53, 2, 1, "", "by_url"], [53, 2, 1, "", "by_visible"], [53, 2, 1, "", "by_volume"], [53, 2, 1, "", "container"], [53, 2, 1, "", "creation_date"], [53, 2, 1, "", "displayed_name"], [53, 2, 1, "", "id"], [53, 2, 1, "", "modification_date"], [53, 2, 1, "", "name"], [53, 2, 1, "", "name_extension"], [53, 2, 1, "", "package_folder"], [53, 2, 1, "", "path"], [53, 2, 1, "", "physical_size"], [53, 2, 1, "", "posix_path"], [53, 2, 1, "", "size"], [53, 2, 1, "", "url"], [53, 2, 1, "", "visible"], [53, 2, 1, "", "volume"]], "PyXA.XABase.XADiskList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "by_capacity"], [53, 2, 1, "", "by_ejectable"], [53, 2, 1, "", "by_format"], [53, 2, 1, "", "by_free_space"], [53, 2, 1, "", "by_ignore_privileges"], [53, 2, 1, "", "by_local_volume"], [53, 2, 1, "", "by_server"], [53, 2, 1, "", "by_startup"], [53, 2, 1, "", "by_zone"], [53, 2, 1, "", "capacity"], [53, 2, 1, "", "ejectable"], [53, 2, 1, "", "format"], [53, 2, 1, "", "free_space"], [53, 2, 1, "", "ignore_privileges"], [53, 2, 1, "", "local_volume"], [53, 2, 1, "", "server"], [53, 2, 1, "", "startup"], [53, 2, 1, "", "zone"]], "PyXA.XABase.XADomain": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "__repr__"], [53, 4, 1, "", "application_support_folder"], [53, 4, 1, "", "applications_folder"], [53, 4, 1, "", "desktop_pictures_folder"], [53, 4, 1, "", "folder_action_scripts_folder"], [53, 2, 1, "", "folders"], [53, 4, 1, "", "fonts_folder"], [53, 4, 1, "", "id"], [53, 4, 1, "", "library_folder"], [53, 4, 1, "", "name"], [53, 4, 1, "", "preferences_folder"], [53, 4, 1, "", "scripting_additions_folder"], [53, 4, 1, "", "scripts_folder"], [53, 4, 1, "", "shared_documents_folder"], [53, 4, 1, "", "speakable_items_folder"], [53, 4, 1, "", "utilities_folder"], [53, 4, 1, "", "workflows_folder"]], "PyXA.XABase.XADomainList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "__repr__"], [53, 2, 1, "", "by_id"], [53, 2, 1, "", "by_name"], [53, 2, 1, "", "id"], [53, 2, 1, "", "name"]], "PyXA.XABase.XAEventsApplication": [[53, 1, 1, "", "Format"], [53, 3, 1, "", "__annotations__"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XAEventsApplication.Format": [[53, 3, 1, "", "APPLESHARE"], [53, 3, 1, "", "APPLE_PHOTO"], [53, 3, 1, "", "AUDIO"], [53, 3, 1, "", "HIGH_SIERRA"], [53, 3, 1, "", "ISO_9660"], [53, 3, 1, "", "MACOS"], [53, 3, 1, "", "MACOS_EXTENDED"], [53, 3, 1, "", "MSDOS"], [53, 3, 1, "", "NFS"], [53, 3, 1, "", "PRODOS"], [53, 3, 1, "", "QUICKTAKE"], [53, 3, 1, "", "UDF"], [53, 3, 1, "", "UFS"], [53, 3, 1, "", "UNKNOWN"], [53, 3, 1, "", "WEBDAV"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XAFile": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 4, 1, "", "creator_type"], [53, 4, 1, "", "default_application"], [53, 4, 1, "", "file_type"], [53, 4, 1, "", "kind"], [53, 4, 1, "", "product_version"], [53, 4, 1, "", "short_version"], [53, 4, 1, "", "stationery"], [53, 4, 1, "", "type_identifier"], [53, 4, 1, "", "version"]], "PyXA.XABase.XAFileList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "by_creator_type"], [53, 2, 1, "", "by_default_application"], [53, 2, 1, "", "by_file_type"], [53, 2, 1, "", "by_kind"], [53, 2, 1, "", "by_product_version"], [53, 2, 1, "", "by_short_version"], [53, 2, 1, "", "by_stationery"], [53, 2, 1, "", "by_type_identifier"], [53, 2, 1, "", "by_version"], [53, 2, 1, "", "creator_type"], [53, 2, 1, "", "default_application"], [53, 2, 1, "", "file_type"], [53, 2, 1, "", "kind"], [53, 2, 1, "", "product_version"], [53, 2, 1, "", "short_version"], [53, 2, 1, "", "stationery"], [53, 2, 1, "", "type_identifier"], [53, 2, 1, "", "version"]], "PyXA.XABase.XAFileNameDialog": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 3, 1, "", "default_location"], [53, 3, 1, "", "default_name"], [53, 2, 1, "", "display"], [53, 3, 1, "", "prompt"]], "PyXA.XABase.XAFilePackage": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "aliases"], [53, 2, 1, "", "disk_items"], [53, 2, 1, "", "file_packages"], [53, 2, 1, "", "files"], [53, 2, 1, "", "folders"]], "PyXA.XABase.XAFilePackageList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XAFilePicker": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 3, 1, "", "default_location"], [53, 2, 1, "", "display"], [53, 3, 1, "", "multiple_selections_allowed"], [53, 3, 1, "", "prompt"], [53, 3, 1, "", "show_invisibles"], [53, 3, 1, "", "show_package_contents"], [53, 3, 1, "", "types"]], "PyXA.XABase.XAFolder": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "aliases"], [53, 2, 1, "", "disk_items"], [53, 2, 1, "", "file_packages"], [53, 2, 1, "", "files"], [53, 2, 1, "", "folders"]], "PyXA.XABase.XAFolderList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XAFolderPicker": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 3, 1, "", "default_location"], [53, 2, 1, "", "display"], [53, 3, 1, "", "multiple_selections_allowed"], [53, 3, 1, "", "prompt"], [53, 3, 1, "", "show_invisibles"], [53, 3, 1, "", "show_package_contents"]], "PyXA.XABase.XAImage": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__eq__"], [53, 3, 1, "", "__hash__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "auto_enhance"], [53, 2, 1, "", "bloom"], [53, 2, 1, "", "bump"], [53, 4, 1, "", "color_space_name"], [53, 2, 1, "", "comic"], [53, 2, 1, "", "crop"], [53, 2, 1, "", "crystallize"], [53, 4, 1, "", "data"], [53, 2, 1, "", "depth_of_field"], [53, 2, 1, "", "edges"], [53, 2, 1, "", "extract_text"], [53, 3, 1, "", "file"], [53, 2, 1, "", "flip_horizontally"], [53, 2, 1, "", "flip_vertically"], [53, 4, 1, "", "gamma"], [53, 2, 1, "", "gaussian_blur"], [53, 2, 1, "", "get_clipboard_representation"], [53, 4, 1, "", "has_alpha_channel"], [53, 4, 1, "", "highlight"], [53, 2, 1, "", "horizontal_stitch"], [53, 2, 1, "", "image_from_text"], [53, 2, 1, "", "invert"], [53, 4, 1, "", "is_opaque"], [53, 3, 1, "", "modified"], [53, 2, 1, "", "monochrome"], [53, 2, 1, "", "open"], [53, 2, 1, "", "outline"], [53, 2, 1, "", "overlay_image"], [53, 2, 1, "", "overlay_text"], [53, 2, 1, "", "pad"], [53, 2, 1, "", "pinch"], [53, 2, 1, "", "pixellate"], [53, 2, 1, "", "pointillize"], [53, 2, 1, "", "reduce_noise"], [53, 2, 1, "", "resize"], [53, 2, 1, "", "rotate"], [53, 2, 1, "", "save"], [53, 2, 1, "", "scale"], [53, 2, 1, "", "sepia"], [53, 4, 1, "", "shadow"], [53, 2, 1, "", "show_in_preview"], [53, 4, 1, "", "size"], [53, 2, 1, "", "symbol"], [53, 4, 1, "", "temperature"], [53, 4, 1, "", "tint"], [53, 2, 1, "", "twirl"], [53, 2, 1, "", "vertical_stitch"], [53, 4, 1, "", "vibrance"], [53, 2, 1, "", "vignette"], [53, 4, 1, "", "white_point"]], "PyXA.XABase.XAImageList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "additive_composition"], [53, 2, 1, "", "auto_enhance"], [53, 2, 1, "", "bloom"], [53, 2, 1, "", "bump"], [53, 2, 1, "", "comic"], [53, 2, 1, "", "crop"], [53, 2, 1, "", "crystallize"], [53, 2, 1, "", "depth_of_field"], [53, 2, 1, "", "edges"], [53, 2, 1, "", "extract_text"], [53, 2, 1, "", "file"], [53, 2, 1, "", "flip_horizontally"], [53, 2, 1, "", "flip_vertically"], [53, 2, 1, "", "gaussian_blur"], [53, 2, 1, "", "get_clipboard_representation"], [53, 2, 1, "", "horizontal_stitch"], [53, 2, 1, "", "invert"], [53, 3, 1, "", "modified"], [53, 2, 1, "", "monochrome"], [53, 2, 1, "", "outline"], [53, 2, 1, "", "overlay_image"], [53, 2, 1, "", "overlay_text"], [53, 2, 1, "", "pad"], [53, 2, 1, "", "pinch"], [53, 2, 1, "", "pixellate"], [53, 2, 1, "", "pointillize"], [53, 2, 1, "", "reduce_noise"], [53, 2, 1, "", "resize"], [53, 2, 1, "", "rotate"], [53, 2, 1, "", "save"], [53, 2, 1, "", "scale"], [53, 2, 1, "", "sepia"], [53, 2, 1, "", "show_in_preview"], [53, 2, 1, "", "subtractive_composition"], [53, 2, 1, "", "twirl"], [53, 2, 1, "", "vertical_stitch"], [53, 2, 1, "", "vignette"]], "PyXA.XABase.XAList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__contains__"], [53, 2, 1, "", "__getitem__"], [53, 2, 1, "", "__init__"], [53, 2, 1, "", "__iter__"], [53, 2, 1, "", "__len__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "__repr__"], [53, 2, 1, "", "__reversed__"], [53, 2, 1, "", "at"], [53, 2, 1, "", "beginning_with"], [53, 2, 1, "", "between"], [53, 2, 1, "", "by_property"], [53, 2, 1, "", "containing"], [53, 2, 1, "", "count"], [53, 2, 1, "", "ending_with"], [53, 2, 1, "", "equalling"], [53, 2, 1, "", "extend"], [53, 2, 1, "", "filter"], [53, 4, 1, "", "first"], [53, 2, 1, "", "greater_than"], [53, 2, 1, "", "index"], [53, 2, 1, "", "insert"], [53, 4, 1, "", "last"], [53, 2, 1, "", "less_than"], [53, 2, 1, "", "not_containing"], [53, 2, 1, "", "not_equalling"], [53, 2, 1, "", "pop"], [53, 2, 1, "", "push"], [53, 2, 1, "", "shuffle"]], "PyXA.XABase.XALocalDomainObject": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XALocation": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "__repr__"], [53, 3, 1, "", "address"], [53, 3, 1, "", "altitude"], [53, 4, 1, "", "current_location"], [53, 3, 1, "", "latitude"], [53, 3, 1, "", "longitude"], [53, 3, 1, "", "radius"], [53, 4, 1, "", "raw_value"], [53, 2, 1, "", "reverse_geocode"], [53, 2, 1, "", "show_in_maps"], [53, 3, 1, "", "title"]], "PyXA.XABase.XAMenu": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 3, 1, "", "cancel_button_name"], [53, 3, 1, "", "default_items"], [53, 2, 1, "", "display"], [53, 3, 1, "", "empty_selection_allowed"], [53, 3, 1, "", "menu_items"], [53, 3, 1, "", "multiple_selections_allowed"], [53, 3, 1, "", "ok_button_name"], [53, 3, 1, "", "prompt"], [53, 3, 1, "", "title"]], "PyXA.XABase.XANetworkDomainObject": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XAObject": [[53, 3, 1, "", "__annotations__"], [53, 3, 1, "", "__dict__"], [53, 2, 1, "", "__eq__"], [53, 3, 1, "", "__hash__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 3, 1, "", "__weakref__"], [53, 2, 1, "", "has_element"], [53, 2, 1, "", "has_element_properties"], [53, 2, 1, "", "set_element"], [53, 2, 1, "", "set_properties"], [53, 2, 1, "", "set_property"], [53, 4, 1, "", "xa_estr"], [53, 4, 1, "", "xa_sevt"], [53, 4, 1, "", "xa_wksp"]], "PyXA.XABase.XAParagraph": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XAParagraphList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XAPath": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__eq__"], [53, 3, 1, "", "__hash__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "__repr__"], [53, 2, 1, "", "get_clipboard_representation"], [53, 2, 1, "", "open"], [53, 3, 1, "", "path"], [53, 2, 1, "", "select"], [53, 2, 1, "", "show_in_finder"], [53, 3, 1, "", "url"]], "PyXA.XABase.XAPredicate": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "add_begins_with_condition"], [53, 2, 1, "", "add_between_condition"], [53, 2, 1, "", "add_contains_condition"], [53, 2, 1, "", "add_ends_with_condition"], [53, 2, 1, "", "add_eq_condition"], [53, 2, 1, "", "add_geq_condition"], [53, 2, 1, "", "add_gt_condition"], [53, 2, 1, "", "add_leq_condition"], [53, 2, 1, "", "add_lt_condition"], [53, 2, 1, "", "add_match_condition"], [53, 2, 1, "", "add_neq_condition"], [53, 2, 1, "", "evaluate"], [53, 2, 1, "", "evaluate_with_dict"], [53, 2, 1, "", "evaluate_with_format"], [53, 2, 1, "", "from_args"], [53, 2, 1, "", "from_dict"], [53, 2, 1, "", "get_clipboard_representation"], [53, 2, 1, "", "insert_begins_with_condition"], [53, 2, 1, "", "insert_between_condition"], [53, 2, 1, "", "insert_contains_condition"], [53, 2, 1, "", "insert_ends_with_condition"], [53, 2, 1, "", "insert_eq_condition"], [53, 2, 1, "", "insert_geq_condition"], [53, 2, 1, "", "insert_gt_condition"], [53, 2, 1, "", "insert_leq_condition"], [53, 2, 1, "", "insert_lt_condition"], [53, 2, 1, "", "insert_match_condition"], [53, 2, 1, "", "insert_neq_condition"], [53, 3, 1, "", "keys"], [53, 3, 1, "", "operators"], [53, 3, 1, "", "values"]], "PyXA.XABase.XASentence": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XASentenceList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XASound": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "beep"], [53, 4, 1, "", "duration"], [53, 2, 1, "", "get_clipboard_representation"], [53, 2, 1, "", "loop"], [53, 4, 1, "", "num_sample_frames"], [53, 2, 1, "", "open"], [53, 2, 1, "", "pause"], [53, 2, 1, "", "play"], [53, 2, 1, "", "resume"], [53, 4, 1, "", "sample_rate"], [53, 2, 1, "", "save"], [53, 2, 1, "", "set_volume"], [53, 2, 1, "", "stop"], [53, 2, 1, "", "trim"], [53, 2, 1, "", "volume"]], "PyXA.XABase.XASoundList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "duration"], [53, 2, 1, "", "file"], [53, 2, 1, "", "get_clipboard_representation"], [53, 2, 1, "", "num_sample_frames"], [53, 2, 1, "", "pause"], [53, 2, 1, "", "play"], [53, 2, 1, "", "resume"], [53, 2, 1, "", "sample_rate"], [53, 2, 1, "", "stop"], [53, 2, 1, "", "trim"]], "PyXA.XABase.XASpotlight": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 3, 1, "", "predicate"], [53, 3, 1, "", "query"], [53, 4, 1, "", "results"], [53, 2, 1, "", "run"], [53, 2, 1, "", "show_in_finder"], [53, 3, 1, "", "timeout"]], "PyXA.XABase.XASystemDomainObject": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XAText": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 2, 1, "", "__len__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "__repr__"], [53, 2, 1, "", "__str__"], [53, 2, 1, "", "attachments"], [53, 2, 1, "", "attribute_runs"], [53, 2, 1, "", "characters"], [53, 4, 1, "", "color"], [53, 4, 1, "", "font"], [53, 2, 1, "", "paragraphs"], [53, 2, 1, "", "sentences"], [53, 4, 1, "", "size"], [53, 2, 1, "", "tag_entities"], [53, 2, 1, "", "tag_languages"], [53, 2, 1, "", "tag_lemmas"], [53, 2, 1, "", "tag_parts_of_speech"], [53, 2, 1, "", "tag_sentiments"], [53, 4, 1, "", "text"], [53, 2, 1, "", "words"]], "PyXA.XABase.XATextDocument": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "append"], [53, 2, 1, "", "attachments"], [53, 2, 1, "", "attribute_runs"], [53, 2, 1, "", "characters"], [53, 2, 1, "", "paragraphs"], [53, 2, 1, "", "prepend"], [53, 2, 1, "", "reverse"], [53, 2, 1, "", "sentences"], [53, 4, 1, "", "text"], [53, 2, 1, "", "words"]], "PyXA.XABase.XATextDocumentList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "__repr__"], [53, 2, 1, "", "attachments"], [53, 2, 1, "", "attribute_runs"], [53, 2, 1, "", "by_properties"], [53, 2, 1, "", "by_text"], [53, 2, 1, "", "characters"], [53, 2, 1, "", "get_clipboard_representation"], [53, 2, 1, "", "paragraphs"], [53, 2, 1, "", "properties"], [53, 2, 1, "", "text"], [53, 2, 1, "", "words"]], "PyXA.XABase.XATextList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "__repr__"], [53, 2, 1, "", "attachments"], [53, 2, 1, "", "attribute_runs"], [53, 2, 1, "", "characters"], [53, 2, 1, "", "paragraphs"], [53, 2, 1, "", "sentences"], [53, 2, 1, "", "words"]], "PyXA.XABase.XAURL": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__eq__"], [53, 3, 1, "", "__hash__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "__repr__"], [53, 2, 1, "", "__str__"], [53, 4, 1, "", "base_url"], [53, 2, 1, "", "extract_images"], [53, 2, 1, "", "extract_text"], [53, 4, 1, "", "fragment"], [53, 2, 1, "", "get_clipboard_representation"], [53, 4, 1, "", "html"], [53, 2, 1, "", "open"], [53, 4, 1, "", "parameters"], [53, 4, 1, "", "port"], [53, 4, 1, "", "scheme"], [53, 3, 1, "", "soup"], [53, 4, 1, "", "title"], [53, 3, 1, "", "url"]], "PyXA.XABase.XAURLList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "base_url"], [53, 2, 1, "", "extract_images"], [53, 2, 1, "", "extract_text"], [53, 2, 1, "", "fragment"], [53, 2, 1, "", "html"], [53, 2, 1, "", "open"], [53, 2, 1, "", "parameters"], [53, 2, 1, "", "port"], [53, 2, 1, "", "scheme"], [53, 2, 1, "", "title"]], "PyXA.XABase.XAUserDomainObject": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 4, 1, "", "desktop_folder"], [53, 4, 1, "", "documents_folder"], [53, 4, 1, "", "downloads_folder"], [53, 4, 1, "", "favorites_folder"], [53, 4, 1, "", "home_folder"], [53, 4, 1, "", "movies_folder"], [53, 4, 1, "", "music_folder"], [53, 4, 1, "", "pictures_folder"], [53, 4, 1, "", "public_folder"], [53, 4, 1, "", "sites_folder"], [53, 4, 1, "", "temporary_items_folder"]], "PyXA.XABase.XAVideo": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"], [53, 2, 1, "", "reverse"], [53, 2, 1, "", "save"], [53, 2, 1, "", "show_in_quicktime"]], "PyXA.XABase.XAWord": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"]], "PyXA.XABase.XAWordList": [[53, 3, 1, "", "__annotations__"], [53, 2, 1, "", "__init__"], [53, 3, 1, "", "__module__"]], "PyXA.XABaseScriptable": [[54, 1, 1, "", "XASBApplication"], [54, 1, 1, "", "XASBPrintable"], [54, 1, 1, "", "XASBWindow"], [54, 1, 1, "", "XASBWindowList"]], "PyXA.XABaseScriptable.XASBApplication": [[54, 1, 1, "", "PrintErrorHandling"], [54, 1, 1, "", "SaveOption"], [54, 2, 1, "", "activate"], [54, 4, 1, "", "front_window"], [54, 2, 1, "", "set_property"], [54, 2, 1, "", "windows"], [54, 4, 1, "", "xa_scel"]], "PyXA.XABaseScriptable.XASBApplication.PrintErrorHandling": [[54, 3, 1, "", "DETAILED"], [54, 3, 1, "", "STANDARD"]], "PyXA.XABaseScriptable.XASBApplication.SaveOption": [[54, 3, 1, "", "ASK"], [54, 3, 1, "", "NO"], [54, 3, 1, "", "YES"]], "PyXA.XABaseScriptable.XASBPrintable": [[54, 2, 1, "", "print"]], "PyXA.XABaseScriptable.XASBWindow": [[54, 4, 1, "", "bounds"], [54, 4, 1, "", "closeable"], [54, 2, 1, "", "collapse"], [54, 2, 1, "", "get_clipboard_representation"], [54, 4, 1, "", "id"], [54, 4, 1, "", "index"], [54, 4, 1, "", "miniaturizable"], [54, 4, 1, "", "miniaturized"], [54, 4, 1, "", "name"], [54, 4, 1, "", "resizable"], [54, 2, 1, "", "toggle_zoom"], [54, 2, 1, "", "uncollapse"], [54, 4, 1, "", "visible"], [54, 4, 1, "", "zoomable"], [54, 4, 1, "", "zoomed"]], "PyXA.XABaseScriptable.XASBWindowList": [[54, 2, 1, "", "bounds"], [54, 2, 1, "", "by_bounds"], [54, 2, 1, "", "by_closeable"], [54, 2, 1, "", "by_id"], [54, 2, 1, "", "by_index"], [54, 2, 1, "", "by_miniaturizable"], [54, 2, 1, "", "by_miniaturized"], [54, 2, 1, "", "by_name"], [54, 2, 1, "", "by_resizable"], [54, 2, 1, "", "by_visible"], [54, 2, 1, "", "by_zoomable"], [54, 2, 1, "", "by_zoomed"], [54, 2, 1, "", "closeable"], [54, 2, 1, "", "collapse"], [54, 2, 1, "", "get_clipboard_representation"], [54, 2, 1, "", "id"], [54, 2, 1, "", "index"], [54, 2, 1, "", "miniaturizable"], [54, 2, 1, "", "miniaturized"], [54, 2, 1, "", "name"], [54, 2, 1, "", "resizable"], [54, 2, 1, "", "uncollapse"], [54, 2, 1, "", "visible"], [54, 2, 1, "", "zoomable"], [54, 2, 1, "", "zoomed"]], "PyXA.XAErrors": [[55, 7, 1, "", "ApplicationNotFoundError"], [55, 7, 1, "", "AuthenticationError"], [55, 7, 1, "", "InvalidPredicateError"], [55, 7, 1, "", "UnconstructableClassError"]], "PyXA.XAProtocols": [[56, 1, 1, "", "XACanOpenPath"], [56, 1, 1, "", "XACanPrintPath"], [56, 1, 1, "", "XAClipboardCodable"], [56, 1, 1, "", "XACloseable"], [56, 1, 1, "", "XADeletable"], [56, 1, 1, "", "XAImageLike"], [56, 1, 1, "", "XAPathLike"], [56, 1, 1, "", "XAPrintable"], [56, 1, 1, "", "XAProtocol"], [56, 1, 1, "", "XASelectable"], [56, 1, 1, "", "XAShowable"]], "PyXA.XAProtocols.XACanOpenPath": [[56, 2, 1, "", "open"]], "PyXA.XAProtocols.XACanPrintPath": [[56, 2, 1, "", "print"]], "PyXA.XAProtocols.XAClipboardCodable": [[56, 2, 1, "", "get_clipboard_representation"]], "PyXA.XAProtocols.XACloseable": [[56, 2, 1, "", "close"]], "PyXA.XAProtocols.XADeletable": [[56, 2, 1, "", "delete"]], "PyXA.XAProtocols.XAImageLike": [[56, 2, 1, "", "get_image_representation"]], "PyXA.XAProtocols.XAPathLike": [[56, 2, 1, "", "get_path_representation"]], "PyXA.XAProtocols.XAPrintable": [[56, 2, 1, "", "print"]], "PyXA.XAProtocols.XASelectable": [[56, 2, 1, "", "select"]], "PyXA.XAProtocols.XAShowable": [[56, 2, 1, "", "show"]], "PyXA.XATypes": [[57, 1, 1, "", "XAPoint"], [57, 1, 1, "", "XARectangle"]], "PyXA.XATypes.XAPoint": [[57, 3, 1, "", "x"], [57, 3, 1, "", "y"]], "PyXA.XATypes.XARectangle": [[57, 3, 1, "", "height"], [57, 3, 1, "", "width"], [57, 3, 1, "", "x"], [57, 3, 1, "", "y"]], "PyXA.apps": [[8, 0, 0, "-", "Automator"], [9, 0, 0, "-", "Bike"], [10, 0, 0, "-", "Calculator"], [11, 0, 0, "-", "Calendar"], [12, 0, 0, "-", "Cardhop"], [13, 0, 0, "-", "Chromium"], [14, 0, 0, "-", "Console"], [15, 0, 0, "-", "Contacts"], [16, 0, 0, "-", "Dictionary"], [17, 0, 0, "-", "Drafts"], [18, 0, 0, "-", "Fantastical"], [19, 0, 0, "-", "Finder"], [20, 0, 0, "-", "Flow"], [21, 0, 0, "-", "FontBook"], [22, 0, 0, "-", "Hammerspoon"], [23, 0, 0, "-", "ImageEvents"], [26, 0, 0, "-", "Keynote"], [27, 0, 0, "-", "Mail"], [28, 0, 0, "-", "Maps"], [29, 0, 0, "-", "MediaApplicationBase"], [30, 0, 0, "-", "Messages"], [31, 0, 0, "-", "Music"], [33, 0, 0, "-", "Notes"], [34, 0, 0, "-", "OmniOutliner"], [35, 0, 0, "-", "Pages"], [36, 0, 0, "-", "PhotosApp"], [37, 0, 0, "-", "Preview"], [38, 0, 0, "-", "QuickTimePlayer"], [40, 0, 0, "-", "RStudio"], [39, 0, 0, "-", "Reminders"], [41, 0, 0, "-", "Safari"], [42, 0, 0, "-", "Shortcuts"], [43, 0, 0, "-", "Spotify"], [44, 0, 0, "-", "Stocks"], [45, 0, 0, "-", "SystemEvents"], [46, 0, 0, "-", "SystemPreferences"], [49, 0, 0, "-", "TV"], [47, 0, 0, "-", "Terminal"], [48, 0, 0, "-", "TextEdit"], [50, 0, 0, "-", "VLC"], [24, 0, 0, "-", "iTerm"], [25, 0, 0, "-", "iWorkApplicationBase"]], "PyXA.apps.Automator": [[8, 1, 1, "", "XAAutomatorAction"], [8, 1, 1, "", "XAAutomatorActionList"], [8, 1, 1, "", "XAAutomatorApplication"], [8, 1, 1, "", "XAAutomatorDocument"], [8, 1, 1, "", "XAAutomatorDocumentList"], [8, 1, 1, "", "XAAutomatorRequiredResource"], [8, 1, 1, "", "XAAutomatorRequiredResourceList"], [8, 1, 1, "", "XAAutomatorSetting"], [8, 1, 1, "", "XAAutomatorSettingList"], [8, 1, 1, "", "XAAutomatorVariable"], [8, 1, 1, "", "XAAutomatorVariableList"], [8, 1, 1, "", "XAAutomatorWindow"], [8, 1, 1, "", "XAAutomatorWorkflow"], [8, 1, 1, "", "XAAutomatorWorkflowList"]], "PyXA.apps.Automator.XAAutomatorAction": [[8, 4, 1, "", "bundle_id"], [8, 4, 1, "", "category"], [8, 4, 1, "", "comment"], [8, 4, 1, "", "enabled"], [8, 4, 1, "", "execution_error_message"], [8, 4, 1, "", "execution_error_number"], [8, 4, 1, "", "execution_result"], [8, 4, 1, "", "icon_name"], [8, 4, 1, "", "id"], [8, 4, 1, "", "ignores_input"], [8, 4, 1, "", "index"], [8, 4, 1, "", "input_types"], [8, 4, 1, "", "keywords"], [8, 4, 1, "", "name"], [8, 4, 1, "", "output_types"], [8, 4, 1, "", "parent_workflow"], [8, 4, 1, "", "path"], [8, 2, 1, "", "required_resources"], [8, 2, 1, "", "settings"], [8, 4, 1, "", "show_action_when_run"], [8, 4, 1, "", "target_application"], [8, 4, 1, "", "version"], [8, 4, 1, "", "warning_action"], [8, 4, 1, "", "warning_level"], [8, 4, 1, "", "warning_message"]], "PyXA.apps.Automator.XAAutomatorActionList": [[8, 2, 1, "", "bundle_id"], [8, 2, 1, "", "by_bundle_id"], [8, 2, 1, "", "by_category"], [8, 2, 1, "", "by_comment"], [8, 2, 1, "", "by_enabled"], [8, 2, 1, "", "by_execution_error_message"], [8, 2, 1, "", "by_execution_error_number"], [8, 2, 1, "", "by_execution_result"], [8, 2, 1, "", "by_icon_name"], [8, 2, 1, "", "by_id"], [8, 2, 1, "", "by_ignores_input"], [8, 2, 1, "", "by_input_types"], [8, 2, 1, "", "by_keywords"], [8, 2, 1, "", "by_name"], [8, 2, 1, "", "by_output_types"], [8, 2, 1, "", "by_parent_workflow"], [8, 2, 1, "", "by_path"], [8, 2, 1, "", "by_show_action_when_run"], [8, 2, 1, "", "by_target_application"], [8, 2, 1, "", "by_version"], [8, 2, 1, "", "by_warning_action"], [8, 2, 1, "", "by_warning_level"], [8, 2, 1, "", "by_warning_message"], [8, 2, 1, "", "category"], [8, 2, 1, "", "comment"], [8, 2, 1, "", "enabled"], [8, 2, 1, "", "execution_error_message"], [8, 2, 1, "", "execution_error_number"], [8, 2, 1, "", "execution_result"], [8, 2, 1, "", "icon_name"], [8, 2, 1, "", "ignores_input"], [8, 2, 1, "", "index"], [8, 2, 1, "", "input_types"], [8, 2, 1, "", "keywords"], [8, 2, 1, "", "name"], [8, 2, 1, "", "output_types"], [8, 2, 1, "", "parent_workflow"], [8, 2, 1, "", "path"], [8, 2, 1, "", "show_action_when_run"], [8, 2, 1, "", "target_application"], [8, 2, 1, "", "version"], [8, 2, 1, "", "warning_action"], [8, 2, 1, "", "warning_level"], [8, 2, 1, "", "warning_message"]], "PyXA.apps.Automator.XAAutomatorApplication": [[8, 1, 1, "", "WarningLevel"], [8, 2, 1, "", "add"], [8, 2, 1, "", "automator_actions"], [8, 2, 1, "", "documents"], [8, 4, 1, "", "frontmost"], [8, 2, 1, "", "make"], [8, 4, 1, "", "name"], [8, 2, 1, "", "open"], [8, 2, 1, "", "variables"], [8, 4, 1, "", "version"], [8, 2, 1, "", "workflows"]], "PyXA.apps.Automator.XAAutomatorApplication.WarningLevel": [[8, 3, 1, "", "IRREVERSIBLE"], [8, 3, 1, "", "NONE"], [8, 3, 1, "", "REVERSIBLE"]], "PyXA.apps.Automator.XAAutomatorDocument": [[8, 4, 1, "", "modified"], [8, 4, 1, "", "name"], [8, 4, 1, "", "path"]], "PyXA.apps.Automator.XAAutomatorDocumentList": [[8, 2, 1, "", "by_id"], [8, 2, 1, "", "by_index"], [8, 2, 1, "", "by_title"], [8, 2, 1, "", "id"], [8, 2, 1, "", "index"], [8, 2, 1, "", "title"]], "PyXA.apps.Automator.XAAutomatorRequiredResource": [[8, 4, 1, "", "kind"], [8, 4, 1, "", "name"], [8, 4, 1, "", "resource"], [8, 4, 1, "", "version"]], "PyXA.apps.Automator.XAAutomatorRequiredResourceList": [[8, 2, 1, "", "by_kind"], [8, 2, 1, "", "by_name"], [8, 2, 1, "", "by_resource"], [8, 2, 1, "", "by_version"], [8, 2, 1, "", "kind"], [8, 2, 1, "", "name"], [8, 2, 1, "", "resource"], [8, 2, 1, "", "version"]], "PyXA.apps.Automator.XAAutomatorSetting": [[8, 4, 1, "", "default_value"], [8, 4, 1, "", "name"], [8, 4, 1, "", "value"]], "PyXA.apps.Automator.XAAutomatorSettingList": [[8, 2, 1, "", "by_default_value"], [8, 2, 1, "", "by_name"], [8, 2, 1, "", "by_value"], [8, 2, 1, "", "default_value"], [8, 2, 1, "", "name"], [8, 2, 1, "", "value"]], "PyXA.apps.Automator.XAAutomatorVariable": [[8, 4, 1, "", "name"], [8, 4, 1, "", "settable"], [8, 4, 1, "", "value"]], "PyXA.apps.Automator.XAAutomatorVariableList": [[8, 2, 1, "", "by_name"], [8, 2, 1, "", "by_settable"], [8, 2, 1, "", "by_value"], [8, 2, 1, "", "name"], [8, 2, 1, "", "settable"], [8, 2, 1, "", "value"]], "PyXA.apps.Automator.XAAutomatorWindow": [[8, 4, 1, "", "document"], [8, 4, 1, "", "floating"], [8, 4, 1, "", "modal"], [8, 4, 1, "", "titled"]], "PyXA.apps.Automator.XAAutomatorWorkflow": [[8, 2, 1, "", "automator_actions"], [8, 4, 1, "", "current_action"], [8, 2, 1, "", "delete"], [8, 2, 1, "", "execute"], [8, 4, 1, "", "execution_error_message"], [8, 4, 1, "", "execution_error_number"], [8, 4, 1, "", "execution_id"], [8, 4, 1, "", "execution_result"], [8, 4, 1, "", "name"], [8, 2, 1, "", "save"], [8, 2, 1, "", "variables"]], "PyXA.apps.Automator.XAAutomatorWorkflowList": [[8, 2, 1, "", "by_current_action"], [8, 2, 1, "", "by_execution_error_message"], [8, 2, 1, "", "by_execution_error_number"], [8, 2, 1, "", "by_execution_id"], [8, 2, 1, "", "by_execution_result"], [8, 2, 1, "", "by_name"], [8, 2, 1, "", "current_action"], [8, 2, 1, "", "execution_error_message"], [8, 2, 1, "", "execution_error_number"], [8, 2, 1, "", "execution_id"], [8, 2, 1, "", "execution_result"], [8, 2, 1, "", "name"]], "PyXA.apps.Bike": [[9, 1, 1, "", "XABikeApplication"], [9, 1, 1, "", "XABikeAttribute"], [9, 1, 1, "", "XABikeAttributeList"], [9, 1, 1, "", "XABikeDocument"], [9, 1, 1, "", "XABikeDocumentList"], [9, 1, 1, "", "XABikeRow"], [9, 1, 1, "", "XABikeRowList"], [9, 1, 1, "", "XABikeWindow"]], "PyXA.apps.Bike.XABikeApplication": [[9, 1, 1, "", "FileFormat"], [9, 4, 1, "", "background_color"], [9, 2, 1, "", "documents"], [9, 4, 1, "", "font_size"], [9, 4, 1, "", "foreground_color"], [9, 4, 1, "", "frontmost"], [9, 2, 1, "", "make"], [9, 4, 1, "", "name"], [9, 4, 1, "", "version"]], "PyXA.apps.Bike.XABikeApplication.FileFormat": [[9, 3, 1, "", "BIKE"], [9, 3, 1, "", "OPML"], [9, 3, 1, "", "PLAINTEXT"]], "PyXA.apps.Bike.XABikeAttribute": [[9, 4, 1, "", "container_row"], [9, 4, 1, "", "name"], [9, 4, 1, "", "value"]], "PyXA.apps.Bike.XABikeAttributeList": [[9, 2, 1, "", "by_container_row"], [9, 2, 1, "", "by_name"], [9, 2, 1, "", "by_value"], [9, 2, 1, "", "container_row"], [9, 2, 1, "", "name"], [9, 2, 1, "", "value"]], "PyXA.apps.Bike.XABikeDocument": [[9, 4, 1, "", "entire_contents"], [9, 4, 1, "", "file"], [9, 4, 1, "", "focused_row"], [9, 4, 1, "", "hoisted_row"], [9, 4, 1, "", "id"], [9, 4, 1, "", "modified"], [9, 4, 1, "", "name"], [9, 4, 1, "", "root_row"], [9, 2, 1, "", "rows"], [9, 2, 1, "", "save"], [9, 4, 1, "", "selected_text"], [9, 4, 1, "", "selection_row"], [9, 4, 1, "", "selection_rows"], [9, 4, 1, "", "url"]], "PyXA.apps.Bike.XABikeDocumentList": [[9, 2, 1, "", "by_entire_contents"], [9, 2, 1, "", "by_file"], [9, 2, 1, "", "by_focused_row"], [9, 2, 1, "", "by_hoisted_row"], [9, 2, 1, "", "by_id"], [9, 2, 1, "", "by_modified"], [9, 2, 1, "", "by_name"], [9, 2, 1, "", "by_root_row"], [9, 2, 1, "", "by_selected_text"], [9, 2, 1, "", "by_selection_row"], [9, 2, 1, "", "by_selection_rows"], [9, 2, 1, "", "by_url"], [9, 2, 1, "", "close"], [9, 2, 1, "", "entireContents"], [9, 2, 1, "", "file"], [9, 2, 1, "", "focused_row"], [9, 2, 1, "", "hoisted_row"], [9, 2, 1, "", "id"], [9, 2, 1, "", "modified"], [9, 2, 1, "", "name"], [9, 2, 1, "", "root_row"], [9, 2, 1, "", "selected_text"], [9, 2, 1, "", "selection_row"], [9, 2, 1, "", "selection_rows"], [9, 2, 1, "", "url"]], "PyXA.apps.Bike.XABikeRow": [[9, 2, 1, "", "attributes"], [9, 2, 1, "", "collapse"], [9, 4, 1, "", "collapsed"], [9, 4, 1, "", "container"], [9, 4, 1, "", "container_document"], [9, 4, 1, "", "container_row"], [9, 4, 1, "", "contains_rows"], [9, 4, 1, "", "entire_contents"], [9, 2, 1, "", "expand"], [9, 4, 1, "", "expanded"], [9, 4, 1, "", "id"], [9, 4, 1, "", "level"], [9, 2, 1, "", "move_to"], [9, 4, 1, "", "name"], [9, 4, 1, "", "next_sibling_row"], [9, 4, 1, "", "prev_sibling_row"], [9, 2, 1, "", "rows"], [9, 4, 1, "", "selected"], [9, 4, 1, "", "url"], [9, 4, 1, "", "visible"]], "PyXA.apps.Bike.XABikeRowList": [[9, 2, 1, "", "by_collapsed"], [9, 2, 1, "", "by_container"], [9, 2, 1, "", "by_container_document"], [9, 2, 1, "", "by_container_row"], [9, 2, 1, "", "by_contains_rows"], [9, 2, 1, "", "by_entire_contents"], [9, 2, 1, "", "by_expanded"], [9, 2, 1, "", "by_id"], [9, 2, 1, "", "by_level"], [9, 2, 1, "", "by_name"], [9, 2, 1, "", "by_next_sibling_row"], [9, 2, 1, "", "by_prev_sibling_row"], [9, 2, 1, "", "by_selected"], [9, 2, 1, "", "by_url"], [9, 2, 1, "", "by_visible"], [9, 2, 1, "", "collapse"], [9, 2, 1, "", "collapsed"], [9, 2, 1, "", "container"], [9, 2, 1, "", "container_row"], [9, 2, 1, "", "contains_rows"], [9, 2, 1, "", "entire_contents"], [9, 2, 1, "", "expand"], [9, 2, 1, "", "expanded"], [9, 2, 1, "", "id"], [9, 2, 1, "", "level"], [9, 2, 1, "", "name"], [9, 2, 1, "", "next_sibling_row"], [9, 2, 1, "", "prev_sibling_row"], [9, 2, 1, "", "selected"], [9, 2, 1, "", "url"], [9, 2, 1, "", "visible"]], "PyXA.apps.Bike.XABikeWindow": [[9, 4, 1, "", "document"]], "PyXA.apps.Calculator": [[10, 1, 1, "", "XACalculatorApplication"]], "PyXA.apps.Calculator.XACalculatorApplication": [[10, 2, 1, "", "clear_value"], [10, 2, 1, "", "copy_value"], [10, 2, 1, "", "current_value"], [10, 2, 1, "", "input"], [10, 2, 1, "", "open_about_panel"], [10, 2, 1, "", "open_page_setup"], [10, 2, 1, "", "print_tape"], [10, 2, 1, "", "save_tape"], [10, 2, 1, "", "show_basic_calculator"], [10, 2, 1, "", "show_help"], [10, 2, 1, "", "show_paper_tape"], [10, 2, 1, "", "show_programmer_calculator"], [10, 2, 1, "", "show_scientific_calculator"], [10, 2, 1, "", "toggle_RPN_mode"], [10, 2, 1, "", "toggle_thousands_separators"]], "PyXA.apps.Calendar": [[11, 1, 1, "", "XACalendarAlarm"], [11, 1, 1, "", "XACalendarApplication"], [11, 1, 1, "", "XACalendarAttachment"], [11, 1, 1, "", "XACalendarAttachmentList"], [11, 1, 1, "", "XACalendarAttendee"], [11, 1, 1, "", "XACalendarAttendeeList"], [11, 1, 1, "", "XACalendarCalendar"], [11, 1, 1, "", "XACalendarCalendarList"], [11, 1, 1, "", "XACalendarDisplayAlarm"], [11, 1, 1, "", "XACalendarDocument"], [11, 1, 1, "", "XACalendarDocumentList"], [11, 1, 1, "", "XACalendarEvent"], [11, 1, 1, "", "XACalendarEventList"], [11, 1, 1, "", "XACalendarMailAlarm"], [11, 1, 1, "", "XACalendarOpenFileAlarm"], [11, 1, 1, "", "XACalendarSoundAlarm"], [11, 1, 1, "", "XACalendarWindow"]], "PyXA.apps.Calendar.XACalendarAlarm": [[11, 4, 1, "", "properties"], [11, 4, 1, "", "trigger_date"], [11, 4, 1, "", "trigger_interval"]], "PyXA.apps.Calendar.XACalendarApplication": [[11, 1, 1, "", "EventStatus"], [11, 1, 1, "", "ParticipationStatus"], [11, 1, 1, "", "Priority"], [11, 1, 1, "", "ViewType"], [11, 2, 1, "", "calendars"], [11, 4, 1, "", "default_calendar"], [11, 2, 1, "", "documents"], [11, 4, 1, "", "frontmost"], [11, 2, 1, "", "make"], [11, 4, 1, "", "name"], [11, 2, 1, "", "new_calendar"], [11, 2, 1, "", "new_event"], [11, 4, 1, "", "properties"], [11, 2, 1, "", "reload_calendars"], [11, 2, 1, "", "subscribe_to"], [11, 2, 1, "", "switch_view_to"], [11, 4, 1, "", "version"], [11, 2, 1, "", "view_calendar_at"]], "PyXA.apps.Calendar.XACalendarApplication.EventStatus": [[11, 3, 1, "", "CANCELLED"], [11, 3, 1, "", "CONFIRMED"], [11, 3, 1, "", "NONE"], [11, 3, 1, "", "TENTATIVE"]], "PyXA.apps.Calendar.XACalendarApplication.ParticipationStatus": [[11, 3, 1, "", "ACCEPTED"], [11, 3, 1, "", "DECLINED"], [11, 3, 1, "", "TENTATIVE"], [11, 3, 1, "", "UNKNOWN"]], "PyXA.apps.Calendar.XACalendarApplication.Priority": [[11, 3, 1, "", "HIGH"], [11, 3, 1, "", "LOW"], [11, 3, 1, "", "MEDIUM"], [11, 3, 1, "", "NONE"]], "PyXA.apps.Calendar.XACalendarApplication.ViewType": [[11, 3, 1, "", "DAY"], [11, 3, 1, "", "MONTH"], [11, 3, 1, "", "WEEK"], [11, 3, 1, "", "YEAR"]], "PyXA.apps.Calendar.XACalendarAttachment": [[11, 4, 1, "", "file"], [11, 4, 1, "", "file_name"], [11, 2, 1, "", "open"], [11, 4, 1, "", "type"], [11, 4, 1, "", "url"], [11, 4, 1, "", "uuid"]], "PyXA.apps.Calendar.XACalendarAttachmentList": [[11, 2, 1, "", "by_file"], [11, 2, 1, "", "by_file_name"], [11, 2, 1, "", "by_type"], [11, 2, 1, "", "by_url"], [11, 2, 1, "", "by_uuid"], [11, 2, 1, "", "file"], [11, 2, 1, "", "file_name"], [11, 2, 1, "", "type"], [11, 2, 1, "", "url"], [11, 2, 1, "", "uuid"]], "PyXA.apps.Calendar.XACalendarAttendee": [[11, 4, 1, "", "display_name"], [11, 4, 1, "", "email"], [11, 4, 1, "", "participation_status"], [11, 4, 1, "", "properties"]], "PyXA.apps.Calendar.XACalendarAttendeeList": [[11, 2, 1, "", "by_display_name"], [11, 2, 1, "", "by_email"], [11, 2, 1, "", "by_participation_status"], [11, 2, 1, "", "by_properties"], [11, 2, 1, "", "display_name"], [11, 2, 1, "", "email"], [11, 2, 1, "", "participation_status"], [11, 2, 1, "", "properties"]], "PyXA.apps.Calendar.XACalendarCalendar": [[11, 4, 1, "", "calendar_obj"], [11, 4, 1, "", "color"], [11, 2, 1, "", "delete"], [11, 4, 1, "", "description"], [11, 2, 1, "", "events"], [11, 2, 1, "", "events_in_range"], [11, 2, 1, "", "events_today"], [11, 4, 1, "", "name"], [11, 2, 1, "", "new_event"], [11, 4, 1, "", "properties"], [11, 2, 1, "", "week_events"], [11, 4, 1, "", "writable"]], "PyXA.apps.Calendar.XACalendarCalendarList": [[11, 2, 1, "", "by_color"], [11, 2, 1, "", "by_description"], [11, 2, 1, "", "by_name"], [11, 2, 1, "", "by_properties"], [11, 2, 1, "", "by_writable"], [11, 2, 1, "", "color"], [11, 2, 1, "", "description"], [11, 2, 1, "", "events"], [11, 2, 1, "", "name"], [11, 2, 1, "", "properties"], [11, 2, 1, "", "writable"]], "PyXA.apps.Calendar.XACalendarDocument": [[11, 4, 1, "", "file"], [11, 4, 1, "", "modified"], [11, 4, 1, "", "name"], [11, 4, 1, "", "properties"]], "PyXA.apps.Calendar.XACalendarDocumentList": [[11, 2, 1, "", "by_file"], [11, 2, 1, "", "by_modified"], [11, 2, 1, "", "by_name"], [11, 2, 1, "", "by_properties"], [11, 2, 1, "", "file"], [11, 2, 1, "", "modified"], [11, 2, 1, "", "name"], [11, 2, 1, "", "properties"]], "PyXA.apps.Calendar.XACalendarEvent": [[11, 2, 1, "", "add_attachment"], [11, 4, 1, "", "allday_event"], [11, 2, 1, "", "attachments"], [11, 2, 1, "", "attendees"], [11, 2, 1, "", "delete"], [11, 4, 1, "", "description"], [11, 2, 1, "", "duplicate"], [11, 2, 1, "", "duplicate_to"], [11, 4, 1, "", "end_date"], [11, 4, 1, "", "excluded_dates"], [11, 4, 1, "", "location"], [11, 2, 1, "", "move_to"], [11, 4, 1, "", "properties"], [11, 4, 1, "", "recurrence"], [11, 4, 1, "", "sequence"], [11, 2, 1, "", "show"], [11, 4, 1, "", "stamp_date"], [11, 4, 1, "", "start_date"], [11, 4, 1, "", "status"], [11, 4, 1, "", "summary"], [11, 4, 1, "", "uid"], [11, 4, 1, "", "url"], [11, 4, 1, "", "xa_event_obj"]], "PyXA.apps.Calendar.XACalendarEventList": [[11, 2, 1, "", "allday_event"], [11, 2, 1, "", "by_allday_event"], [11, 2, 1, "", "by_description"], [11, 2, 1, "", "by_end_date"], [11, 2, 1, "", "by_excluded_dates"], [11, 2, 1, "", "by_location"], [11, 2, 1, "", "by_properties"], [11, 2, 1, "", "by_recurrence"], [11, 2, 1, "", "by_sequence"], [11, 2, 1, "", "by_stamp_date"], [11, 2, 1, "", "by_start_date"], [11, 2, 1, "", "by_status"], [11, 2, 1, "", "by_summary"], [11, 2, 1, "", "by_uid"], [11, 2, 1, "", "by_url"], [11, 2, 1, "", "description"], [11, 2, 1, "", "end_date"], [11, 2, 1, "", "excluded_dates"], [11, 2, 1, "", "location"], [11, 2, 1, "", "properties"], [11, 2, 1, "", "recurrence"], [11, 2, 1, "", "sequence"], [11, 2, 1, "", "stamp_date"], [11, 2, 1, "", "start_date"], [11, 2, 1, "", "status"], [11, 2, 1, "", "summary"], [11, 2, 1, "", "uid"], [11, 2, 1, "", "url"]], "PyXA.apps.Calendar.XACalendarOpenFileAlarm": [[11, 4, 1, "", "file_path"]], "PyXA.apps.Calendar.XACalendarSoundAlarm": [[11, 4, 1, "", "sound_file"], [11, 4, 1, "", "sound_name"]], "PyXA.apps.Calendar.XACalendarWindow": [[11, 4, 1, "", "document"], [11, 4, 1, "", "properties"]], "PyXA.apps.Cardhop": [[12, 1, 1, "", "XACardhopAppplication"], [12, 1, 1, "", "XACardhopDocument"], [12, 1, 1, "", "XACardhopDocumentList"], [12, 1, 1, "", "XACardhopWindow"]], "PyXA.apps.Cardhop.XACardhopAppplication": [[12, 1, 1, "", "ZoomType"], [12, 2, 1, "", "documents"], [12, 4, 1, "", "frontmost"], [12, 4, 1, "", "name"], [12, 2, 1, "", "parse_sentence"], [12, 4, 1, "", "version"]], "PyXA.apps.Cardhop.XACardhopAppplication.ZoomType": [[12, 3, 1, "", "FIT_HEIGHT"], [12, 3, 1, "", "FIT_PAGE"], [12, 3, 1, "", "FIT_VISIBLE_WIDTH"], [12, 3, 1, "", "FIT_WIDTH"], [12, 3, 1, "", "NO_VARY"]], "PyXA.apps.Cardhop.XACardhopDocument": [[12, 4, 1, "", "file"], [12, 4, 1, "", "modified"], [12, 4, 1, "", "name"]], "PyXA.apps.Cardhop.XACardhopDocumentList": [[12, 2, 1, "", "by_file"], [12, 2, 1, "", "by_modified"], [12, 2, 1, "", "by_name"], [12, 2, 1, "", "file"], [12, 2, 1, "", "get_clipboard_representation"], [12, 2, 1, "", "modified"], [12, 2, 1, "", "name"]], "PyXA.apps.Cardhop.XACardhopWindow": [[12, 4, 1, "", "document"]], "PyXA.apps.Chromium": [[13, 1, 1, "", "XAChromiumApplication"], [13, 1, 1, "", "XAChromiumBookmarkFolder"], [13, 1, 1, "", "XAChromiumBookmarkFolderList"], [13, 1, 1, "", "XAChromiumBookmarkItem"], [13, 1, 1, "", "XAChromiumBookmarkItemList"], [13, 1, 1, "", "XAChromiumTab"], [13, 1, 1, "", "XAChromiumTabList"], [13, 1, 1, "", "XAChromiumWindow"]], "PyXA.apps.Chromium.XAChromiumApplication": [[13, 2, 1, "", "bookmark_folders"], [13, 4, 1, "", "bookmarks_bar"], [13, 4, 1, "", "frontmost"], [13, 2, 1, "", "make"], [13, 4, 1, "", "name"], [13, 2, 1, "", "new_tab"], [13, 2, 1, "", "new_window"], [13, 2, 1, "", "open"], [13, 4, 1, "", "other_bookmarks"], [13, 4, 1, "", "version"]], "PyXA.apps.Chromium.XAChromiumBookmarkFolder": [[13, 2, 1, "", "bookmark_folders"], [13, 2, 1, "", "bookmark_items"], [13, 2, 1, "", "delete"], [13, 2, 1, "", "get_clipboard_representation"], [13, 4, 1, "", "id"], [13, 4, 1, "", "index"], [13, 4, 1, "", "title"]], "PyXA.apps.Chromium.XAChromiumBookmarkFolderList": [[13, 2, 1, "", "by_id"], [13, 2, 1, "", "by_index"], [13, 2, 1, "", "by_title"], [13, 2, 1, "", "get_clipboard_representation"], [13, 2, 1, "", "id"], [13, 2, 1, "", "index"], [13, 2, 1, "", "title"]], "PyXA.apps.Chromium.XAChromiumBookmarkItem": [[13, 2, 1, "", "delete"], [13, 2, 1, "", "get_clipboard_representation"], [13, 4, 1, "", "id"], [13, 4, 1, "", "index"], [13, 4, 1, "", "title"], [13, 4, 1, "", "url"]], "PyXA.apps.Chromium.XAChromiumBookmarkItemList": [[13, 2, 1, "", "by_id"], [13, 2, 1, "", "by_index"], [13, 2, 1, "", "by_title"], [13, 2, 1, "", "by_url"], [13, 2, 1, "", "get_clipboard_representation"], [13, 2, 1, "", "id"], [13, 2, 1, "", "index"], [13, 2, 1, "", "title"], [13, 2, 1, "", "url"]], "PyXA.apps.Chromium.XAChromiumTab": [[13, 2, 1, "", "close"], [13, 2, 1, "", "copy_selection"], [13, 2, 1, "", "cut_selection"], [13, 2, 1, "", "duplicate_to"], [13, 2, 1, "", "execute"], [13, 2, 1, "", "get_clipboard_representation"], [13, 2, 1, "", "go_back"], [13, 2, 1, "", "go_forward"], [13, 4, 1, "", "id"], [13, 4, 1, "", "loading"], [13, 2, 1, "", "move_to"], [13, 2, 1, "", "paste_selection"], [13, 2, 1, "", "print"], [13, 2, 1, "", "redo"], [13, 2, 1, "", "reload"], [13, 2, 1, "", "save"], [13, 2, 1, "", "select_all"], [13, 2, 1, "", "stop"], [13, 4, 1, "", "title"], [13, 2, 1, "", "undo"], [13, 4, 1, "", "url"], [13, 2, 1, "", "view_source"]], "PyXA.apps.Chromium.XAChromiumTabList": [[13, 2, 1, "", "by_id"], [13, 2, 1, "", "by_loading"], [13, 2, 1, "", "by_title"], [13, 2, 1, "", "by_url"], [13, 2, 1, "", "get_clipboard_representation"], [13, 2, 1, "", "id"], [13, 2, 1, "", "loading"], [13, 2, 1, "", "title"], [13, 2, 1, "", "url"]], "PyXA.apps.Chromium.XAChromiumWindow": [[13, 4, 1, "", "active_tab"], [13, 4, 1, "", "active_tab_index"], [13, 4, 1, "", "given_name"], [13, 4, 1, "", "minimizable"], [13, 4, 1, "", "minimized"], [13, 4, 1, "", "mode"], [13, 2, 1, "", "new_tab"], [13, 2, 1, "", "tabs"]], "PyXA.apps.Console": [[14, 1, 1, "", "XAConsoleApplication"]], "PyXA.apps.Console.XAConsoleApplication": [[14, 2, 1, "", "select_device"]], "PyXA.apps.Contacts": [[15, 1, 1, "", "XAContactsAddress"], [15, 1, 1, "", "XAContactsAddressList"], [15, 1, 1, "", "XAContactsApplication"], [15, 1, 1, "", "XAContactsContactInfo"], [15, 1, 1, "", "XAContactsContactInfoList"], [15, 1, 1, "", "XAContactsCustomDate"], [15, 1, 1, "", "XAContactsCustomDateList"], [15, 1, 1, "", "XAContactsDocument"], [15, 1, 1, "", "XAContactsDocumentList"], [15, 1, 1, "", "XAContactsEmail"], [15, 1, 1, "", "XAContactsEmailList"], [15, 1, 1, "", "XAContactsEntry"], [15, 1, 1, "", "XAContactsEntryList"], [15, 1, 1, "", "XAContactsGroup"], [15, 1, 1, "", "XAContactsGroupList"], [15, 1, 1, "", "XAContactsInstantMessage"], [15, 1, 1, "", "XAContactsInstantMessageList"], [15, 1, 1, "", "XAContactsPerson"], [15, 1, 1, "", "XAContactsPersonList"], [15, 1, 1, "", "XAContactsPhone"], [15, 1, 1, "", "XAContactsPhoneList"], [15, 1, 1, "", "XAContactsRelatedName"], [15, 1, 1, "", "XAContactsRelatedNameList"], [15, 1, 1, "", "XAContactsSocialProfile"], [15, 1, 1, "", "XAContactsSocialProfileList"], [15, 1, 1, "", "XAContactsURL"], [15, 1, 1, "", "XAContactsURLList"], [15, 1, 1, "", "XAContactsWindow"]], "PyXA.apps.Contacts.XAContactsAddress": [[15, 4, 1, "", "city"], [15, 4, 1, "", "country"], [15, 4, 1, "", "country_code"], [15, 4, 1, "", "formatted_address"], [15, 4, 1, "", "id"], [15, 4, 1, "", "label"], [15, 4, 1, "", "state"], [15, 4, 1, "", "street"], [15, 4, 1, "", "zip"]], "PyXA.apps.Contacts.XAContactsAddressList": [[15, 2, 1, "", "by_city"], [15, 2, 1, "", "by_country"], [15, 2, 1, "", "by_country_code"], [15, 2, 1, "", "by_formatted_address"], [15, 2, 1, "", "by_id"], [15, 2, 1, "", "by_label"], [15, 2, 1, "", "by_state"], [15, 2, 1, "", "by_street"], [15, 2, 1, "", "by_zip"], [15, 2, 1, "", "city"], [15, 2, 1, "", "country"], [15, 2, 1, "", "country_code"], [15, 2, 1, "", "formatted_address"], [15, 2, 1, "", "id"], [15, 2, 1, "", "label"], [15, 2, 1, "", "state"], [15, 2, 1, "", "street"], [15, 2, 1, "", "zip"]], "PyXA.apps.Contacts.XAContactsApplication": [[15, 1, 1, "", "Format"], [15, 1, 1, "", "ServiceType"], [15, 4, 1, "", "default_country_code"], [15, 2, 1, "", "documents"], [15, 4, 1, "", "frontmost"], [15, 2, 1, "", "groups"], [15, 2, 1, "", "make"], [15, 4, 1, "", "my_card"], [15, 4, 1, "", "name"], [15, 2, 1, "", "open"], [15, 2, 1, "", "people"], [15, 2, 1, "", "save"], [15, 4, 1, "", "selection"], [15, 4, 1, "", "unsaved"], [15, 4, 1, "", "version"]], "PyXA.apps.Contacts.XAContactsApplication.Format": [[15, 3, 1, "", "ARCHIVE"]], "PyXA.apps.Contacts.XAContactsApplication.ServiceType": [[15, 3, 1, "", "AIM"], [15, 3, 1, "", "FACEBOOK"], [15, 3, 1, "", "GADU_GADU"], [15, 3, 1, "", "GOOGLE_TALK"], [15, 3, 1, "", "ICQ"], [15, 3, 1, "", "JABBER"], [15, 3, 1, "", "MSN"], [15, 3, 1, "", "QQ"], [15, 3, 1, "", "SKYPE"], [15, 3, 1, "", "YAHOO"]], "PyXA.apps.Contacts.XAContactsContactInfo": [[15, 4, 1, "", "id"], [15, 4, 1, "", "label"], [15, 4, 1, "", "value"]], "PyXA.apps.Contacts.XAContactsContactInfoList": [[15, 2, 1, "", "by_id"], [15, 2, 1, "", "by_label"], [15, 2, 1, "", "by_value"], [15, 2, 1, "", "id"], [15, 2, 1, "", "label"], [15, 2, 1, "", "value"]], "PyXA.apps.Contacts.XAContactsDocument": [[15, 4, 1, "", "file"], [15, 4, 1, "", "modified"], [15, 4, 1, "", "name"]], "PyXA.apps.Contacts.XAContactsDocumentList": [[15, 2, 1, "", "by_file"], [15, 2, 1, "", "by_modified"], [15, 2, 1, "", "by_name"], [15, 2, 1, "", "file"], [15, 2, 1, "", "modified"], [15, 2, 1, "", "name"]], "PyXA.apps.Contacts.XAContactsEntry": [[15, 2, 1, "", "add_to"], [15, 4, 1, "", "creation_date"], [15, 2, 1, "", "delete"], [15, 4, 1, "", "id"], [15, 4, 1, "", "modification_date"], [15, 2, 1, "", "remove_from"], [15, 4, 1, "", "selected"]], "PyXA.apps.Contacts.XAContactsEntryList": [[15, 2, 1, "", "by_creation_date"], [15, 2, 1, "", "by_id"], [15, 2, 1, "", "by_modification_date"], [15, 2, 1, "", "by_selected"], [15, 2, 1, "", "creation_date"], [15, 2, 1, "", "id"], [15, 2, 1, "", "modification_date"], [15, 2, 1, "", "selected"]], "PyXA.apps.Contacts.XAContactsGroup": [[15, 2, 1, "", "groups"], [15, 4, 1, "", "name"], [15, 2, 1, "", "people"]], "PyXA.apps.Contacts.XAContactsGroupList": [[15, 2, 1, "", "by_name"], [15, 2, 1, "", "name"]], "PyXA.apps.Contacts.XAContactsInstantMessage": [[15, 4, 1, "", "service_name"], [15, 4, 1, "", "service_type"], [15, 4, 1, "", "user_name"]], "PyXA.apps.Contacts.XAContactsInstantMessageList": [[15, 2, 1, "", "by_service_name"], [15, 2, 1, "", "by_service_type"], [15, 2, 1, "", "by_user_name"], [15, 2, 1, "", "service_name"], [15, 2, 1, "", "service_type"], [15, 2, 1, "", "user_name"]], "PyXA.apps.Contacts.XAContactsPerson": [[15, 2, 1, "", "addresses"], [15, 4, 1, "", "birth_date"], [15, 4, 1, "", "company"], [15, 2, 1, "", "custom_dates"], [15, 4, 1, "", "department"], [15, 2, 1, "", "emails"], [15, 4, 1, "", "first_name"], [15, 2, 1, "", "groups"], [15, 4, 1, "", "home_page"], [15, 4, 1, "", "image"], [15, 2, 1, "", "instant_messages"], [15, 4, 1, "", "job_title"], [15, 4, 1, "", "last_name"], [15, 4, 1, "", "maiden_name"], [15, 4, 1, "", "middle_name"], [15, 4, 1, "", "name"], [15, 4, 1, "", "nickname"], [15, 4, 1, "", "note"], [15, 4, 1, "", "organization"], [15, 2, 1, "", "phones"], [15, 4, 1, "", "phonetic_first_name"], [15, 4, 1, "", "phonetic_last_name"], [15, 4, 1, "", "phonetic_middle_name"], [15, 2, 1, "", "related_names"], [15, 2, 1, "", "show"], [15, 2, 1, "", "social_profiles"], [15, 4, 1, "", "suffix"], [15, 4, 1, "", "title"], [15, 2, 1, "", "urls"], [15, 4, 1, "", "vcard"]], "PyXA.apps.Contacts.XAContactsPersonList": [[15, 2, 1, "", "birth_date"], [15, 2, 1, "", "by_birth_date"], [15, 2, 1, "", "by_company"], [15, 2, 1, "", "by_department"], [15, 2, 1, "", "by_first_name"], [15, 2, 1, "", "by_home_page"], [15, 2, 1, "", "by_image"], [15, 2, 1, "", "by_job_title"], [15, 2, 1, "", "by_last_name"], [15, 2, 1, "", "by_maiden_name"], [15, 2, 1, "", "by_middle_name"], [15, 2, 1, "", "by_name"], [15, 2, 1, "", "by_nickname"], [15, 2, 1, "", "by_note"], [15, 2, 1, "", "by_organization"], [15, 2, 1, "", "by_phonetic_first_name"], [15, 2, 1, "", "by_phonetic_last_name"], [15, 2, 1, "", "by_phonetic_middle_name"], [15, 2, 1, "", "by_suffix"], [15, 2, 1, "", "by_title"], [15, 2, 1, "", "by_vcard"], [15, 2, 1, "", "company"], [15, 2, 1, "", "department"], [15, 2, 1, "", "first_name"], [15, 2, 1, "", "home_page"], [15, 2, 1, "", "image"], [15, 2, 1, "", "job_title"], [15, 2, 1, "", "last_name"], [15, 2, 1, "", "maiden_name"], [15, 2, 1, "", "middle_name"], [15, 2, 1, "", "name"], [15, 2, 1, "", "nickname"], [15, 2, 1, "", "note"], [15, 2, 1, "", "organization"], [15, 2, 1, "", "phonetic_first_name"], [15, 2, 1, "", "phonetic_last_name"], [15, 2, 1, "", "phonetic_middle_name"], [15, 2, 1, "", "suffix"], [15, 2, 1, "", "title"], [15, 2, 1, "", "vcard"]], "PyXA.apps.Contacts.XAContactsSocialProfile": [[15, 4, 1, "", "id"], [15, 4, 1, "", "service_name"], [15, 4, 1, "", "url"], [15, 4, 1, "", "user_identifier"], [15, 4, 1, "", "user_name"]], "PyXA.apps.Contacts.XAContactsSocialProfileList": [[15, 2, 1, "", "by_id"], [15, 2, 1, "", "by_service_name"], [15, 2, 1, "", "by_url"], [15, 2, 1, "", "by_user_identifier"], [15, 2, 1, "", "by_user_name"], [15, 2, 1, "", "id"], [15, 2, 1, "", "service_name"], [15, 2, 1, "", "url"], [15, 2, 1, "", "user_identifier"], [15, 2, 1, "", "user_name"]], "PyXA.apps.Contacts.XAContactsWindow": [[15, 4, 1, "", "document"]], "PyXA.apps.Dictionary": [[16, 5, 1, "", "DCSCopyTextDefinition"], [16, 1, 1, "", "XADictionaryApplication"]], "PyXA.apps.Dictionary.XADictionaryApplication": [[16, 2, 1, "", "define"], [16, 2, 1, "", "fullscreen"], [16, 2, 1, "", "go_back"], [16, 2, 1, "", "go_forward"], [16, 2, 1, "", "new_tab"], [16, 2, 1, "", "new_window"], [16, 2, 1, "", "open_about_panel"], [16, 2, 1, "", "open_dictionaries_folder"], [16, 2, 1, "", "open_preferences"], [16, 2, 1, "", "paste"], [16, 2, 1, "", "print"], [16, 2, 1, "", "search"], [16, 2, 1, "", "search_all"], [16, 2, 1, "", "search_apple_dictionary"], [16, 2, 1, "", "search_new_oxford"], [16, 2, 1, "", "search_oxford_thesaurus"], [16, 2, 1, "", "search_wikipedia"], [16, 2, 1, "", "show_help"], [16, 2, 1, "", "start_dictation"], [16, 2, 1, "", "switch_to_all"], [16, 2, 1, "", "switch_to_apple_dictionary"], [16, 2, 1, "", "switch_to_new_oxford"], [16, 2, 1, "", "switch_to_oxford_thesaurus"], [16, 2, 1, "", "switch_to_wikipedia"], [16, 2, 1, "", "view_front_back_matter"]], "PyXA.apps.Drafts": [[17, 1, 1, "", "XADraftsApplication"], [17, 1, 1, "", "XADraftsDraft"], [17, 1, 1, "", "XADraftsDraftList"]], "PyXA.apps.Drafts.XADraftsApplication": [[17, 2, 1, "", "drafts"], [17, 2, 1, "", "make"], [17, 4, 1, "", "name"], [17, 2, 1, "", "new_draft"], [17, 4, 1, "", "version"]], "PyXA.apps.Drafts.XADraftsDraft": [[17, 4, 1, "", "accessed_at"], [17, 4, 1, "", "content"], [17, 4, 1, "", "created_at"], [17, 4, 1, "", "flagged"], [17, 4, 1, "", "id"], [17, 4, 1, "", "modified_at"], [17, 4, 1, "", "name"], [17, 4, 1, "", "permalink"], [17, 4, 1, "", "tags"]], "PyXA.apps.Drafts.XADraftsDraftList": [[17, 2, 1, "", "accessed_at"], [17, 2, 1, "", "by_accessed_at"], [17, 2, 1, "", "by_content"], [17, 2, 1, "", "by_created_at"], [17, 2, 1, "", "by_flagged"], [17, 2, 1, "", "by_id"], [17, 2, 1, "", "by_modified_at"], [17, 2, 1, "", "by_name"], [17, 2, 1, "", "by_permalink"], [17, 2, 1, "", "by_tags"], [17, 2, 1, "", "content"], [17, 2, 1, "", "created_at"], [17, 2, 1, "", "flagged"], [17, 2, 1, "", "id"], [17, 2, 1, "", "modified_at"], [17, 2, 1, "", "name"], [17, 2, 1, "", "permalink"], [17, 2, 1, "", "tags"]], "PyXA.apps.Fantastical": [[18, 1, 1, "", "XAFantasticalApplication"], [18, 1, 1, "", "XAFantasticalCalendar"], [18, 1, 1, "", "XAFantasticalCalendarEvent"], [18, 1, 1, "", "XAFantasticalCalendarItem"], [18, 1, 1, "", "XAFantasticalCalendarItemList"], [18, 1, 1, "", "XAFantasticalCalendarList"], [18, 1, 1, "", "XAFantasticalDocument"], [18, 1, 1, "", "XAFantasticalDocumentList"], [18, 1, 1, "", "XAFantasticalSelectedCalendarItem"], [18, 1, 1, "", "XAFantasticalSelectedCalendarItemList"], [18, 1, 1, "", "XAFantasticalTaskItem"], [18, 1, 1, "", "XAFantasticalWindow"]], "PyXA.apps.Fantastical.XAFantasticalApplication": [[18, 2, 1, "", "calendars"], [18, 2, 1, "", "documents"], [18, 4, 1, "", "frontmost"], [18, 4, 1, "", "name"], [18, 2, 1, "", "parse_sentence"], [18, 2, 1, "", "selected_calendar_items"], [18, 2, 1, "", "show_calendar_view"], [18, 2, 1, "", "show_mini_view"], [18, 4, 1, "", "version"]], "PyXA.apps.Fantastical.XAFantasticalCalendar": [[18, 4, 1, "", "id"], [18, 4, 1, "", "title"]], "PyXA.apps.Fantastical.XAFantasticalCalendarEvent": [[18, 4, 1, "", "location"]], "PyXA.apps.Fantastical.XAFantasticalCalendarItem": [[18, 4, 1, "", "end_date"], [18, 4, 1, "", "id"], [18, 4, 1, "", "is_all_day"], [18, 4, 1, "", "is_recurring"], [18, 4, 1, "", "notes"], [18, 2, 1, "", "save"], [18, 4, 1, "", "show_url"], [18, 4, 1, "", "start_date"], [18, 4, 1, "", "title"], [18, 4, 1, "", "url"]], "PyXA.apps.Fantastical.XAFantasticalCalendarItemList": [[18, 2, 1, "", "by_end_date"], [18, 2, 1, "", "by_id"], [18, 2, 1, "", "by_is_all_day"], [18, 2, 1, "", "by_is_recurring"], [18, 2, 1, "", "by_notes"], [18, 2, 1, "", "by_show_url"], [18, 2, 1, "", "by_start_date"], [18, 2, 1, "", "by_title"], [18, 2, 1, "", "by_url"], [18, 2, 1, "", "end_date"], [18, 2, 1, "", "id"], [18, 2, 1, "", "is_all_day"], [18, 2, 1, "", "is_recurring"], [18, 2, 1, "", "notes"], [18, 2, 1, "", "show_url"], [18, 2, 1, "", "start_date"], [18, 2, 1, "", "title"], [18, 2, 1, "", "url"]], "PyXA.apps.Fantastical.XAFantasticalCalendarList": [[18, 2, 1, "", "by_id"], [18, 2, 1, "", "by_title"], [18, 2, 1, "", "id"], [18, 2, 1, "", "title"]], "PyXA.apps.Fantastical.XAFantasticalDocument": [[18, 4, 1, "", "file"], [18, 2, 1, "", "get_clipboard_representation"], [18, 4, 1, "", "modified"], [18, 4, 1, "", "name"], [18, 2, 1, "", "print"]], "PyXA.apps.Fantastical.XAFantasticalDocumentList": [[18, 2, 1, "", "by_file"], [18, 2, 1, "", "by_modified"], [18, 2, 1, "", "by_name"], [18, 2, 1, "", "file"], [18, 2, 1, "", "modified"], [18, 2, 1, "", "name"]], "PyXA.apps.Fantastical.XAFantasticalTaskItem": [[18, 4, 1, "", "priority"]], "PyXA.apps.Fantastical.XAFantasticalWindow": [[18, 4, 1, "", "document"]], "PyXA.apps.Finder": [[19, 1, 1, "", "XAFinderAliasFile"], [19, 1, 1, "", "XAFinderAliasFileList"], [19, 1, 1, "", "XAFinderApplication"], [19, 1, 1, "", "XAFinderApplicationFile"], [19, 1, 1, "", "XAFinderApplicationFileList"], [19, 1, 1, "", "XAFinderClipping"], [19, 1, 1, "", "XAFinderClippingList"], [19, 1, 1, "", "XAFinderClippingWindow"], [19, 1, 1, "", "XAFinderClippingWindowList"], [19, 1, 1, "", "XAFinderColumn"], [19, 1, 1, "", "XAFinderColumnList"], [19, 1, 1, "", "XAFinderColumnViewOptions"], [19, 1, 1, "", "XAFinderComputer"], [19, 1, 1, "", "XAFinderContainer"], [19, 1, 1, "", "XAFinderContainerList"], [19, 1, 1, "", "XAFinderDesktop"], [19, 1, 1, "", "XAFinderDesktopWindow"], [19, 1, 1, "", "XAFinderDisk"], [19, 1, 1, "", "XAFinderDiskList"], [19, 1, 1, "", "XAFinderDocumentFile"], [19, 1, 1, "", "XAFinderDocumentFileList"], [19, 1, 1, "", "XAFinderFile"], [19, 1, 1, "", "XAFinderFileList"], [19, 1, 1, "", "XAFinderFinderWindow"], [19, 1, 1, "", "XAFinderFinderWindowList"], [19, 1, 1, "", "XAFinderFolder"], [19, 1, 1, "", "XAFinderFolderList"], [19, 1, 1, "", "XAFinderIconViewOptions"], [19, 1, 1, "", "XAFinderInformationWindow"], [19, 1, 1, "", "XAFinderInformationWindowList"], [19, 1, 1, "", "XAFinderInternetLocationFile"], [19, 1, 1, "", "XAFinderInternetLocationFileList"], [19, 1, 1, "", "XAFinderItem"], [19, 1, 1, "", "XAFinderItemList"], [19, 1, 1, "", "XAFinderListViewOptions"], [19, 1, 1, "", "XAFinderPackage"], [19, 1, 1, "", "XAFinderPackageList"], [19, 1, 1, "", "XAFinderPreferences"], [19, 1, 1, "", "XAFinderPreferencesWindow"], [19, 1, 1, "", "XAFinderTrash"], [19, 1, 1, "", "XAFinderWindow"], [19, 1, 1, "", "XAFinderWindowList"]], "PyXA.apps.Finder.XAFinderAliasFile": [[19, 4, 1, "", "original_item"]], "PyXA.apps.Finder.XAFinderAliasFileList": [[19, 2, 1, "", "by_original_item"], [19, 2, 1, "", "original_item"]], "PyXA.apps.Finder.XAFinderApplication": [[19, 1, 1, "", "Arrangement"], [19, 1, 1, "", "ColumnName"], [19, 1, 1, "", "IconSize"], [19, 1, 1, "", "ItemFormat"], [19, 1, 1, "", "LabelPosition"], [19, 1, 1, "", "Panel"], [19, 1, 1, "", "PrivacySetting"], [19, 1, 1, "", "SortDirection"], [19, 1, 1, "", "ViewSetting"], [19, 2, 1, "", "alias_files"], [19, 2, 1, "", "application_files"], [19, 2, 1, "", "applications_directory"], [19, 2, 1, "", "clipping_windows"], [19, 2, 1, "", "clippings"], [19, 4, 1, "", "computer_container"], [19, 2, 1, "", "containers"], [19, 2, 1, "", "delete_item"], [19, 2, 1, "", "delete_items"], [19, 4, 1, "", "desktop"], [19, 4, 1, "", "desktop_picture"], [19, 2, 1, "", "directory"], [19, 2, 1, "", "disks"], [19, 2, 1, "", "document_files"], [19, 2, 1, "", "documents_directory"], [19, 2, 1, "", "downloads_directory"], [19, 2, 1, "", "duplicate_item"], [19, 2, 1, "", "duplicate_items"], [19, 2, 1, "", "empty_trash"], [19, 2, 1, "", "files"], [19, 4, 1, "", "finder_preferences"], [19, 2, 1, "", "finder_windows"], [19, 2, 1, "", "folders"], [19, 4, 1, "", "frontmost"], [19, 2, 1, "", "get_labels"], [19, 4, 1, "", "home"], [19, 2, 1, "", "home_directory"], [19, 4, 1, "", "insertion_location"], [19, 2, 1, "", "internet_location_files"], [19, 2, 1, "", "items"], [19, 2, 1, "", "movies_directory"], [19, 2, 1, "", "music_directory"], [19, 4, 1, "", "name"], [19, 2, 1, "", "packages"], [19, 2, 1, "", "pictures_directory"], [19, 4, 1, "", "product_version"], [19, 2, 1, "", "public_directory"], [19, 2, 1, "", "recycle_item"], [19, 2, 1, "", "recycle_items"], [19, 2, 1, "", "search"], [19, 2, 1, "", "select_item"], [19, 2, 1, "", "select_items"], [19, 4, 1, "", "selection"], [19, 4, 1, "", "startup_disk"], [19, 2, 1, "", "temp_directory"], [19, 4, 1, "", "trash"], [19, 2, 1, "", "trash_directory"], [19, 4, 1, "", "version"], [19, 4, 1, "", "visible"]], "PyXA.apps.Finder.XAFinderApplication.Arrangement": [[19, 3, 1, "", "BY_CREATION_DATE"], [19, 3, 1, "", "BY_KIND"], [19, 3, 1, "", "BY_LABEL"], [19, 3, 1, "", "BY_MODIFICATION_DATE"], [19, 3, 1, "", "BY_NAME"], [19, 3, 1, "", "BY_SIZE"], [19, 3, 1, "", "NOT_ARRANGED"], [19, 3, 1, "", "SNAP_TO_GRID"]], "PyXA.apps.Finder.XAFinderApplication.ColumnName": [[19, 3, 1, "", "COMMENT"], [19, 3, 1, "", "CREATION_DATE"], [19, 3, 1, "", "KIND"], [19, 3, 1, "", "LABEL"], [19, 3, 1, "", "MODIFICATE_DATE"], [19, 3, 1, "", "NAME"], [19, 3, 1, "", "SIZE"], [19, 3, 1, "", "VERSION"]], "PyXA.apps.Finder.XAFinderApplication.IconSize": [[19, 3, 1, "", "LARGE"], [19, 3, 1, "", "SMALL"]], "PyXA.apps.Finder.XAFinderApplication.ItemFormat": [[19, 3, 1, "", "APFS"], [19, 3, 1, "", "APPLE_PHOTO"], [19, 3, 1, "", "APPLE_SHARE"], [19, 3, 1, "", "AUDIO"], [19, 3, 1, "", "EXFAT"], [19, 3, 1, "", "FTP"], [19, 3, 1, "", "HIGH_SIERRA"], [19, 3, 1, "", "ISO9660"], [19, 3, 1, "", "MACOS"], [19, 3, 1, "", "MACOS_EXTENDED"], [19, 3, 1, "", "MSDOS"], [19, 3, 1, "", "NFS"], [19, 3, 1, "", "NTFS"], [19, 3, 1, "", "PACKET_WRITTEN_UDF"], [19, 3, 1, "", "PRO_DOS"], [19, 3, 1, "", "QUICKTAKE"], [19, 3, 1, "", "SMB"], [19, 3, 1, "", "UDF"], [19, 3, 1, "", "UFS"], [19, 3, 1, "", "UNKNOWN"], [19, 3, 1, "", "WEBDAV"], [19, 3, 1, "", "XSAN"]], "PyXA.apps.Finder.XAFinderApplication.LabelPosition": [[19, 3, 1, "", "BOTTOM"], [19, 3, 1, "", "RIGHT"]], "PyXA.apps.Finder.XAFinderApplication.Panel": [[19, 3, 1, "", "ADVANCED_PREFERENCES"], [19, 3, 1, "", "APPLICATION"], [19, 3, 1, "", "BURNING"], [19, 3, 1, "", "COMMENTS"], [19, 3, 1, "", "CONTENT_INDEX"], [19, 3, 1, "", "GENERAL_INFORMATION"], [19, 3, 1, "", "GENERAL_PREFERENCES"], [19, 3, 1, "", "LABEL_PREFERENCES"], [19, 3, 1, "", "LANGUAGES"], [19, 3, 1, "", "MEMORY"], [19, 3, 1, "", "MORE_INFO"], [19, 3, 1, "", "NAME_EXTENSION"], [19, 3, 1, "", "PLUGINS"], [19, 3, 1, "", "PREVIEW"], [19, 3, 1, "", "SHARING"], [19, 3, 1, "", "SIDEBAR_PREFERENCES"], [19, 3, 1, "", "SIMPLE_HEADER"]], "PyXA.apps.Finder.XAFinderApplication.PrivacySetting": [[19, 3, 1, "", "NONE"], [19, 3, 1, "", "READ_ONLY"], [19, 3, 1, "", "READ_WRITE"], [19, 3, 1, "", "WRITE_ONLY"]], "PyXA.apps.Finder.XAFinderApplication.SortDirection": [[19, 3, 1, "", "NORMAL"], [19, 3, 1, "", "REVERSED"]], "PyXA.apps.Finder.XAFinderApplication.ViewSetting": [[19, 3, 1, "", "COLUMN_VIEW"], [19, 3, 1, "", "FLOW_VIEW"], [19, 3, 1, "", "GROUP_VIEW"], [19, 3, 1, "", "ICON_VIEW"], [19, 3, 1, "", "LIST_VIEW"]], "PyXA.apps.Finder.XAFinderApplicationFile": [[19, 4, 1, "", "has_scripting_terminology"], [19, 4, 1, "", "id"]], "PyXA.apps.Finder.XAFinderApplicationFileList": [[19, 2, 1, "", "by_has_scripting_terminology"], [19, 2, 1, "", "by_id"], [19, 2, 1, "", "has_scripting_terminology"], [19, 2, 1, "", "id"]], "PyXA.apps.Finder.XAFinderColumn": [[19, 4, 1, "", "index"], [19, 4, 1, "", "maximum_width"], [19, 4, 1, "", "minimum_width"], [19, 4, 1, "", "name"], [19, 4, 1, "", "sort_direction"], [19, 4, 1, "", "visible"], [19, 4, 1, "", "width"]], "PyXA.apps.Finder.XAFinderColumnList": [[19, 2, 1, "", "by_index"], [19, 2, 1, "", "by_maximum_width"], [19, 2, 1, "", "by_minimum_width"], [19, 2, 1, "", "by_name"], [19, 2, 1, "", "by_sort_direction"], [19, 2, 1, "", "by_visible"], [19, 2, 1, "", "by_width"], [19, 2, 1, "", "index"], [19, 2, 1, "", "maximum_width"], [19, 2, 1, "", "minimum_width"], [19, 2, 1, "", "name"], [19, 2, 1, "", "sort_direction"], [19, 2, 1, "", "visible"], [19, 2, 1, "", "width"]], "PyXA.apps.Finder.XAFinderColumnViewOptions": [[19, 4, 1, "", "discloses_preview_pane"], [19, 4, 1, "", "shows_icon"], [19, 4, 1, "", "shows_icon_preview"], [19, 4, 1, "", "shows_preview_column"], [19, 4, 1, "", "text_size"]], "PyXA.apps.Finder.XAFinderContainer": [[19, 2, 1, "", "alias_files"], [19, 2, 1, "", "application_files"], [19, 2, 1, "", "clippings"], [19, 4, 1, "", "container_window"], [19, 2, 1, "", "containers"], [19, 2, 1, "", "document_files"], [19, 4, 1, "", "entire_contents"], [19, 2, 1, "", "files"], [19, 2, 1, "", "folders"], [19, 2, 1, "", "internet_location_files"], [19, 2, 1, "", "items"], [19, 2, 1, "", "packages"]], "PyXA.apps.Finder.XAFinderContainerList": [[19, 2, 1, "", "alias_files"], [19, 2, 1, "", "application_files"], [19, 2, 1, "", "by_container_window"], [19, 2, 1, "", "by_entire_contents"], [19, 2, 1, "", "clippings"], [19, 2, 1, "", "container_window"], [19, 2, 1, "", "containers"], [19, 2, 1, "", "document_files"], [19, 2, 1, "", "entire_contents"], [19, 2, 1, "", "files"], [19, 2, 1, "", "folders"], [19, 2, 1, "", "internet_location_files"], [19, 2, 1, "", "items"], [19, 2, 1, "", "packages"]], "PyXA.apps.Finder.XAFinderDesktop": [[19, 4, 1, "", "window"]], "PyXA.apps.Finder.XAFinderDisk": [[19, 4, 1, "", "capacity"], [19, 4, 1, "", "ejectable"], [19, 4, 1, "", "format"], [19, 4, 1, "", "free_space"], [19, 4, 1, "", "id"], [19, 4, 1, "", "ignore_privileges"], [19, 4, 1, "", "journaling_enabled"], [19, 4, 1, "", "local_volume"], [19, 4, 1, "", "startup"]], "PyXA.apps.Finder.XAFinderDiskList": [[19, 2, 1, "", "by_capacity"], [19, 2, 1, "", "by_ejectable"], [19, 2, 1, "", "by_format"], [19, 2, 1, "", "by_free_space"], [19, 2, 1, "", "by_id"], [19, 2, 1, "", "by_ignore_privileges"], [19, 2, 1, "", "by_journaling_enabled"], [19, 2, 1, "", "by_local_volume"], [19, 2, 1, "", "by_startup"], [19, 2, 1, "", "capacity"], [19, 2, 1, "", "ejectable"], [19, 2, 1, "", "format"], [19, 2, 1, "", "free_space"], [19, 2, 1, "", "id"], [19, 2, 1, "", "ignore_privileges"], [19, 2, 1, "", "journaling_enabled"], [19, 2, 1, "", "local_volume"], [19, 2, 1, "", "startup"]], "PyXA.apps.Finder.XAFinderFile": [[19, 4, 1, "", "creator_type"], [19, 4, 1, "", "file_type"], [19, 4, 1, "", "product_version"], [19, 4, 1, "", "stationery"], [19, 4, 1, "", "version"]], "PyXA.apps.Finder.XAFinderFileList": [[19, 2, 1, "", "by_creator_type"], [19, 2, 1, "", "by_file_type"], [19, 2, 1, "", "by_product_version"], [19, 2, 1, "", "by_stationery"], [19, 2, 1, "", "by_version"], [19, 2, 1, "", "creator_type"], [19, 2, 1, "", "file_type"], [19, 2, 1, "", "product_version"], [19, 2, 1, "", "stationery"], [19, 2, 1, "", "version"]], "PyXA.apps.Finder.XAFinderFinderWindow": [[19, 4, 1, "", "column_view_options"], [19, 4, 1, "", "current_view"], [19, 4, 1, "", "icon_view_options"], [19, 4, 1, "", "list_view_options"], [19, 4, 1, "", "pathbar_visible"], [19, 4, 1, "", "sidebar_width"], [19, 4, 1, "", "statusbar_visible"], [19, 4, 1, "", "target"], [19, 4, 1, "", "toolbar_visible"]], "PyXA.apps.Finder.XAFinderFinderWindowList": [[19, 2, 1, "", "by_column_view_options"], [19, 2, 1, "", "by_current_view"], [19, 2, 1, "", "by_icon_view_options"], [19, 2, 1, "", "by_list_view_options"], [19, 2, 1, "", "by_pathbar_visible"], [19, 2, 1, "", "by_sidebar_width"], [19, 2, 1, "", "by_statusbar_visible"], [19, 2, 1, "", "by_target"], [19, 2, 1, "", "by_toolbar_visible"], [19, 2, 1, "", "column_view_options"], [19, 2, 1, "", "current_view"], [19, 2, 1, "", "icon_view_options"], [19, 2, 1, "", "list_view_options"], [19, 2, 1, "", "pathbar_visible"], [19, 2, 1, "", "sidebar_width"], [19, 2, 1, "", "statusbar_visible"], [19, 2, 1, "", "target"], [19, 2, 1, "", "toolbar_visible"]], "PyXA.apps.Finder.XAFinderIconViewOptions": [[19, 4, 1, "", "arrangement"], [19, 4, 1, "", "background_color"], [19, 4, 1, "", "background_picture"], [19, 4, 1, "", "icon_size"], [19, 4, 1, "", "label_position"], [19, 4, 1, "", "shows_icon_preview"], [19, 4, 1, "", "shows_item_info"], [19, 4, 1, "", "text_size"]], "PyXA.apps.Finder.XAFinderInformationWindow": [[19, 4, 1, "", "current_panel"], [19, 4, 1, "", "item"]], "PyXA.apps.Finder.XAFinderInformationWindowList": [[19, 2, 1, "", "by_current_panel"], [19, 2, 1, "", "by_item"], [19, 2, 1, "", "current_panel"], [19, 2, 1, "", "item"]], "PyXA.apps.Finder.XAFinderInternetLocationFile": [[19, 4, 1, "", "location"]], "PyXA.apps.Finder.XAFinderInternetLocationFileList": [[19, 2, 1, "", "by_location"], [19, 2, 1, "", "location"]], "PyXA.apps.Finder.XAFinderItem": [[19, 4, 1, "", "bounds"], [19, 4, 1, "", "comment"], [19, 4, 1, "", "container"], [19, 2, 1, "", "copy"], [19, 4, 1, "", "creation_date"], [19, 4, 1, "", "description"], [19, 4, 1, "", "desktop_position"], [19, 4, 1, "", "disk"], [19, 4, 1, "", "displayed_name"], [19, 4, 1, "", "everyone_privileges"], [19, 2, 1, "", "exists"], [19, 4, 1, "", "extension_hidden"], [19, 2, 1, "", "get_clipboard_representation"], [19, 4, 1, "", "group"], [19, 4, 1, "", "group_privileges"], [19, 4, 1, "", "icon"], [19, 4, 1, "", "index"], [19, 4, 1, "", "information_window"], [19, 4, 1, "", "kind"], [19, 4, 1, "", "label_index"], [19, 4, 1, "", "locked"], [19, 4, 1, "", "modification_date"], [19, 2, 1, "", "move_to"], [19, 4, 1, "", "name"], [19, 4, 1, "", "name_extension"], [19, 2, 1, "", "open"], [19, 4, 1, "", "owner"], [19, 4, 1, "", "owner_privileges"], [19, 4, 1, "", "physical_size"], [19, 4, 1, "", "position"], [19, 4, 1, "", "properties"], [19, 2, 1, "", "reveal"], [19, 4, 1, "", "size"], [19, 4, 1, "", "url"]], "PyXA.apps.Finder.XAFinderItemList": [[19, 2, 1, "", "bounds"], [19, 2, 1, "", "by_bounds"], [19, 2, 1, "", "by_comment"], [19, 2, 1, "", "by_container"], [19, 2, 1, "", "by_creation_date"], [19, 2, 1, "", "by_description"], [19, 2, 1, "", "by_desktop_position"], [19, 2, 1, "", "by_disk"], [19, 2, 1, "", "by_displayed_name"], [19, 2, 1, "", "by_everyone_privileges"], [19, 2, 1, "", "by_extension_hidden"], [19, 2, 1, "", "by_group"], [19, 2, 1, "", "by_group_privileges"], [19, 2, 1, "", "by_icon"], [19, 2, 1, "", "by_index"], [19, 2, 1, "", "by_information_window"], [19, 2, 1, "", "by_kind"], [19, 2, 1, "", "by_label_index"], [19, 2, 1, "", "by_locked"], [19, 2, 1, "", "by_modification_date"], [19, 2, 1, "", "by_name"], [19, 2, 1, "", "by_name_extension"], [19, 2, 1, "", "by_owner"], [19, 2, 1, "", "by_owner_privileges"], [19, 2, 1, "", "by_physical_size"], [19, 2, 1, "", "by_position"], [19, 2, 1, "", "by_size"], [19, 2, 1, "", "by_url"], [19, 2, 1, "", "comment"], [19, 2, 1, "", "container"], [19, 2, 1, "", "creation_date"], [19, 2, 1, "", "description"], [19, 2, 1, "", "desktop_position"], [19, 2, 1, "", "disk"], [19, 2, 1, "", "displayed_name"], [19, 2, 1, "", "everyone_privileges"], [19, 2, 1, "", "extension_hidden"], [19, 2, 1, "", "get_clipboard_representation"], [19, 2, 1, "", "group"], [19, 2, 1, "", "group_privileges"], [19, 2, 1, "", "icon"], [19, 2, 1, "", "index"], [19, 2, 1, "", "information_window"], [19, 2, 1, "", "kind"], [19, 2, 1, "", "label_index"], [19, 2, 1, "", "locked"], [19, 2, 1, "", "modification_date"], [19, 2, 1, "", "name"], [19, 2, 1, "", "name_extension"], [19, 2, 1, "", "owner"], [19, 2, 1, "", "owner_privileges"], [19, 2, 1, "", "physical_size"], [19, 2, 1, "", "position"], [19, 2, 1, "", "size"], [19, 2, 1, "", "url"]], "PyXA.apps.Finder.XAFinderListViewOptions": [[19, 4, 1, "", "calculates_folder_sizes"], [19, 2, 1, "", "columns"], [19, 4, 1, "", "icon_size"], [19, 4, 1, "", "shows_icon_preview"], [19, 4, 1, "", "sort_column"], [19, 4, 1, "", "text_size"], [19, 4, 1, "", "uses_relative_dates"]], "PyXA.apps.Finder.XAFinderPreferences": [[19, 4, 1, "", "all_name_extensions_showing"], [19, 4, 1, "", "column_view_options"], [19, 4, 1, "", "delay_before_springing"], [19, 4, 1, "", "desktop_shows_connected_servers"], [19, 4, 1, "", "desktop_shows_external_hard_disks"], [19, 4, 1, "", "desktop_shows_hard_disks"], [19, 4, 1, "", "desktop_shows_removable_media"], [19, 4, 1, "", "folders_open_in_new_tabs"], [19, 4, 1, "", "folders_open_in_new_windows"], [19, 4, 1, "", "folders_spring_open"], [19, 4, 1, "", "icon_view_options"], [19, 4, 1, "", "list_view_options"], [19, 4, 1, "", "new_window_target"], [19, 4, 1, "", "new_windows_open_in_column_view"], [19, 4, 1, "", "window"]], "PyXA.apps.Finder.XAFinderPreferencesWindow": [[19, 4, 1, "", "current_panel"]], "PyXA.apps.Finder.XAFinderTrash": [[19, 4, 1, "", "warns_before_emptying"]], "PyXA.apps.Finder.XAFinderWindow": [[19, 4, 1, "", "collapsed"], [19, 4, 1, "", "floating"], [19, 4, 1, "", "modal"], [19, 4, 1, "", "position"], [19, 4, 1, "", "properties"], [19, 4, 1, "", "titled"]], "PyXA.apps.Finder.XAFinderWindowList": [[19, 2, 1, "", "by_collapsed"], [19, 2, 1, "", "by_floating"], [19, 2, 1, "", "by_modal"], [19, 2, 1, "", "by_position"], [19, 2, 1, "", "by_properties"], [19, 2, 1, "", "by_titled"], [19, 2, 1, "", "collapsed"], [19, 2, 1, "", "floating"], [19, 2, 1, "", "modal"], [19, 2, 1, "", "position"], [19, 2, 1, "", "properties"], [19, 2, 1, "", "titled"]], "PyXA.apps.Flow": [[20, 1, 1, "", "XAFlowApplication"]], "PyXA.apps.Flow.XAFlowApplication": [[20, 2, 1, "", "get_phase"], [20, 2, 1, "", "get_time"], [20, 2, 1, "", "hide"], [20, 2, 1, "", "previous"], [20, 2, 1, "", "reset"], [20, 2, 1, "", "show"], [20, 2, 1, "", "skip"], [20, 2, 1, "", "start"], [20, 2, 1, "", "stop"]], "PyXA.apps.FontBook": [[21, 1, 1, "", "XAFontBookApplication"], [21, 1, 1, "", "XAFontBookDocument"], [21, 1, 1, "", "XAFontBookDocumentList"], [21, 1, 1, "", "XAFontBookFontBookAllFontsLibraryObject"], [21, 1, 1, "", "XAFontBookFontCollection"], [21, 1, 1, "", "XAFontBookFontCollectionList"], [21, 1, 1, "", "XAFontBookFontContainer"], [21, 1, 1, "", "XAFontBookFontContainerList"], [21, 1, 1, "", "XAFontBookFontDomain"], [21, 1, 1, "", "XAFontBookFontDomainList"], [21, 1, 1, "", "XAFontBookFontFamily"], [21, 1, 1, "", "XAFontBookFontFamilyList"], [21, 1, 1, "", "XAFontBookFontLibrary"], [21, 1, 1, "", "XAFontBookFontLibraryList"], [21, 1, 1, "", "XAFontBookTypeface"], [21, 1, 1, "", "XAFontBookTypefaceList"], [21, 1, 1, "", "XAFontBookWindow"]], "PyXA.apps.FontBook.XAFontBookApplication": [[21, 2, 1, "", "documents"], [21, 2, 1, "", "font_collections"], [21, 2, 1, "", "font_containers"], [21, 2, 1, "", "font_domains"], [21, 2, 1, "", "font_families"], [21, 2, 1, "", "font_libraries"], [21, 4, 1, "", "fonts_library"], [21, 4, 1, "", "installation_target"], [21, 4, 1, "", "name"], [21, 4, 1, "", "selected_collections"], [21, 4, 1, "", "selected_font_families"], [21, 4, 1, "", "selection"], [21, 2, 1, "", "typefaces"], [21, 4, 1, "", "validate_fonts_before_installing"], [21, 4, 1, "", "version"]], "PyXA.apps.FontBook.XAFontBookDocument": [[21, 4, 1, "", "modified"], [21, 4, 1, "", "name"], [21, 4, 1, "", "path"]], "PyXA.apps.FontBook.XAFontBookDocumentList": [[21, 2, 1, "", "by_modified"], [21, 2, 1, "", "by_name"], [21, 2, 1, "", "by_path"], [21, 2, 1, "", "modified"], [21, 2, 1, "", "name"], [21, 2, 1, "", "path"]], "PyXA.apps.FontBook.XAFontBookFontCollection": [[21, 4, 1, "", "display_name"], [21, 4, 1, "", "displayed_name"], [21, 4, 1, "", "enabled"], [21, 2, 1, "", "font_families"], [21, 2, 1, "", "get_clipboard_representation"], [21, 4, 1, "", "name"], [21, 4, 1, "", "properties"], [21, 2, 1, "", "typefaces"]], "PyXA.apps.FontBook.XAFontBookFontCollectionList": [[21, 2, 1, "", "by_display_name"], [21, 2, 1, "", "by_displayed_name"], [21, 2, 1, "", "by_enabled"], [21, 2, 1, "", "by_name"], [21, 2, 1, "", "by_properties"], [21, 2, 1, "", "display_name"], [21, 2, 1, "", "displayed_name"], [21, 2, 1, "", "enabled"], [21, 2, 1, "", "get_clipboard_representation"], [21, 2, 1, "", "name"], [21, 2, 1, "", "properties"]], "PyXA.apps.FontBook.XAFontBookFontContainer": [[21, 4, 1, "", "domain"], [21, 4, 1, "", "files"], [21, 2, 1, "", "font_domains"], [21, 2, 1, "", "font_families"], [21, 2, 1, "", "get_clipboard_representation"], [21, 4, 1, "", "id"], [21, 4, 1, "", "name"], [21, 4, 1, "", "path"], [21, 4, 1, "", "properties"], [21, 2, 1, "", "typefaces"]], "PyXA.apps.FontBook.XAFontBookFontContainerList": [[21, 2, 1, "", "by_domain"], [21, 2, 1, "", "by_files"], [21, 2, 1, "", "by_id"], [21, 2, 1, "", "by_name"], [21, 2, 1, "", "by_path"], [21, 2, 1, "", "by_properties"], [21, 2, 1, "", "domain"], [21, 2, 1, "", "files"], [21, 2, 1, "", "get_clipboard_representation"], [21, 2, 1, "", "id"], [21, 2, 1, "", "name"], [21, 2, 1, "", "path"], [21, 2, 1, "", "properties"]], "PyXA.apps.FontBook.XAFontBookFontFamily": [[21, 2, 1, "", "delete"], [21, 4, 1, "", "display_name"], [21, 4, 1, "", "displayed_name"], [21, 4, 1, "", "duplicated"], [21, 4, 1, "", "enabled"], [21, 4, 1, "", "files"], [21, 2, 1, "", "get_clipboard_representation"], [21, 4, 1, "", "name"], [21, 4, 1, "", "properties"], [21, 2, 1, "", "typefaces"]], "PyXA.apps.FontBook.XAFontBookFontFamilyList": [[21, 2, 1, "", "by_display_name"], [21, 2, 1, "", "by_displayed_name"], [21, 2, 1, "", "by_duplicates"], [21, 2, 1, "", "by_enabled"], [21, 2, 1, "", "by_files"], [21, 2, 1, "", "by_name"], [21, 2, 1, "", "by_properties"], [21, 2, 1, "", "display_name"], [21, 2, 1, "", "displayed_name"], [21, 2, 1, "", "duplicated"], [21, 2, 1, "", "enabled"], [21, 2, 1, "", "files"], [21, 2, 1, "", "get_clipboard_representation"], [21, 2, 1, "", "name"], [21, 2, 1, "", "properties"]], "PyXA.apps.FontBook.XAFontBookFontLibrary": [[21, 2, 1, "", "font_containers"], [21, 4, 1, "", "id"]], "PyXA.apps.FontBook.XAFontBookTypeface": [[21, 4, 1, "", "copyright"], [21, 4, 1, "", "display_name"], [21, 4, 1, "", "displayed_name"], [21, 4, 1, "", "duplicated"], [21, 4, 1, "", "enabled"], [21, 4, 1, "", "family_name"], [21, 4, 1, "", "files"], [21, 4, 1, "", "font_container"], [21, 4, 1, "", "font_family"], [21, 4, 1, "", "font_type"], [21, 2, 1, "", "get_clipboard_representation"], [21, 4, 1, "", "id"], [21, 4, 1, "", "name"], [21, 4, 1, "", "post_script_name"], [21, 4, 1, "", "properties"], [21, 4, 1, "", "style_name"]], "PyXA.apps.FontBook.XAFontBookTypefaceList": [[21, 2, 1, "", "by_copyright"], [21, 2, 1, "", "by_display_name"], [21, 2, 1, "", "by_displayed_name"], [21, 2, 1, "", "by_duplicated"], [21, 2, 1, "", "by_enabled"], [21, 2, 1, "", "by_family_name"], [21, 2, 1, "", "by_files"], [21, 2, 1, "", "by_font_container"], [21, 2, 1, "", "by_font_family"], [21, 2, 1, "", "by_font_type"], [21, 2, 1, "", "by_id"], [21, 2, 1, "", "by_name"], [21, 2, 1, "", "by_post_script_name"], [21, 2, 1, "", "by_properties"], [21, 2, 1, "", "by_style_name"], [21, 2, 1, "", "copyright"], [21, 2, 1, "", "display_name"], [21, 2, 1, "", "displayed_name"], [21, 2, 1, "", "duplicated"], [21, 2, 1, "", "enabled"], [21, 2, 1, "", "family_name"], [21, 2, 1, "", "files"], [21, 2, 1, "", "font_container"], [21, 2, 1, "", "font_family"], [21, 2, 1, "", "font_type"], [21, 2, 1, "", "get_clipboard_representation"], [21, 2, 1, "", "id"], [21, 2, 1, "", "name"], [21, 2, 1, "", "post_script_name"], [21, 2, 1, "", "properties"], [21, 2, 1, "", "style_name"]], "PyXA.apps.FontBook.XAFontBookWindow": [[21, 4, 1, "", "floating"], [21, 4, 1, "", "modal"], [21, 4, 1, "", "titled"]], "PyXA.apps.Hammerspoon": [[22, 1, 1, "", "XAHammerspoonApplication"]], "PyXA.apps.Hammerspoon.XAHammerspoonApplication": [[22, 2, 1, "", "execute_lua_code"], [22, 4, 1, "", "frontmost"], [22, 4, 1, "", "name"], [22, 4, 1, "", "version"]], "PyXA.apps.ImageEvents": [[23, 1, 1, "", "XAImageEventsApplication"], [23, 1, 1, "", "XAImageEventsDisplay"], [23, 1, 1, "", "XAImageEventsDisplayList"], [23, 1, 1, "", "XAImageEventsImage"], [23, 1, 1, "", "XAImageEventsImageList"], [23, 1, 1, "", "XAImageEventsMetadataTag"], [23, 1, 1, "", "XAImageEventsMetadataTagList"], [23, 1, 1, "", "XAImageEventsProfile"], [23, 1, 1, "", "XAImageEventsProfileList"]], "PyXA.apps.ImageEvents.XAImageEventsApplication": [[23, 1, 1, "", "BitDepth"], [23, 1, 1, "", "ColorSpace"], [23, 1, 1, "", "CompressionLevel"], [23, 1, 1, "", "ConnectionSpace"], [23, 1, 1, "", "DeviceClass"], [23, 1, 1, "", "FileType"], [23, 1, 1, "", "ImageQuality"], [23, 1, 1, "", "ProfileQuality"], [23, 1, 1, "", "RenderingIntent"], [23, 2, 1, "", "aliases"], [23, 4, 1, "", "application_support_folder"], [23, 4, 1, "", "applications_folder"], [23, 4, 1, "", "classic_domain"], [23, 4, 1, "", "default_cmyk_profile"], [23, 4, 1, "", "default_cmyk_profile_location"], [23, 4, 1, "", "default_gray_profile"], [23, 4, 1, "", "default_gray_profile_location"], [23, 4, 1, "", "default_lab_profile"], [23, 4, 1, "", "default_lab_profile_location"], [23, 4, 1, "", "default_rgb_profile"], [23, 4, 1, "", "default_rgb_profile_location"], [23, 4, 1, "", "default_xyz_profile"], [23, 4, 1, "", "default_xyz_profile_location"], [23, 4, 1, "", "desktop_folder"], [23, 4, 1, "", "desktop_pictures_folder"], [23, 2, 1, "", "disk_items"], [23, 2, 1, "", "disks"], [23, 2, 1, "", "displays"], [23, 4, 1, "", "documents_folder"], [23, 2, 1, "", "domains"], [23, 4, 1, "", "downloads_folder"], [23, 4, 1, "", "favorites_folder"], [23, 2, 1, "", "file_packages"], [23, 2, 1, "", "files"], [23, 4, 1, "", "folder_action_scripts_folder"], [23, 2, 1, "", "folders"], [23, 4, 1, "", "fonts_folder"], [23, 4, 1, "", "frontmost"], [23, 4, 1, "", "home_folder"], [23, 2, 1, "", "images"], [23, 2, 1, "", "items"], [23, 4, 1, "", "library_folder"], [23, 4, 1, "", "local_domain"], [23, 4, 1, "", "movies_folder"], [23, 4, 1, "", "music_folder"], [23, 4, 1, "", "name"], [23, 4, 1, "", "network_domain"], [23, 2, 1, "", "open"], [23, 4, 1, "", "pictures_folder"], [23, 4, 1, "", "preferences_folder"], [23, 4, 1, "", "preferred_cmm"], [23, 4, 1, "", "profile_folder"], [23, 2, 1, "", "profiles"], [23, 4, 1, "", "public_folder"], [23, 4, 1, "", "quit_delay"], [23, 4, 1, "", "scripting_additions_folder"], [23, 4, 1, "", "scripts_folder"], [23, 4, 1, "", "shared_documents_folder"], [23, 4, 1, "", "sites_folder"], [23, 4, 1, "", "speakable_items_folder"], [23, 4, 1, "", "startup_disk"], [23, 4, 1, "", "system_domain"], [23, 4, 1, "", "system_profile"], [23, 4, 1, "", "system_profile_location"], [23, 4, 1, "", "temporary_items_folder"], [23, 4, 1, "", "trash"], [23, 4, 1, "", "user_domain"], [23, 4, 1, "", "utilities_folder"], [23, 4, 1, "", "version"], [23, 4, 1, "", "workflows_folder"]], "PyXA.apps.ImageEvents.XAImageEventsApplication.BitDepth": [[23, 3, 1, "", "BEST"], [23, 3, 1, "", "BLACK_AND_WHITE"], [23, 3, 1, "", "COLOR"], [23, 3, 1, "", "FOUR_COLORS"], [23, 3, 1, "", "FOUR_GRAYS"], [23, 3, 1, "", "GRAYSCALE"], [23, 3, 1, "", "MILLIONS_OF_COLORS"], [23, 3, 1, "", "MILLIONS_OF_COLORS_PLUS"], [23, 3, 1, "", "SIXTEEN_COLORS"], [23, 3, 1, "", "SIXTEEN_GRAYS"], [23, 3, 1, "", "THOUSANDS_OF_COLORS"], [23, 3, 1, "", "TWO_HUNDRED_FIFTY_SIX_COLORS"], [23, 3, 1, "", "TWO_HUNDRED_FIFTY_SIX_GRAYS"]], "PyXA.apps.ImageEvents.XAImageEventsApplication.ColorSpace": [[23, 3, 1, "", "CMYK"], [23, 3, 1, "", "EIGHT_CHANNEL"], [23, 3, 1, "", "EIGHT_COLOR"], [23, 3, 1, "", "FIVE_CHANNEL"], [23, 3, 1, "", "FIVE_COLOR"], [23, 3, 1, "", "GRAY"], [23, 3, 1, "", "LAB"], [23, 3, 1, "", "NAMED"], [23, 3, 1, "", "RGB"], [23, 3, 1, "", "SEVEN_CHANNEL"], [23, 3, 1, "", "SEVEN_COLOR"], [23, 3, 1, "", "SIX_CHANNEL"], [23, 3, 1, "", "SIX_COLOR"], [23, 3, 1, "", "XYZ"]], "PyXA.apps.ImageEvents.XAImageEventsApplication.CompressionLevel": [[23, 3, 1, "", "HIGH"], [23, 3, 1, "", "LOW"], [23, 3, 1, "", "MEDIUM"]], "PyXA.apps.ImageEvents.XAImageEventsApplication.ConnectionSpace": [[23, 3, 1, "", "LAB"], [23, 3, 1, "", "XYZ"]], "PyXA.apps.ImageEvents.XAImageEventsApplication.DeviceClass": [[23, 3, 1, "", "ABSTRACT"], [23, 3, 1, "", "COLORSPACE"], [23, 3, 1, "", "INPUT"], [23, 3, 1, "", "LINK"], [23, 3, 1, "", "MONITOR"], [23, 3, 1, "", "NAMED"], [23, 3, 1, "", "OUTPUT"]], "PyXA.apps.ImageEvents.XAImageEventsApplication.FileType": [[23, 3, 1, "", "BMP"], [23, 3, 1, "", "GIF"], [23, 3, 1, "", "JPEG"], [23, 3, 1, "", "JPEG2"], [23, 3, 1, "", "MACPAINT"], [23, 3, 1, "", "PDF"], [23, 3, 1, "", "PHOTOSHOP"], [23, 3, 1, "", "PICT"], [23, 3, 1, "", "PNG"], [23, 3, 1, "", "PSD"], [23, 3, 1, "", "QUICKTIME"], [23, 3, 1, "", "SGI"], [23, 3, 1, "", "TEXT"], [23, 3, 1, "", "TGA"], [23, 3, 1, "", "TIFF"]], "PyXA.apps.ImageEvents.XAImageEventsApplication.ImageQuality": [[23, 3, 1, "", "BEST"], [23, 3, 1, "", "HIGH"], [23, 3, 1, "", "LEAST"], [23, 3, 1, "", "LOW"], [23, 3, 1, "", "MEDIUM"]], "PyXA.apps.ImageEvents.XAImageEventsApplication.ProfileQuality": [[23, 3, 1, "", "BEST"], [23, 3, 1, "", "DRAFT"], [23, 3, 1, "", "NORMAL"]], "PyXA.apps.ImageEvents.XAImageEventsApplication.RenderingIntent": [[23, 3, 1, "", "ABSOLUTE_COLORIMETRIC"], [23, 3, 1, "", "PERCEPTUAL"], [23, 3, 1, "", "RELATIVE_COLORIMETRIC"], [23, 3, 1, "", "SATURATION"]], "PyXA.apps.ImageEvents.XAImageEventsDisplay": [[23, 4, 1, "", "display_number"], [23, 4, 1, "", "display_profile"], [23, 4, 1, "", "name"]], "PyXA.apps.ImageEvents.XAImageEventsDisplayList": [[23, 2, 1, "", "by_display_number"], [23, 2, 1, "", "by_display_profile"], [23, 2, 1, "", "by_name"], [23, 2, 1, "", "display_number"], [23, 2, 1, "", "display_profile"], [23, 2, 1, "", "name"]], "PyXA.apps.ImageEvents.XAImageEventsImage": [[23, 4, 1, "", "bit_depth"], [23, 4, 1, "", "color_space"], [23, 4, 1, "", "dimensions"], [23, 2, 1, "", "embed_profile"], [23, 4, 1, "", "embedded_profile"], [23, 3, 1, "", "file"], [23, 4, 1, "", "file_type"], [23, 4, 1, "", "image_file"], [23, 4, 1, "", "location"], [23, 2, 1, "", "metadata_tags"], [23, 3, 1, "", "modified"], [23, 4, 1, "", "modified_image_object"], [23, 4, 1, "", "name"], [23, 4, 1, "", "original_image_object"], [23, 2, 1, "", "profiles"], [23, 4, 1, "", "properties"], [23, 4, 1, "", "resolution"], [23, 2, 1, "", "unembed"]], "PyXA.apps.ImageEvents.XAImageEventsImageList": [[23, 2, 1, "", "bit_depth"], [23, 2, 1, "", "by_bit_depth"], [23, 2, 1, "", "by_color_space"], [23, 2, 1, "", "by_dimensions"], [23, 2, 1, "", "by_embedded_profile"], [23, 2, 1, "", "by_file_type"], [23, 2, 1, "", "by_image_file"], [23, 2, 1, "", "by_location"], [23, 2, 1, "", "by_name"], [23, 2, 1, "", "by_resolution"], [23, 2, 1, "", "color_space"], [23, 2, 1, "", "dimensions"], [23, 2, 1, "", "embed_profile"], [23, 2, 1, "", "embedded_profile"], [23, 2, 1, "", "file_type"], [23, 2, 1, "", "image_file"], [23, 2, 1, "", "location"], [23, 2, 1, "", "modified_image_objects"], [23, 2, 1, "", "name"], [23, 2, 1, "", "original_image_objects"], [23, 2, 1, "", "properties"], [23, 2, 1, "", "resolution"], [23, 2, 1, "", "unembed"]], "PyXA.apps.ImageEvents.XAImageEventsMetadataTag": [[23, 4, 1, "", "description"], [23, 4, 1, "", "name"], [23, 4, 1, "", "value"]], "PyXA.apps.ImageEvents.XAImageEventsMetadataTagList": [[23, 2, 1, "", "by_description"], [23, 2, 1, "", "by_name"], [23, 2, 1, "", "by_value"], [23, 2, 1, "", "description"], [23, 2, 1, "", "name"], [23, 2, 1, "", "value"]], "PyXA.apps.ImageEvents.XAImageEventsProfile": [[23, 4, 1, "", "color_space"], [23, 4, 1, "", "connection_space"], [23, 4, 1, "", "creation_date"], [23, 4, 1, "", "creator"], [23, 4, 1, "", "device_class"], [23, 4, 1, "", "device_manufacturer"], [23, 4, 1, "", "device_model"], [23, 4, 1, "", "location"], [23, 4, 1, "", "name"], [23, 4, 1, "", "platform"], [23, 4, 1, "", "preferred_cmm"], [23, 4, 1, "", "quality"], [23, 4, 1, "", "rendering_intent"], [23, 4, 1, "", "size"], [23, 4, 1, "", "version"]], "PyXA.apps.ImageEvents.XAImageEventsProfileList": [[23, 2, 1, "", "by_color_space"], [23, 2, 1, "", "by_connection_space"], [23, 2, 1, "", "by_creation_date"], [23, 2, 1, "", "by_creator"], [23, 2, 1, "", "by_device_class"], [23, 2, 1, "", "by_device_manufacturer"], [23, 2, 1, "", "by_device_model"], [23, 2, 1, "", "by_location"], [23, 2, 1, "", "by_name"], [23, 2, 1, "", "by_platform"], [23, 2, 1, "", "by_preferred_cmm"], [23, 2, 1, "", "by_quality"], [23, 2, 1, "", "by_rendering_intent"], [23, 2, 1, "", "by_size"], [23, 2, 1, "", "by_version"], [23, 2, 1, "", "color_space"], [23, 2, 1, "", "connection_space"], [23, 2, 1, "", "creation_date"], [23, 2, 1, "", "creator"], [23, 2, 1, "", "device_class"], [23, 2, 1, "", "device_manufacturer"], [23, 2, 1, "", "device_model"], [23, 2, 1, "", "location"], [23, 2, 1, "", "name"], [23, 2, 1, "", "platform"], [23, 2, 1, "", "preferred_cmm"], [23, 2, 1, "", "quality"], [23, 2, 1, "", "rendering_intent"], [23, 2, 1, "", "size"], [23, 2, 1, "", "version"]], "PyXA.apps.Keynote": [[26, 1, 1, "", "XAKeynoteApplication"], [26, 1, 1, "", "XAKeynoteContainer"], [26, 1, 1, "", "XAKeynoteContainerList"], [26, 1, 1, "", "XAKeynoteDocument"], [26, 1, 1, "", "XAKeynoteDocumentList"], [26, 1, 1, "", "XAKeynoteSlide"], [26, 1, 1, "", "XAKeynoteSlideLayout"], [26, 1, 1, "", "XAKeynoteSlideLayoutList"], [26, 1, 1, "", "XAKeynoteSlideList"], [26, 1, 1, "", "XAKeynoteTheme"], [26, 1, 1, "", "XAKeynoteThemeList"], [26, 1, 1, "", "XAKeynoteTransitionSettings"], [26, 1, 1, "", "XAKeynoteWindow"]], "PyXA.apps.Keynote.XAKeynoteApplication": [[26, 1, 1, "", "Codec"], [26, 1, 1, "", "ExportFormat"], [26, 1, 1, "", "Framerate"], [26, 1, 1, "", "PrintSetting"], [26, 1, 1, "", "Transition"], [26, 2, 1, "", "documents"], [26, 2, 1, "", "make"], [26, 2, 1, "", "new_document"], [26, 4, 1, "", "playing"], [26, 4, 1, "", "properties"], [26, 2, 1, "", "show_next"], [26, 2, 1, "", "show_previous"], [26, 4, 1, "", "slide_switcher_visible"], [26, 2, 1, "", "themes"]], "PyXA.apps.Keynote.XAKeynoteApplication.Codec": [[26, 3, 1, "", "APPLE_PRO_RES_422"], [26, 3, 1, "", "APPLE_PRO_RES_422HQ"], [26, 3, 1, "", "APPLE_PRO_RES_422LT"], [26, 3, 1, "", "APPLE_PRO_RES_422Proxy"], [26, 3, 1, "", "APPLE_PRO_RES_4444"], [26, 3, 1, "", "H264"], [26, 3, 1, "", "HEVC"]], "PyXA.apps.Keynote.XAKeynoteApplication.ExportFormat": [[26, 3, 1, "", "HTML"], [26, 3, 1, "", "JPEG"], [26, 3, 1, "", "KEYNOTE"], [26, 3, 1, "", "KEYNOTE_09"], [26, 3, 1, "", "MICROSOFT_POWERPOINT"], [26, 3, 1, "", "NativeSize"], [26, 3, 1, "", "PDF"], [26, 3, 1, "", "PNG"], [26, 3, 1, "", "QUICKTIME_MOVIE"], [26, 3, 1, "", "SLIDE_IMAGES"], [26, 3, 1, "", "TIFF"], [26, 3, 1, "", "f1080p"], [26, 3, 1, "", "f2160p"], [26, 3, 1, "", "f360p"], [26, 3, 1, "", "f540p"], [26, 3, 1, "", "f720p"]], "PyXA.apps.Keynote.XAKeynoteApplication.Framerate": [[26, 3, 1, "", "FPS_12"], [26, 3, 1, "", "FPS_2398"], [26, 3, 1, "", "FPS_24"], [26, 3, 1, "", "FPS_25"], [26, 3, 1, "", "FPS_2997"], [26, 3, 1, "", "FPS_30"], [26, 3, 1, "", "FPS_50"], [26, 3, 1, "", "FPS_5994"], [26, 3, 1, "", "FPS_60"]], "PyXA.apps.Keynote.XAKeynoteApplication.PrintSetting": [[26, 3, 1, "", "DETAILED_ERROR_HANDLING"], [26, 3, 1, "", "HANDOUTS"], [26, 3, 1, "", "INDIVIDUAL_SLIDES"], [26, 3, 1, "", "SLIDE_WITH_NOTES"], [26, 3, 1, "", "STANDARD_ERROR_HANDLING"]], "PyXA.apps.Keynote.XAKeynoteApplication.Transition": [[26, 3, 1, "", "BLINDS"], [26, 3, 1, "", "CLOTHESLINE"], [26, 3, 1, "", "COLOR_PANES"], [26, 3, 1, "", "CONFETTI"], [26, 3, 1, "", "CUBE"], [26, 3, 1, "", "DISSOLVE"], [26, 3, 1, "", "DOORWAY"], [26, 3, 1, "", "DROP"], [26, 3, 1, "", "DROPLET"], [26, 3, 1, "", "FADE_AND_MOVE"], [26, 3, 1, "", "FADE_THROUGH_COLOR"], [26, 3, 1, "", "FALL"], [26, 3, 1, "", "FLIP"], [26, 3, 1, "", "FLOP"], [26, 3, 1, "", "GRID"], [26, 3, 1, "", "IRIS"], [26, 3, 1, "", "MAGIC_MOVE"], [26, 3, 1, "", "MOSAIC"], [26, 3, 1, "", "MOVE_IN"], [26, 3, 1, "", "NONE"], [26, 3, 1, "", "OBJECT_CUBE"], [26, 3, 1, "", "OBJECT_FLIP"], [26, 3, 1, "", "OBJECT_POP"], [26, 3, 1, "", "OBJECT_PUSH"], [26, 3, 1, "", "OBJECT_REVOLVE"], [26, 3, 1, "", "OBJECT_ZOOM"], [26, 3, 1, "", "PAGE_FLIP"], [26, 3, 1, "", "PERSPECTIVE"], [26, 3, 1, "", "PIVOT"], [26, 3, 1, "", "PUSH"], [26, 3, 1, "", "REFLECTION"], [26, 3, 1, "", "REVEAL"], [26, 3, 1, "", "REVOLVING_DOOR"], [26, 3, 1, "", "SCALE"], [26, 3, 1, "", "SHIMMER"], [26, 3, 1, "", "SPARKLE"], [26, 3, 1, "", "SWAP"], [26, 3, 1, "", "SWING"], [26, 3, 1, "", "SWITCH"], [26, 3, 1, "", "SWOOSH"], [26, 3, 1, "", "TWIRL"], [26, 3, 1, "", "TWIST"], [26, 3, 1, "", "WIPE"]], "PyXA.apps.Keynote.XAKeynoteDocument": [[26, 2, 1, "", "accept_slide_switcher"], [26, 4, 1, "", "auto_loop"], [26, 4, 1, "", "auto_play"], [26, 4, 1, "", "auto_restart"], [26, 2, 1, "", "cancel_slide_switcher"], [26, 4, 1, "", "current_slide"], [26, 4, 1, "", "document_theme"], [26, 2, 1, "", "export"], [26, 4, 1, "", "file"], [26, 4, 1, "", "height"], [26, 2, 1, "", "hide_slide_switcher"], [26, 4, 1, "", "id"], [26, 2, 1, "", "make_image_slides"], [26, 4, 1, "", "maximum_idle_duration"], [26, 4, 1, "", "modified"], [26, 2, 1, "", "move_slide_switcher_backward"], [26, 2, 1, "", "move_slide_switcher_forward"], [26, 4, 1, "", "name"], [26, 2, 1, "", "new_slide"], [26, 4, 1, "", "password_protected"], [26, 4, 1, "", "properties"], [26, 2, 1, "", "save"], [26, 4, 1, "", "selection"], [26, 2, 1, "", "show_slide_switcher"], [26, 2, 1, "", "slide_layouts"], [26, 4, 1, "", "slide_numbers_showing"], [26, 2, 1, "", "slides"], [26, 2, 1, "", "start_from"], [26, 2, 1, "", "stop"], [26, 4, 1, "", "width"]], "PyXA.apps.Keynote.XAKeynoteDocumentList": [[26, 2, 1, "", "auto_loop"], [26, 2, 1, "", "auto_play"], [26, 2, 1, "", "auto_restart"], [26, 2, 1, "", "by_auto_loop"], [26, 2, 1, "", "by_auto_play"], [26, 2, 1, "", "by_auto_restart"], [26, 2, 1, "", "by_current_slide"], [26, 2, 1, "", "by_document_theme"], [26, 2, 1, "", "by_height"], [26, 2, 1, "", "by_maximum_idle_duration"], [26, 2, 1, "", "by_password_protected"], [26, 2, 1, "", "by_properties"], [26, 2, 1, "", "by_selection"], [26, 2, 1, "", "by_slide_numbers_showing"], [26, 2, 1, "", "by_width"], [26, 2, 1, "", "current_slide"], [26, 2, 1, "", "document_theme"], [26, 2, 1, "", "height"], [26, 2, 1, "", "maximum_idle_duration"], [26, 2, 1, "", "properties"], [26, 2, 1, "", "slide_numbers_showing"], [26, 2, 1, "", "width"]], "PyXA.apps.Keynote.XAKeynoteSlide": [[26, 2, 1, "", "add_chart"], [26, 2, 1, "", "add_image"], [26, 4, 1, "", "base_layout"], [26, 4, 1, "", "body_showing"], [26, 4, 1, "", "default_body_item"], [26, 4, 1, "", "default_title_item"], [26, 2, 1, "", "delete"], [26, 2, 1, "", "duplicate"], [26, 4, 1, "", "presenter_notes"], [26, 4, 1, "", "properties"], [26, 4, 1, "", "skipped"], [26, 4, 1, "", "slide_number"], [26, 4, 1, "", "title_showing"], [26, 4, 1, "", "transition_properties"]], "PyXA.apps.Keynote.XAKeynoteSlideLayout": [[26, 4, 1, "", "name"]], "PyXA.apps.Keynote.XAKeynoteSlideLayoutList": [[26, 2, 1, "", "by_name"], [26, 2, 1, "", "name"]], "PyXA.apps.Keynote.XAKeynoteSlideList": [[26, 2, 1, "", "base_layout"], [26, 2, 1, "", "body_showing"], [26, 2, 1, "", "by_base_layout"], [26, 2, 1, "", "by_body_showing"], [26, 2, 1, "", "by_default_body_item"], [26, 2, 1, "", "by_default_text_item"], [26, 2, 1, "", "by_presenter_notes"], [26, 2, 1, "", "by_properties"], [26, 2, 1, "", "by_skipped"], [26, 2, 1, "", "by_slide_number"], [26, 2, 1, "", "by_title_showing"], [26, 2, 1, "", "by_transition_properties"], [26, 2, 1, "", "default_body_item"], [26, 2, 1, "", "default_title_item"], [26, 2, 1, "", "presenter_notes"], [26, 2, 1, "", "properties"], [26, 2, 1, "", "skipped"], [26, 2, 1, "", "slide_number"], [26, 2, 1, "", "title_showing"], [26, 2, 1, "", "transition_properties"]], "PyXA.apps.Keynote.XAKeynoteTheme": [[26, 4, 1, "", "id"], [26, 4, 1, "", "name"], [26, 4, 1, "", "properties"]], "PyXA.apps.Keynote.XAKeynoteThemeList": [[26, 2, 1, "", "by_id"], [26, 2, 1, "", "by_name"], [26, 2, 1, "", "by_properties"], [26, 2, 1, "", "id"], [26, 2, 1, "", "name"], [26, 2, 1, "", "properties"]], "PyXA.apps.Keynote.XAKeynoteTransitionSettings": [[26, 4, 1, "", "automatic_transition"], [26, 4, 1, "", "transition_delay"], [26, 4, 1, "", "transition_duration"], [26, 4, 1, "", "transition_effect"]], "PyXA.apps.Keynote.XAKeynoteWindow": [[26, 4, 1, "", "document"]], "PyXA.apps.Mail": [[27, 1, 1, "", "XAMailAccount"], [27, 1, 1, "", "XAMailAccountList"], [27, 1, 1, "", "XAMailApplication"], [27, 1, 1, "", "XAMailAttachment"], [27, 1, 1, "", "XAMailAttachmentList"], [27, 1, 1, "", "XAMailBccRecipient"], [27, 1, 1, "", "XAMailBccRecipientList"], [27, 1, 1, "", "XAMailCcRecipient"], [27, 1, 1, "", "XAMailCcRecipientList"], [27, 1, 1, "", "XAMailContainer"], [27, 1, 1, "", "XAMailContainerList"], [27, 1, 1, "", "XAMailDocument"], [27, 1, 1, "", "XAMailDocumentList"], [27, 1, 1, "", "XAMailHeader"], [27, 1, 1, "", "XAMailHeaderList"], [27, 1, 1, "", "XAMailICloudAccount"], [27, 1, 1, "", "XAMailICloudAccountList"], [27, 1, 1, "", "XAMailIMAPAccount"], [27, 1, 1, "", "XAMailIMAPAccountList"], [27, 1, 1, "", "XAMailMessage"], [27, 1, 1, "", "XAMailMessageList"], [27, 1, 1, "", "XAMailMessageViewer"], [27, 1, 1, "", "XAMailMessageViewerList"], [27, 1, 1, "", "XAMailOutgoingMessage"], [27, 1, 1, "", "XAMailOutgoingMessageList"], [27, 1, 1, "", "XAMailPOPAccount"], [27, 1, 1, "", "XAMailPOPAccountList"], [27, 1, 1, "", "XAMailRecipient"], [27, 1, 1, "", "XAMailRecipientList"], [27, 1, 1, "", "XAMailRule"], [27, 1, 1, "", "XAMailRuleCondition"], [27, 1, 1, "", "XAMailRuleConditionList"], [27, 1, 1, "", "XAMailRuleList"], [27, 1, 1, "", "XAMailSMTPServer"], [27, 1, 1, "", "XAMailSMTPServerList"], [27, 1, 1, "", "XAMailSignature"], [27, 1, 1, "", "XAMailSignatureList"], [27, 1, 1, "", "XAMailToRecipient"], [27, 1, 1, "", "XAMailToRecipientList"], [27, 1, 1, "", "XAMailWindow"], [27, 1, 1, "", "XAMailbox"], [27, 1, 1, "", "XAMailboxList"]], "PyXA.apps.Mail.XAMailAccount": [[27, 4, 1, "", "account_directory"], [27, 4, 1, "", "account_type"], [27, 4, 1, "", "authentication"], [27, 4, 1, "", "delivery_account"], [27, 4, 1, "", "email_addresses"], [27, 4, 1, "", "empty_junk_messages_frequency"], [27, 4, 1, "", "empty_junk_messages_on_quit"], [27, 4, 1, "", "empty_trash_frequency"], [27, 4, 1, "", "empty_trash_on_quit"], [27, 4, 1, "", "enabled"], [27, 4, 1, "", "full_name"], [27, 4, 1, "", "id"], [27, 2, 1, "", "mailboxes"], [27, 4, 1, "", "move_deleted_messages_to_trash"], [27, 4, 1, "", "name"], [27, 4, 1, "", "password"], [27, 4, 1, "", "port"], [27, 4, 1, "", "server_name"], [27, 4, 1, "", "user_name"], [27, 4, 1, "", "uses_ssl"]], "PyXA.apps.Mail.XAMailAccountList": [[27, 2, 1, "", "account_directory"], [27, 2, 1, "", "account_type"], [27, 2, 1, "", "authentication"], [27, 2, 1, "", "by_account_directory"], [27, 2, 1, "", "by_account_type"], [27, 2, 1, "", "by_authentication"], [27, 2, 1, "", "by_delivery_account"], [27, 2, 1, "", "by_email_addresses"], [27, 2, 1, "", "by_empty_junk_messages_frequency"], [27, 2, 1, "", "by_empty_junk_messages_on_quit"], [27, 2, 1, "", "by_empty_trash_frequency"], [27, 2, 1, "", "by_empty_trash_on_quit"], [27, 2, 1, "", "by_enabled"], [27, 2, 1, "", "by_full_name"], [27, 2, 1, "", "by_id"], [27, 2, 1, "", "by_move_deleted_messages_to_trash"], [27, 2, 1, "", "by_name"], [27, 2, 1, "", "by_port"], [27, 2, 1, "", "by_server_name"], [27, 2, 1, "", "by_user_name"], [27, 2, 1, "", "by_uses_ssl"], [27, 2, 1, "", "delivery_account"], [27, 2, 1, "", "email_addresses"], [27, 2, 1, "", "empty_junk_messages_frequency"], [27, 2, 1, "", "empty_junk_messages_on_quit"], [27, 2, 1, "", "empty_trash_frequency"], [27, 2, 1, "", "empty_trash_on_quit"], [27, 2, 1, "", "enabled"], [27, 2, 1, "", "full_name"], [27, 2, 1, "", "id"], [27, 2, 1, "", "move_deleted_messages_to_trash"], [27, 2, 1, "", "name"], [27, 2, 1, "", "port"], [27, 2, 1, "", "server_name"], [27, 2, 1, "", "user_name"], [27, 2, 1, "", "uses_ssl"]], "PyXA.apps.Mail.XAMailApplication": [[27, 1, 1, "", "AccountType"], [27, 1, 1, "", "AuthenticationMethod"], [27, 1, 1, "", "CachingPolicy"], [27, 1, 1, "", "Format"], [27, 1, 1, "", "HighlightColor"], [27, 1, 1, "", "QuotingColor"], [27, 1, 1, "", "RuleQualifier"], [27, 1, 1, "", "RuleType"], [27, 1, 1, "", "ViewerColumn"], [27, 2, 1, "", "accounts"], [27, 4, 1, "", "always_bcc_myself"], [27, 4, 1, "", "always_cc_myself"], [27, 4, 1, "", "application_version"], [27, 4, 1, "", "background_activity_count"], [27, 2, 1, "", "check_for_new_mail"], [27, 4, 1, "", "check_spelling_while_typing"], [27, 4, 1, "", "choose_signature_when_composing"], [27, 4, 1, "", "color_quoted_text"], [27, 4, 1, "", "default_message_format"], [27, 4, 1, "", "download_html_attachments"], [27, 4, 1, "", "drafts_mailbox"], [27, 4, 1, "", "expand_group_addresses"], [27, 4, 1, "", "fetch_interval"], [27, 4, 1, "", "fetches_automatically"], [27, 4, 1, "", "fixed_width_font"], [27, 4, 1, "", "fixed_width_font_size"], [27, 4, 1, "", "frontmost"], [27, 4, 1, "", "highlight_selected_conversation"], [27, 2, 1, "", "imap_accounts"], [27, 2, 1, "", "import_mailbox"], [27, 4, 1, "", "inbox"], [27, 4, 1, "", "include_all_original_message_text"], [27, 4, 1, "", "junk_mailbox"], [27, 4, 1, "", "level_one_quoting_color"], [27, 4, 1, "", "level_three_quoting_color"], [27, 4, 1, "", "level_two_quoting_color"], [27, 2, 1, "", "mailboxes"], [27, 4, 1, "", "message_font"], [27, 4, 1, "", "message_font_size"], [27, 4, 1, "", "message_list_font"], [27, 4, 1, "", "message_list_font_size"], [27, 2, 1, "", "message_viewers"], [27, 4, 1, "", "name"], [27, 4, 1, "", "new_mail_sound"], [27, 4, 1, "", "outbox"], [27, 2, 1, "", "outgoing_messages"], [27, 2, 1, "", "pop_accounts"], [27, 4, 1, "", "primary_email"], [27, 4, 1, "", "quote_original_message"], [27, 2, 1, "", "rules"], [27, 4, 1, "", "same_reply_format"], [27, 4, 1, "", "selected_signature"], [27, 4, 1, "", "selection"], [27, 4, 1, "", "sent_mailbox"], [27, 4, 1, "", "should_play_other_mail_sounds"], [27, 2, 1, "", "signatures"], [27, 2, 1, "", "smtp_servers"], [27, 2, 1, "", "synchronize"], [27, 4, 1, "", "trash_mailbox"], [27, 4, 1, "", "use_fixed_width_font"], [27, 4, 1, "", "version"]], "PyXA.apps.Mail.XAMailApplication.AccountType": [[27, 3, 1, "", "ICLOUD"], [27, 3, 1, "", "IMAP"], [27, 3, 1, "", "POP"], [27, 3, 1, "", "SMTP"], [27, 3, 1, "", "UNKNOWN"]], "PyXA.apps.Mail.XAMailApplication.AuthenticationMethod": [[27, 3, 1, "", "APOP"], [27, 3, 1, "", "APPLE_TOKEN"], [27, 3, 1, "", "EXTERNAL"], [27, 3, 1, "", "KERBEROS5"], [27, 3, 1, "", "MD5"], [27, 3, 1, "", "NONE"], [27, 3, 1, "", "NTLM"], [27, 3, 1, "", "PASSWORD"]], "PyXA.apps.Mail.XAMailApplication.CachingPolicy": [[27, 3, 1, "", "ALL_MESSAGES_AND_THEIR_ATTACHMENTS"], [27, 3, 1, "", "ALL_MESSAGES_BUT_OMIT_ATTACHMENTS"], [27, 3, 1, "", "DO_NOT_KEEP_COPIES_OF_ANY_MESSAGES"], [27, 3, 1, "", "ONLY_MESSAGES_I_HAVE_READ"]], "PyXA.apps.Mail.XAMailApplication.Format": [[27, 3, 1, "", "NATIVE"], [27, 3, 1, "", "PLAIN_MESSAGE"], [27, 3, 1, "", "RICH_MESSAGE"]], "PyXA.apps.Mail.XAMailApplication.HighlightColor": [[27, 3, 1, "", "BLUE"], [27, 3, 1, "", "GRAY"], [27, 3, 1, "", "GREEN"], [27, 3, 1, "", "NONE"], [27, 3, 1, "", "ORANGE"], [27, 3, 1, "", "OTHER"], [27, 3, 1, "", "PURPLE"], [27, 3, 1, "", "RED"], [27, 3, 1, "", "YELLOW"]], "PyXA.apps.Mail.XAMailApplication.QuotingColor": [[27, 3, 1, "", "BLUE"], [27, 3, 1, "", "GREEN"], [27, 3, 1, "", "ORANGE"], [27, 3, 1, "", "OTHER"], [27, 3, 1, "", "PURPLE"], [27, 3, 1, "", "RED"], [27, 3, 1, "", "YELLOW"]], "PyXA.apps.Mail.XAMailApplication.RuleQualifier": [[27, 3, 1, "", "BEGINS_WITH_VALUE"], [27, 3, 1, "", "DOES_CONTAIN_VALUE"], [27, 3, 1, "", "DOES_NOT_CONTAIN_VALUE"], [27, 3, 1, "", "ENDS_WITH_VALUE"], [27, 3, 1, "", "EQUAL_TO_VALUE"], [27, 3, 1, "", "GREATER_THAN_VALUE"], [27, 3, 1, "", "LESS_THAN_VALUE"], [27, 3, 1, "", "NONE"]], "PyXA.apps.Mail.XAMailApplication.RuleType": [[27, 3, 1, "", "ACCOUNT"], [27, 3, 1, "", "ANY_RECIPIENT"], [27, 3, 1, "", "ATTACHMENT_TYPE"], [27, 3, 1, "", "CC_HEADER"], [27, 3, 1, "", "FROM_HEADER"], [27, 3, 1, "", "HEADER_KEY"], [27, 3, 1, "", "MATCHES_EVERY_MESSAGE"], [27, 3, 1, "", "MESSAGE_CONTENT"], [27, 3, 1, "", "MESSAGE_IS_JUNK_MAIL"], [27, 3, 1, "", "SENDER_IS_IN_MY_CONTACTS"], [27, 3, 1, "", "SENDER_IS_IN_MY_PREVIOUS_RECIPIENTS"], [27, 3, 1, "", "SENDER_IS_MEMBER_OF_GROUP"], [27, 3, 1, "", "SENDER_IS_NOT_IN_MY_CONTACTS"], [27, 3, 1, "", "SENDER_IS_NOT_IN_MY_PREVIOUS_RECIPIENTS"], [27, 3, 1, "", "SENDER_IS_NOT_MEMBER_OF_GROUP"], [27, 3, 1, "", "SENDER_IS_VIP"], [27, 3, 1, "", "SUBJECT_HEADER"], [27, 3, 1, "", "TO_HEADER"], [27, 3, 1, "", "TO_OR_CC_HEADER"]], "PyXA.apps.Mail.XAMailApplication.ViewerColumn": [[27, 3, 1, "", "ATTACHMENTS"], [27, 3, 1, "", "DATE_LAST_SAVED"], [27, 3, 1, "", "DATE_RECEIVED"], [27, 3, 1, "", "DATE_SENT"], [27, 3, 1, "", "FLAGS"], [27, 3, 1, "", "FROM"], [27, 3, 1, "", "MAILBOX"], [27, 3, 1, "", "MESSAGE_COLOR"], [27, 3, 1, "", "MESSAGE_STATUS"], [27, 3, 1, "", "NUMBER"], [27, 3, 1, "", "RECIPIENTS"], [27, 3, 1, "", "SIZE"], [27, 3, 1, "", "SUBJECT"]], "PyXA.apps.Mail.XAMailAttachment": [[27, 2, 1, "", "delete"], [27, 4, 1, "", "downloaded"], [27, 4, 1, "", "file_size"], [27, 4, 1, "", "id"], [27, 4, 1, "", "mime_type"], [27, 4, 1, "", "name"]], "PyXA.apps.Mail.XAMailAttachmentList": [[27, 2, 1, "", "by_downloaded"], [27, 2, 1, "", "by_file_size"], [27, 2, 1, "", "by_id"], [27, 2, 1, "", "by_mime_type"], [27, 2, 1, "", "by_name"], [27, 2, 1, "", "downloaded"], [27, 2, 1, "", "file_size"], [27, 2, 1, "", "id"], [27, 2, 1, "", "mime_type"], [27, 2, 1, "", "name"]], "PyXA.apps.Mail.XAMailDocument": [[27, 2, 1, "", "delete"], [27, 4, 1, "", "file"], [27, 4, 1, "", "modified"], [27, 4, 1, "", "name"]], "PyXA.apps.Mail.XAMailDocumentList": [[27, 2, 1, "", "by_file"], [27, 2, 1, "", "by_modified"], [27, 2, 1, "", "by_name"], [27, 2, 1, "", "file"], [27, 2, 1, "", "modified"], [27, 2, 1, "", "name"]], "PyXA.apps.Mail.XAMailHeader": [[27, 4, 1, "", "content"], [27, 4, 1, "", "name"]], "PyXA.apps.Mail.XAMailHeaderList": [[27, 2, 1, "", "by_content"], [27, 2, 1, "", "by_name"], [27, 2, 1, "", "content"], [27, 2, 1, "", "name"]], "PyXA.apps.Mail.XAMailIMAPAccount": [[27, 4, 1, "", "compact_mailboxes_when_closing"], [27, 4, 1, "", "message_caching"], [27, 4, 1, "", "store_deleted_messages_on_server"], [27, 4, 1, "", "store_drafts_on_server"], [27, 4, 1, "", "store_junk_mail_on_server"], [27, 4, 1, "", "store_sent_messages_on_server"]], "PyXA.apps.Mail.XAMailIMAPAccountList": [[27, 2, 1, "", "by_compact_mailboxes_when_closing"], [27, 2, 1, "", "by_message_caching"], [27, 2, 1, "", "by_store_deleted_messages_on_server"], [27, 2, 1, "", "by_store_drafts_on_server"], [27, 2, 1, "", "by_store_junk_mail_on_server"], [27, 2, 1, "", "by_store_sent_messages_on_server"], [27, 2, 1, "", "compact_mailboxes_when_closing"], [27, 2, 1, "", "message_caching"], [27, 2, 1, "", "store_deleted_messages_on_server"], [27, 2, 1, "", "store_drafts_on_server"], [27, 2, 1, "", "store_junk_mail_on_server"], [27, 2, 1, "", "store_sent_messages_on_server"]], "PyXA.apps.Mail.XAMailMessage": [[27, 4, 1, "", "all_headers"], [27, 4, 1, "", "background_color"], [27, 2, 1, "", "bcc_recipients"], [27, 2, 1, "", "cc_recpients"], [27, 4, 1, "", "content"], [27, 4, 1, "", "date_received"], [27, 4, 1, "", "date_sent"], [27, 2, 1, "", "delete"], [27, 4, 1, "", "deleted_status"], [27, 4, 1, "", "flag_index"], [27, 4, 1, "", "flagged_status"], [27, 2, 1, "", "forward"], [27, 2, 1, "", "headers"], [27, 4, 1, "", "id"], [27, 4, 1, "", "junk_mail_status"], [27, 2, 1, "", "mail_attachments"], [27, 4, 1, "", "mailbox"], [27, 4, 1, "", "message_id"], [27, 4, 1, "", "message_size"], [27, 2, 1, "", "open"], [27, 4, 1, "", "read_status"], [27, 2, 1, "", "recipients"], [27, 2, 1, "", "redirect"], [27, 2, 1, "", "reply"], [27, 4, 1, "", "reply_to"], [27, 4, 1, "", "sender"], [27, 4, 1, "", "source"], [27, 4, 1, "", "subject"], [27, 2, 1, "", "to_recipients"], [27, 4, 1, "", "was_forward"], [27, 4, 1, "", "was_redirected"], [27, 4, 1, "", "was_replied_to"]], "PyXA.apps.Mail.XAMailMessageList": [[27, 2, 1, "", "all_headers"], [27, 2, 1, "", "background_color"], [27, 2, 1, "", "by_all_headers"], [27, 2, 1, "", "by_background_color"], [27, 2, 1, "", "by_content"], [27, 2, 1, "", "by_date_received"], [27, 2, 1, "", "by_date_sent"], [27, 2, 1, "", "by_deleted_status"], [27, 2, 1, "", "by_flag_index"], [27, 2, 1, "", "by_flagged_status"], [27, 2, 1, "", "by_id"], [27, 2, 1, "", "by_junk_mail_status"], [27, 2, 1, "", "by_mailbox"], [27, 2, 1, "", "by_message_id"], [27, 2, 1, "", "by_message_size"], [27, 2, 1, "", "by_read_status"], [27, 2, 1, "", "by_reply_to"], [27, 2, 1, "", "by_sender"], [27, 2, 1, "", "by_source"], [27, 2, 1, "", "by_subject"], [27, 2, 1, "", "by_was_forwarded"], [27, 2, 1, "", "by_was_redirected"], [27, 2, 1, "", "by_was_replied_to"], [27, 2, 1, "", "content"], [27, 2, 1, "", "date_received"], [27, 2, 1, "", "date_sent"], [27, 2, 1, "", "deleted_status"], [27, 2, 1, "", "flag_index"], [27, 2, 1, "", "flagged_status"], [27, 2, 1, "", "id"], [27, 2, 1, "", "junk_mail_status"], [27, 2, 1, "", "mailbox"], [27, 2, 1, "", "message_id"], [27, 2, 1, "", "message_size"], [27, 2, 1, "", "read_status"], [27, 2, 1, "", "reply_to"], [27, 2, 1, "", "sender"], [27, 2, 1, "", "source"], [27, 2, 1, "", "subject"], [27, 2, 1, "", "was_forwarded"], [27, 2, 1, "", "was_redirected"], [27, 2, 1, "", "was_replied_to"]], "PyXA.apps.Mail.XAMailMessageViewer": [[27, 4, 1, "", "drafts_mailbox"], [27, 4, 1, "", "id"], [27, 4, 1, "", "inbox"], [27, 4, 1, "", "junk_mailbox"], [27, 4, 1, "", "mailbox_list_visible"], [27, 2, 1, "", "messages"], [27, 4, 1, "", "outbox"], [27, 4, 1, "", "preview_pane_is_visible"], [27, 4, 1, "", "selected_mailboxes"], [27, 4, 1, "", "selected_messages"], [27, 4, 1, "", "sent_mailbox"], [27, 4, 1, "", "sort_ascending"], [27, 4, 1, "", "sort_column"], [27, 4, 1, "", "trash_mailbox"], [27, 4, 1, "", "visible_columns"], [27, 4, 1, "", "visible_messages"], [27, 4, 1, "", "window"]], "PyXA.apps.Mail.XAMailMessageViewerList": [[27, 2, 1, "", "by_drafts_mailbox"], [27, 2, 1, "", "by_id"], [27, 2, 1, "", "by_inbox"], [27, 2, 1, "", "by_junk_mailbox"], [27, 2, 1, "", "by_mailbox_list_visible"], [27, 2, 1, "", "by_outbox"], [27, 2, 1, "", "by_preview_pane_is_visible"], [27, 2, 1, "", "by_selected_mailboxes"], [27, 2, 1, "", "by_selected_messages"], [27, 2, 1, "", "by_sent_mailbox"], [27, 2, 1, "", "by_sort_column"], [27, 2, 1, "", "by_sorted_ascending"], [27, 2, 1, "", "by_trash_mailbox"], [27, 2, 1, "", "by_visible_columns"], [27, 2, 1, "", "by_visible_messages"], [27, 2, 1, "", "by_window"], [27, 2, 1, "", "drafts_mailbox"], [27, 2, 1, "", "id"], [27, 2, 1, "", "inbox"], [27, 2, 1, "", "junk_mailbox"], [27, 2, 1, "", "mailbox_list_visible"], [27, 2, 1, "", "outbox"], [27, 2, 1, "", "preview_pane_is_visible"], [27, 2, 1, "", "selected_mailboxes"], [27, 2, 1, "", "selected_messages"], [27, 2, 1, "", "sent_mailbox"], [27, 2, 1, "", "sort_column"], [27, 2, 1, "", "sorted_ascending"], [27, 2, 1, "", "trash_mailbox"], [27, 2, 1, "", "visible_columns"], [27, 2, 1, "", "visible_messages"], [27, 2, 1, "", "window"]], "PyXA.apps.Mail.XAMailOutgoingMessage": [[27, 2, 1, "", "close"], [27, 4, 1, "", "content"], [27, 2, 1, "", "delete"], [27, 4, 1, "", "id"], [27, 4, 1, "", "message_signature"], [27, 2, 1, "", "save"], [27, 2, 1, "", "send"], [27, 4, 1, "", "sender"], [27, 4, 1, "", "subject"], [27, 4, 1, "", "visible"]], "PyXA.apps.Mail.XAMailOutgoingMessageList": [[27, 2, 1, "", "by_content"], [27, 2, 1, "", "by_id"], [27, 2, 1, "", "by_message_signature"], [27, 2, 1, "", "by_sender"], [27, 2, 1, "", "by_subject"], [27, 2, 1, "", "by_visible"], [27, 2, 1, "", "content"], [27, 2, 1, "", "id"], [27, 2, 1, "", "message_signature"], [27, 2, 1, "", "sender"], [27, 2, 1, "", "subject"], [27, 2, 1, "", "visible"]], "PyXA.apps.Mail.XAMailPOPAccount": [[27, 4, 1, "", "big_message_warning_size"], [27, 4, 1, "", "delayed_message_deletion_interval"], [27, 4, 1, "", "delete_mail_on_server"], [27, 4, 1, "", "delete_messages_when_moved_from_inbox"]], "PyXA.apps.Mail.XAMailPOPAccountList": [[27, 2, 1, "", "big_message_warning_size"], [27, 2, 1, "", "by_big_message_warning_size"], [27, 2, 1, "", "by_delayed_message_deletion_interval"], [27, 2, 1, "", "by_delete_mail_on_server"], [27, 2, 1, "", "by_delete_messages_when_moved_from_inbox"], [27, 2, 1, "", "delayed_message_deletion_interval"], [27, 2, 1, "", "delete_mail_on_server"], [27, 2, 1, "", "delete_messages_when_moved_from_inbox"]], "PyXA.apps.Mail.XAMailRecipient": [[27, 4, 1, "", "address"], [27, 4, 1, "", "name"]], "PyXA.apps.Mail.XAMailRecipientList": [[27, 2, 1, "", "address"], [27, 2, 1, "", "by_address"], [27, 2, 1, "", "by_name"], [27, 2, 1, "", "name"]], "PyXA.apps.Mail.XAMailRule": [[27, 4, 1, "", "all_conditions_must_be_met"], [27, 4, 1, "", "color_message"], [27, 4, 1, "", "copy_message"], [27, 2, 1, "", "delete"], [27, 4, 1, "", "delete_message"], [27, 4, 1, "", "enabled"], [27, 4, 1, "", "forward_message"], [27, 4, 1, "", "forward_text"], [27, 4, 1, "", "highlight_text_using_color"], [27, 4, 1, "", "mark_flag_index"], [27, 4, 1, "", "mark_flagged"], [27, 4, 1, "", "mark_read"], [27, 4, 1, "", "move_message"], [27, 4, 1, "", "name"], [27, 4, 1, "", "play_sound"], [27, 4, 1, "", "redirect_message"], [27, 4, 1, "", "reply_text"], [27, 2, 1, "", "rule_conditions"], [27, 4, 1, "", "run_script"], [27, 4, 1, "", "should_copy_message"], [27, 4, 1, "", "should_move_message"], [27, 4, 1, "", "stop_evaluating_rule"], [27, 4, 1, "", "stop_evaluating_rules"]], "PyXA.apps.Mail.XAMailRuleCondition": [[27, 2, 1, "", "delete"], [27, 4, 1, "", "expression"], [27, 4, 1, "", "header"], [27, 4, 1, "", "qualifier"], [27, 4, 1, "", "rule_type"]], "PyXA.apps.Mail.XAMailRuleConditionList": [[27, 2, 1, "", "by_expression"], [27, 2, 1, "", "by_header"], [27, 2, 1, "", "by_qualifier"], [27, 2, 1, "", "by_rule_type"], [27, 2, 1, "", "expression"], [27, 2, 1, "", "header"], [27, 2, 1, "", "qualifier"], [27, 2, 1, "", "rule_type"]], "PyXA.apps.Mail.XAMailRuleList": [[27, 2, 1, "", "all_conditions_must_be_met"], [27, 2, 1, "", "by_all_conditions_must_be_met"], [27, 2, 1, "", "by_color_message"], [27, 2, 1, "", "by_copy_message"], [27, 2, 1, "", "by_delete_message"], [27, 2, 1, "", "by_enabled"], [27, 2, 1, "", "by_forward_message"], [27, 2, 1, "", "by_forward_text"], [27, 2, 1, "", "by_highlight_text_using_color"], [27, 2, 1, "", "by_mark_flag_index"], [27, 2, 1, "", "by_mark_flagged"], [27, 2, 1, "", "by_mark_read"], [27, 2, 1, "", "by_move_message"], [27, 2, 1, "", "by_name"], [27, 2, 1, "", "by_play_sound"], [27, 2, 1, "", "by_redirect_message"], [27, 2, 1, "", "by_reply_text"], [27, 2, 1, "", "by_run_script"], [27, 2, 1, "", "by_should_copy_message"], [27, 2, 1, "", "by_should_move_message"], [27, 2, 1, "", "by_stop_evaluating_rules"], [27, 2, 1, "", "color_message"], [27, 2, 1, "", "copy_message"], [27, 2, 1, "", "delete_message"], [27, 2, 1, "", "enabled"], [27, 2, 1, "", "forward_message"], [27, 2, 1, "", "forward_text"], [27, 2, 1, "", "highlight_text_using_color"], [27, 2, 1, "", "mark_flag_index"], [27, 2, 1, "", "mark_flagged"], [27, 2, 1, "", "mark_read"], [27, 2, 1, "", "move_message"], [27, 2, 1, "", "name"], [27, 2, 1, "", "play_sound"], [27, 2, 1, "", "redirect_message"], [27, 2, 1, "", "reply_text"], [27, 2, 1, "", "run_script"], [27, 2, 1, "", "should_copy_message"], [27, 2, 1, "", "should_move_message"], [27, 2, 1, "", "stop_evaluating_rules"]], "PyXA.apps.Mail.XAMailSMTPServer": [[27, 4, 1, "", "account_type"], [27, 4, 1, "", "authentication"], [27, 4, 1, "", "enabled"], [27, 4, 1, "", "name"], [27, 4, 1, "", "password"], [27, 4, 1, "", "port"], [27, 4, 1, "", "server_name"], [27, 4, 1, "", "user_name"], [27, 4, 1, "", "uses_ssl"]], "PyXA.apps.Mail.XAMailSMTPServerList": [[27, 2, 1, "", "account_type"], [27, 2, 1, "", "authentication"], [27, 2, 1, "", "by_account_type"], [27, 2, 1, "", "by_authentication"], [27, 2, 1, "", "by_enabled"], [27, 2, 1, "", "by_name"], [27, 2, 1, "", "by_port"], [27, 2, 1, "", "by_server_name"], [27, 2, 1, "", "by_user_name"], [27, 2, 1, "", "by_uses_ssl"], [27, 2, 1, "", "enabled"], [27, 2, 1, "", "name"], [27, 2, 1, "", "port"], [27, 2, 1, "", "server_name"], [27, 2, 1, "", "user_name"], [27, 2, 1, "", "uses_ssl"]], "PyXA.apps.Mail.XAMailSignature": [[27, 4, 1, "", "content"], [27, 2, 1, "", "delete"], [27, 4, 1, "", "name"]], "PyXA.apps.Mail.XAMailSignatureList": [[27, 2, 1, "", "by_content"], [27, 2, 1, "", "by_name"], [27, 2, 1, "", "content"], [27, 2, 1, "", "name"]], "PyXA.apps.Mail.XAMailWindow": [[27, 4, 1, "", "document"]], "PyXA.apps.Mail.XAMailbox": [[27, 4, 1, "", "account"], [27, 4, 1, "", "container"], [27, 2, 1, "", "delete"], [27, 2, 1, "", "mailboxes"], [27, 2, 1, "", "messages"], [27, 4, 1, "", "name"], [27, 4, 1, "", "unread_count"]], "PyXA.apps.Mail.XAMailboxList": [[27, 2, 1, "", "account"], [27, 2, 1, "", "by_account"], [27, 2, 1, "", "by_container"], [27, 2, 1, "", "by_name"], [27, 2, 1, "", "by_unread_count"], [27, 2, 1, "", "container"], [27, 2, 1, "", "name"], [27, 2, 1, "", "unread_count"]], "PyXA.apps.Maps": [[28, 1, 1, "", "XAMapsApplication"], [28, 1, 1, "", "XAMapsDirections"], [28, 1, 1, "", "XAMapsDirectionsList"], [28, 1, 1, "", "XAMapsSidebarLocation"], [28, 1, 1, "", "XAMapsSidebarLocationList"], [28, 1, 1, "", "XAMapsTab"], [28, 1, 1, "", "XAMapsTabList"]], "PyXA.apps.Maps.XAMapsApplication": [[28, 2, 1, "", "directions_to"], [28, 2, 1, "", "drop_pin"], [28, 2, 1, "", "new_tab"], [28, 2, 1, "", "orient_north"], [28, 2, 1, "", "search"], [28, 2, 1, "", "show_address"], [28, 2, 1, "", "show_coordinate"], [28, 2, 1, "", "sidebar_locations"], [28, 4, 1, "", "sidebar_showing"], [28, 2, 1, "", "tabs"], [28, 2, 1, "", "toggle_sidebar"], [28, 2, 1, "", "zoom_in"], [28, 2, 1, "", "zoom_out"]], "PyXA.apps.Maps.XAMapsDirections": [[28, 3, 1, "", "destination_address"], [28, 3, 1, "", "duration"], [28, 3, 1, "", "has_tolls"], [28, 3, 1, "", "has_weather_warnings"], [28, 3, 1, "", "source_address"]], "PyXA.apps.Maps.XAMapsSidebarLocation": [[28, 4, 1, "", "description"], [28, 4, 1, "", "name"], [28, 4, 1, "", "selected"], [28, 2, 1, "", "show_directions_to"]], "PyXA.apps.Maps.XAMapsSidebarLocationList": [[28, 2, 1, "", "name"]], "PyXA.apps.Maps.XAMapsTab": [[28, 2, 1, "", "close"], [28, 4, 1, "", "properties"], [28, 4, 1, "", "selected"], [28, 4, 1, "", "title"]], "PyXA.apps.MediaApplicationBase": [[29, 1, 1, "", "XAMediaApplication"], [29, 1, 1, "", "XAMediaArtwork"], [29, 1, 1, "", "XAMediaArtworkList"], [29, 1, 1, "", "XAMediaBrowserWindow"], [29, 1, 1, "", "XAMediaBrowserWindowList"], [29, 1, 1, "", "XAMediaFileTrack"], [29, 1, 1, "", "XAMediaFileTrackList"], [29, 1, 1, "", "XAMediaFolderPlaylist"], [29, 1, 1, "", "XAMediaFolderPlaylistList"], [29, 1, 1, "", "XAMediaItem"], [29, 1, 1, "", "XAMediaItemList"], [29, 1, 1, "", "XAMediaLibraryPlaylist"], [29, 1, 1, "", "XAMediaLibraryPlaylistList"], [29, 1, 1, "", "XAMediaPlaylist"], [29, 1, 1, "", "XAMediaPlaylistList"], [29, 1, 1, "", "XAMediaPlaylistWindow"], [29, 1, 1, "", "XAMediaPlaylistWindowList"], [29, 1, 1, "", "XAMediaSharedTrack"], [29, 1, 1, "", "XAMediaSharedTrackList"], [29, 1, 1, "", "XAMediaSource"], [29, 1, 1, "", "XAMediaSourceList"], [29, 1, 1, "", "XAMediaTrack"], [29, 1, 1, "", "XAMediaTrackList"], [29, 1, 1, "", "XAMediaURLTrack"], [29, 1, 1, "", "XAMediaURLTrackList"], [29, 1, 1, "", "XAMediaUserPlaylist"], [29, 1, 1, "", "XAMediaUserPlaylistList"], [29, 1, 1, "", "XAMediaVideoWindow"], [29, 1, 1, "", "XAMediaVideoWindowList"], [29, 1, 1, "", "XAMediaWindow"], [29, 1, 1, "", "XAMediaWindowList"]], "PyXA.apps.MediaApplicationBase.XAMediaApplication": [[29, 1, 1, "", "MediaKind"], [29, 1, 1, "", "PlayerState"], [29, 1, 1, "", "PlaylistKind"], [29, 1, 1, "", "RatingKind"], [29, 1, 1, "", "SearchFilter"], [29, 1, 1, "", "SourceKind"], [29, 2, 1, "", "back_track"], [29, 2, 1, "", "browser_windows"], [29, 4, 1, "", "current_playlist"], [29, 4, 1, "", "current_stream_title"], [29, 4, 1, "", "current_stream_url"], [29, 2, 1, "", "current_track"], [29, 2, 1, "", "fast_forward"], [29, 4, 1, "", "fixed_indexing"], [29, 4, 1, "", "frontmost"], [29, 4, 1, "", "full_screen"], [29, 4, 1, "", "mute"], [29, 4, 1, "", "name"], [29, 2, 1, "", "next_track"], [29, 2, 1, "", "open_location"], [29, 2, 1, "", "pause"], [29, 2, 1, "", "play"], [29, 4, 1, "", "player_position"], [29, 4, 1, "", "player_state"], [29, 2, 1, "", "playlist_windows"], [29, 2, 1, "", "playlists"], [29, 2, 1, "", "playpause"], [29, 2, 1, "", "previous_track"], [29, 2, 1, "", "resume"], [29, 2, 1, "", "rewind"], [29, 4, 1, "", "selection"], [29, 2, 1, "", "set_volume"], [29, 4, 1, "", "sound_volume"], [29, 2, 1, "", "sources"], [29, 2, 1, "", "stop"], [29, 2, 1, "", "tracks"], [29, 4, 1, "", "version"], [29, 2, 1, "", "video_windows"]], "PyXA.apps.MediaApplicationBase.XAMediaApplication.MediaKind": [[29, 3, 1, "", "MUSIC_VIDEO"], [29, 3, 1, "", "SONG"], [29, 3, 1, "", "UNKNOWN"]], "PyXA.apps.MediaApplicationBase.XAMediaApplication.PlayerState": [[29, 3, 1, "", "FAST_FORWARDING"], [29, 3, 1, "", "PAUSED"], [29, 3, 1, "", "PLAYING"], [29, 3, 1, "", "REWINDING"], [29, 3, 1, "", "STOPPED"]], "PyXA.apps.MediaApplicationBase.XAMediaApplication.PlaylistKind": [[29, 3, 1, "", "FOLDER"], [29, 3, 1, "", "GENIUS"], [29, 3, 1, "", "LIBRARY"], [29, 3, 1, "", "MUSIC"], [29, 3, 1, "", "NONE"], [29, 3, 1, "", "PURCHASED_MUSIC"], [29, 3, 1, "", "USER"], [29, 3, 1, "", "USER_LIBRARY"]], "PyXA.apps.MediaApplicationBase.XAMediaApplication.RatingKind": [[29, 3, 1, "", "COMPUTED"], [29, 3, 1, "", "USER"]], "PyXA.apps.MediaApplicationBase.XAMediaApplication.SearchFilter": [[29, 3, 1, "", "ALBUMS"], [29, 3, 1, "", "ALL"], [29, 3, 1, "", "ARTISTS"], [29, 3, 1, "", "COMPOSERS"], [29, 3, 1, "", "DISPLAYED"], [29, 3, 1, "", "NAMES"]], "PyXA.apps.MediaApplicationBase.XAMediaApplication.SourceKind": [[29, 3, 1, "", "AUDIO_CD"], [29, 3, 1, "", "ITUNES_STORE"], [29, 3, 1, "", "LIBRARY"], [29, 3, 1, "", "MP3_CD"], [29, 3, 1, "", "RADIO_TUNER"], [29, 3, 1, "", "SHARED_LIBRARY"], [29, 3, 1, "", "UNKNOWN"]], "PyXA.apps.MediaApplicationBase.XAMediaArtwork": [[29, 4, 1, "", "data"], [29, 4, 1, "", "downloaded"], [29, 4, 1, "", "format"], [29, 4, 1, "", "kind"], [29, 4, 1, "", "object_description"], [29, 4, 1, "", "raw_data"]], "PyXA.apps.MediaApplicationBase.XAMediaArtworkList": [[29, 2, 1, "", "by_data"], [29, 2, 1, "", "by_downloaded"], [29, 2, 1, "", "by_format"], [29, 2, 1, "", "by_kind"], [29, 2, 1, "", "by_object_description"], [29, 2, 1, "", "by_raw_data"], [29, 2, 1, "", "data"], [29, 2, 1, "", "downloaded"], [29, 2, 1, "", "format"], [29, 2, 1, "", "kind"], [29, 2, 1, "", "object_description"], [29, 2, 1, "", "raw_data"]], "PyXA.apps.MediaApplicationBase.XAMediaBrowserWindow": [[29, 4, 1, "", "selection"], [29, 4, 1, "", "view"]], "PyXA.apps.MediaApplicationBase.XAMediaBrowserWindowList": [[29, 2, 1, "", "by_selection"], [29, 2, 1, "", "by_view"], [29, 2, 1, "", "selection"], [29, 2, 1, "", "view"]], "PyXA.apps.MediaApplicationBase.XAMediaFileTrack": [[29, 4, 1, "", "location"]], "PyXA.apps.MediaApplicationBase.XAMediaFileTrackList": [[29, 2, 1, "", "by_location"], [29, 2, 1, "", "location"]], "PyXA.apps.MediaApplicationBase.XAMediaItem": [[29, 4, 1, "", "container"], [29, 2, 1, "", "download"], [29, 2, 1, "", "get_clipboard_representation"], [29, 4, 1, "", "id"], [29, 4, 1, "", "index"], [29, 4, 1, "", "name"], [29, 4, 1, "", "persistent_id"], [29, 4, 1, "", "properties"], [29, 2, 1, "", "reveal"]], "PyXA.apps.MediaApplicationBase.XAMediaItemList": [[29, 2, 1, "", "by_container"], [29, 2, 1, "", "by_id"], [29, 2, 1, "", "by_index"], [29, 2, 1, "", "by_name"], [29, 2, 1, "", "by_persistent_id"], [29, 2, 1, "", "by_properties"], [29, 2, 1, "", "container"], [29, 2, 1, "", "get_clipboard_representation"], [29, 2, 1, "", "id"], [29, 2, 1, "", "index"], [29, 2, 1, "", "name"], [29, 2, 1, "", "persistent_id"], [29, 2, 1, "", "properties"]], "PyXA.apps.MediaApplicationBase.XAMediaLibraryPlaylist": [[29, 2, 1, "", "file_tracks"], [29, 2, 1, "", "shared_tracks"], [29, 2, 1, "", "url_tracks"]], "PyXA.apps.MediaApplicationBase.XAMediaPlaylist": [[29, 2, 1, "", "artworks"], [29, 4, 1, "", "duration"], [29, 2, 1, "", "move_to"], [29, 4, 1, "", "name"], [29, 4, 1, "", "object_description"], [29, 4, 1, "", "parent"], [29, 2, 1, "", "search"], [29, 4, 1, "", "size"], [29, 4, 1, "", "special_kind"], [29, 4, 1, "", "time"], [29, 2, 1, "", "tracks"], [29, 4, 1, "", "visible"]], "PyXA.apps.MediaApplicationBase.XAMediaPlaylistList": [[29, 2, 1, "", "by_duration"], [29, 2, 1, "", "by_name"], [29, 2, 1, "", "by_object_description"], [29, 2, 1, "", "by_parent"], [29, 2, 1, "", "by_size"], [29, 2, 1, "", "by_special_kind"], [29, 2, 1, "", "by_time"], [29, 2, 1, "", "by_visible"], [29, 2, 1, "", "duration"], [29, 2, 1, "", "name"], [29, 2, 1, "", "object_description"], [29, 2, 1, "", "parent"], [29, 2, 1, "", "size"], [29, 2, 1, "", "special_kind"], [29, 2, 1, "", "time"], [29, 2, 1, "", "visible"]], "PyXA.apps.MediaApplicationBase.XAMediaPlaylistWindow": [[29, 4, 1, "", "selection"], [29, 4, 1, "", "view"]], "PyXA.apps.MediaApplicationBase.XAMediaPlaylistWindowList": [[29, 2, 1, "", "by_selection"], [29, 2, 1, "", "by_view"], [29, 2, 1, "", "selection"], [29, 2, 1, "", "view"]], "PyXA.apps.MediaApplicationBase.XAMediaSource": [[29, 4, 1, "", "capacity"], [29, 4, 1, "", "free_space"], [29, 4, 1, "", "kind"], [29, 2, 1, "", "library_playlists"], [29, 2, 1, "", "playlists"], [29, 2, 1, "", "user_playlists"]], "PyXA.apps.MediaApplicationBase.XAMediaSourceList": [[29, 2, 1, "", "by_capacity"], [29, 2, 1, "", "by_free_space"], [29, 2, 1, "", "by_kind"], [29, 2, 1, "", "capacity"], [29, 2, 1, "", "free_space"], [29, 2, 1, "", "kind"]], "PyXA.apps.MediaApplicationBase.XAMediaTrack": [[29, 4, 1, "", "album"], [29, 4, 1, "", "album_rating"], [29, 4, 1, "", "album_rating_kind"], [29, 2, 1, "", "artworks"], [29, 4, 1, "", "bit_rate"], [29, 4, 1, "", "bookmark"], [29, 4, 1, "", "bookmarkable"], [29, 4, 1, "", "category"], [29, 4, 1, "", "comment"], [29, 4, 1, "", "database_id"], [29, 4, 1, "", "date_added"], [29, 4, 1, "", "disc_count"], [29, 4, 1, "", "disc_number"], [29, 4, 1, "", "downloader_apple_id"], [29, 4, 1, "", "downloader_name"], [29, 4, 1, "", "duration"], [29, 4, 1, "", "enabled"], [29, 4, 1, "", "episode_id"], [29, 4, 1, "", "episode_number"], [29, 4, 1, "", "finish"], [29, 4, 1, "", "genre"], [29, 4, 1, "", "grouping"], [29, 4, 1, "", "kind"], [29, 4, 1, "", "long_description"], [29, 4, 1, "", "media_kind"], [29, 4, 1, "", "modification_date"], [29, 4, 1, "", "object_description"], [29, 2, 1, "", "play"], [29, 4, 1, "", "played_count"], [29, 4, 1, "", "played_date"], [29, 4, 1, "", "purchaser_apple_id"], [29, 4, 1, "", "purchaser_name"], [29, 4, 1, "", "rating"], [29, 4, 1, "", "rating_kind"], [29, 4, 1, "", "release_date"], [29, 4, 1, "", "sample_rate"], [29, 4, 1, "", "season_number"], [29, 2, 1, "", "select"], [29, 4, 1, "", "show"], [29, 4, 1, "", "size"], [29, 4, 1, "", "skipped_count"], [29, 4, 1, "", "skipped_date"], [29, 4, 1, "", "sort_album"], [29, 4, 1, "", "sort_name"], [29, 4, 1, "", "sort_show"], [29, 4, 1, "", "start"], [29, 4, 1, "", "time"], [29, 4, 1, "", "track_count"], [29, 4, 1, "", "track_number"], [29, 4, 1, "", "unplayed"], [29, 4, 1, "", "volume_adjustment"], [29, 4, 1, "", "year"]], "PyXA.apps.MediaApplicationBase.XAMediaTrackList": [[29, 2, 1, "", "album"], [29, 2, 1, "", "album_rating"], [29, 2, 1, "", "album_rating_kind"], [29, 2, 1, "", "bit_rate"], [29, 2, 1, "", "bookmark"], [29, 2, 1, "", "bookmarkable"], [29, 2, 1, "", "by_album"], [29, 2, 1, "", "by_album_rating"], [29, 2, 1, "", "by_album_rating_kind"], [29, 2, 1, "", "by_bit_rate"], [29, 2, 1, "", "by_bookmark"], [29, 2, 1, "", "by_bookmarkable"], [29, 2, 1, "", "by_category"], [29, 2, 1, "", "by_comment"], [29, 2, 1, "", "by_database_id"], [29, 2, 1, "", "by_date_added"], [29, 2, 1, "", "by_disc_count"], [29, 2, 1, "", "by_disc_number"], [29, 2, 1, "", "by_downloader_apple_id"], [29, 2, 1, "", "by_downloader_name"], [29, 2, 1, "", "by_duration"], [29, 2, 1, "", "by_enabled"], [29, 2, 1, "", "by_episode_id"], [29, 2, 1, "", "by_episode_number"], [29, 2, 1, "", "by_finish"], [29, 2, 1, "", "by_genre"], [29, 2, 1, "", "by_grouping"], [29, 2, 1, "", "by_kind"], [29, 2, 1, "", "by_long_description"], [29, 2, 1, "", "by_media_kind"], [29, 2, 1, "", "by_modification_date"], [29, 2, 1, "", "by_object_description"], [29, 2, 1, "", "by_played_count"], [29, 2, 1, "", "by_played_date"], [29, 2, 1, "", "by_purchaser_apple_id"], [29, 2, 1, "", "by_purchaser_name"], [29, 2, 1, "", "by_rating"], [29, 2, 1, "", "by_rating_kind"], [29, 2, 1, "", "by_release_date"], [29, 2, 1, "", "by_sample_rate"], [29, 2, 1, "", "by_season_number"], [29, 2, 1, "", "by_show"], [29, 2, 1, "", "by_size"], [29, 2, 1, "", "by_skipped_count"], [29, 2, 1, "", "by_skipped_date"], [29, 2, 1, "", "by_sort_album"], [29, 2, 1, "", "by_sort_name"], [29, 2, 1, "", "by_sort_show"], [29, 2, 1, "", "by_start"], [29, 2, 1, "", "by_time"], [29, 2, 1, "", "by_track_count"], [29, 2, 1, "", "by_track_number"], [29, 2, 1, "", "by_unplayed"], [29, 2, 1, "", "by_volume_adjustment"], [29, 2, 1, "", "by_year"], [29, 2, 1, "", "category"], [29, 2, 1, "", "comment"], [29, 2, 1, "", "database_id"], [29, 2, 1, "", "date_added"], [29, 2, 1, "", "disc_count"], [29, 2, 1, "", "disc_number"], [29, 2, 1, "", "downloader_apple_id"], [29, 2, 1, "", "downloader_name"], [29, 2, 1, "", "duration"], [29, 2, 1, "", "enabled"], [29, 2, 1, "", "episode_id"], [29, 2, 1, "", "episode_number"], [29, 2, 1, "", "finish"], [29, 2, 1, "", "genre"], [29, 2, 1, "", "grouping"], [29, 2, 1, "", "kind"], [29, 2, 1, "", "long_description"], [29, 2, 1, "", "media_kind"], [29, 2, 1, "", "modification_date"], [29, 2, 1, "", "object_description"], [29, 2, 1, "", "played_count"], [29, 2, 1, "", "played_date"], [29, 2, 1, "", "purchaser_apple_id"], [29, 2, 1, "", "purchaser_name"], [29, 2, 1, "", "rating"], [29, 2, 1, "", "rating_kind"], [29, 2, 1, "", "release_date"], [29, 2, 1, "", "sample_rate"], [29, 2, 1, "", "season_number"], [29, 2, 1, "", "show"], [29, 2, 1, "", "size"], [29, 2, 1, "", "skipped_count"], [29, 2, 1, "", "skipped_date"], [29, 2, 1, "", "sort_album"], [29, 2, 1, "", "sort_name"], [29, 2, 1, "", "sort_show"], [29, 2, 1, "", "start"], [29, 2, 1, "", "time"], [29, 2, 1, "", "track_count"], [29, 2, 1, "", "track_number"], [29, 2, 1, "", "unplayed"], [29, 2, 1, "", "volume_adjustment"], [29, 2, 1, "", "year"]], "PyXA.apps.MediaApplicationBase.XAMediaURLTrack": [[29, 4, 1, "", "address"]], "PyXA.apps.MediaApplicationBase.XAMediaURLTrackList": [[29, 2, 1, "", "address"], [29, 2, 1, "", "by_address"]], "PyXA.apps.MediaApplicationBase.XAMediaUserPlaylist": [[29, 2, 1, "", "file_tracks"], [29, 4, 1, "", "shared"], [29, 2, 1, "", "shared_tracks"], [29, 4, 1, "", "smart"], [29, 2, 1, "", "url_tracks"]], "PyXA.apps.MediaApplicationBase.XAMediaUserPlaylistList": [[29, 2, 1, "", "by_shared"], [29, 2, 1, "", "by_smart"], [29, 2, 1, "", "shared"], [29, 2, 1, "", "smart"]], "PyXA.apps.MediaApplicationBase.XAMediaWindow": [[29, 4, 1, "", "collapseable"], [29, 4, 1, "", "collapsed"], [29, 4, 1, "", "full_screen"], [29, 4, 1, "", "position"]], "PyXA.apps.MediaApplicationBase.XAMediaWindowList": [[29, 2, 1, "", "bounds"], [29, 2, 1, "", "by_bounds"], [29, 2, 1, "", "by_closeable"], [29, 2, 1, "", "by_collapseable"], [29, 2, 1, "", "by_collapsed"], [29, 2, 1, "", "by_full_screen"], [29, 2, 1, "", "by_position"], [29, 2, 1, "", "by_resizable"], [29, 2, 1, "", "by_visible"], [29, 2, 1, "", "by_zoomable"], [29, 2, 1, "", "by_zoomed"], [29, 2, 1, "", "closeable"], [29, 2, 1, "", "collapseable"], [29, 2, 1, "", "collapsed"], [29, 2, 1, "", "full_screen"], [29, 2, 1, "", "position"], [29, 2, 1, "", "resizable"], [29, 2, 1, "", "visible"], [29, 2, 1, "", "zoomable"], [29, 2, 1, "", "zoomed"]], "PyXA.apps.Messages": [[30, 1, 1, "", "XAMessagesAccount"], [30, 1, 1, "", "XAMessagesAccountList"], [30, 1, 1, "", "XAMessagesApplication"], [30, 1, 1, "", "XAMessagesChat"], [30, 1, 1, "", "XAMessagesChatList"], [30, 1, 1, "", "XAMessagesDocument"], [30, 1, 1, "", "XAMessagesDocumentList"], [30, 1, 1, "", "XAMessagesFileTransfer"], [30, 1, 1, "", "XAMessagesFileTransferList"], [30, 1, 1, "", "XAMessagesParticipant"], [30, 1, 1, "", "XAMessagesParticipantList"], [30, 1, 1, "", "XAMessagesWindow"]], "PyXA.apps.Messages.XAMessagesAccount": [[30, 2, 1, "", "chats"], [30, 4, 1, "", "connection_status"], [30, 4, 1, "", "enabled"], [30, 2, 1, "", "get_clipboard_representation"], [30, 4, 1, "", "id"], [30, 4, 1, "", "object_description"], [30, 2, 1, "", "participants"], [30, 4, 1, "", "service_type"]], "PyXA.apps.Messages.XAMessagesAccountList": [[30, 2, 1, "", "by_connection_status"], [30, 2, 1, "", "by_enabled"], [30, 2, 1, "", "by_id"], [30, 2, 1, "", "by_object_description"], [30, 2, 1, "", "by_service_type"], [30, 2, 1, "", "connection_status"], [30, 2, 1, "", "enabled"], [30, 2, 1, "", "get_clipboard_representation"], [30, 2, 1, "", "id"], [30, 2, 1, "", "object_description"], [30, 2, 1, "", "service_type"]], "PyXA.apps.Messages.XAMessagesApplication": [[30, 1, 1, "", "ConnectionStatus"], [30, 1, 1, "", "MessageDirection"], [30, 1, 1, "", "ServiceType"], [30, 1, 1, "", "TransferStatus"], [30, 2, 1, "", "accounts"], [30, 2, 1, "", "chats"], [30, 2, 1, "", "documents"], [30, 2, 1, "", "file_transfers"], [30, 4, 1, "", "frontmost"], [30, 4, 1, "", "name"], [30, 2, 1, "", "participants"], [30, 2, 1, "", "print"], [30, 2, 1, "", "send"], [30, 4, 1, "", "version"]], "PyXA.apps.Messages.XAMessagesApplication.ConnectionStatus": [[30, 3, 1, "", "CONNECTED"], [30, 3, 1, "", "CONNECTING"], [30, 3, 1, "", "DISCONNECTED"], [30, 3, 1, "", "DISCONNECTING"]], "PyXA.apps.Messages.XAMessagesApplication.MessageDirection": [[30, 3, 1, "", "INCOMING"], [30, 3, 1, "", "OUTGOING"]], "PyXA.apps.Messages.XAMessagesApplication.ServiceType": [[30, 3, 1, "", "IMESSAGE"], [30, 3, 1, "", "SMS"]], "PyXA.apps.Messages.XAMessagesApplication.TransferStatus": [[30, 3, 1, "", "FAILED"], [30, 3, 1, "", "FINALIZING"], [30, 3, 1, "", "FINISHED"], [30, 3, 1, "", "PREPARING"], [30, 3, 1, "", "TRANSFERRING"], [30, 3, 1, "", "WAITING"]], "PyXA.apps.Messages.XAMessagesChat": [[30, 4, 1, "", "account"], [30, 2, 1, "", "get_clipboard_representation"], [30, 4, 1, "", "id"], [30, 4, 1, "", "name"], [30, 2, 1, "", "participants"], [30, 2, 1, "", "send"]], "PyXA.apps.Messages.XAMessagesChatList": [[30, 2, 1, "", "account"], [30, 2, 1, "", "by_account"], [30, 2, 1, "", "by_id"], [30, 2, 1, "", "by_name"], [30, 2, 1, "", "by_participants"], [30, 2, 1, "", "get_clipboard_representation"], [30, 2, 1, "", "id"], [30, 2, 1, "", "name"], [30, 2, 1, "", "participants"]], "PyXA.apps.Messages.XAMessagesDocument": [[30, 4, 1, "", "file"], [30, 4, 1, "", "modified"], [30, 4, 1, "", "name"]], "PyXA.apps.Messages.XAMessagesDocumentList": [[30, 2, 1, "", "by_file"], [30, 2, 1, "", "by_modified"], [30, 2, 1, "", "by_name"], [30, 2, 1, "", "file"], [30, 2, 1, "", "modified"], [30, 2, 1, "", "name"]], "PyXA.apps.Messages.XAMessagesFileTransfer": [[30, 4, 1, "", "account"], [30, 4, 1, "", "direction"], [30, 4, 1, "", "file_path"], [30, 4, 1, "", "file_progress"], [30, 4, 1, "", "file_size"], [30, 2, 1, "", "get_clipboard_representation"], [30, 4, 1, "", "id"], [30, 4, 1, "", "name"], [30, 4, 1, "", "participant"], [30, 4, 1, "", "started"], [30, 4, 1, "", "transfer_status"]], "PyXA.apps.Messages.XAMessagesFileTransferList": [[30, 2, 1, "", "account"], [30, 2, 1, "", "by_account"], [30, 2, 1, "", "by_direction"], [30, 2, 1, "", "by_file_path"], [30, 2, 1, "", "by_file_progress"], [30, 2, 1, "", "by_file_size"], [30, 2, 1, "", "by_id"], [30, 2, 1, "", "by_name"], [30, 2, 1, "", "by_participant"], [30, 2, 1, "", "by_started"], [30, 2, 1, "", "by_transfer_status"], [30, 2, 1, "", "direction"], [30, 2, 1, "", "file_path"], [30, 2, 1, "", "file_progress"], [30, 2, 1, "", "file_size"], [30, 2, 1, "", "filter"], [30, 2, 1, "", "get_clipboard_representation"], [30, 2, 1, "", "id"], [30, 2, 1, "", "name"], [30, 2, 1, "", "participant"], [30, 2, 1, "", "started"], [30, 2, 1, "", "transfer_status"]], "PyXA.apps.Messages.XAMessagesParticipant": [[30, 4, 1, "", "account"], [30, 4, 1, "", "first_name"], [30, 4, 1, "", "full_name"], [30, 2, 1, "", "get_clipboard_representation"], [30, 4, 1, "", "handle"], [30, 4, 1, "", "id"], [30, 4, 1, "", "last_name"], [30, 4, 1, "", "name"]], "PyXA.apps.Messages.XAMessagesParticipantList": [[30, 2, 1, "", "account"], [30, 2, 1, "", "by_account"], [30, 2, 1, "", "by_first_name"], [30, 2, 1, "", "by_full_name"], [30, 2, 1, "", "by_handle"], [30, 2, 1, "", "by_id"], [30, 2, 1, "", "by_last_name"], [30, 2, 1, "", "by_name"], [30, 2, 1, "", "first_name"], [30, 2, 1, "", "full_name"], [30, 2, 1, "", "get_clipboard_representation"], [30, 2, 1, "", "handle"], [30, 2, 1, "", "id"], [30, 2, 1, "", "last_name"], [30, 2, 1, "", "name"]], "PyXA.apps.Messages.XAMessagesWindow": [[30, 4, 1, "", "bounds"], [30, 4, 1, "", "closeable"], [30, 4, 1, "", "document"], [30, 4, 1, "", "id"], [30, 4, 1, "", "index"], [30, 4, 1, "", "miniaturizable"], [30, 4, 1, "", "miniaturized"], [30, 4, 1, "", "name"], [30, 4, 1, "", "resizable"], [30, 4, 1, "", "visible"], [30, 4, 1, "", "zoomable"], [30, 4, 1, "", "zoomed"]], "PyXA.apps.Music": [[31, 1, 1, "", "XAMusicAirPlayDevice"], [31, 1, 1, "", "XAMusicAirPlayDeviceList"], [31, 1, 1, "", "XAMusicApplication"], [31, 1, 1, "", "XAMusicAudioCDPlaylist"], [31, 1, 1, "", "XAMusicAudioCDPlaylistList"], [31, 1, 1, "", "XAMusicAudioCDTrack"], [31, 1, 1, "", "XAMusicAudioCDTrackList"], [31, 1, 1, "", "XAMusicEQPreset"], [31, 1, 1, "", "XAMusicEQPresetList"], [31, 1, 1, "", "XAMusicEQWindow"], [31, 1, 1, "", "XAMusicEQWindowList"], [31, 1, 1, "", "XAMusicEncoder"], [31, 1, 1, "", "XAMusicEncoderList"], [31, 1, 1, "", "XAMusicMiniplayerWindow"], [31, 1, 1, "", "XAMusicMiniplayerWindowList"], [31, 1, 1, "", "XAMusicPlaylist"], [31, 1, 1, "", "XAMusicPlaylistList"], [31, 1, 1, "", "XAMusicRadioTunerPlaylist"], [31, 1, 1, "", "XAMusicRadioTunerPlaylistList"], [31, 1, 1, "", "XAMusicSource"], [31, 1, 1, "", "XAMusicSourceList"], [31, 1, 1, "", "XAMusicSubscriptionPlaylist"], [31, 1, 1, "", "XAMusicSubscriptionPlaylistList"], [31, 1, 1, "", "XAMusicTrack"], [31, 1, 1, "", "XAMusicTrackList"], [31, 1, 1, "", "XAMusicUserPlaylist"], [31, 1, 1, "", "XAMusicUserPlaylistList"], [31, 1, 1, "", "XAMusicVisual"], [31, 1, 1, "", "XAMusicVisualList"], [31, 1, 1, "", "XAMusicWindow"], [31, 1, 1, "", "XAMusicWindowList"]], "PyXA.apps.Music.XAMusicAirPlayDevice": [[31, 4, 1, "", "active"], [31, 4, 1, "", "available"], [31, 4, 1, "", "kind"], [31, 4, 1, "", "network_address"], [31, 4, 1, "", "protected"], [31, 4, 1, "", "selected"], [31, 4, 1, "", "sound_volume"], [31, 4, 1, "", "supports_audio"], [31, 4, 1, "", "supports_video"]], "PyXA.apps.Music.XAMusicAirPlayDeviceList": [[31, 2, 1, "", "active"], [31, 2, 1, "", "available"], [31, 2, 1, "", "by_active"], [31, 2, 1, "", "by_available"], [31, 2, 1, "", "by_kind"], [31, 2, 1, "", "by_network_address"], [31, 2, 1, "", "by_protected"], [31, 2, 1, "", "by_selected"], [31, 2, 1, "", "by_sound_volume"], [31, 2, 1, "", "by_supports_audio"], [31, 2, 1, "", "by_supports_video"], [31, 2, 1, "", "kind"], [31, 2, 1, "", "network_address"], [31, 2, 1, "", "protected"], [31, 2, 1, "", "selected"], [31, 2, 1, "", "sound_volume"], [31, 2, 1, "", "supports_audio"]], "PyXA.apps.Music.XAMusicApplication": [[31, 1, 1, "", "DeviceKind"], [31, 1, 1, "", "PrintSetting"], [31, 1, 1, "", "RepeatMode"], [31, 1, 1, "", "ShuffleMode"], [31, 2, 1, "", "add_to_playlist"], [31, 2, 1, "", "airplay_devices"], [31, 4, 1, "", "airplay_enabled"], [31, 4, 1, "", "converting"], [31, 4, 1, "", "current_airplay_devices"], [31, 4, 1, "", "current_encoder"], [31, 4, 1, "", "current_eq_preset"], [31, 4, 1, "", "current_track"], [31, 4, 1, "", "current_visual"], [31, 2, 1, "", "encoders"], [31, 4, 1, "", "eq_enabled"], [31, 2, 1, "", "eq_presets"], [31, 2, 1, "", "eq_windows"], [31, 1, 1, "", "iCloudStatus"], [31, 2, 1, "", "miniplayer_windows"], [31, 4, 1, "", "shuffle_enabled"], [31, 4, 1, "", "shuffle_mode"], [31, 4, 1, "", "song_repeat"], [31, 2, 1, "", "tracks"], [31, 2, 1, "", "visuals"], [31, 4, 1, "", "visuals_enabled"]], "PyXA.apps.Music.XAMusicApplication.DeviceKind": [[31, 3, 1, "", "AIRPLAY_DEVICE"], [31, 3, 1, "", "AIRPORT_EXPRESS"], [31, 3, 1, "", "APPLE_TV"], [31, 3, 1, "", "BLUETOOTH_DEVICE"], [31, 3, 1, "", "COMPUTER"], [31, 3, 1, "", "HOMEPOD"], [31, 3, 1, "", "UNKNOWN"]], "PyXA.apps.Music.XAMusicApplication.PrintSetting": [[31, 3, 1, "", "ALBUM_LISTING"], [31, 3, 1, "", "CD_INSERT"], [31, 3, 1, "", "DETAILED_ERROR_HANDLING"], [31, 3, 1, "", "STANDARD_ERROR_HANDLING"], [31, 3, 1, "", "TRACK_LISTING"]], "PyXA.apps.Music.XAMusicApplication.RepeatMode": [[31, 3, 1, "", "ALL"], [31, 3, 1, "", "OFF"], [31, 3, 1, "", "ONE"]], "PyXA.apps.Music.XAMusicApplication.ShuffleMode": [[31, 3, 1, "", "ALBUMS"], [31, 3, 1, "", "GROUPINGS"], [31, 3, 1, "", "SONGS"]], "PyXA.apps.Music.XAMusicApplication.iCloudStatus": [[31, 3, 1, "", "DUPLICATE"], [31, 3, 1, "", "ERROR"], [31, 3, 1, "", "INELIGIBLE"], [31, 3, 1, "", "MATCHED"], [31, 3, 1, "", "NOT_UPLOADED"], [31, 3, 1, "", "NO_LONGER_AVAILABLE"], [31, 3, 1, "", "PURCHASED"], [31, 3, 1, "", "REMOVED"], [31, 3, 1, "", "SUBSCRIPTION"], [31, 3, 1, "", "UNKNOWN"], [31, 3, 1, "", "UPLOADED"]], "PyXA.apps.Music.XAMusicAudioCDPlaylist": [[31, 4, 1, "", "artist"], [31, 2, 1, "", "audio_cd_tracks"], [31, 4, 1, "", "compilation"], [31, 4, 1, "", "composer"], [31, 4, 1, "", "disc_count"], [31, 4, 1, "", "disc_number"], [31, 4, 1, "", "genre"], [31, 4, 1, "", "year"]], "PyXA.apps.Music.XAMusicAudioCDPlaylistList": [[31, 2, 1, "", "artist"], [31, 2, 1, "", "by_artist"], [31, 2, 1, "", "by_compilation"], [31, 2, 1, "", "by_composer"], [31, 2, 1, "", "by_disc_count"], [31, 2, 1, "", "by_disc_number"], [31, 2, 1, "", "by_genre"], [31, 2, 1, "", "by_year"], [31, 2, 1, "", "compilation"], [31, 2, 1, "", "composer"], [31, 2, 1, "", "disc_count"], [31, 2, 1, "", "disc_number"], [31, 2, 1, "", "genre"], [31, 2, 1, "", "year"]], "PyXA.apps.Music.XAMusicAudioCDTrack": [[31, 4, 1, "", "location"]], "PyXA.apps.Music.XAMusicAudioCDTrackList": [[31, 2, 1, "", "by_location"], [31, 2, 1, "", "location"]], "PyXA.apps.Music.XAMusicEQPreset": [[31, 4, 1, "", "band1"], [31, 4, 1, "", "band10"], [31, 4, 1, "", "band2"], [31, 4, 1, "", "band3"], [31, 4, 1, "", "band4"], [31, 4, 1, "", "band5"], [31, 4, 1, "", "band6"], [31, 4, 1, "", "band7"], [31, 4, 1, "", "band8"], [31, 4, 1, "", "band9"], [31, 4, 1, "", "modifiable"], [31, 4, 1, "", "preamp"], [31, 4, 1, "", "update_tracks"]], "PyXA.apps.Music.XAMusicEQPresetList": [[31, 2, 1, "", "band1"], [31, 2, 1, "", "band10"], [31, 2, 1, "", "band2"], [31, 2, 1, "", "band3"], [31, 2, 1, "", "band4"], [31, 2, 1, "", "band5"], [31, 2, 1, "", "band6"], [31, 2, 1, "", "band7"], [31, 2, 1, "", "band8"], [31, 2, 1, "", "band9"], [31, 2, 1, "", "by_band1"], [31, 2, 1, "", "by_band10"], [31, 2, 1, "", "by_band2"], [31, 2, 1, "", "by_band3"], [31, 2, 1, "", "by_band4"], [31, 2, 1, "", "by_band5"], [31, 2, 1, "", "by_band6"], [31, 2, 1, "", "by_band7"], [31, 2, 1, "", "by_band8"], [31, 2, 1, "", "by_band9"], [31, 2, 1, "", "by_modifiable"], [31, 2, 1, "", "by_preamp"], [31, 2, 1, "", "by_update_tracks"], [31, 2, 1, "", "modifiable"], [31, 2, 1, "", "preamp"], [31, 2, 1, "", "update_tracks"]], "PyXA.apps.Music.XAMusicEncoder": [[31, 4, 1, "", "format"]], "PyXA.apps.Music.XAMusicEncoderList": [[31, 2, 1, "", "by_format"], [31, 2, 1, "", "format"]], "PyXA.apps.Music.XAMusicPlaylist": [[31, 4, 1, "", "disliked"], [31, 4, 1, "", "loved"], [31, 2, 1, "", "search"], [31, 2, 1, "", "tracks"]], "PyXA.apps.Music.XAMusicPlaylistList": [[31, 2, 1, "", "by_disliked"], [31, 2, 1, "", "by_loved"], [31, 2, 1, "", "disliked"], [31, 2, 1, "", "loved"]], "PyXA.apps.Music.XAMusicRadioTunerPlaylist": [[31, 2, 1, "", "url_tracks"]], "PyXA.apps.Music.XAMusicSource": [[31, 2, 1, "", "audio_cd_playlists"], [31, 2, 1, "", "radio_tuner_playlists"], [31, 2, 1, "", "subscription_playlists"]], "PyXA.apps.Music.XAMusicSubscriptionPlaylist": [[31, 2, 1, "", "file_tracks"], [31, 2, 1, "", "url_tracks"]], "PyXA.apps.Music.XAMusicTrack": [[31, 4, 1, "", "album_artist"], [31, 4, 1, "", "album_disliked"], [31, 4, 1, "", "album_loved"], [31, 4, 1, "", "artist"], [31, 4, 1, "", "bpm"], [31, 4, 1, "", "cloud_status"], [31, 4, 1, "", "compilation"], [31, 4, 1, "", "composer"], [31, 4, 1, "", "disliked"], [31, 4, 1, "", "eq"], [31, 4, 1, "", "gapless"], [31, 4, 1, "", "loved"], [31, 4, 1, "", "lyrics"], [31, 4, 1, "", "movement"], [31, 4, 1, "", "movement_count"], [31, 4, 1, "", "movement_number"], [31, 4, 1, "", "shufflable"], [31, 4, 1, "", "sort_album_artist"], [31, 4, 1, "", "sort_artist"], [31, 4, 1, "", "sort_composer"], [31, 4, 1, "", "work"]], "PyXA.apps.Music.XAMusicTrackList": [[31, 2, 1, "", "album_artist"], [31, 2, 1, "", "album_disliked"], [31, 2, 1, "", "album_loved"], [31, 2, 1, "", "artist"], [31, 2, 1, "", "bpm"], [31, 2, 1, "", "by_album_artist"], [31, 2, 1, "", "by_album_disliked"], [31, 2, 1, "", "by_album_loved"], [31, 2, 1, "", "by_artist"], [31, 2, 1, "", "by_bpm"], [31, 2, 1, "", "by_cloud_status"], [31, 2, 1, "", "by_compilation"], [31, 2, 1, "", "by_composer"], [31, 2, 1, "", "by_disliked"], [31, 2, 1, "", "by_eq"], [31, 2, 1, "", "by_gapless"], [31, 2, 1, "", "by_loved"], [31, 2, 1, "", "by_lyrics"], [31, 2, 1, "", "by_modification_date"], [31, 2, 1, "", "by_movement"], [31, 2, 1, "", "by_movement_count"], [31, 2, 1, "", "by_movement_number"], [31, 2, 1, "", "by_shufflable"], [31, 2, 1, "", "by_sort_album_artist"], [31, 2, 1, "", "by_sort_artist"], [31, 2, 1, "", "by_sort_composer"], [31, 2, 1, "", "by_work"], [31, 2, 1, "", "cloud_status"], [31, 2, 1, "", "compilation"], [31, 2, 1, "", "composer"], [31, 2, 1, "", "disliked"], [31, 2, 1, "", "eq"], [31, 2, 1, "", "gapless"], [31, 2, 1, "", "loved"], [31, 2, 1, "", "lyrics"], [31, 2, 1, "", "movement"], [31, 2, 1, "", "movement_count"], [31, 2, 1, "", "movement_number"], [31, 2, 1, "", "shufflable"], [31, 2, 1, "", "sort_album_artist"], [31, 2, 1, "", "sort_artist"], [31, 2, 1, "", "sort_composer"], [31, 2, 1, "", "work"]], "PyXA.apps.Music.XAMusicUserPlaylist": [[31, 4, 1, "", "genius"]], "PyXA.apps.Music.XAMusicUserPlaylistList": [[31, 2, 1, "", "by_genius"], [31, 2, 1, "", "genius"]], "PyXA.apps.Notes": [[33, 1, 1, "", "XANote"], [33, 1, 1, "", "XANoteAttachment"], [33, 1, 1, "", "XANoteList"], [33, 1, 1, "", "XANotesAccount"], [33, 1, 1, "", "XANotesAccountList"], [33, 1, 1, "", "XANotesApplication"], [33, 1, 1, "", "XANotesAttachmentList"], [33, 1, 1, "", "XANotesDocument"], [33, 1, 1, "", "XANotesDocumentList"], [33, 1, 1, "", "XANotesFolder"], [33, 1, 1, "", "XANotesFolderList"], [33, 1, 1, "", "XANotesWindow"]], "PyXA.apps.Notes.XANote": [[33, 2, 1, "", "attachments"], [33, 4, 1, "", "body"], [33, 4, 1, "", "container"], [33, 4, 1, "", "creation_date"], [33, 2, 1, "", "get_clipboard_representation"], [33, 4, 1, "", "id"], [33, 4, 1, "", "modification_date"], [33, 2, 1, "", "move_to"], [33, 4, 1, "", "name"], [33, 4, 1, "", "password_protected"], [33, 4, 1, "", "plaintext"], [33, 4, 1, "", "shared"], [33, 2, 1, "", "show"], [33, 2, 1, "", "show_separately"]], "PyXA.apps.Notes.XANoteAttachment": [[33, 4, 1, "", "container"], [33, 4, 1, "", "content_identifier"], [33, 4, 1, "", "creation_date"], [33, 2, 1, "", "delete"], [33, 2, 1, "", "get_clipboard_representation"], [33, 4, 1, "", "id"], [33, 4, 1, "", "modification_date"], [33, 4, 1, "", "name"], [33, 2, 1, "", "save"], [33, 4, 1, "", "shared"], [33, 2, 1, "", "show"], [33, 2, 1, "", "show_separately"], [33, 4, 1, "", "url"]], "PyXA.apps.Notes.XANoteList": [[33, 2, 1, "", "attachments"], [33, 2, 1, "", "body"], [33, 2, 1, "", "by_body"], [33, 2, 1, "", "by_container"], [33, 2, 1, "", "by_creation_date"], [33, 2, 1, "", "by_id"], [33, 2, 1, "", "by_modification_date"], [33, 2, 1, "", "by_name"], [33, 2, 1, "", "by_password_protected"], [33, 2, 1, "", "by_plaintext"], [33, 2, 1, "", "by_shared"], [33, 2, 1, "", "container"], [33, 2, 1, "", "creation_date"], [33, 2, 1, "", "get_clipboard_representation"], [33, 2, 1, "", "id"], [33, 2, 1, "", "modification_date"], [33, 2, 1, "", "name"], [33, 2, 1, "", "password_protected"], [33, 2, 1, "", "plaintext"], [33, 2, 1, "", "shared"], [33, 2, 1, "", "show_separately"]], "PyXA.apps.Notes.XANotesAccount": [[33, 4, 1, "", "default_folder"], [33, 2, 1, "", "folders"], [33, 2, 1, "", "get_clipboard_representation"], [33, 4, 1, "", "id"], [33, 4, 1, "", "name"], [33, 2, 1, "", "notes"], [33, 2, 1, "", "show"], [33, 4, 1, "", "upgraded"]], "PyXA.apps.Notes.XANotesAccountList": [[33, 2, 1, "", "by_default_folder"], [33, 2, 1, "", "by_id"], [33, 2, 1, "", "by_name"], [33, 2, 1, "", "by_upgraded"], [33, 2, 1, "", "default_folder"], [33, 2, 1, "", "folders"], [33, 2, 1, "", "get_clipboard_representation"], [33, 2, 1, "", "id"], [33, 2, 1, "", "name"], [33, 2, 1, "", "notes"], [33, 2, 1, "", "upgraded"]], "PyXA.apps.Notes.XANotesApplication": [[33, 1, 1, "", "FileFormat"], [33, 2, 1, "", "accounts"], [33, 2, 1, "", "attachments"], [33, 4, 1, "", "default_account"], [33, 2, 1, "", "documents"], [33, 2, 1, "", "folders"], [33, 4, 1, "", "frontmost"], [33, 2, 1, "", "make"], [33, 4, 1, "", "name"], [33, 2, 1, "", "new_folder"], [33, 2, 1, "", "new_note"], [33, 2, 1, "", "notes"], [33, 2, 1, "", "open"], [33, 4, 1, "", "selection"], [33, 4, 1, "", "version"]], "PyXA.apps.Notes.XANotesApplication.FileFormat": [[33, 3, 1, "", "NATIVE"]], "PyXA.apps.Notes.XANotesAttachmentList": [[33, 2, 1, "", "by_container"], [33, 2, 1, "", "by_content_identifier"], [33, 2, 1, "", "by_creation_date"], [33, 2, 1, "", "by_id"], [33, 2, 1, "", "by_modification_date"], [33, 2, 1, "", "by_name"], [33, 2, 1, "", "by_shared"], [33, 2, 1, "", "by_url"], [33, 2, 1, "", "container"], [33, 2, 1, "", "content_identifier"], [33, 2, 1, "", "creation_date"], [33, 2, 1, "", "id"], [33, 2, 1, "", "modification_date"], [33, 2, 1, "", "name"], [33, 2, 1, "", "save"], [33, 2, 1, "", "shared"], [33, 2, 1, "", "url"]], "PyXA.apps.Notes.XANotesDocument": [[33, 4, 1, "", "file"], [33, 2, 1, "", "get_clipboard_representation"], [33, 4, 1, "", "modified"], [33, 4, 1, "", "name"]], "PyXA.apps.Notes.XANotesDocumentList": [[33, 2, 1, "", "by_file"], [33, 2, 1, "", "by_modified"], [33, 2, 1, "", "by_name"], [33, 2, 1, "", "file"], [33, 2, 1, "", "get_clipboard_representation"], [33, 2, 1, "", "modified"], [33, 2, 1, "", "name"]], "PyXA.apps.Notes.XANotesFolder": [[33, 4, 1, "", "container"], [33, 2, 1, "", "delete"], [33, 2, 1, "", "get_clipboard_representation"], [33, 4, 1, "", "id"], [33, 4, 1, "", "name"], [33, 2, 1, "", "notes"], [33, 4, 1, "", "shared"], [33, 2, 1, "", "show"]], "PyXA.apps.Notes.XANotesFolderList": [[33, 2, 1, "", "by_container"], [33, 2, 1, "", "by_id"], [33, 2, 1, "", "by_name"], [33, 2, 1, "", "by_shared"], [33, 2, 1, "", "container"], [33, 2, 1, "", "folders"], [33, 2, 1, "", "get_clipboard_representation"], [33, 2, 1, "", "id"], [33, 2, 1, "", "name"], [33, 2, 1, "", "notes"], [33, 2, 1, "", "shared"]], "PyXA.apps.Notes.XANotesWindow": [[33, 4, 1, "", "document"]], "PyXA.apps.OmniOutliner": [[34, 1, 1, "", "XAOmniOutlinerAncestor"], [34, 1, 1, "", "XAOmniOutlinerAncestorList"], [34, 1, 1, "", "XAOmniOutlinerApplication"], [34, 1, 1, "", "XAOmniOutlinerArchiveData"], [34, 1, 1, "", "XAOmniOutlinerAttribute"], [34, 1, 1, "", "XAOmniOutlinerAttributeList"], [34, 1, 1, "", "XAOmniOutlinerCell"], [34, 1, 1, "", "XAOmniOutlinerCellList"], [34, 1, 1, "", "XAOmniOutlinerChild"], [34, 1, 1, "", "XAOmniOutlinerChildList"], [34, 1, 1, "", "XAOmniOutlinerColumFormat"], [34, 1, 1, "", "XAOmniOutlinerColumn"], [34, 1, 1, "", "XAOmniOutlinerColumnList"], [34, 1, 1, "", "XAOmniOutlinerConduitSettingDomain"], [34, 1, 1, "", "XAOmniOutlinerConduitSettingDomainList"], [34, 1, 1, "", "XAOmniOutlinerDocument"], [34, 1, 1, "", "XAOmniOutlinerDocumentList"], [34, 1, 1, "", "XAOmniOutlinerDocumentType"], [34, 1, 1, "", "XAOmniOutlinerDocumentTypeList"], [34, 1, 1, "", "XAOmniOutlinerEnumeration"], [34, 1, 1, "", "XAOmniOutlinerEnumerationList"], [34, 1, 1, "", "XAOmniOutlinerFileAttachment"], [34, 1, 1, "", "XAOmniOutlinerFileAttachmentList"], [34, 1, 1, "", "XAOmniOutlinerFollowingSibling"], [34, 1, 1, "", "XAOmniOutlinerFollowingSiblingList"], [34, 1, 1, "", "XAOmniOutlinerGenericColor"], [34, 1, 1, "", "XAOmniOutlinerLeaf"], [34, 1, 1, "", "XAOmniOutlinerLeafList"], [34, 1, 1, "", "XAOmniOutlinerLevelStyle"], [34, 1, 1, "", "XAOmniOutlinerLevelStyleList"], [34, 1, 1, "", "XAOmniOutlinerNamedStyle"], [34, 1, 1, "", "XAOmniOutlinerNamedStyleList"], [34, 1, 1, "", "XAOmniOutlinerPNGData"], [34, 1, 1, "", "XAOmniOutlinerPathComponent"], [34, 1, 1, "", "XAOmniOutlinerPathComponentList"], [34, 1, 1, "", "XAOmniOutlinerPoint"], [34, 1, 1, "", "XAOmniOutlinerPrecedingSibling"], [34, 1, 1, "", "XAOmniOutlinerPrecedingSiblingList"], [34, 1, 1, "", "XAOmniOutlinerPreference"], [34, 1, 1, "", "XAOmniOutlinerPreferenceList"], [34, 1, 1, "", "XAOmniOutlinerReadableDocumentType"], [34, 1, 1, "", "XAOmniOutlinerReadableDocumentTypeList"], [34, 1, 1, "", "XAOmniOutlinerRichText"], [34, 1, 1, "", "XAOmniOutlinerRichTextList"], [34, 1, 1, "", "XAOmniOutlinerRow"], [34, 1, 1, "", "XAOmniOutlinerRowList"], [34, 1, 1, "", "XAOmniOutlinerSection"], [34, 1, 1, "", "XAOmniOutlinerSectionList"], [34, 1, 1, "", "XAOmniOutlinerSelectedColumn"], [34, 1, 1, "", "XAOmniOutlinerSelectedColumnList"], [34, 1, 1, "", "XAOmniOutlinerSelectedRow"], [34, 1, 1, "", "XAOmniOutlinerSelectedRowList"], [34, 1, 1, "", "XAOmniOutlinerStyle"], [34, 1, 1, "", "XAOmniOutlinerStyleList"], [34, 1, 1, "", "XAOmniOutlinerTIFFData"], [34, 1, 1, "", "XAOmniOutlinerWindow"], [34, 1, 1, "", "XAOmniOutlinerWritableDocumentType"], [34, 1, 1, "", "XAOmniOutlinerWritableDocumentTypeList"], [34, 1, 1, "", "XAOmniOutlinerXslTransform"], [34, 1, 1, "", "XAOmniOutlinerXslTransformList"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication": [[34, 1, 1, "", "Alignment"], [34, 1, 1, "", "CheckboxState"], [34, 1, 1, "", "ColumnSummaryType"], [34, 1, 1, "", "ColumnType"], [34, 1, 1, "", "DisplayType"], [34, 1, 1, "", "FormatStyle"], [34, 1, 1, "", "SortOrder"], [34, 4, 1, "", "build_number"], [34, 2, 1, "", "document_types"], [34, 2, 1, "", "documents"], [34, 4, 1, "", "frontmost"], [34, 4, 1, "", "imported_files_should_store_compressed"], [34, 4, 1, "", "name"], [34, 2, 1, "", "preferences"], [34, 4, 1, "", "prompt_on_file_format_upgrade"], [34, 2, 1, "", "readable_document_types"], [34, 2, 1, "", "test"], [34, 4, 1, "", "version"], [34, 2, 1, "", "writable_document_types"], [34, 2, 1, "", "xsl_transforms"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.Alignment": [[34, 3, 1, "", "CENTER"], [34, 3, 1, "", "JUSTIFIED"], [34, 3, 1, "", "LEFT"], [34, 3, 1, "", "NATURAL"], [34, 3, 1, "", "RIGHT"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.CheckboxState": [[34, 3, 1, "", "CHECKED"], [34, 3, 1, "", "INDETERMINATE"], [34, 3, 1, "", "NONE"], [34, 3, 1, "", "UNCHECKED"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.ColumnSummaryType": [[34, 3, 1, "", "AVERAGE"], [34, 3, 1, "", "CALCULATED"], [34, 3, 1, "", "HIDDEN"], [34, 3, 1, "", "MAXIMUM"], [34, 3, 1, "", "MINIMUM"], [34, 3, 1, "", "NONE"], [34, 3, 1, "", "TOTAL"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.ColumnType": [[34, 3, 1, "", "CHECKBOX"], [34, 3, 1, "", "DATETIME"], [34, 3, 1, "", "DURATION"], [34, 3, 1, "", "NUMERIC"], [34, 3, 1, "", "POPUP"], [34, 3, 1, "", "STYLED_TEXT"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.DisplayType": [[34, 3, 1, "", "INLINE"], [34, 3, 1, "", "OUT_OF_LINE"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.FormatStyle": [[34, 3, 1, "", "FULL"], [34, 3, 1, "", "LONG"], [34, 3, 1, "", "MEDIUM"], [34, 3, 1, "", "SHORT"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.SortOrder": [[34, 3, 1, "", "ASCENDING"], [34, 3, 1, "", "DESCENDING"], [34, 3, 1, "", "NONE"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerAttribute": [[34, 2, 1, "", "clear"], [34, 4, 1, "", "default_value"], [34, 4, 1, "", "defining_style"], [34, 4, 1, "", "has_local_value"], [34, 4, 1, "", "name"], [34, 4, 1, "", "style"], [34, 4, 1, "", "value"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerCell": [[34, 4, 1, "", "column"], [34, 4, 1, "", "id"], [34, 4, 1, "", "name"], [34, 2, 1, "", "replace"], [34, 4, 1, "", "row"], [34, 4, 1, "", "state"], [34, 4, 1, "", "text"], [34, 4, 1, "", "value"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerColumFormat": [[34, 4, 1, "", "calendar"], [34, 4, 1, "", "currency"], [34, 4, 1, "", "date_style"], [34, 4, 1, "", "format"], [34, 4, 1, "", "id"], [34, 4, 1, "", "locale"], [34, 4, 1, "", "time_style"], [34, 4, 1, "", "timezone"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerColumn": [[34, 4, 1, "", "alignment"], [34, 4, 1, "", "background_color"], [34, 4, 1, "", "column_format"], [34, 4, 1, "", "column_style"], [34, 4, 1, "", "column_type"], [34, 4, 1, "", "document"], [34, 2, 1, "", "enumerations"], [34, 4, 1, "", "format_string"], [34, 4, 1, "", "id"], [34, 4, 1, "", "index"], [34, 2, 1, "", "move_to"], [34, 4, 1, "", "name"], [34, 4, 1, "", "sort_order"], [34, 4, 1, "", "summary_type"], [34, 4, 1, "", "title"], [34, 4, 1, "", "visible"], [34, 4, 1, "", "width"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerConduitSettingDomain": [[34, 4, 1, "", "container"], [34, 4, 1, "", "external_id"], [34, 4, 1, "", "id"], [34, 4, 1, "", "settings"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument": [[34, 2, 1, "", "add"], [34, 2, 1, "", "add_to"], [34, 4, 1, "", "alternate_color"], [34, 4, 1, "", "background_color"], [34, 4, 1, "", "canredo"], [34, 4, 1, "", "canundo"], [34, 2, 1, "", "children"], [34, 4, 1, "", "children_are_sections"], [34, 2, 1, "", "collapse_all"], [34, 4, 1, "", "column_title_style"], [34, 2, 1, "", "columns"], [34, 4, 1, "", "editable"], [34, 2, 1, "", "expand_all"], [34, 2, 1, "", "export"], [34, 4, 1, "", "file"], [34, 4, 1, "", "folded_editing_enabled"], [34, 2, 1, "", "group"], [34, 4, 1, "", "has_subtopics"], [34, 2, 1, "", "hoist"], [34, 4, 1, "", "horizontal_grid_color"], [34, 4, 1, "", "id"], [34, 2, 1, "", "leaves"], [34, 2, 1, "", "level_styles"], [34, 4, 1, "", "modified"], [34, 4, 1, "", "name"], [34, 2, 1, "", "named_styles"], [34, 4, 1, "", "note_column"], [34, 4, 1, "", "note_display"], [34, 4, 1, "", "notescolumnid"], [34, 2, 1, "", "pbcopy"], [34, 2, 1, "", "pbpaste"], [34, 2, 1, "", "redo"], [34, 2, 1, "", "remove"], [34, 2, 1, "", "remove_from"], [34, 2, 1, "", "rows"], [34, 4, 1, "", "save_identifier"], [34, 4, 1, "", "save_identifier_enabled"], [34, 2, 1, "", "sections"], [34, 2, 1, "", "select"], [34, 2, 1, "", "selected_columns"], [34, 2, 1, "", "selected_rows"], [34, 4, 1, "", "sorting_postponed"], [34, 4, 1, "", "status_sort_order"], [34, 4, 1, "", "status_visible"], [34, 4, 1, "", "store_compressed"], [34, 4, 1, "", "style"], [34, 4, 1, "", "title"], [34, 4, 1, "", "topic_column"], [34, 4, 1, "", "topiccolumnid"], [34, 2, 1, "", "undo"], [34, 4, 1, "", "undo_enabled"], [34, 2, 1, "", "ungroup"], [34, 2, 1, "", "unhoist"], [34, 4, 1, "", "vertical_grid_color"], [34, 4, 1, "", "visible"], [34, 4, 1, "", "writes_wrapper"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList": [[34, 2, 1, "", "alternate_color"], [34, 2, 1, "", "background_color"], [34, 2, 1, "", "canredo"], [34, 2, 1, "", "canundo"], [34, 2, 1, "", "children_are_sections"], [34, 2, 1, "", "column_title_style"], [34, 2, 1, "", "editable"], [34, 2, 1, "", "file"], [34, 2, 1, "", "folded_editing_enabled"], [34, 2, 1, "", "has_subtopics"], [34, 2, 1, "", "horizontal_grid_color"], [34, 2, 1, "", "id"], [34, 2, 1, "", "modified"], [34, 2, 1, "", "name"], [34, 2, 1, "", "note_column"], [34, 2, 1, "", "note_display"], [34, 2, 1, "", "notecolumnid"], [34, 2, 1, "", "save_identifier"], [34, 2, 1, "", "save_identifier_enabled"], [34, 2, 1, "", "sorting_postponed"], [34, 2, 1, "", "status_sort_order"], [34, 2, 1, "", "status_visible"], [34, 2, 1, "", "store_compressed"], [34, 2, 1, "", "style"], [34, 2, 1, "", "title"], [34, 2, 1, "", "topic_column"], [34, 2, 1, "", "topiccolumnid"], [34, 2, 1, "", "undo_enabled"], [34, 2, 1, "", "verticalGridColor"], [34, 2, 1, "", "visible"], [34, 2, 1, "", "writes_wrapper"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentType": [[34, 4, 1, "", "display_name"], [34, 4, 1, "", "file_extensions"], [34, 4, 1, "", "uti"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerEnumeration": [[34, 4, 1, "", "id"], [34, 4, 1, "", "index"], [34, 2, 1, "", "move_to"], [34, 4, 1, "", "name"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerFileAttachment": [[34, 4, 1, "", "embdedded"], [34, 4, 1, "", "file_name"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor": [[34, 4, 1, "", "a"], [34, 4, 1, "", "archive"], [34, 4, 1, "", "b"], [34, 4, 1, "", "c"], [34, 4, 1, "", "catalog"], [34, 4, 1, "", "g"], [34, 4, 1, "", "h"], [34, 4, 1, "", "k"], [34, 4, 1, "", "m"], [34, 4, 1, "", "name"], [34, 4, 1, "", "png"], [34, 4, 1, "", "r"], [34, 4, 1, "", "s"], [34, 4, 1, "", "tiff"], [34, 4, 1, "", "v"], [34, 4, 1, "", "w"], [34, 4, 1, "", "y"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerNamedStyle": [[34, 4, 1, "", "id"], [34, 4, 1, "", "name"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerPoint": [[34, 4, 1, "", "x"], [34, 4, 1, "", "y"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerPreference": [[34, 4, 1, "", "default_value"], [34, 4, 1, "", "id"], [34, 4, 1, "", "value"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerRichText": [[34, 4, 1, "", "alignment"], [34, 4, 1, "", "baseline_offset"], [34, 2, 1, "", "bold"], [34, 2, 1, "", "file_attachments"], [34, 2, 1, "", "italicize"], [34, 2, 1, "", "replace"], [34, 4, 1, "", "style"], [34, 4, 1, "", "superscript"], [34, 2, 1, "", "unbold"], [34, 2, 1, "", "underline"], [34, 4, 1, "", "underlined"], [34, 2, 1, "", "unitalicize"], [34, 2, 1, "", "ununderline"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerRow": [[34, 2, 1, "", "add"], [34, 2, 1, "", "add_to"], [34, 2, 1, "", "ancestors"], [34, 2, 1, "", "cells"], [34, 2, 1, "", "children"], [34, 4, 1, "", "children_are_sections"], [34, 2, 1, "", "collapse_all"], [34, 2, 1, "", "conduit_setting_domains"], [34, 4, 1, "", "document"], [34, 2, 1, "", "expand_all"], [34, 4, 1, "", "expanded"], [34, 2, 1, "", "following_siblings"], [34, 2, 1, "", "group"], [34, 4, 1, "", "has_subtopics"], [34, 2, 1, "", "hoist"], [34, 4, 1, "", "id"], [34, 2, 1, "", "import_file"], [34, 2, 1, "", "indent"], [34, 4, 1, "", "index"], [34, 2, 1, "", "leaves"], [34, 4, 1, "", "level"], [34, 4, 1, "", "name"], [34, 4, 1, "", "note"], [34, 4, 1, "", "note_cell"], [34, 4, 1, "", "note_expanded"], [34, 2, 1, "", "outdent"], [34, 2, 1, "", "paragraphs"], [34, 4, 1, "", "parent"], [34, 2, 1, "", "pbcopy"], [34, 2, 1, "", "pbpaste"], [34, 2, 1, "", "preceding_siblings"], [34, 2, 1, "", "remove"], [34, 2, 1, "", "remove_from"], [34, 2, 1, "", "rowpath"], [34, 2, 1, "", "rows"], [34, 2, 1, "", "sections"], [34, 4, 1, "", "selected"], [34, 2, 1, "", "selected_rows"], [34, 4, 1, "", "state"], [34, 4, 1, "", "style"], [34, 4, 1, "", "topic"], [34, 4, 1, "", "topic_cell"], [34, 2, 1, "", "ungroup"], [34, 4, 1, "", "visible"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerStyle": [[34, 2, 1, "", "attributes"], [34, 4, 1, "", "container"], [34, 4, 1, "", "font"], [34, 2, 1, "", "named_styles"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerWindow": [[34, 4, 1, "", "document"]], "PyXA.apps.OmniOutliner.XAOmniOutlinerXslTransform": [[34, 4, 1, "", "directory_extension"], [34, 4, 1, "", "directory_index_file_name"], [34, 4, 1, "", "display_name"], [34, 4, 1, "", "file_extension"], [34, 2, 1, "", "get_parameter"], [34, 4, 1, "", "id"], [34, 4, 1, "", "is_export"], [34, 4, 1, "", "is_import"], [34, 4, 1, "", "parameter_names"], [34, 4, 1, "", "result_format"], [34, 2, 1, "", "set_parameter"], [34, 4, 1, "", "source_format"], [34, 4, 1, "", "stylesheet"], [34, 4, 1, "", "write_attachments"]], "PyXA.apps.Pages": [[35, 1, 1, "", "XAPagesApplication"], [35, 1, 1, "", "XAPagesContainer"], [35, 1, 1, "", "XAPagesContainerList"], [35, 1, 1, "", "XAPagesDocument"], [35, 1, 1, "", "XAPagesDocumentList"], [35, 1, 1, "", "XAPagesPage"], [35, 1, 1, "", "XAPagesPageList"], [35, 1, 1, "", "XAPagesPlaceholderText"], [35, 1, 1, "", "XAPagesPlaceholderTextList"], [35, 1, 1, "", "XAPagesSection"], [35, 1, 1, "", "XAPagesSectionList"], [35, 1, 1, "", "XAPagesTemplate"], [35, 1, 1, "", "XAPagesTemplateList"], [35, 1, 1, "", "XAPagesWindow"]], "PyXA.apps.Pages.XAPagesApplication": [[35, 1, 1, "", "ExportFormat"], [35, 2, 1, "", "documents"], [35, 2, 1, "", "make"], [35, 2, 1, "", "new_document"], [35, 2, 1, "", "templates"]], "PyXA.apps.Pages.XAPagesApplication.ExportFormat": [[35, 3, 1, "", "EPUB"], [35, 3, 1, "", "MICROSOFT_WORD"], [35, 3, 1, "", "PAGES_09"], [35, 3, 1, "", "PDF"], [35, 3, 1, "", "PLAINTEXT"], [35, 3, 1, "", "Pages"], [35, 3, 1, "", "RTF"]], "PyXA.apps.Pages.XAPagesDocument": [[35, 2, 1, "", "audio_clips"], [35, 4, 1, "", "body_text"], [35, 2, 1, "", "charts"], [35, 4, 1, "", "current_page"], [35, 4, 1, "", "document_body"], [35, 4, 1, "", "document_template"], [35, 2, 1, "", "export"], [35, 4, 1, "", "facing_pages"], [35, 2, 1, "", "groups"], [35, 2, 1, "", "images"], [35, 2, 1, "", "iwork_items"], [35, 2, 1, "", "lines"], [35, 2, 1, "", "movies"], [35, 2, 1, "", "new_page"], [35, 2, 1, "", "pages"], [35, 2, 1, "", "placeholder_texts"], [35, 4, 1, "", "properties"], [35, 2, 1, "", "sections"], [35, 2, 1, "", "shapes"], [35, 2, 1, "", "tables"], [35, 2, 1, "", "text_items"]], "PyXA.apps.Pages.XAPagesDocumentList": [[35, 2, 1, "", "audio_clips"], [35, 2, 1, "", "body_text"], [35, 2, 1, "", "by_body_text"], [35, 2, 1, "", "by_current_page"], [35, 2, 1, "", "by_document_body"], [35, 2, 1, "", "by_document_template"], [35, 2, 1, "", "by_facing_pages"], [35, 2, 1, "", "by_file"], [35, 2, 1, "", "by_id"], [35, 2, 1, "", "by_modified"], [35, 2, 1, "", "by_name"], [35, 2, 1, "", "by_properties"], [35, 2, 1, "", "charts"], [35, 2, 1, "", "current_page"], [35, 2, 1, "", "document_body"], [35, 2, 1, "", "document_template"], [35, 2, 1, "", "facing_pages"], [35, 2, 1, "", "file"], [35, 2, 1, "", "groups"], [35, 2, 1, "", "id"], [35, 2, 1, "", "images"], [35, 2, 1, "", "iwork_items"], [35, 2, 1, "", "lines"], [35, 2, 1, "", "modified"], [35, 2, 1, "", "movies"], [35, 2, 1, "", "name"], [35, 2, 1, "", "pages"], [35, 2, 1, "", "placeholder_texts"], [35, 2, 1, "", "properties"], [35, 2, 1, "", "sections"], [35, 2, 1, "", "shapes"], [35, 2, 1, "", "tables"], [35, 2, 1, "", "text_items"]], "PyXA.apps.Pages.XAPagesPage": [[35, 2, 1, "", "add_image"], [35, 4, 1, "", "body_text"], [35, 4, 1, "", "properties"]], "PyXA.apps.Pages.XAPagesPageList": [[35, 2, 1, "", "body_text"], [35, 2, 1, "", "by_body_text"], [35, 2, 1, "", "by_properties"], [35, 2, 1, "", "properties"]], "PyXA.apps.Pages.XAPagesPlaceholderText": [[35, 4, 1, "", "tag"]], "PyXA.apps.Pages.XAPagesPlaceholderTextList": [[35, 2, 1, "", "by_tag"], [35, 2, 1, "", "tag"]], "PyXA.apps.Pages.XAPagesSection": [[35, 2, 1, "", "audio_clips"], [35, 4, 1, "", "body_text"], [35, 2, 1, "", "charts"], [35, 2, 1, "", "groups"], [35, 2, 1, "", "images"], [35, 2, 1, "", "iwork_items"], [35, 2, 1, "", "lines"], [35, 2, 1, "", "movies"], [35, 2, 1, "", "pages"], [35, 2, 1, "", "shapes"], [35, 2, 1, "", "tables"], [35, 2, 1, "", "text_items"]], "PyXA.apps.Pages.XAPagesSectionList": [[35, 2, 1, "", "audio_clips"], [35, 2, 1, "", "body_text"], [35, 2, 1, "", "by_body_text"], [35, 2, 1, "", "charts"], [35, 2, 1, "", "groups"], [35, 2, 1, "", "images"], [35, 2, 1, "", "iwork_items"], [35, 2, 1, "", "lines"], [35, 2, 1, "", "movies"], [35, 2, 1, "", "pages"], [35, 2, 1, "", "shapes"], [35, 2, 1, "", "tables"], [35, 2, 1, "", "text_items"]], "PyXA.apps.Pages.XAPagesTemplate": [[35, 4, 1, "", "id"], [35, 4, 1, "", "name"]], "PyXA.apps.Pages.XAPagesTemplateList": [[35, 2, 1, "", "by_id"], [35, 2, 1, "", "by_name"], [35, 2, 1, "", "id"], [35, 2, 1, "", "name"]], "PyXA.apps.Pages.XAPagesWindow": [[35, 4, 1, "", "document"]], "PyXA.apps.PhotosApp": [[36, 1, 1, "", "XAPhotosAlbum"], [36, 1, 1, "", "XAPhotosAlbumList"], [36, 1, 1, "", "XAPhotosApplication"], [36, 1, 1, "", "XAPhotosContainer"], [36, 1, 1, "", "XAPhotosContainerList"], [36, 1, 1, "", "XAPhotosFolder"], [36, 1, 1, "", "XAPhotosFolderList"], [36, 1, 1, "", "XAPhotosMediaItem"], [36, 1, 1, "", "XAPhotosMediaItemList"]], "PyXA.apps.PhotosApp.XAPhotosAlbum": [[36, 2, 1, "", "media_items"]], "PyXA.apps.PhotosApp.XAPhotosAlbumList": [[36, 2, 1, "", "push"]], "PyXA.apps.PhotosApp.XAPhotosApplication": [[36, 2, 1, "", "add"], [36, 2, 1, "", "albums"], [36, 2, 1, "", "containers"], [36, 2, 1, "", "export"], [36, 4, 1, "", "favorites_album"], [36, 2, 1, "", "folders"], [36, 4, 1, "", "frontmost"], [36, 2, 1, "", "import_files"], [36, 4, 1, "", "library_path"], [36, 2, 1, "", "make"], [36, 2, 1, "", "media_items"], [36, 4, 1, "", "name"], [36, 2, 1, "", "next_slide"], [36, 2, 1, "", "open"], [36, 2, 1, "", "pause_slideshow"], [36, 2, 1, "", "previous_slide"], [36, 4, 1, "", "properties"], [36, 4, 1, "", "recently_deleted_album"], [36, 2, 1, "", "resume_slideshow"], [36, 2, 1, "", "search"], [36, 4, 1, "", "selection"], [36, 4, 1, "", "slideshow_running"], [36, 2, 1, "", "start_slideshow"], [36, 2, 1, "", "stop_slideshow"], [36, 4, 1, "", "version"]], "PyXA.apps.PhotosApp.XAPhotosContainer": [[36, 2, 1, "", "get_clipboard_representation"], [36, 4, 1, "", "id"], [36, 4, 1, "", "name"], [36, 4, 1, "", "parent"], [36, 4, 1, "", "properties"], [36, 2, 1, "", "spotlight"]], "PyXA.apps.PhotosApp.XAPhotosContainerList": [[36, 2, 1, "", "by_id"], [36, 2, 1, "", "by_name"], [36, 2, 1, "", "by_parent"], [36, 2, 1, "", "by_properties"], [36, 2, 1, "", "get_clipboard_representation"], [36, 2, 1, "", "id"], [36, 2, 1, "", "name"], [36, 2, 1, "", "parent"], [36, 2, 1, "", "properties"]], "PyXA.apps.PhotosApp.XAPhotosFolder": [[36, 2, 1, "", "albums"], [36, 2, 1, "", "containers"], [36, 2, 1, "", "folders"]], "PyXA.apps.PhotosApp.XAPhotosFolderList": [[36, 2, 1, "", "push"]], "PyXA.apps.PhotosApp.XAPhotosMediaItem": [[36, 4, 1, "", "altitude"], [36, 4, 1, "", "creation_date"], [36, 2, 1, "", "duplicate"], [36, 4, 1, "", "duration"], [36, 4, 1, "", "favorite"], [36, 4, 1, "", "file_path"], [36, 4, 1, "", "filename"], [36, 2, 1, "", "get_clipboard_representation"], [36, 2, 1, "", "get_image_representation"], [36, 4, 1, "", "height"], [36, 4, 1, "", "id"], [36, 4, 1, "", "is_burst"], [36, 4, 1, "", "is_hidden"], [36, 4, 1, "", "is_photo"], [36, 4, 1, "", "is_video"], [36, 4, 1, "", "keywords"], [36, 4, 1, "", "location"], [36, 4, 1, "", "modification_date"], [36, 4, 1, "", "name"], [36, 4, 1, "", "object_description"], [36, 4, 1, "", "properties"], [36, 2, 1, "", "reveal_in_finder"], [36, 2, 1, "", "show_in_preview"], [36, 4, 1, "", "size"], [36, 2, 1, "", "spotlight"], [36, 4, 1, "", "width"]], "PyXA.apps.PhotosApp.XAPhotosMediaItemList": [[36, 2, 1, "", "altitude"], [36, 2, 1, "", "by_altitude"], [36, 2, 1, "", "by_date"], [36, 2, 1, "", "by_favorite"], [36, 2, 1, "", "by_filename"], [36, 2, 1, "", "by_height"], [36, 2, 1, "", "by_id"], [36, 2, 1, "", "by_keywords"], [36, 2, 1, "", "by_location"], [36, 2, 1, "", "by_object_description"], [36, 2, 1, "", "by_properties"], [36, 2, 1, "", "by_size"], [36, 2, 1, "", "by_title"], [36, 2, 1, "", "by_width"], [36, 2, 1, "", "creation_date"], [36, 2, 1, "", "duration"], [36, 2, 1, "", "favorite"], [36, 2, 1, "", "file_path"], [36, 2, 1, "", "filename"], [36, 2, 1, "", "get_clipboard_representation"], [36, 2, 1, "", "height"], [36, 2, 1, "", "id"], [36, 2, 1, "", "is_burst"], [36, 2, 1, "", "is_hidden"], [36, 2, 1, "", "is_photo"], [36, 2, 1, "", "is_video"], [36, 2, 1, "", "keywords"], [36, 2, 1, "", "location"], [36, 2, 1, "", "modification_date"], [36, 2, 1, "", "object_description"], [36, 2, 1, "", "properties"], [36, 2, 1, "", "size"], [36, 2, 1, "", "title"], [36, 2, 1, "", "width"]], "PyXA.apps.Preview": [[37, 1, 1, "", "XAPreviewApplication"], [37, 1, 1, "", "XAPreviewDocument"], [37, 1, 1, "", "XAPreviewDocumentList"], [37, 1, 1, "", "XAPreviewWindow"]], "PyXA.apps.Preview.XAPreviewApplication": [[37, 2, 1, "", "documents"], [37, 4, 1, "", "frontmost"], [37, 4, 1, "", "name"], [37, 2, 1, "", "print"], [37, 4, 1, "", "version"]], "PyXA.apps.Preview.XAPreviewDocument": [[37, 2, 1, "", "get_clipboard_representation"], [37, 4, 1, "", "modified"], [37, 4, 1, "", "name"], [37, 4, 1, "", "path"], [37, 2, 1, "", "print"], [37, 4, 1, "", "properties"], [37, 2, 1, "", "save"]], "PyXA.apps.Preview.XAPreviewDocumentList": [[37, 2, 1, "", "by_modified"], [37, 2, 1, "", "by_name"], [37, 2, 1, "", "by_path"], [37, 2, 1, "", "by_properties"], [37, 2, 1, "", "get_clipboard_representation"], [37, 2, 1, "", "modified"], [37, 2, 1, "", "name"], [37, 2, 1, "", "path"], [37, 2, 1, "", "properties"]], "PyXA.apps.Preview.XAPreviewWindow": [[37, 4, 1, "", "document"], [37, 4, 1, "", "floating"], [37, 4, 1, "", "modal"], [37, 4, 1, "", "properties"], [37, 4, 1, "", "titled"]], "PyXA.apps.QuickTimePlayer": [[38, 1, 1, "", "XAQuickTimeApplication"], [38, 1, 1, "", "XAQuickTimeAudioCompressionPreset"], [38, 1, 1, "", "XAQuickTimeAudioCompressionPresetList"], [38, 1, 1, "", "XAQuickTimeAudioRecordingDevice"], [38, 1, 1, "", "XAQuickTimeAudioRecordingDeviceList"], [38, 1, 1, "", "XAQuickTimeDocument"], [38, 1, 1, "", "XAQuickTimeDocumentList"], [38, 1, 1, "", "XAQuickTimeMovieCompressionPreset"], [38, 1, 1, "", "XAQuickTimeMovieCompressionPresetList"], [38, 1, 1, "", "XAQuickTimeScreenCompressionPreset"], [38, 1, 1, "", "XAQuickTimeScreenCompressionPresetList"], [38, 1, 1, "", "XAQuickTimeVideoRecordingDevice"], [38, 1, 1, "", "XAQuickTimeVideoRecordingDeviceList"], [38, 1, 1, "", "XAQuickTimeWindow"]], "PyXA.apps.QuickTimePlayer.XAQuickTimeApplication": [[38, 2, 1, "", "audio_compression_presets"], [38, 2, 1, "", "audio_recording_devices"], [38, 4, 1, "", "current_document"], [38, 2, 1, "", "documents"], [38, 4, 1, "", "frontmost"], [38, 2, 1, "", "movie_compression_presets"], [38, 4, 1, "", "name"], [38, 2, 1, "", "new_audio_recording"], [38, 2, 1, "", "new_movie_recording"], [38, 2, 1, "", "new_screen_recording"], [38, 2, 1, "", "open"], [38, 2, 1, "", "open_url"], [38, 4, 1, "", "properties"], [38, 2, 1, "", "screen_compression_presets"], [38, 4, 1, "", "version"], [38, 2, 1, "", "video_recording_devices"]], "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioCompressionPreset": [[38, 4, 1, "", "id"], [38, 4, 1, "", "name"], [38, 4, 1, "", "properties"]], "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioCompressionPresetList": [[38, 2, 1, "", "id"], [38, 2, 1, "", "name"], [38, 2, 1, "", "properties"]], "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioRecordingDevice": [[38, 4, 1, "", "id"], [38, 4, 1, "", "name"], [38, 4, 1, "", "properties"]], "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioRecordingDeviceList": [[38, 2, 1, "", "id"], [38, 2, 1, "", "name"], [38, 2, 1, "", "properties"]], "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument": [[38, 4, 1, "", "audio_volume"], [38, 4, 1, "", "current_audio_compression"], [38, 4, 1, "", "current_camera"], [38, 4, 1, "", "current_microphone"], [38, 4, 1, "", "current_movie_compression"], [38, 4, 1, "", "current_screen_compression"], [38, 4, 1, "", "current_time"], [38, 4, 1, "", "data_rate"], [38, 4, 1, "", "data_size"], [38, 4, 1, "", "duration"], [38, 4, 1, "", "looping"], [38, 4, 1, "", "muted"], [38, 4, 1, "", "natural_dimensions"], [38, 2, 1, "", "pause"], [38, 2, 1, "", "play"], [38, 4, 1, "", "playing"], [38, 2, 1, "", "present"], [38, 4, 1, "", "presenting"], [38, 4, 1, "", "properties"], [38, 4, 1, "", "rate"], [38, 2, 1, "", "resume"], [38, 2, 1, "", "start"], [38, 2, 1, "", "step_backward"], [38, 2, 1, "", "step_forward"], [38, 2, 1, "", "stop"], [38, 2, 1, "", "trim"]], "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList": [[38, 2, 1, "", "audio_volume"], [38, 2, 1, "", "by_audio_volume"], [38, 2, 1, "", "by_current_audio_compression"], [38, 2, 1, "", "by_current_camera"], [38, 2, 1, "", "by_current_microphone"], [38, 2, 1, "", "by_current_movie_compression"], [38, 2, 1, "", "by_current_screen_compression"], [38, 2, 1, "", "by_current_time"], [38, 2, 1, "", "by_data_rate"], [38, 2, 1, "", "by_data_size"], [38, 2, 1, "", "by_duration"], [38, 2, 1, "", "by_looping"], [38, 2, 1, "", "by_muted"], [38, 2, 1, "", "by_natural_dimensions"], [38, 2, 1, "", "by_playing"], [38, 2, 1, "", "by_presenting"], [38, 2, 1, "", "by_properties"], [38, 2, 1, "", "by_rate"], [38, 2, 1, "", "current_audio_compression"], [38, 2, 1, "", "current_camera"], [38, 2, 1, "", "current_microphone"], [38, 2, 1, "", "current_movie_compression"], [38, 2, 1, "", "current_screen_compression"], [38, 2, 1, "", "current_time"], [38, 2, 1, "", "data_rate"], [38, 2, 1, "", "data_size"], [38, 2, 1, "", "duration"], [38, 2, 1, "", "looping"], [38, 2, 1, "", "muted"], [38, 2, 1, "", "natural_dimensions"], [38, 2, 1, "", "playing"], [38, 2, 1, "", "presenting"], [38, 2, 1, "", "properties"], [38, 2, 1, "", "rate"]], "PyXA.apps.QuickTimePlayer.XAQuickTimeMovieCompressionPreset": [[38, 4, 1, "", "id"], [38, 4, 1, "", "name"], [38, 4, 1, "", "properties"]], "PyXA.apps.QuickTimePlayer.XAQuickTimeMovieCompressionPresetList": [[38, 2, 1, "", "id"], [38, 2, 1, "", "name"], [38, 2, 1, "", "properties"]], "PyXA.apps.QuickTimePlayer.XAQuickTimeScreenCompressionPreset": [[38, 4, 1, "", "id"], [38, 4, 1, "", "name"], [38, 4, 1, "", "properties"]], "PyXA.apps.QuickTimePlayer.XAQuickTimeScreenCompressionPresetList": [[38, 2, 1, "", "id"], [38, 2, 1, "", "name"], [38, 2, 1, "", "properties"]], "PyXA.apps.QuickTimePlayer.XAQuickTimeVideoRecordingDevice": [[38, 4, 1, "", "id"], [38, 4, 1, "", "name"], [38, 4, 1, "", "properties"]], "PyXA.apps.QuickTimePlayer.XAQuickTimeVideoRecordingDeviceList": [[38, 2, 1, "", "id"], [38, 2, 1, "", "name"], [38, 2, 1, "", "properties"]], "PyXA.apps.QuickTimePlayer.XAQuickTimeWindow": [[38, 4, 1, "", "document"], [38, 4, 1, "", "properties"], [38, 2, 1, "", "set_property"]], "PyXA.apps.RStudio": [[40, 1, 1, "", "XARStudioApplication"]], "PyXA.apps.RStudio.XARStudioApplication": [[40, 2, 1, "", "cmd"]], "PyXA.apps.Reminders": [[39, 1, 1, "", "XARemindersAccount"], [39, 1, 1, "", "XARemindersAccountList"], [39, 1, 1, "", "XARemindersAlarm"], [39, 1, 1, "", "XARemindersAlarmList"], [39, 1, 1, "", "XARemindersApplication"], [39, 1, 1, "", "XARemindersDocument"], [39, 1, 1, "", "XARemindersDocumentList"], [39, 1, 1, "", "XARemindersList"], [39, 1, 1, "", "XARemindersListList"], [39, 1, 1, "", "XARemindersRecurrenceRule"], [39, 1, 1, "", "XARemindersReminder"], [39, 1, 1, "", "XARemindersReminderList"], [39, 1, 1, "", "XARemindersWindow"]], "PyXA.apps.Reminders.XARemindersAccount": [[39, 4, 1, "", "id"], [39, 4, 1, "", "name"], [39, 4, 1, "", "properties"], [39, 2, 1, "", "show"]], "PyXA.apps.Reminders.XARemindersAccountList": [[39, 2, 1, "", "by_id"], [39, 2, 1, "", "by_name"], [39, 2, 1, "", "by_properties"], [39, 2, 1, "", "id"], [39, 2, 1, "", "name"], [39, 2, 1, "", "properties"]], "PyXA.apps.Reminders.XARemindersAlarm": [[39, 4, 1, "", "date"], [39, 4, 1, "", "id"], [39, 4, 1, "", "location"], [39, 4, 1, "", "proximity_direction"], [39, 2, 1, "", "set_date"], [39, 2, 1, "", "set_location"], [39, 4, 1, "", "snoozed"]], "PyXA.apps.Reminders.XARemindersAlarmList": [[39, 2, 1, "", "by_date"], [39, 2, 1, "", "by_id"], [39, 2, 1, "", "by_location"], [39, 2, 1, "", "by_proximity_direction"], [39, 2, 1, "", "by_snoozed"], [39, 2, 1, "", "date"], [39, 2, 1, "", "id"], [39, 2, 1, "", "location"], [39, 2, 1, "", "proximity_direction"], [39, 2, 1, "", "snoozed"]], "PyXA.apps.Reminders.XARemindersApplication": [[39, 2, 1, "", "accounts"], [39, 4, 1, "", "default_account"], [39, 4, 1, "", "default_list"], [39, 2, 1, "", "documents"], [39, 4, 1, "", "frontmost"], [39, 2, 1, "", "lists"], [39, 2, 1, "", "make"], [39, 4, 1, "", "name"], [39, 2, 1, "", "new_list"], [39, 2, 1, "", "new_reminder"], [39, 2, 1, "", "reminders"], [39, 4, 1, "", "version"]], "PyXA.apps.Reminders.XARemindersDocument": [[39, 2, 1, "", "close"], [39, 2, 1, "", "delete"], [39, 2, 1, "", "duplicate"], [39, 4, 1, "", "file"], [39, 4, 1, "", "modified"], [39, 2, 1, "", "move_to"], [39, 4, 1, "", "name"], [39, 2, 1, "", "print"], [39, 4, 1, "", "properties"], [39, 2, 1, "", "save"]], "PyXA.apps.Reminders.XARemindersDocumentList": [[39, 2, 1, "", "by_file"], [39, 2, 1, "", "by_modified"], [39, 2, 1, "", "by_name"], [39, 2, 1, "", "by_properties"], [39, 2, 1, "", "file"], [39, 2, 1, "", "modified"], [39, 2, 1, "", "name"], [39, 2, 1, "", "properties"]], "PyXA.apps.Reminders.XARemindersList": [[39, 4, 1, "", "color"], [39, 4, 1, "", "container"], [39, 2, 1, "", "delete"], [39, 4, 1, "", "emblem"], [39, 4, 1, "", "id"], [39, 4, 1, "", "name"], [39, 4, 1, "", "properties"], [39, 2, 1, "", "reminders"], [39, 3, 1, "", "sharees"], [39, 3, 1, "", "sharing_status"], [39, 2, 1, "", "show"], [39, 3, 1, "", "subscription_url"], [39, 3, 1, "", "summary"]], "PyXA.apps.Reminders.XARemindersListList": [[39, 2, 1, "", "by_color"], [39, 2, 1, "", "by_container"], [39, 2, 1, "", "by_emblem"], [39, 2, 1, "", "by_id"], [39, 2, 1, "", "by_name"], [39, 2, 1, "", "by_properties"], [39, 2, 1, "", "color"], [39, 2, 1, "", "container"], [39, 2, 1, "", "delete"], [39, 2, 1, "", "emblem"], [39, 2, 1, "", "id"], [39, 2, 1, "", "name"], [39, 2, 1, "", "properties"], [39, 2, 1, "", "reminders"]], "PyXA.apps.Reminders.XARemindersRecurrenceRule": [[39, 4, 1, "", "end_date"], [39, 4, 1, "", "frequency"], [39, 4, 1, "", "interval"], [39, 2, 1, "", "set_end_date"], [39, 2, 1, "", "set_frequency"], [39, 2, 1, "", "set_interval"]], "PyXA.apps.Reminders.XARemindersReminder": [[39, 2, 1, "", "alarms"], [39, 4, 1, "", "all_day"], [39, 4, 1, "", "allday_due_date"], [39, 4, 1, "", "body"], [39, 4, 1, "", "completed"], [39, 4, 1, "", "completion_date"], [39, 4, 1, "", "container"], [39, 4, 1, "", "creation_date"], [39, 2, 1, "", "delete"], [39, 4, 1, "", "due_date"], [39, 4, 1, "", "flagged"], [39, 4, 1, "", "id"], [39, 4, 1, "", "modification_date"], [39, 2, 1, "", "move_to"], [39, 4, 1, "", "name"], [39, 4, 1, "", "notes"], [39, 4, 1, "", "priority"], [39, 4, 1, "", "properties"], [39, 4, 1, "", "recurrence_rule"], [39, 4, 1, "", "remind_me_date"], [39, 2, 1, "", "show"], [39, 4, 1, "", "url"]], "PyXA.apps.Reminders.XARemindersReminderList": [[39, 2, 1, "", "alarms"], [39, 2, 1, "", "allday_due_date"], [39, 2, 1, "", "body"], [39, 2, 1, "", "by_allday_due_date"], [39, 2, 1, "", "by_body"], [39, 2, 1, "", "by_completed"], [39, 2, 1, "", "by_completion_date"], [39, 2, 1, "", "by_container"], [39, 2, 1, "", "by_creation_date"], [39, 2, 1, "", "by_due_date"], [39, 2, 1, "", "by_flagged"], [39, 2, 1, "", "by_id"], [39, 2, 1, "", "by_modification_date"], [39, 2, 1, "", "by_name"], [39, 2, 1, "", "by_priority"], [39, 2, 1, "", "by_properties"], [39, 2, 1, "", "by_remind_me_date"], [39, 2, 1, "", "completed"], [39, 2, 1, "", "completion_date"], [39, 2, 1, "", "container"], [39, 2, 1, "", "creation_date"], [39, 2, 1, "", "delete"], [39, 2, 1, "", "due_date"], [39, 2, 1, "", "flagged"], [39, 2, 1, "", "id"], [39, 2, 1, "", "modification_date"], [39, 2, 1, "", "move_to"], [39, 2, 1, "", "name"], [39, 2, 1, "", "priority"], [39, 2, 1, "", "properties"], [39, 2, 1, "", "remind_me_date"]], "PyXA.apps.Reminders.XARemindersWindow": [[39, 2, 1, "", "close"], [39, 4, 1, "", "document"], [39, 2, 1, "", "lists"], [39, 2, 1, "", "print"], [39, 2, 1, "", "reminders"], [39, 2, 1, "", "save"]], "PyXA.apps.Safari": [[41, 1, 1, "", "XASafariApplication"], [41, 1, 1, "", "XASafariDocument"], [41, 1, 1, "", "XASafariDocumentList"], [41, 1, 1, "", "XASafariGeneric"], [41, 1, 1, "", "XASafariTab"], [41, 1, 1, "", "XASafariTabList"], [41, 1, 1, "", "XASafariWindow"]], "PyXA.apps.Safari.XASafariApplication": [[41, 2, 1, "", "add_to_reading_list"], [41, 4, 1, "", "current_document"], [41, 4, 1, "", "current_tab"], [41, 2, 1, "", "do_javascript"], [41, 2, 1, "", "documents"], [41, 2, 1, "", "email"], [41, 4, 1, "", "frontmost"], [41, 2, 1, "", "make"], [41, 4, 1, "", "name"], [41, 2, 1, "", "new_tab"], [41, 2, 1, "", "open"], [41, 2, 1, "", "save"], [41, 2, 1, "", "search"], [41, 2, 1, "", "search_in_tab"], [41, 2, 1, "", "show_bookmarks"], [41, 4, 1, "", "version"]], "PyXA.apps.Safari.XASafariDocument": [[41, 4, 1, "", "file"], [41, 2, 1, "", "get_clipboard_representation"], [41, 4, 1, "", "modified"], [41, 4, 1, "", "name"], [41, 2, 1, "", "print"], [41, 4, 1, "", "source"], [41, 4, 1, "", "text"], [41, 4, 1, "", "url"]], "PyXA.apps.Safari.XASafariDocumentList": [[41, 2, 1, "", "add_to_reading_list"], [41, 2, 1, "", "by_file"], [41, 2, 1, "", "by_modified"], [41, 2, 1, "", "by_name"], [41, 2, 1, "", "by_source"], [41, 2, 1, "", "by_text"], [41, 2, 1, "", "by_url"], [41, 2, 1, "", "close"], [41, 2, 1, "", "do_javascript"], [41, 2, 1, "", "email"], [41, 2, 1, "", "file"], [41, 2, 1, "", "get_clipboard_representation"], [41, 2, 1, "", "modified"], [41, 2, 1, "", "name"], [41, 2, 1, "", "reload"], [41, 2, 1, "", "search"], [41, 2, 1, "", "source"], [41, 2, 1, "", "text"], [41, 2, 1, "", "url"]], "PyXA.apps.Safari.XASafariGeneric": [[41, 2, 1, "", "add_to_reading_list"], [41, 2, 1, "", "do_javascript"], [41, 2, 1, "", "email"], [41, 2, 1, "", "reload"], [41, 2, 1, "", "search"]], "PyXA.apps.Safari.XASafariTab": [[41, 2, 1, "", "duplicate_to"], [41, 2, 1, "", "get_clipboard_representation"], [41, 4, 1, "", "index"], [41, 2, 1, "", "move_to"], [41, 4, 1, "", "name"], [41, 4, 1, "", "source"], [41, 4, 1, "", "text"], [41, 4, 1, "", "url"], [41, 4, 1, "", "visible"]], "PyXA.apps.Safari.XASafariTabList": [[41, 2, 1, "", "add_to_reading_list"], [41, 2, 1, "", "by_index"], [41, 2, 1, "", "by_name"], [41, 2, 1, "", "by_source"], [41, 2, 1, "", "by_text"], [41, 2, 1, "", "by_url"], [41, 2, 1, "", "by_visible"], [41, 2, 1, "", "close"], [41, 2, 1, "", "do_javascript"], [41, 2, 1, "", "duplicate_to"], [41, 2, 1, "", "email"], [41, 2, 1, "", "get_clipboard_representation"], [41, 2, 1, "", "index"], [41, 2, 1, "", "move_to"], [41, 2, 1, "", "name"], [41, 2, 1, "", "reload"], [41, 2, 1, "", "search"], [41, 2, 1, "", "source"], [41, 2, 1, "", "text"], [41, 2, 1, "", "url"], [41, 2, 1, "", "visible"]], "PyXA.apps.Safari.XASafariWindow": [[41, 4, 1, "", "current_tab"], [41, 4, 1, "", "document"], [41, 2, 1, "", "tabs"]], "PyXA.apps.Shortcuts": [[42, 1, 1, "", "XAShortcut"], [42, 1, 1, "", "XAShortcutFolder"], [42, 1, 1, "", "XAShortcutFolderList"], [42, 1, 1, "", "XAShortcutList"], [42, 1, 1, "", "XAShortcutsApplication"]], "PyXA.apps.Shortcuts.XAShortcut": [[42, 4, 1, "", "accepts_input"], [42, 4, 1, "", "action_count"], [42, 4, 1, "", "color"], [42, 4, 1, "", "folder"], [42, 2, 1, "", "get_clipboard_representation"], [42, 4, 1, "", "icon"], [42, 4, 1, "", "id"], [42, 4, 1, "", "name"], [42, 2, 1, "", "run"], [42, 4, 1, "", "subtitle"]], "PyXA.apps.Shortcuts.XAShortcutFolder": [[42, 2, 1, "", "get_clipboard_representation"], [42, 4, 1, "", "id"], [42, 4, 1, "", "name"], [42, 2, 1, "", "shortcuts"]], "PyXA.apps.Shortcuts.XAShortcutFolderList": [[42, 2, 1, "", "by_id"], [42, 2, 1, "", "by_name"], [42, 2, 1, "", "get_clipboard_representation"], [42, 2, 1, "", "id"], [42, 2, 1, "", "name"], [42, 2, 1, "", "shortcuts"]], "PyXA.apps.Shortcuts.XAShortcutList": [[42, 2, 1, "", "accepts_input"], [42, 2, 1, "", "action_count"], [42, 2, 1, "", "by_accepts_input"], [42, 2, 1, "", "by_action_count"], [42, 2, 1, "", "by_color"], [42, 2, 1, "", "by_folder"], [42, 2, 1, "", "by_icon"], [42, 2, 1, "", "by_id"], [42, 2, 1, "", "by_name"], [42, 2, 1, "", "by_subtitle"], [42, 2, 1, "", "color"], [42, 2, 1, "", "folder"], [42, 2, 1, "", "get_clipboard_representation"], [42, 2, 1, "", "icon"], [42, 2, 1, "", "id"], [42, 2, 1, "", "name"], [42, 2, 1, "", "subtitle"]], "PyXA.apps.Shortcuts.XAShortcutsApplication": [[42, 2, 1, "", "folders"], [42, 4, 1, "", "frontmost"], [42, 4, 1, "", "name"], [42, 2, 1, "", "run"], [42, 2, 1, "", "shortcuts"], [42, 4, 1, "", "version"]], "PyXA.apps.Spotify": [[43, 1, 1, "", "XASpotifyApplication"], [43, 1, 1, "", "XASpotifyTrack"]], "PyXA.apps.Spotify.XASpotifyApplication": [[43, 1, 1, "", "PlayerState"], [43, 4, 1, "", "current_track"], [43, 4, 1, "", "frontmost"], [43, 4, 1, "", "name"], [43, 2, 1, "", "next_track"], [43, 2, 1, "", "pause"], [43, 2, 1, "", "play"], [43, 2, 1, "", "play_track"], [43, 4, 1, "", "player_position"], [43, 4, 1, "", "player_state"], [43, 2, 1, "", "playpause"], [43, 2, 1, "", "previous_track"], [43, 4, 1, "", "repeating"], [43, 4, 1, "", "repeating_enabled"], [43, 2, 1, "", "search"], [43, 4, 1, "", "shuffling"], [43, 4, 1, "", "shuffling_enabled"], [43, 4, 1, "", "sound_volume"], [43, 4, 1, "", "version"]], "PyXA.apps.Spotify.XASpotifyApplication.PlayerState": [[43, 3, 1, "", "PAUSED"], [43, 3, 1, "", "PLAYING"], [43, 3, 1, "", "STOPPED"]], "PyXA.apps.Spotify.XASpotifyTrack": [[43, 4, 1, "", "album"], [43, 4, 1, "", "album_artist"], [43, 4, 1, "", "artist"], [43, 4, 1, "", "artwork"], [43, 4, 1, "", "artwork_url"], [43, 4, 1, "", "disc_number"], [43, 4, 1, "", "duration"], [43, 4, 1, "", "id"], [43, 4, 1, "", "name"], [43, 4, 1, "", "played_count"], [43, 4, 1, "", "popularity"], [43, 4, 1, "", "spotify_url"], [43, 4, 1, "", "starred"], [43, 4, 1, "", "track_number"]], "PyXA.apps.Stocks": [[44, 1, 1, "", "XAStocksApplication"], [44, 1, 1, "", "XAStocksSavedStock"], [44, 1, 1, "", "XAStocksSavedStockList"]], "PyXA.apps.Stocks.XAStocksApplication": [[44, 2, 1, "", "go_back"], [44, 2, 1, "", "new_tab"], [44, 2, 1, "", "saved_stocks"], [44, 2, 1, "", "show_business_news"], [44, 2, 1, "", "show_symbol"], [44, 4, 1, "", "sidebar_showing"]], "PyXA.apps.Stocks.XAStocksSavedStock": [[44, 4, 1, "", "change"], [44, 2, 1, "", "get_clipboard_representation"], [44, 4, 1, "", "name"], [44, 4, 1, "", "price"], [44, 4, 1, "", "properties"], [44, 4, 1, "", "selected"], [44, 2, 1, "", "show"], [44, 4, 1, "", "symbol"]], "PyXA.apps.Stocks.XAStocksSavedStockList": [[44, 2, 1, "", "change"], [44, 2, 1, "", "get_clipboard_representation"], [44, 2, 1, "", "name"], [44, 2, 1, "", "price"], [44, 2, 1, "", "properties"], [44, 2, 1, "", "selected"], [44, 2, 1, "", "symbol"]], "PyXA.apps.SystemEvents": [[45, 1, 1, "", "XASystemEventsAction"], [45, 1, 1, "", "XASystemEventsActionList"], [45, 1, 1, "", "XASystemEventsAppearancePreferencesObject"], [45, 1, 1, "", "XASystemEventsApplication"], [45, 1, 1, "", "XASystemEventsApplicationProcess"], [45, 1, 1, "", "XASystemEventsApplicationProcessList"], [45, 1, 1, "", "XASystemEventsAttribute"], [45, 1, 1, "", "XASystemEventsAttributeList"], [45, 1, 1, "", "XASystemEventsBrowser"], [45, 1, 1, "", "XASystemEventsBrowserList"], [45, 1, 1, "", "XASystemEventsBusyIndicator"], [45, 1, 1, "", "XASystemEventsBusyIndicatorList"], [45, 1, 1, "", "XASystemEventsButton"], [45, 1, 1, "", "XASystemEventsButtonList"], [45, 1, 1, "", "XASystemEventsCDAndDVDPreferencesObject"], [45, 1, 1, "", "XASystemEventsCheckbox"], [45, 1, 1, "", "XASystemEventsCheckboxList"], [45, 1, 1, "", "XASystemEventsColorWell"], [45, 1, 1, "", "XASystemEventsColorWellList"], [45, 1, 1, "", "XASystemEventsColumn"], [45, 1, 1, "", "XASystemEventsColumnList"], [45, 1, 1, "", "XASystemEventsComboBox"], [45, 1, 1, "", "XASystemEventsComboBoxList"], [45, 1, 1, "", "XASystemEventsConfiguration"], [45, 1, 1, "", "XASystemEventsConfigurationList"], [45, 1, 1, "", "XASystemEventsDeskAccessoryProcess"], [45, 1, 1, "", "XASystemEventsDeskAccessoryProcessList"], [45, 1, 1, "", "XASystemEventsDesktop"], [45, 1, 1, "", "XASystemEventsDesktopList"], [45, 1, 1, "", "XASystemEventsDockPreferencesObject"], [45, 1, 1, "", "XASystemEventsDocument"], [45, 1, 1, "", "XASystemEventsDocumentList"], [45, 1, 1, "", "XASystemEventsDrawer"], [45, 1, 1, "", "XASystemEventsDrawerList"], [45, 1, 1, "", "XASystemEventsFolderAction"], [45, 1, 1, "", "XASystemEventsFolderActionList"], [45, 1, 1, "", "XASystemEventsGroup"], [45, 1, 1, "", "XASystemEventsGroupList"], [45, 1, 1, "", "XASystemEventsGrowArea"], [45, 1, 1, "", "XASystemEventsGrowAreaList"], [45, 1, 1, "", "XASystemEventsImage"], [45, 1, 1, "", "XASystemEventsImageList"], [45, 1, 1, "", "XASystemEventsIncrementor"], [45, 1, 1, "", "XASystemEventsIncrementorList"], [45, 1, 1, "", "XASystemEventsInsertionPreference"], [45, 1, 1, "", "XASystemEventsInterface"], [45, 1, 1, "", "XASystemEventsInterfaceList"], [45, 1, 1, "", "XASystemEventsList"], [45, 1, 1, "", "XASystemEventsListList"], [45, 1, 1, "", "XASystemEventsLocation"], [45, 1, 1, "", "XASystemEventsLocationList"], [45, 1, 1, "", "XASystemEventsLoginItem"], [45, 1, 1, "", "XASystemEventsLoginItemList"], [45, 1, 1, "", "XASystemEventsMenu"], [45, 1, 1, "", "XASystemEventsMenuBar"], [45, 1, 1, "", "XASystemEventsMenuBarItem"], [45, 1, 1, "", "XASystemEventsMenuBarItemList"], [45, 1, 1, "", "XASystemEventsMenuBarList"], [45, 1, 1, "", "XASystemEventsMenuButton"], [45, 1, 1, "", "XASystemEventsMenuButtonList"], [45, 1, 1, "", "XASystemEventsMenuItem"], [45, 1, 1, "", "XASystemEventsMenuItemList"], [45, 1, 1, "", "XASystemEventsMenuList"], [45, 1, 1, "", "XASystemEventsNetworkPreferencesObject"], [45, 1, 1, "", "XASystemEventsOutline"], [45, 1, 1, "", "XASystemEventsOutlineList"], [45, 1, 1, "", "XASystemEventsPopOver"], [45, 1, 1, "", "XASystemEventsPopOverList"], [45, 1, 1, "", "XASystemEventsPopUpButton"], [45, 1, 1, "", "XASystemEventsPopUpButtonList"], [45, 1, 1, "", "XASystemEventsPrintSettings"], [45, 1, 1, "", "XASystemEventsProcess"], [45, 1, 1, "", "XASystemEventsProcessList"], [45, 1, 1, "", "XASystemEventsProgressIndicator"], [45, 1, 1, "", "XASystemEventsProgressIndicatorList"], [45, 1, 1, "", "XASystemEventsPropertyListFile"], [45, 1, 1, "", "XASystemEventsPropertyListFileList"], [45, 1, 1, "", "XASystemEventsPropertyListItem"], [45, 1, 1, "", "XASystemEventsPropertyListItemList"], [45, 1, 1, "", "XASystemEventsRadioButton"], [45, 1, 1, "", "XASystemEventsRadioButtonList"], [45, 1, 1, "", "XASystemEventsRadioGroup"], [45, 1, 1, "", "XASystemEventsRadioGroupList"], [45, 1, 1, "", "XASystemEventsRelevanceIndicator"], [45, 1, 1, "", "XASystemEventsRelevanceIndicatorList"], [45, 1, 1, "", "XASystemEventsRow"], [45, 1, 1, "", "XASystemEventsRowList"], [45, 1, 1, "", "XASystemEventsScreenSaver"], [45, 1, 1, "", "XASystemEventsScreenSaverList"], [45, 1, 1, "", "XASystemEventsScreenSaverPreferencesObject"], [45, 1, 1, "", "XASystemEventsScript"], [45, 1, 1, "", "XASystemEventsScriptList"], [45, 1, 1, "", "XASystemEventsScriptingClass"], [45, 1, 1, "", "XASystemEventsScriptingClassList"], [45, 1, 1, "", "XASystemEventsScriptingCommand"], [45, 1, 1, "", "XASystemEventsScriptingCommandList"], [45, 1, 1, "", "XASystemEventsScriptingDefinitionObject"], [45, 1, 1, "", "XASystemEventsScriptingElement"], [45, 1, 1, "", "XASystemEventsScriptingElementList"], [45, 1, 1, "", "XASystemEventsScriptingEnumeration"], [45, 1, 1, "", "XASystemEventsScriptingEnumerationList"], [45, 1, 1, "", "XASystemEventsScriptingEnumerator"], [45, 1, 1, "", "XASystemEventsScriptingEnumeratorList"], [45, 1, 1, "", "XASystemEventsScriptingParameter"], [45, 1, 1, "", "XASystemEventsScriptingParameterList"], [45, 1, 1, "", "XASystemEventsScriptingProperty"], [45, 1, 1, "", "XASystemEventsScriptingPropertyList"], [45, 1, 1, "", "XASystemEventsScriptingResultObject"], [45, 1, 1, "", "XASystemEventsScriptingResultObjectList"], [45, 1, 1, "", "XASystemEventsScriptingSuite"], [45, 1, 1, "", "XASystemEventsScriptingSuiteList"], [45, 1, 1, "", "XASystemEventsScrollArea"], [45, 1, 1, "", "XASystemEventsScrollAreaList"], [45, 1, 1, "", "XASystemEventsScrollBar"], [45, 1, 1, "", "XASystemEventsScrollBarList"], [45, 1, 1, "", "XASystemEventsSecurityPreferencesObject"], [45, 1, 1, "", "XASystemEventsService"], [45, 1, 1, "", "XASystemEventsServiceList"], [45, 1, 1, "", "XASystemEventsSheet"], [45, 1, 1, "", "XASystemEventsSheetList"], [45, 1, 1, "", "XASystemEventsSlider"], [45, 1, 1, "", "XASystemEventsSliderList"], [45, 1, 1, "", "XASystemEventsSplitter"], [45, 1, 1, "", "XASystemEventsSplitterGroup"], [45, 1, 1, "", "XASystemEventsSplitterGroupList"], [45, 1, 1, "", "XASystemEventsSplitterList"], [45, 1, 1, "", "XASystemEventsStaticText"], [45, 1, 1, "", "XASystemEventsStaticTextList"], [45, 1, 1, "", "XASystemEventsTabGroup"], [45, 1, 1, "", "XASystemEventsTabGroupList"], [45, 1, 1, "", "XASystemEventsTable"], [45, 1, 1, "", "XASystemEventsTableList"], [45, 1, 1, "", "XASystemEventsTextArea"], [45, 1, 1, "", "XASystemEventsTextAreaList"], [45, 1, 1, "", "XASystemEventsTextField"], [45, 1, 1, "", "XASystemEventsTextFieldList"], [45, 1, 1, "", "XASystemEventsToolbar"], [45, 1, 1, "", "XASystemEventsToolbarList"], [45, 1, 1, "", "XASystemEventsUIElement"], [45, 1, 1, "", "XASystemEventsUIElementList"], [45, 1, 1, "", "XASystemEventsUser"], [45, 1, 1, "", "XASystemEventsUserList"], [45, 1, 1, "", "XASystemEventsValueIndicator"], [45, 1, 1, "", "XASystemEventsValueIndicatorList"], [45, 1, 1, "", "XASystemEventsWindow"], [45, 1, 1, "", "XASystemEventsWindowList"], [45, 1, 1, "", "XASystemEventsXMLAttribute"], [45, 1, 1, "", "XASystemEventsXMLAttributeList"], [45, 1, 1, "", "XASystemEventsXMLData"], [45, 1, 1, "", "XASystemEventsXMLDataList"], [45, 1, 1, "", "XASystemEventsXMLElement"], [45, 1, 1, "", "XASystemEventsXMLElementList"], [45, 1, 1, "", "XASystemEventsXMLFile"], [45, 1, 1, "", "XASystemEventsXMLFileList"]], "PyXA.apps.SystemEvents.XASystemEventsAction": [[45, 4, 1, "", "name"], [45, 4, 1, "", "object_description"], [45, 2, 1, "", "perform"]], "PyXA.apps.SystemEvents.XASystemEventsActionList": [[45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_object_description"], [45, 2, 1, "", "name"], [45, 2, 1, "", "object_description"]], "PyXA.apps.SystemEvents.XASystemEventsAppearancePreferencesObject": [[45, 4, 1, "", "appearance"], [45, 4, 1, "", "dark_mode"], [45, 4, 1, "", "font_smoothing"], [45, 4, 1, "", "font_smoothing_style"], [45, 4, 1, "", "highlight_color"], [45, 4, 1, "", "recent_applications_limit"], [45, 4, 1, "", "recent_documents_limit"], [45, 4, 1, "", "recent_servers_limit"], [45, 4, 1, "", "scroll_bar_action"], [45, 4, 1, "", "smooth_scrolling"]], "PyXA.apps.SystemEvents.XASystemEventsApplication": [[45, 1, 1, "", "AccessRight"], [45, 1, 1, "", "Appearance"], [45, 1, 1, "", "DoubleClickBehavior"], [45, 1, 1, "", "DynamicStyle"], [45, 1, 1, "", "FontSmoothingStyle"], [45, 1, 1, "", "HighlightColor"], [45, 1, 1, "", "Key"], [45, 1, 1, "", "MediaInsertionAction"], [45, 1, 1, "", "MinimizeEffect"], [45, 1, 1, "", "PictureRotation"], [45, 1, 1, "", "ScreenLocation"], [45, 1, 1, "", "ScrollPageBehavior"], [45, 2, 1, "", "abort_transaction"], [45, 2, 1, "", "aliases"], [45, 4, 1, "", "appearance_preferences"], [45, 2, 1, "", "application_processes"], [45, 4, 1, "", "application_support_folder"], [45, 4, 1, "", "applications_folder"], [45, 2, 1, "", "begin_transaction"], [45, 4, 1, "", "cd_and_dvd_preferences"], [45, 4, 1, "", "classic_domain"], [45, 2, 1, "", "click"], [45, 4, 1, "", "current_desktop"], [45, 4, 1, "", "current_screen_saver"], [45, 4, 1, "", "current_user"], [45, 2, 1, "", "desk_accessory_processes"], [45, 4, 1, "", "desktop_folder"], [45, 4, 1, "", "desktop_pictures_folder"], [45, 2, 1, "", "desktops"], [45, 2, 1, "", "disk_items"], [45, 2, 1, "", "disks"], [45, 4, 1, "", "dock_preferences"], [45, 2, 1, "", "documents"], [45, 4, 1, "", "documents_folder"], [45, 2, 1, "", "domains"], [45, 4, 1, "", "downloads_folder"], [45, 2, 1, "", "end_transaction"], [45, 4, 1, "", "favorites_folder"], [45, 2, 1, "", "file_packages"], [45, 2, 1, "", "files"], [45, 4, 1, "", "folder_action_scripts_folder"], [45, 2, 1, "", "folder_actions"], [45, 4, 1, "", "folder_actions_enabled"], [45, 2, 1, "", "folders"], [45, 4, 1, "", "fonts_folder"], [45, 4, 1, "", "frontmost"], [45, 4, 1, "", "home_folder"], [45, 2, 1, "", "key_code"], [45, 2, 1, "", "key_stroke"], [45, 4, 1, "", "library_folder"], [45, 4, 1, "", "local_domain"], [45, 2, 1, "", "log_out"], [45, 2, 1, "", "login_items"], [45, 2, 1, "", "make"], [45, 4, 1, "", "movies_folder"], [45, 4, 1, "", "music_folder"], [45, 4, 1, "", "name"], [45, 4, 1, "", "network_domain"], [45, 4, 1, "", "network_preferences"], [45, 4, 1, "", "pictures_folder"], [45, 4, 1, "", "preferences_folder"], [45, 2, 1, "", "processes"], [45, 2, 1, "", "property_list_files"], [45, 2, 1, "", "property_list_items"], [45, 4, 1, "", "public_folder"], [45, 4, 1, "", "quit_delay"], [45, 2, 1, "", "restart"], [45, 4, 1, "", "screen_saver_preferences"], [45, 2, 1, "", "screen_savers"], [45, 4, 1, "", "script_menu_enabled"], [45, 4, 1, "", "scripting_additions_folder"], [45, 4, 1, "", "scripting_definition"], [45, 4, 1, "", "scripts_folder"], [45, 4, 1, "", "security_preferences"], [45, 4, 1, "", "shared_documents_folder"], [45, 2, 1, "", "shut_down"], [45, 4, 1, "", "sites_folder"], [45, 2, 1, "", "sleep"], [45, 4, 1, "", "speakable_items_folder"], [45, 4, 1, "", "startup_disk"], [45, 4, 1, "", "system_domain"], [45, 4, 1, "", "temporary_items_folder"], [45, 4, 1, "", "trash"], [45, 2, 1, "", "ui_elements"], [45, 4, 1, "", "ui_elements_enabled"], [45, 4, 1, "", "user_domain"], [45, 2, 1, "", "users"], [45, 4, 1, "", "utilities_folder"], [45, 4, 1, "", "version"], [45, 4, 1, "", "workflows_folder"], [45, 2, 1, "", "xml_datas"], [45, 2, 1, "", "xml_files"]], "PyXA.apps.SystemEvents.XASystemEventsApplication.AccessRight": [[45, 3, 1, "", "NONE"], [45, 3, 1, "", "READ"], [45, 3, 1, "", "READ_WRITE"], [45, 3, 1, "", "WRITE"]], "PyXA.apps.SystemEvents.XASystemEventsApplication.Appearance": [[45, 3, 1, "", "BLUE"], [45, 3, 1, "", "GRAPHITE"]], "PyXA.apps.SystemEvents.XASystemEventsApplication.DoubleClickBehavior": [[45, 3, 1, "", "MINIMIZE"], [45, 3, 1, "", "OFF"], [45, 3, 1, "", "ZOOM"]], "PyXA.apps.SystemEvents.XASystemEventsApplication.DynamicStyle": [[45, 3, 1, "", "AUTO"], [45, 3, 1, "", "DARK"], [45, 3, 1, "", "DYNAMIC"], [45, 3, 1, "", "LIGHT"], [45, 3, 1, "", "UNKNOWN"]], "PyXA.apps.SystemEvents.XASystemEventsApplication.FontSmoothingStyle": [[45, 3, 1, "", "AUTOMATIC"], [45, 3, 1, "", "LIGHT"], [45, 3, 1, "", "MEDIUM"], [45, 3, 1, "", "STANDARD"], [45, 3, 1, "", "STRONG"]], "PyXA.apps.SystemEvents.XASystemEventsApplication.HighlightColor": [[45, 3, 1, "", "BLUE"], [45, 3, 1, "", "GOLD"], [45, 3, 1, "", "GRAPHITE"], [45, 3, 1, "", "GREEN"], [45, 3, 1, "", "ORANGE"], [45, 3, 1, "", "PURPLE"], [45, 3, 1, "", "RED"], [45, 3, 1, "", "SILVER"]], "PyXA.apps.SystemEvents.XASystemEventsApplication.Key": [[45, 3, 1, "", "CAPS_LOCK"], [45, 3, 1, "", "COMMAND"], [45, 3, 1, "", "CONTROL"], [45, 3, 1, "", "FUNCTION"], [45, 3, 1, "", "OPTION"], [45, 3, 1, "", "SHIFT"]], "PyXA.apps.SystemEvents.XASystemEventsApplication.MediaInsertionAction": [[45, 3, 1, "", "ASK_WHAT_TO_DO"], [45, 3, 1, "", "IGNORE"], [45, 3, 1, "", "OPEN_APPLICATION"], [45, 3, 1, "", "RUN_A_SCRIPT"]], "PyXA.apps.SystemEvents.XASystemEventsApplication.MinimizeEffect": [[45, 3, 1, "", "GENIE"], [45, 3, 1, "", "SCALE"]], "PyXA.apps.SystemEvents.XASystemEventsApplication.PictureRotation": [[45, 3, 1, "", "AFTER_SLEEP"], [45, 3, 1, "", "NEVER"], [45, 3, 1, "", "USING_INTERVAL"], [45, 3, 1, "", "USING_LOGIN"]], "PyXA.apps.SystemEvents.XASystemEventsApplication.ScreenLocation": [[45, 3, 1, "", "BOTTOM"], [45, 3, 1, "", "LEFT"], [45, 3, 1, "", "RIGHT"]], "PyXA.apps.SystemEvents.XASystemEventsApplication.ScrollPageBehavior": [[45, 3, 1, "", "JUMP_TO_HERE"], [45, 3, 1, "", "JUMP_TO_NEXT_PAGE"]], "PyXA.apps.SystemEvents.XASystemEventsApplicationProcess": [[45, 4, 1, "", "application_file"]], "PyXA.apps.SystemEvents.XASystemEventsApplicationProcessList": [[45, 2, 1, "", "application_file"], [45, 2, 1, "", "by_application_file"]], "PyXA.apps.SystemEvents.XASystemEventsAttribute": [[45, 4, 1, "", "name"], [45, 4, 1, "", "settable"], [45, 4, 1, "", "value"]], "PyXA.apps.SystemEvents.XASystemEventsAttributeList": [[45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_settable"], [45, 2, 1, "", "by_value"], [45, 2, 1, "", "name"], [45, 2, 1, "", "settable"], [45, 2, 1, "", "value"]], "PyXA.apps.SystemEvents.XASystemEventsCDAndDVDPreferencesObject": [[45, 4, 1, "", "blank_bd"], [45, 4, 1, "", "blank_cd"], [45, 4, 1, "", "blank_dvd"], [45, 4, 1, "", "music_cd"], [45, 4, 1, "", "picture_cd"], [45, 4, 1, "", "video_bd"], [45, 4, 1, "", "video_dvd"]], "PyXA.apps.SystemEvents.XASystemEventsConfiguration": [[45, 4, 1, "", "account_name"], [45, 2, 1, "", "connect"], [45, 4, 1, "", "connected"], [45, 2, 1, "", "disconnect"], [45, 4, 1, "", "id"], [45, 4, 1, "", "name"]], "PyXA.apps.SystemEvents.XASystemEventsConfigurationList": [[45, 2, 1, "", "account_name"], [45, 2, 1, "", "by_account_name"], [45, 2, 1, "", "by_connected"], [45, 2, 1, "", "by_id"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "connected"], [45, 2, 1, "", "id"], [45, 2, 1, "", "name"]], "PyXA.apps.SystemEvents.XASystemEventsDeskAccessoryProcess": [[45, 4, 1, "", "desk_accessory_file"]], "PyXA.apps.SystemEvents.XASystemEventsDeskAccessoryProcessList": [[45, 2, 1, "", "by_desk_accessory_file"], [45, 2, 1, "", "desk_accessory_file"]], "PyXA.apps.SystemEvents.XASystemEventsDesktop": [[45, 4, 1, "", "change_interval"], [45, 4, 1, "", "display_name"], [45, 4, 1, "", "dynamic_style"], [45, 4, 1, "", "id"], [45, 4, 1, "", "name"], [45, 4, 1, "", "picture"], [45, 4, 1, "", "picture_rotation"], [45, 4, 1, "", "pictures_folder"], [45, 4, 1, "", "random_order"], [45, 4, 1, "", "translucent_menu_bar"], [45, 4, 1, "", "transluscent_menu_bar"]], "PyXA.apps.SystemEvents.XASystemEventsDesktopList": [[45, 2, 1, "", "by_change_interval"], [45, 2, 1, "", "by_display_name"], [45, 2, 1, "", "by_dynamic_style"], [45, 2, 1, "", "by_id"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_picture"], [45, 2, 1, "", "by_picture_rotation"], [45, 2, 1, "", "by_pictures_folder"], [45, 2, 1, "", "by_random_order"], [45, 2, 1, "", "by_translucent_menu_bar"], [45, 2, 1, "", "change_interval"], [45, 2, 1, "", "display_name"], [45, 2, 1, "", "dynamic_style"], [45, 2, 1, "", "id"], [45, 2, 1, "", "name"], [45, 2, 1, "", "picture"], [45, 2, 1, "", "picture_rotation"], [45, 2, 1, "", "pictures_folder"], [45, 2, 1, "", "random_folder"], [45, 2, 1, "", "translucent_menu_bar"]], "PyXA.apps.SystemEvents.XASystemEventsDockPreferencesObject": [[45, 4, 1, "", "animate"], [45, 4, 1, "", "autohide"], [45, 4, 1, "", "autohide_menu_bar"], [45, 4, 1, "", "dock_size"], [45, 4, 1, "", "double_click_behavior"], [45, 4, 1, "", "magnification"], [45, 4, 1, "", "magnification_size"], [45, 4, 1, "", "minimize_effect"], [45, 4, 1, "", "minimize_into_application"], [45, 4, 1, "", "screen_edge"], [45, 4, 1, "", "show_indicators"], [45, 4, 1, "", "show_recents"]], "PyXA.apps.SystemEvents.XASystemEventsDocument": [[45, 4, 1, "", "file"], [45, 4, 1, "", "modified"], [45, 4, 1, "", "name"], [45, 2, 1, "", "save"]], "PyXA.apps.SystemEvents.XASystemEventsDocumentList": [[45, 2, 1, "", "by_file"], [45, 2, 1, "", "by_modified"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "file"], [45, 2, 1, "", "modified"], [45, 2, 1, "", "name"]], "PyXA.apps.SystemEvents.XASystemEventsFolderAction": [[45, 2, 1, "", "enable"], [45, 4, 1, "", "enabled"], [45, 4, 1, "", "name"], [45, 4, 1, "", "path"], [45, 2, 1, "", "scripts"], [45, 4, 1, "", "volume"]], "PyXA.apps.SystemEvents.XASystemEventsFolderActionList": [[45, 2, 1, "", "by_enabled"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_path"], [45, 2, 1, "", "by_volume"], [45, 2, 1, "", "enabled"], [45, 2, 1, "", "name"], [45, 2, 1, "", "path"], [45, 2, 1, "", "volume"]], "PyXA.apps.SystemEvents.XASystemEventsInsertionPreference": [[45, 4, 1, "", "custom_application"], [45, 4, 1, "", "custom_script"], [45, 4, 1, "", "insertion_action"]], "PyXA.apps.SystemEvents.XASystemEventsInterface": [[45, 4, 1, "", "automatic"], [45, 4, 1, "", "duplex"], [45, 4, 1, "", "id"], [45, 4, 1, "", "kind"], [45, 4, 1, "", "mac_address"], [45, 4, 1, "", "mtu"], [45, 4, 1, "", "name"], [45, 4, 1, "", "speed"]], "PyXA.apps.SystemEvents.XASystemEventsInterfaceList": [[45, 2, 1, "", "automatic"], [45, 2, 1, "", "by_automatic"], [45, 2, 1, "", "by_duplex"], [45, 2, 1, "", "by_id"], [45, 2, 1, "", "by_kind"], [45, 2, 1, "", "by_mac_address"], [45, 2, 1, "", "by_mtu"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_speed"], [45, 2, 1, "", "duplex"], [45, 2, 1, "", "id"], [45, 2, 1, "", "kind"], [45, 2, 1, "", "mac_address"], [45, 2, 1, "", "mtu"], [45, 2, 1, "", "name"], [45, 2, 1, "", "speed"]], "PyXA.apps.SystemEvents.XASystemEventsLocation": [[45, 4, 1, "", "id"], [45, 4, 1, "", "name"]], "PyXA.apps.SystemEvents.XASystemEventsLocationList": [[45, 2, 1, "", "by_id"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "id"], [45, 2, 1, "", "name"]], "PyXA.apps.SystemEvents.XASystemEventsLoginItem": [[45, 2, 1, "", "delete"], [45, 4, 1, "", "hidden"], [45, 4, 1, "", "kind"], [45, 4, 1, "", "name"], [45, 4, 1, "", "path"]], "PyXA.apps.SystemEvents.XASystemEventsLoginItemList": [[45, 2, 1, "", "by_hidden"], [45, 2, 1, "", "by_kind"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_path"], [45, 2, 1, "", "hidden"], [45, 2, 1, "", "kind"], [45, 2, 1, "", "name"], [45, 2, 1, "", "path"]], "PyXA.apps.SystemEvents.XASystemEventsNetworkPreferencesObject": [[45, 4, 1, "", "current_location"], [45, 2, 1, "", "interfaces"], [45, 2, 1, "", "locations"], [45, 2, 1, "", "services"]], "PyXA.apps.SystemEvents.XASystemEventsPrintSettings": [[45, 4, 1, "", "collating"], [45, 4, 1, "", "copies"], [45, 4, 1, "", "ending_page"], [45, 4, 1, "", "error_handling"], [45, 4, 1, "", "fax_number"], [45, 4, 1, "", "pages_across"], [45, 4, 1, "", "pages_down"], [45, 4, 1, "", "requested_print_time"], [45, 4, 1, "", "starting_page"], [45, 4, 1, "", "target_printer"]], "PyXA.apps.SystemEvents.XASystemEventsProcess": [[45, 4, 1, "", "accepts_high_level_events"], [45, 4, 1, "", "accepts_remote_events"], [45, 4, 1, "", "architecture"], [45, 4, 1, "", "background_only"], [45, 4, 1, "", "bundle_identifier"], [45, 4, 1, "", "classic"], [45, 4, 1, "", "creator_type"], [45, 4, 1, "", "displayed_name"], [45, 4, 1, "", "file"], [45, 4, 1, "", "file_type"], [45, 4, 1, "", "front_window"], [45, 4, 1, "", "frontmost"], [45, 4, 1, "", "has_scripting_terminology"], [45, 4, 1, "", "id"], [45, 4, 1, "", "name"], [45, 4, 1, "", "partition_space_used"], [45, 4, 1, "", "short_name"], [45, 4, 1, "", "total_partition_size"], [45, 4, 1, "", "unix_id"], [45, 4, 1, "", "visible"]], "PyXA.apps.SystemEvents.XASystemEventsProcessList": [[45, 2, 1, "", "accepts_high_level_events"], [45, 2, 1, "", "accepts_remote_events"], [45, 2, 1, "", "architecture"], [45, 2, 1, "", "background_only"], [45, 2, 1, "", "bundle_identifier"], [45, 2, 1, "", "by_accepts_high_level_events"], [45, 2, 1, "", "by_accepts_remote_events"], [45, 2, 1, "", "by_architecture"], [45, 2, 1, "", "by_background_only"], [45, 2, 1, "", "by_bundle_identifier"], [45, 2, 1, "", "by_classic"], [45, 2, 1, "", "by_creator_type"], [45, 2, 1, "", "by_displayed_name"], [45, 2, 1, "", "by_file"], [45, 2, 1, "", "by_file_type"], [45, 2, 1, "", "by_frontmost"], [45, 2, 1, "", "by_has_scripting_terminology"], [45, 2, 1, "", "by_id"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_partition_space_used"], [45, 2, 1, "", "by_short_name"], [45, 2, 1, "", "by_total_partition_size"], [45, 2, 1, "", "by_unix_id"], [45, 2, 1, "", "by_visible"], [45, 2, 1, "", "classic"], [45, 2, 1, "", "creator_type"], [45, 2, 1, "", "displayed_name"], [45, 2, 1, "", "file"], [45, 2, 1, "", "file_type"], [45, 2, 1, "", "has_scripting_terminology"], [45, 2, 1, "", "id"], [45, 2, 1, "", "name"], [45, 2, 1, "", "partition_space_used"], [45, 2, 1, "", "short_name"], [45, 2, 1, "", "total_partition_size"], [45, 2, 1, "", "unix_id"], [45, 2, 1, "", "visible"]], "PyXA.apps.SystemEvents.XASystemEventsPropertyListFile": [[45, 4, 1, "", "contents"]], "PyXA.apps.SystemEvents.XASystemEventsPropertyListFileList": [[45, 2, 1, "", "by_content"], [45, 2, 1, "", "contents"]], "PyXA.apps.SystemEvents.XASystemEventsPropertyListItem": [[45, 4, 1, "", "kind"], [45, 4, 1, "", "name"], [45, 2, 1, "", "property_list_items"], [45, 4, 1, "", "text"], [45, 4, 1, "", "value"]], "PyXA.apps.SystemEvents.XASystemEventsPropertyListItemList": [[45, 2, 1, "", "by_kind"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_text"], [45, 2, 1, "", "by_value"], [45, 2, 1, "", "kind"], [45, 2, 1, "", "name"], [45, 2, 1, "", "text"], [45, 2, 1, "", "value"]], "PyXA.apps.SystemEvents.XASystemEventsScreenSaver": [[45, 4, 1, "", "displayedName"], [45, 4, 1, "", "name"], [45, 4, 1, "", "path"], [45, 4, 1, "", "picture_display_style"], [45, 2, 1, "", "start"], [45, 2, 1, "", "stop"]], "PyXA.apps.SystemEvents.XASystemEventsScreenSaverList": [[45, 2, 1, "", "by_displayed_name"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_path"], [45, 2, 1, "", "by_picture_display_style"], [45, 2, 1, "", "displayed_name"], [45, 2, 1, "", "name"], [45, 2, 1, "", "path"], [45, 2, 1, "", "picture_display_style"]], "PyXA.apps.SystemEvents.XASystemEventsScreenSaverPreferencesObject": [[45, 4, 1, "", "delay_interval"], [45, 4, 1, "", "main_screen_only"], [45, 4, 1, "", "running"], [45, 4, 1, "", "show_clock"], [45, 2, 1, "", "start"], [45, 2, 1, "", "stop"]], "PyXA.apps.SystemEvents.XASystemEventsScript": [[45, 4, 1, "", "enabled"], [45, 4, 1, "", "name"], [45, 4, 1, "", "path"], [45, 4, 1, "", "posix_path"]], "PyXA.apps.SystemEvents.XASystemEventsScriptList": [[45, 2, 1, "", "by_enabled"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_path"], [45, 2, 1, "", "by_posix_path"], [45, 2, 1, "", "enabled"], [45, 2, 1, "", "name"], [45, 2, 1, "", "path"], [45, 2, 1, "", "posix_path"]], "PyXA.apps.SystemEvents.XASystemEventsScriptingClass": [[45, 4, 1, "", "hidden"], [45, 4, 1, "", "id"], [45, 4, 1, "", "name"], [45, 4, 1, "", "object_description"], [45, 4, 1, "", "plural_name"], [45, 2, 1, "", "scripting_elements"], [45, 2, 1, "", "scripting_properties"], [45, 4, 1, "", "suite_name"], [45, 4, 1, "", "superclass"]], "PyXA.apps.SystemEvents.XASystemEventsScriptingClassList": [[45, 2, 1, "", "by_hidden"], [45, 2, 1, "", "by_id"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_object_description"], [45, 2, 1, "", "by_plural_name"], [45, 2, 1, "", "by_suite_name"], [45, 2, 1, "", "by_superclass"], [45, 2, 1, "", "hidden"], [45, 2, 1, "", "id"], [45, 2, 1, "", "name"], [45, 2, 1, "", "object_description"], [45, 2, 1, "", "plural_name"], [45, 2, 1, "", "suite_name"], [45, 2, 1, "", "superclass"]], "PyXA.apps.SystemEvents.XASystemEventsScriptingCommand": [[45, 4, 1, "", "direct_parameter"], [45, 4, 1, "", "hidden"], [45, 4, 1, "", "id"], [45, 4, 1, "", "name"], [45, 4, 1, "", "object_description"], [45, 2, 1, "", "scripting_parameters"], [45, 4, 1, "", "scripting_result"], [45, 4, 1, "", "suite_name"]], "PyXA.apps.SystemEvents.XASystemEventsScriptingCommandList": [[45, 2, 1, "", "by_direct_parameter"], [45, 2, 1, "", "by_hidden"], [45, 2, 1, "", "by_id"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_object_description"], [45, 2, 1, "", "by_scripting_result"], [45, 2, 1, "", "by_suite_name"], [45, 2, 1, "", "direct_parameter"], [45, 2, 1, "", "hidden"], [45, 2, 1, "", "id"], [45, 2, 1, "", "name"], [45, 2, 1, "", "object_description"], [45, 2, 1, "", "scripting_result"], [45, 2, 1, "", "suite_name"]], "PyXA.apps.SystemEvents.XASystemEventsScriptingDefinitionObject": [[45, 2, 1, "", "scripting_suites"]], "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumeration": [[45, 4, 1, "", "hidden"], [45, 4, 1, "", "id"], [45, 4, 1, "", "name"], [45, 2, 1, "", "scripting_enumerators"]], "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumerationList": [[45, 2, 1, "", "by_hidden"], [45, 2, 1, "", "by_id"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "hidden"], [45, 2, 1, "", "id"], [45, 2, 1, "", "name"]], "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumerator": [[45, 4, 1, "", "hidden"], [45, 4, 1, "", "id"], [45, 4, 1, "", "name"], [45, 4, 1, "", "object_description"]], "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumeratorList": [[45, 2, 1, "", "by_hidden"], [45, 2, 1, "", "by_id"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_object_description"], [45, 2, 1, "", "hidden"], [45, 2, 1, "", "id"], [45, 2, 1, "", "name"], [45, 2, 1, "", "object_description"]], "PyXA.apps.SystemEvents.XASystemEventsScriptingParameter": [[45, 4, 1, "", "hidden"], [45, 4, 1, "", "id"], [45, 4, 1, "", "kind"], [45, 4, 1, "", "name"], [45, 4, 1, "", "object_description"], [45, 4, 1, "", "optional"]], "PyXA.apps.SystemEvents.XASystemEventsScriptingParameterList": [[45, 2, 1, "", "by_hidden"], [45, 2, 1, "", "by_id"], [45, 2, 1, "", "by_kind"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_object_description"], [45, 2, 1, "", "by_optional"], [45, 2, 1, "", "hidden"], [45, 2, 1, "", "id"], [45, 2, 1, "", "kind"], [45, 2, 1, "", "name"], [45, 2, 1, "", "object_description"], [45, 2, 1, "", "optional"]], "PyXA.apps.SystemEvents.XASystemEventsScriptingProperty": [[45, 4, 1, "", "access"], [45, 4, 1, "", "enumerated"], [45, 4, 1, "", "hidden"], [45, 4, 1, "", "id"], [45, 4, 1, "", "kind"], [45, 4, 1, "", "listed"], [45, 4, 1, "", "name"], [45, 4, 1, "", "object_description"]], "PyXA.apps.SystemEvents.XASystemEventsScriptingPropertyList": [[45, 2, 1, "", "access"], [45, 2, 1, "", "by_access"], [45, 2, 1, "", "by_enumerated"], [45, 2, 1, "", "by_hidden"], [45, 2, 1, "", "by_id"], [45, 2, 1, "", "by_kind"], [45, 2, 1, "", "by_listed"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_object_description"], [45, 2, 1, "", "enumerated"], [45, 2, 1, "", "hidden"], [45, 2, 1, "", "id"], [45, 2, 1, "", "kind"], [45, 2, 1, "", "listed"], [45, 2, 1, "", "name"], [45, 2, 1, "", "object_description"]], "PyXA.apps.SystemEvents.XASystemEventsScriptingResultObject": [[45, 4, 1, "", "enumerated"], [45, 4, 1, "", "kind"], [45, 4, 1, "", "listed"], [45, 4, 1, "", "object_description"]], "PyXA.apps.SystemEvents.XASystemEventsScriptingResultObjectList": [[45, 2, 1, "", "by_enumerated"], [45, 2, 1, "", "by_kind"], [45, 2, 1, "", "by_listed"], [45, 2, 1, "", "by_object_description"], [45, 2, 1, "", "enumerated"], [45, 2, 1, "", "kind"], [45, 2, 1, "", "listed"], [45, 2, 1, "", "object_description"]], "PyXA.apps.SystemEvents.XASystemEventsScriptingSuite": [[45, 4, 1, "", "hidden"], [45, 4, 1, "", "id"], [45, 4, 1, "", "name"], [45, 4, 1, "", "object_description"], [45, 2, 1, "", "scripting_classes"], [45, 2, 1, "", "scripting_commands"], [45, 2, 1, "", "scripting_enumerations"]], "PyXA.apps.SystemEvents.XASystemEventsScriptingSuiteList": [[45, 2, 1, "", "by_hidden"], [45, 2, 1, "", "by_id"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_object_description"], [45, 2, 1, "", "hidden"], [45, 2, 1, "", "id"], [45, 2, 1, "", "name"], [45, 2, 1, "", "object_description"]], "PyXA.apps.SystemEvents.XASystemEventsSecurityPreferencesObject": [[45, 4, 1, "", "automatic_login"], [45, 4, 1, "", "log_out_when_inactive"], [45, 4, 1, "", "log_out_when_inactive_interval"], [45, 4, 1, "", "require_password_to_unlock"], [45, 4, 1, "", "require_password_to_wake"], [45, 4, 1, "", "secure_virtual_memory"]], "PyXA.apps.SystemEvents.XASystemEventsService": [[45, 4, 1, "", "active"], [45, 2, 1, "", "connect"], [45, 4, 1, "", "current_configuration"], [45, 2, 1, "", "disconnect"], [45, 4, 1, "", "id"], [45, 4, 1, "", "interface"], [45, 4, 1, "", "kind"], [45, 4, 1, "", "name"]], "PyXA.apps.SystemEvents.XASystemEventsServiceList": [[45, 2, 1, "", "active"], [45, 2, 1, "", "by_active"], [45, 2, 1, "", "by_current_configuration"], [45, 2, 1, "", "by_id"], [45, 2, 1, "", "by_interface"], [45, 2, 1, "", "by_kind"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "current_configuration"], [45, 2, 1, "", "id"], [45, 2, 1, "", "interface"], [45, 2, 1, "", "kind"], [45, 2, 1, "", "name"]], "PyXA.apps.SystemEvents.XASystemEventsUIElement": [[45, 4, 1, "", "accessibility_description"], [45, 2, 1, "", "actions"], [45, 2, 1, "", "attributes"], [45, 2, 1, "", "browsers"], [45, 2, 1, "", "busy_indicators"], [45, 2, 1, "", "buttons"], [45, 2, 1, "", "cancel"], [45, 2, 1, "", "checkboxes"], [45, 2, 1, "", "click"], [45, 2, 1, "", "color_wells"], [45, 2, 1, "", "columns"], [45, 2, 1, "", "combo_boxes"], [45, 2, 1, "", "confirm"], [45, 2, 1, "", "decrement"], [45, 2, 1, "", "drawers"], [45, 4, 1, "", "enabled"], [45, 4, 1, "", "entire_contents"], [45, 4, 1, "", "focused"], [45, 2, 1, "", "groups"], [45, 2, 1, "", "grow_areas"], [45, 4, 1, "", "help"], [45, 2, 1, "", "images"], [45, 2, 1, "", "increment"], [45, 2, 1, "", "incrementors"], [45, 2, 1, "", "lists"], [45, 4, 1, "", "maximum_value"], [45, 2, 1, "", "menu_bar_items"], [45, 2, 1, "", "menu_bars"], [45, 2, 1, "", "menu_buttons"], [45, 2, 1, "", "menu_items"], [45, 2, 1, "", "menus"], [45, 4, 1, "", "minimum_value"], [45, 4, 1, "", "name"], [45, 4, 1, "", "object_description"], [45, 4, 1, "", "orientation"], [45, 2, 1, "", "outlines"], [45, 2, 1, "", "pick"], [45, 2, 1, "", "pop_overs"], [45, 2, 1, "", "pop_up_buttons"], [45, 4, 1, "", "position"], [45, 2, 1, "", "progress_indicators"], [45, 2, 1, "", "radio_buttons"], [45, 2, 1, "", "radio_groups"], [45, 2, 1, "", "relevance_indicators"], [45, 4, 1, "", "role"], [45, 4, 1, "", "role_description"], [45, 2, 1, "", "rows"], [45, 2, 1, "", "scroll_areas"], [45, 2, 1, "", "scroll_bars"], [45, 4, 1, "", "selected"], [45, 2, 1, "", "sheets"], [45, 4, 1, "", "size"], [45, 2, 1, "", "sliders"], [45, 2, 1, "", "splitter_groups"], [45, 2, 1, "", "splitters"], [45, 2, 1, "", "static_texts"], [45, 4, 1, "", "subrole"], [45, 2, 1, "", "tab_groups"], [45, 2, 1, "", "tables"], [45, 2, 1, "", "text_areas"], [45, 2, 1, "", "text_fields"], [45, 4, 1, "", "title"], [45, 2, 1, "", "toolbars"], [45, 2, 1, "", "ui_elements"], [45, 4, 1, "", "value"], [45, 2, 1, "", "value_indicators"], [45, 2, 1, "", "windows"]], "PyXA.apps.SystemEvents.XASystemEventsUIElementList": [[45, 2, 1, "", "accessibility_description"], [45, 2, 1, "", "actions"], [45, 2, 1, "", "by_accessibility_description"], [45, 2, 1, "", "by_enabled"], [45, 2, 1, "", "by_entire_contents"], [45, 2, 1, "", "by_focused"], [45, 2, 1, "", "by_help"], [45, 2, 1, "", "by_maximum_value"], [45, 2, 1, "", "by_minimum_value"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_object_description"], [45, 2, 1, "", "by_orientation"], [45, 2, 1, "", "by_position"], [45, 2, 1, "", "by_role"], [45, 2, 1, "", "by_role_description"], [45, 2, 1, "", "by_selected"], [45, 2, 1, "", "by_size"], [45, 2, 1, "", "by_subrole"], [45, 2, 1, "", "by_title"], [45, 2, 1, "", "by_value"], [45, 2, 1, "", "enabled"], [45, 2, 1, "", "entire_contents"], [45, 2, 1, "", "focused"], [45, 2, 1, "", "help"], [45, 2, 1, "", "maximum_value"], [45, 2, 1, "", "minimum_value"], [45, 2, 1, "", "name"], [45, 2, 1, "", "object_description"], [45, 2, 1, "", "orientation"], [45, 2, 1, "", "position"], [45, 2, 1, "", "role"], [45, 2, 1, "", "role_description"], [45, 2, 1, "", "selected"], [45, 2, 1, "", "size"], [45, 2, 1, "", "subrole"], [45, 2, 1, "", "title"], [45, 2, 1, "", "value"], [45, 2, 1, "", "windows"]], "PyXA.apps.SystemEvents.XASystemEventsUser": [[45, 4, 1, "", "full_name"], [45, 4, 1, "", "home_directory"], [45, 4, 1, "", "name"], [45, 4, 1, "", "picture_path"]], "PyXA.apps.SystemEvents.XASystemEventsUserList": [[45, 2, 1, "", "by_full_name"], [45, 2, 1, "", "by_home_directory"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_picture_path"], [45, 2, 1, "", "full_name"], [45, 2, 1, "", "home_directory"], [45, 2, 1, "", "name"], [45, 2, 1, "", "picture_path"]], "PyXA.apps.SystemEvents.XASystemEventsWindow": [[45, 4, 1, "", "accessibility_description"], [45, 2, 1, "", "actions"], [45, 2, 1, "", "attributes"], [45, 2, 1, "", "browsers"], [45, 2, 1, "", "busy_indicators"], [45, 2, 1, "", "buttons"], [45, 2, 1, "", "cancel"], [45, 2, 1, "", "checkboxes"], [45, 2, 1, "", "click"], [45, 2, 1, "", "close"], [45, 2, 1, "", "collapse"], [45, 2, 1, "", "color_wells"], [45, 2, 1, "", "combo_boxes"], [45, 2, 1, "", "confirm"], [45, 2, 1, "", "decrement"], [45, 4, 1, "", "document"], [45, 2, 1, "", "drawers"], [45, 4, 1, "", "enabled"], [45, 4, 1, "", "entire_contents"], [45, 4, 1, "", "focused"], [45, 2, 1, "", "groups"], [45, 2, 1, "", "grow_areas"], [45, 4, 1, "", "help"], [45, 2, 1, "", "images"], [45, 2, 1, "", "increment"], [45, 2, 1, "", "incrementors"], [45, 2, 1, "", "lists"], [45, 4, 1, "", "maximum_value"], [45, 2, 1, "", "menu_buttons"], [45, 4, 1, "", "minimum_value"], [45, 4, 1, "", "name"], [45, 4, 1, "", "object_description"], [45, 4, 1, "", "orientation"], [45, 2, 1, "", "outlines"], [45, 2, 1, "", "pick"], [45, 2, 1, "", "pop_overs"], [45, 2, 1, "", "pop_up_buttons"], [45, 4, 1, "", "position"], [45, 2, 1, "", "progress_indicators"], [45, 2, 1, "", "radio_buttons"], [45, 2, 1, "", "radio_groups"], [45, 2, 1, "", "relevance_indicators"], [45, 4, 1, "", "role"], [45, 4, 1, "", "role_description"], [45, 2, 1, "", "scroll_areas"], [45, 2, 1, "", "scroll_bars"], [45, 4, 1, "", "selected"], [45, 2, 1, "", "sheets"], [45, 4, 1, "", "size"], [45, 2, 1, "", "sliders"], [45, 2, 1, "", "splitter_groups"], [45, 2, 1, "", "splitters"], [45, 2, 1, "", "static_texts"], [45, 4, 1, "", "subrole"], [45, 2, 1, "", "tab_groups"], [45, 2, 1, "", "tables"], [45, 2, 1, "", "text_areas"], [45, 2, 1, "", "text_fields"], [45, 4, 1, "", "title"], [45, 2, 1, "", "toolbars"], [45, 2, 1, "", "ui_elements"], [45, 2, 1, "", "uncollapse"], [45, 4, 1, "", "value"]], "PyXA.apps.SystemEvents.XASystemEventsWindowList": [[45, 2, 1, "", "close"], [45, 2, 1, "", "collapse"], [45, 2, 1, "", "name"], [45, 2, 1, "", "uncollapse"]], "PyXA.apps.SystemEvents.XASystemEventsXMLAttribute": [[45, 4, 1, "", "name"], [45, 4, 1, "", "value"]], "PyXA.apps.SystemEvents.XASystemEventsXMLAttributeList": [[45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_value"], [45, 2, 1, "", "name"], [45, 2, 1, "", "value"]], "PyXA.apps.SystemEvents.XASystemEventsXMLData": [[45, 4, 1, "", "id"], [45, 4, 1, "", "name"], [45, 4, 1, "", "text"], [45, 2, 1, "", "xml_elements"]], "PyXA.apps.SystemEvents.XASystemEventsXMLDataList": [[45, 2, 1, "", "by_id"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_text"], [45, 2, 1, "", "id"], [45, 2, 1, "", "name"], [45, 2, 1, "", "text"]], "PyXA.apps.SystemEvents.XASystemEventsXMLElement": [[45, 4, 1, "", "id"], [45, 4, 1, "", "name"], [45, 4, 1, "", "value"], [45, 2, 1, "", "xml_attributes"], [45, 2, 1, "", "xml_elements"]], "PyXA.apps.SystemEvents.XASystemEventsXMLElementList": [[45, 2, 1, "", "by_id"], [45, 2, 1, "", "by_name"], [45, 2, 1, "", "by_value"], [45, 2, 1, "", "id"], [45, 2, 1, "", "name"], [45, 2, 1, "", "value"]], "PyXA.apps.SystemEvents.XASystemEventsXMLFile": [[45, 4, 1, "", "contents"]], "PyXA.apps.SystemEvents.XASystemEventsXMLFileList": [[45, 2, 1, "", "by_contents"], [45, 2, 1, "", "contents"]], "PyXA.apps.SystemPreferences": [[46, 1, 1, "", "XAPreferenceAnchor"], [46, 1, 1, "", "XAPreferenceAnchorList"], [46, 1, 1, "", "XAPreferencePane"], [46, 1, 1, "", "XAPreferencePaneList"], [46, 1, 1, "", "XASystemPreferencesApplication"]], "PyXA.apps.SystemPreferences.XAPreferenceAnchor": [[46, 4, 1, "", "name"], [46, 2, 1, "", "reveal"]], "PyXA.apps.SystemPreferences.XAPreferenceAnchorList": [[46, 2, 1, "", "by_name"], [46, 2, 1, "", "name"]], "PyXA.apps.SystemPreferences.XAPreferencePane": [[46, 2, 1, "", "anchors"], [46, 2, 1, "", "authorize"], [46, 4, 1, "", "id"], [46, 4, 1, "", "localized_name"], [46, 4, 1, "", "name"], [46, 2, 1, "", "reveal"]], "PyXA.apps.SystemPreferences.XAPreferencePaneList": [[46, 2, 1, "", "by_id"], [46, 2, 1, "", "by_localized_name"], [46, 2, 1, "", "by_name"], [46, 2, 1, "", "id"], [46, 2, 1, "", "localized_name"], [46, 2, 1, "", "name"]], "PyXA.apps.SystemPreferences.XASystemPreferencesApplication": [[46, 4, 1, "", "current_pane"], [46, 4, 1, "", "frontmost"], [46, 4, 1, "", "name"], [46, 2, 1, "", "panes"], [46, 4, 1, "", "preferences_window"], [46, 4, 1, "", "show_all"], [46, 4, 1, "", "version"]], "PyXA.apps.TV": [[49, 1, 1, "", "XATVApplication"], [49, 1, 1, "", "XATVTrack"], [49, 1, 1, "", "XATVTrackList"], [49, 1, 1, "", "XATVWindow"]], "PyXA.apps.TV.XATVTrack": [[49, 4, 1, "", "sort_director"]], "PyXA.apps.TV.XATVTrackList": [[49, 2, 1, "", "by_sort_director"], [49, 2, 1, "", "sort_director"]], "PyXA.apps.Terminal": [[47, 1, 1, "", "XATerminalApplication"], [47, 1, 1, "", "XATerminalSettingsSet"], [47, 1, 1, "", "XATerminalSettingsSetList"], [47, 1, 1, "", "XATerminalTab"], [47, 1, 1, "", "XATerminalTabList"], [47, 1, 1, "", "XATerminalWindow"]], "PyXA.apps.Terminal.XATerminalApplication": [[47, 4, 1, "", "current_tab"], [47, 4, 1, "", "default_settings"], [47, 2, 1, "", "do_script"], [47, 4, 1, "", "frontmost"], [47, 4, 1, "", "name"], [47, 2, 1, "", "settings_sets"], [47, 4, 1, "", "startup_settings"], [47, 4, 1, "", "version"]], "PyXA.apps.Terminal.XATerminalSettingsSet": [[47, 4, 1, "", "background_color"], [47, 4, 1, "", "bold_text_color"], [47, 4, 1, "", "clean_commands"], [47, 4, 1, "", "cursor_color"], [47, 4, 1, "", "custom_title"], [47, 4, 1, "", "font_antialiasing"], [47, 4, 1, "", "font_name"], [47, 4, 1, "", "font_size"], [47, 2, 1, "", "get_clipboard_representation"], [47, 4, 1, "", "id"], [47, 4, 1, "", "name"], [47, 4, 1, "", "normal_text_color"], [47, 4, 1, "", "number_of_columns"], [47, 4, 1, "", "number_of_rows"], [47, 4, 1, "", "title_displays_custom_title"], [47, 4, 1, "", "title_displays_device_name"], [47, 4, 1, "", "title_displays_settings_name"], [47, 4, 1, "", "title_displays_shell_path"], [47, 4, 1, "", "title_displays_window_size"]], "PyXA.apps.Terminal.XATerminalSettingsSetList": [[47, 2, 1, "", "background_color"], [47, 2, 1, "", "bold_text_color"], [47, 2, 1, "", "by_background_color"], [47, 2, 1, "", "by_bold_text_color"], [47, 2, 1, "", "by_clean_commands"], [47, 2, 1, "", "by_cursor_color"], [47, 2, 1, "", "by_custom_title"], [47, 2, 1, "", "by_font_antialiasing"], [47, 2, 1, "", "by_font_name"], [47, 2, 1, "", "by_font_size"], [47, 2, 1, "", "by_id"], [47, 2, 1, "", "by_name"], [47, 2, 1, "", "by_normal_text_color"], [47, 2, 1, "", "by_number_of_columns"], [47, 2, 1, "", "by_number_of_rows"], [47, 2, 1, "", "by_title_displays_custom_title"], [47, 2, 1, "", "by_title_displays_device_name"], [47, 2, 1, "", "by_title_displays_settings_name"], [47, 2, 1, "", "by_title_displays_shell_path"], [47, 2, 1, "", "by_title_displays_windows_size"], [47, 2, 1, "", "clean_commands"], [47, 2, 1, "", "cursor_color"], [47, 2, 1, "", "custom_title"], [47, 2, 1, "", "font_antialiasing"], [47, 2, 1, "", "font_name"], [47, 2, 1, "", "font_size"], [47, 2, 1, "", "get_clipboard_representation"], [47, 2, 1, "", "id"], [47, 2, 1, "", "name"], [47, 2, 1, "", "normal_text_color"], [47, 2, 1, "", "number_of_columns"], [47, 2, 1, "", "number_of_rows"], [47, 2, 1, "", "title_displays_custom_title"], [47, 2, 1, "", "title_displays_device_name"], [47, 2, 1, "", "title_displays_settings_name"], [47, 2, 1, "", "title_displays_shell_path"], [47, 2, 1, "", "title_displays_window_size"]], "PyXA.apps.Terminal.XATerminalTab": [[47, 4, 1, "", "busy"], [47, 4, 1, "", "contents"], [47, 4, 1, "", "current_settings"], [47, 4, 1, "", "custom_title"], [47, 2, 1, "", "get_clipboard_representation"], [47, 4, 1, "", "history"], [47, 4, 1, "", "number_of_columns"], [47, 4, 1, "", "number_of_rows"], [47, 4, 1, "", "processes"], [47, 4, 1, "", "selected"], [47, 4, 1, "", "title_displays_custom_title"], [47, 4, 1, "", "tty"]], "PyXA.apps.Terminal.XATerminalTabList": [[47, 2, 1, "", "busy"], [47, 2, 1, "", "by_busy"], [47, 2, 1, "", "by_contents"], [47, 2, 1, "", "by_current_settings"], [47, 2, 1, "", "by_custom_title"], [47, 2, 1, "", "by_history"], [47, 2, 1, "", "by_number_of_columns"], [47, 2, 1, "", "by_number_of_rows"], [47, 2, 1, "", "by_processes"], [47, 2, 1, "", "by_selected"], [47, 2, 1, "", "by_title_displays_custom_title"], [47, 2, 1, "", "by_tty"], [47, 2, 1, "", "contents"], [47, 2, 1, "", "current_settings"], [47, 2, 1, "", "custom_title"], [47, 2, 1, "", "get_clipboard_representation"], [47, 2, 1, "", "history"], [47, 2, 1, "", "number_of_columns"], [47, 2, 1, "", "number_of_rows"], [47, 2, 1, "", "processes"], [47, 2, 1, "", "selected"], [47, 2, 1, "", "title_displays_custom_title"], [47, 2, 1, "", "tty"]], "PyXA.apps.Terminal.XATerminalWindow": [[47, 4, 1, "", "frontmost"], [47, 4, 1, "", "position"], [47, 4, 1, "", "selected_tab"], [47, 2, 1, "", "tabs"]], "PyXA.apps.TextEdit": [[48, 1, 1, "", "XATextEditApplication"], [48, 1, 1, "", "XATextEditDocument"], [48, 1, 1, "", "XATextEditDocumentList"], [48, 1, 1, "", "XATextEditWindow"]], "PyXA.apps.TextEdit.XATextEditApplication": [[48, 2, 1, "", "documents"], [48, 4, 1, "", "frontmost"], [48, 2, 1, "", "make"], [48, 4, 1, "", "name"], [48, 2, 1, "", "new_document"], [48, 2, 1, "", "open"], [48, 2, 1, "", "print"], [48, 4, 1, "", "version"]], "PyXA.apps.TextEdit.XATextEditDocument": [[48, 2, 1, "", "get_clipboard_representation"], [48, 4, 1, "", "modified"], [48, 4, 1, "", "name"], [48, 4, 1, "", "path"], [48, 2, 1, "", "print"], [48, 4, 1, "", "properties"], [48, 2, 1, "", "save"]], "PyXA.apps.TextEdit.XATextEditDocumentList": [[48, 2, 1, "", "append"], [48, 2, 1, "", "by_modified"], [48, 2, 1, "", "by_name"], [48, 2, 1, "", "by_path"], [48, 2, 1, "", "by_properties"], [48, 2, 1, "", "get_clipboard_representation"], [48, 2, 1, "", "modified"], [48, 2, 1, "", "name"], [48, 2, 1, "", "path"], [48, 2, 1, "", "prepend"], [48, 2, 1, "", "properties"], [48, 2, 1, "", "push"], [48, 2, 1, "", "reverse"]], "PyXA.apps.TextEdit.XATextEditWindow": [[48, 4, 1, "", "document"], [48, 4, 1, "", "floating"], [48, 4, 1, "", "modal"], [48, 4, 1, "", "titled"]], "PyXA.apps.VLC": [[50, 1, 1, "", "XAVLCApplication"], [50, 1, 1, "", "XAVLCDocument"], [50, 1, 1, "", "XAVLCDocumentList"], [50, 1, 1, "", "XAVLCWindow"]], "PyXA.apps.VLC.XAVLCApplication": [[50, 2, 1, "", "activate_menu_item"], [50, 4, 1, "", "audio_desync"], [50, 4, 1, "", "audio_volume"], [50, 4, 1, "", "current_time"], [50, 2, 1, "", "documents"], [50, 4, 1, "", "duration_of_current_item"], [50, 4, 1, "", "frontmost"], [50, 2, 1, "", "fullscreen"], [50, 4, 1, "", "fullscreen_mode"], [50, 2, 1, "", "get_url"], [50, 2, 1, "", "make"], [50, 2, 1, "", "move_menu_focus_down"], [50, 2, 1, "", "move_menu_focus_left"], [50, 2, 1, "", "move_menu_focus_right"], [50, 2, 1, "", "move_menu_focus_up"], [50, 2, 1, "", "mute"], [50, 4, 1, "", "muted"], [50, 4, 1, "", "name"], [50, 4, 1, "", "name_of_current_item"], [50, 2, 1, "", "next"], [50, 2, 1, "", "open"], [50, 2, 1, "", "open_url"], [50, 4, 1, "", "path_of_current_item"], [50, 2, 1, "", "play"], [50, 4, 1, "", "playback_shows_menu"], [50, 4, 1, "", "playing"], [50, 2, 1, "", "previous"], [50, 4, 1, "", "properties"], [50, 2, 1, "", "step_backward"], [50, 2, 1, "", "step_forward"], [50, 2, 1, "", "stop"], [50, 4, 1, "", "version"], [50, 2, 1, "", "volume_down"], [50, 2, 1, "", "volume_up"]], "PyXA.apps.VLC.XAVLCDocument": [[50, 4, 1, "", "modified"], [50, 4, 1, "", "name"], [50, 4, 1, "", "path"], [50, 4, 1, "", "properties"]], "PyXA.apps.VLC.XAVLCDocumentList": [[50, 2, 1, "", "by_modified"], [50, 2, 1, "", "by_name"], [50, 2, 1, "", "by_path"], [50, 2, 1, "", "get_clipboard_representation"], [50, 2, 1, "", "modified"], [50, 2, 1, "", "name"], [50, 2, 1, "", "path"]], "PyXA.apps.VLC.XAVLCWindow": [[50, 4, 1, "", "document"], [50, 4, 1, "", "floating"], [50, 4, 1, "", "modal"], [50, 4, 1, "", "titled"]], "PyXA.apps.iTerm": [[24, 1, 1, "", "XAiTermApplication"], [24, 1, 1, "", "XAiTermHotkeyWindow"], [24, 1, 1, "", "XAiTermSession"], [24, 1, 1, "", "XAiTermTab"], [24, 1, 1, "", "XAiTermWindow"]], "PyXA.apps.iTerm.XAiTermApplication": [[24, 2, 1, "", "create_hotkey_window"], [24, 2, 1, "", "create_window"], [24, 4, 1, "", "current_window"], [24, 4, 1, "", "frontmost"], [24, 2, 1, "", "invoke_api_expression"], [24, 2, 1, "", "launch_api_script"], [24, 4, 1, "", "name"], [24, 2, 1, "", "request_cookie_and_key"], [24, 4, 1, "", "version"]], "PyXA.apps.iTerm.XAiTermHotkeyWindow": [[24, 2, 1, "", "hide_hotkey_window"], [24, 2, 1, "", "reveal_hotkey_window"], [24, 2, 1, "", "toggle_hotkey_window"]], "PyXA.apps.iTerm.XAiTermSession": [[24, 4, 1, "", "ansi_black_color"], [24, 4, 1, "", "ansi_blue_color"], [24, 4, 1, "", "ansi_bright_black_color"], [24, 4, 1, "", "ansi_bright_blue_color"], [24, 4, 1, "", "ansi_bright_cyan_color"], [24, 4, 1, "", "ansi_bright_green_color"], [24, 4, 1, "", "ansi_bright_magenta_color"], [24, 4, 1, "", "ansi_bright_red_color"], [24, 4, 1, "", "ansi_bright_white_color"], [24, 4, 1, "", "ansi_bright_yellow_color"], [24, 4, 1, "", "ansi_cyan_color"], [24, 4, 1, "", "ansi_green_color"], [24, 4, 1, "", "ansi_magenta_color"], [24, 4, 1, "", "ansi_red_color"], [24, 4, 1, "", "ansi_white_color"], [24, 4, 1, "", "ansi_yellow_color"], [24, 4, 1, "", "answerback_string"], [24, 4, 1, "", "background_color"], [24, 4, 1, "", "background_image"], [24, 4, 1, "", "bold_color"], [24, 2, 1, "", "close"], [24, 4, 1, "", "color_preset"], [24, 4, 1, "", "columns"], [24, 4, 1, "", "contents"], [24, 4, 1, "", "cursor_color"], [24, 4, 1, "", "cursor_text_color"], [24, 4, 1, "", "foreground_color"], [24, 4, 1, "", "id"], [24, 4, 1, "", "is_at_shell_prompt"], [24, 4, 1, "", "is_processing"], [24, 4, 1, "", "name"], [24, 4, 1, "", "profile_name"], [24, 4, 1, "", "rows"], [24, 4, 1, "", "selected_text_color"], [24, 4, 1, "", "selection_color"], [24, 2, 1, "", "set_variable"], [24, 2, 1, "", "split_horizontally"], [24, 2, 1, "", "split_horizontally_with_default_profile"], [24, 2, 1, "", "split_vertically"], [24, 2, 1, "", "split_vertically_with_default_profile"], [24, 4, 1, "", "text"], [24, 4, 1, "", "transparency"], [24, 4, 1, "", "tty"], [24, 4, 1, "", "underline_color"], [24, 4, 1, "", "unique_id"], [24, 4, 1, "", "use_underline_color"], [24, 2, 1, "", "variable"], [24, 2, 1, "", "write"]], "PyXA.apps.iTerm.XAiTermTab": [[24, 2, 1, "", "close"], [24, 4, 1, "", "current_session"], [24, 4, 1, "", "index"], [24, 2, 1, "", "move_to"]], "PyXA.apps.iTerm.XAiTermWindow": [[24, 4, 1, "", "alternate_identifier"], [24, 2, 1, "", "close"], [24, 2, 1, "", "create_tab"], [24, 4, 1, "", "current_session"], [24, 4, 1, "", "current_tab"], [24, 4, 1, "", "frontmost"], [24, 4, 1, "", "hotkey_window_profile"], [24, 4, 1, "", "is_hotkey_window"], [24, 4, 1, "", "position"]], "PyXA.apps.iWorkApplicationBase": [[25, 1, 1, "", "XAiWorkApplication"], [25, 1, 1, "", "XAiWorkAudioClip"], [25, 1, 1, "", "XAiWorkAudioClipList"], [25, 1, 1, "", "XAiWorkCell"], [25, 1, 1, "", "XAiWorkCellList"], [25, 1, 1, "", "XAiWorkChart"], [25, 1, 1, "", "XAiWorkChartList"], [25, 1, 1, "", "XAiWorkColumn"], [25, 1, 1, "", "XAiWorkColumnList"], [25, 1, 1, "", "XAiWorkContainer"], [25, 1, 1, "", "XAiWorkContainerList"], [25, 1, 1, "", "XAiWorkDocument"], [25, 1, 1, "", "XAiWorkDocumentList"], [25, 1, 1, "", "XAiWorkGroup"], [25, 1, 1, "", "XAiWorkGroupList"], [25, 1, 1, "", "XAiWorkImage"], [25, 1, 1, "", "XAiWorkImageList"], [25, 1, 1, "", "XAiWorkLine"], [25, 1, 1, "", "XAiWorkLineList"], [25, 1, 1, "", "XAiWorkMovie"], [25, 1, 1, "", "XAiWorkMovieList"], [25, 1, 1, "", "XAiWorkRange"], [25, 1, 1, "", "XAiWorkRangeList"], [25, 1, 1, "", "XAiWorkRow"], [25, 1, 1, "", "XAiWorkRowList"], [25, 1, 1, "", "XAiWorkShape"], [25, 1, 1, "", "XAiWorkShapeList"], [25, 1, 1, "", "XAiWorkTable"], [25, 1, 1, "", "XAiWorkTableList"], [25, 1, 1, "", "XAiWorkTextItem"], [25, 1, 1, "", "XAiWorkTextItemList"], [25, 1, 1, "", "XAiWorkWindow"], [25, 1, 1, "", "XAiWorkiWorkItem"], [25, 1, 1, "", "XAiWorkiWorkItemList"]], "PyXA.apps.iWorkApplicationBase.XAiWorkApplication": [[25, 1, 1, "", "Alignment"], [25, 1, 1, "", "CellFormat"], [25, 1, 1, "", "ChartGrouping"], [25, 1, 1, "", "ChartType"], [25, 1, 1, "", "FillOption"], [25, 1, 1, "", "ImageQuality"], [25, 1, 1, "", "KeyAction"], [25, 1, 1, "", "RepetitionMethod"], [25, 1, 1, "", "SortDirection"], [25, 4, 1, "", "current_document"], [25, 4, 1, "", "frontmost"], [25, 4, 1, "", "name"], [25, 2, 1, "", "open"], [25, 2, 1, "", "print"], [25, 4, 1, "", "properties"], [25, 2, 1, "", "remove_password"], [25, 2, 1, "", "set_password"], [25, 4, 1, "", "version"]], "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.Alignment": [[25, 3, 1, "", "AUTO"], [25, 3, 1, "", "BOTTOM"], [25, 3, 1, "", "CENTER_HORIZONTAL"], [25, 3, 1, "", "CENTER_VERTICAL"], [25, 3, 1, "", "JUSTIFY"], [25, 3, 1, "", "LEFT"], [25, 3, 1, "", "RIGHT"], [25, 3, 1, "", "TOP"]], "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.CellFormat": [[25, 3, 1, "", "AUTO"], [25, 3, 1, "", "CHECKBOX"], [25, 3, 1, "", "CURRENCY"], [25, 3, 1, "", "DATE_AND_TIME"], [25, 3, 1, "", "DECIMAL_NUMBER"], [25, 3, 1, "", "DURATION"], [25, 3, 1, "", "FRACTION"], [25, 3, 1, "", "NUMERAL_SYSTEM"], [25, 3, 1, "", "PERCENT"], [25, 3, 1, "", "POPUP_MENU"], [25, 3, 1, "", "RATING"], [25, 3, 1, "", "SCIENTIFIC"], [25, 3, 1, "", "SLIDER"], [25, 3, 1, "", "STEPPER"], [25, 3, 1, "", "TEXT"]], "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartGrouping": [[25, 3, 1, "", "COLUMN"], [25, 3, 1, "", "ROW"]], "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartType": [[25, 3, 1, "", "AREA_2D"], [25, 3, 1, "", "AREA_3D"], [25, 3, 1, "", "HORIZONTAL_BAR_2D"], [25, 3, 1, "", "HORIZONTAL_BAR_3D"], [25, 3, 1, "", "LINE_2D"], [25, 3, 1, "", "LINE_3D"], [25, 3, 1, "", "PIE_2D"], [25, 3, 1, "", "PIE_3D"], [25, 3, 1, "", "SCATTERPLOT_2D"], [25, 3, 1, "", "STACKED_AREA_2D"], [25, 3, 1, "", "STACKED_AREA_3D"], [25, 3, 1, "", "STACKED_HORIZONTAL_BAR_2D"], [25, 3, 1, "", "STACKED_HORIZONTAL_BAR_3D"], [25, 3, 1, "", "STACKED_VERTICAL_BAR_2D"], [25, 3, 1, "", "STACKED_VERTICAL_BAR_3D"], [25, 3, 1, "", "VERTICAL_BAR_2D"], [25, 3, 1, "", "VERTICAL_BAR_3D"]], "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.FillOption": [[25, 3, 1, "", "ADVANCED_GRADIENT_FILL"], [25, 3, 1, "", "ADVANCED_IMAGE_FILL"], [25, 3, 1, "", "COLOR_FILL"], [25, 3, 1, "", "GRADIENT_FILL"], [25, 3, 1, "", "IMAGE_FILL"], [25, 3, 1, "", "NO_FILL"]], "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ImageQuality": [[25, 3, 1, "", "BEST"], [25, 3, 1, "", "BETTER"], [25, 3, 1, "", "GOOD"]], "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.KeyAction": [[25, 3, 1, "", "COMMAND_DOWN"], [25, 3, 1, "", "CONTROL_DOWN"], [25, 3, 1, "", "OPTION_DOWN"], [25, 3, 1, "", "SHIFT_DOWN"]], "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.RepetitionMethod": [[25, 3, 1, "", "LOOP"], [25, 3, 1, "", "LOOP_BACK_AND_FORTH"], [25, 3, 1, "", "NONE"]], "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.SortDirection": [[25, 3, 1, "", "ASCENDING"], [25, 3, 1, "", "DESCENDING"]], "PyXA.apps.iWorkApplicationBase.XAiWorkAudioClip": [[25, 4, 1, "", "clip_volume"], [25, 4, 1, "", "file_name"], [25, 4, 1, "", "repetition_method"]], "PyXA.apps.iWorkApplicationBase.XAiWorkAudioClipList": [[25, 2, 1, "", "by_clip_volume"], [25, 2, 1, "", "by_file_name"], [25, 2, 1, "", "by_repetition_method"], [25, 2, 1, "", "clip_volume"], [25, 2, 1, "", "file_name"], [25, 2, 1, "", "repetition_method"]], "PyXA.apps.iWorkApplicationBase.XAiWorkCell": [[25, 4, 1, "", "column"], [25, 4, 1, "", "formatted_value"], [25, 4, 1, "", "formula"], [25, 4, 1, "", "properties"], [25, 4, 1, "", "row"], [25, 4, 1, "", "value"]], "PyXA.apps.iWorkApplicationBase.XAiWorkCellList": [[25, 2, 1, "", "by_column"], [25, 2, 1, "", "by_formatted_value"], [25, 2, 1, "", "by_formula"], [25, 2, 1, "", "by_properties"], [25, 2, 1, "", "by_row"], [25, 2, 1, "", "by_value"], [25, 2, 1, "", "column"], [25, 2, 1, "", "formatted_value"], [25, 2, 1, "", "formula"], [25, 2, 1, "", "properties"], [25, 2, 1, "", "row"], [25, 2, 1, "", "value"]], "PyXA.apps.iWorkApplicationBase.XAiWorkColumn": [[25, 4, 1, "", "address"], [25, 4, 1, "", "properties"], [25, 4, 1, "", "width"]], "PyXA.apps.iWorkApplicationBase.XAiWorkColumnList": [[25, 2, 1, "", "address"], [25, 2, 1, "", "by_address"], [25, 2, 1, "", "by_properties"], [25, 2, 1, "", "by_width"], [25, 2, 1, "", "properties"], [25, 2, 1, "", "width"]], "PyXA.apps.iWorkApplicationBase.XAiWorkContainer": [[25, 2, 1, "", "audio_clips"], [25, 2, 1, "", "charts"], [25, 2, 1, "", "groups"], [25, 2, 1, "", "images"], [25, 2, 1, "", "iwork_items"], [25, 2, 1, "", "lines"], [25, 2, 1, "", "movies"], [25, 2, 1, "", "shapes"], [25, 2, 1, "", "tables"], [25, 2, 1, "", "text_items"]], "PyXA.apps.iWorkApplicationBase.XAiWorkContainerList": [[25, 2, 1, "", "charts"], [25, 2, 1, "", "groups"], [25, 2, 1, "", "images"], [25, 2, 1, "", "iwork_items"], [25, 2, 1, "", "lines"], [25, 2, 1, "", "movies"], [25, 2, 1, "", "shapes"], [25, 2, 1, "", "tables"], [25, 2, 1, "", "text_items"]], "PyXA.apps.iWorkApplicationBase.XAiWorkDocument": [[25, 4, 1, "", "file"], [25, 4, 1, "", "id"], [25, 4, 1, "", "modified"], [25, 4, 1, "", "name"], [25, 4, 1, "", "password_protected"], [25, 4, 1, "", "properties"], [25, 4, 1, "", "selection"]], "PyXA.apps.iWorkApplicationBase.XAiWorkDocumentList": [[25, 2, 1, "", "by_file"], [25, 2, 1, "", "by_id"], [25, 2, 1, "", "by_modified"], [25, 2, 1, "", "by_name"], [25, 2, 1, "", "by_password_protected"], [25, 2, 1, "", "by_properties"], [25, 2, 1, "", "by_selection"], [25, 2, 1, "", "file"], [25, 2, 1, "", "id"], [25, 2, 1, "", "modified"], [25, 2, 1, "", "name"], [25, 2, 1, "", "password_protected"], [25, 2, 1, "", "properties"], [25, 2, 1, "", "selection"]], "PyXA.apps.iWorkApplicationBase.XAiWorkGroup": [[25, 4, 1, "", "height"], [25, 4, 1, "", "parent"], [25, 4, 1, "", "position"], [25, 4, 1, "", "rotation"], [25, 4, 1, "", "width"]], "PyXA.apps.iWorkApplicationBase.XAiWorkGroupList": [[25, 2, 1, "", "by_height"], [25, 2, 1, "", "by_parent"], [25, 2, 1, "", "by_position"], [25, 2, 1, "", "by_rotation"], [25, 2, 1, "", "by_width"], [25, 2, 1, "", "height"], [25, 2, 1, "", "parent"], [25, 2, 1, "", "position"], [25, 2, 1, "", "rotation"], [25, 2, 1, "", "width"]], "PyXA.apps.iWorkApplicationBase.XAiWorkImage": [[25, 4, 1, "", "description"], [25, 4, 1, "", "file"], [25, 4, 1, "", "file_name"], [25, 4, 1, "", "opacity"], [25, 4, 1, "", "reflection_showing"], [25, 4, 1, "", "reflection_value"], [25, 2, 1, "", "replace_with"], [25, 2, 1, "", "rotate"], [25, 4, 1, "", "rotation"]], "PyXA.apps.iWorkApplicationBase.XAiWorkImageList": [[25, 2, 1, "", "by_description"], [25, 2, 1, "", "by_file"], [25, 2, 1, "", "by_file_name"], [25, 2, 1, "", "by_opacity"], [25, 2, 1, "", "by_reflection_showing"], [25, 2, 1, "", "by_reflection_value"], [25, 2, 1, "", "by_rotation"], [25, 2, 1, "", "description"], [25, 2, 1, "", "file"], [25, 2, 1, "", "file_name"], [25, 2, 1, "", "opacity"], [25, 2, 1, "", "reflection_showing"], [25, 2, 1, "", "reflection_value"], [25, 2, 1, "", "rotation"]], "PyXA.apps.iWorkApplicationBase.XAiWorkLine": [[25, 4, 1, "", "end_point"], [25, 4, 1, "", "reflection_showing"], [25, 4, 1, "", "reflection_value"], [25, 4, 1, "", "rotation"], [25, 4, 1, "", "start_point"]], "PyXA.apps.iWorkApplicationBase.XAiWorkLineList": [[25, 2, 1, "", "by_end_point"], [25, 2, 1, "", "by_reflection_showing"], [25, 2, 1, "", "by_reflection_value"], [25, 2, 1, "", "by_rotation"], [25, 2, 1, "", "by_start_point"], [25, 2, 1, "", "end_point"], [25, 2, 1, "", "reflection_showing"], [25, 2, 1, "", "reflection_value"], [25, 2, 1, "", "rotation"], [25, 2, 1, "", "start_point"]], "PyXA.apps.iWorkApplicationBase.XAiWorkMovie": [[25, 4, 1, "", "file_name"], [25, 4, 1, "", "movie_volume"], [25, 4, 1, "", "opacity"], [25, 4, 1, "", "reflection_showing"], [25, 4, 1, "", "reflection_value"], [25, 4, 1, "", "repetition_method"], [25, 4, 1, "", "rotation"]], "PyXA.apps.iWorkApplicationBase.XAiWorkMovieList": [[25, 2, 1, "", "by_file_name"], [25, 2, 1, "", "by_movie_volume"], [25, 2, 1, "", "by_opacity"], [25, 2, 1, "", "by_reflection_showing"], [25, 2, 1, "", "by_reflection_value"], [25, 2, 1, "", "by_repetition_method"], [25, 2, 1, "", "by_rotation"], [25, 2, 1, "", "file_name"], [25, 2, 1, "", "movie_volume"], [25, 2, 1, "", "opacity"], [25, 2, 1, "", "reflection_showing"], [25, 2, 1, "", "reflection_value"], [25, 2, 1, "", "rotation"]], "PyXA.apps.iWorkApplicationBase.XAiWorkRange": [[25, 4, 1, "", "alignment"], [25, 4, 1, "", "background_color"], [25, 2, 1, "", "cells"], [25, 2, 1, "", "clear"], [25, 2, 1, "", "columns"], [25, 4, 1, "", "font_name"], [25, 4, 1, "", "font_size"], [25, 4, 1, "", "format"], [25, 2, 1, "", "merge"], [25, 4, 1, "", "name"], [25, 4, 1, "", "properties"], [25, 2, 1, "", "rows"], [25, 4, 1, "", "text_color"], [25, 4, 1, "", "text_wrap"], [25, 2, 1, "", "unmerge"], [25, 4, 1, "", "vertical_alignment"]], "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList": [[25, 2, 1, "", "alignment"], [25, 2, 1, "", "background_color"], [25, 2, 1, "", "by_alignment"], [25, 2, 1, "", "by_background_color"], [25, 2, 1, "", "by_font_name"], [25, 2, 1, "", "by_font_size"], [25, 2, 1, "", "by_format"], [25, 2, 1, "", "by_name"], [25, 2, 1, "", "by_properties"], [25, 2, 1, "", "by_text_color"], [25, 2, 1, "", "by_text_wrap"], [25, 2, 1, "", "by_vertical_alignment"], [25, 2, 1, "", "font_name"], [25, 2, 1, "", "font_size"], [25, 2, 1, "", "format"], [25, 2, 1, "", "name"], [25, 2, 1, "", "properties"], [25, 2, 1, "", "text_color"], [25, 2, 1, "", "text_wrap"], [25, 2, 1, "", "vertical_alignment"]], "PyXA.apps.iWorkApplicationBase.XAiWorkRow": [[25, 4, 1, "", "address"], [25, 4, 1, "", "height"], [25, 4, 1, "", "properties"]], "PyXA.apps.iWorkApplicationBase.XAiWorkRowList": [[25, 2, 1, "", "address"], [25, 2, 1, "", "by_address"], [25, 2, 1, "", "by_height"], [25, 2, 1, "", "by_properties"], [25, 2, 1, "", "height"], [25, 2, 1, "", "properties"]], "PyXA.apps.iWorkApplicationBase.XAiWorkShape": [[25, 4, 1, "", "background_fill_type"], [25, 4, 1, "", "object_text"], [25, 4, 1, "", "opacity"], [25, 4, 1, "", "properties"], [25, 4, 1, "", "reflection_showing"], [25, 4, 1, "", "reflection_value"], [25, 2, 1, "", "rotate"], [25, 4, 1, "", "rotation"], [25, 2, 1, "", "set_property"]], "PyXA.apps.iWorkApplicationBase.XAiWorkShapeList": [[25, 2, 1, "", "background_fill_type"], [25, 2, 1, "", "by_background_fill_type"], [25, 2, 1, "", "by_object_text"], [25, 2, 1, "", "by_opacity"], [25, 2, 1, "", "by_properties"], [25, 2, 1, "", "by_reflection_showing"], [25, 2, 1, "", "by_reflection_value"], [25, 2, 1, "", "by_rotation"], [25, 2, 1, "", "object_text"], [25, 2, 1, "", "opacity"], [25, 2, 1, "", "properties"], [25, 2, 1, "", "reflection_showing"], [25, 2, 1, "", "reflection_value"], [25, 2, 1, "", "rotation"]], "PyXA.apps.iWorkApplicationBase.XAiWorkTable": [[25, 4, 1, "", "cell_range"], [25, 2, 1, "", "cells"], [25, 4, 1, "", "column_count"], [25, 2, 1, "", "columns"], [25, 4, 1, "", "footer_row_count"], [25, 4, 1, "", "header_column_count"], [25, 4, 1, "", "header_row_count"], [25, 4, 1, "", "name"], [25, 2, 1, "", "ranges"], [25, 4, 1, "", "row_count"], [25, 2, 1, "", "rows"], [25, 4, 1, "", "selection_range"], [25, 2, 1, "", "sort"]], "PyXA.apps.iWorkApplicationBase.XAiWorkTableList": [[25, 2, 1, "", "by_cell_range"], [25, 2, 1, "", "by_column_count"], [25, 2, 1, "", "by_footer_row_count"], [25, 2, 1, "", "by_header_column_count"], [25, 2, 1, "", "by_header_row_count"], [25, 2, 1, "", "by_name"], [25, 2, 1, "", "by_row_count"], [25, 2, 1, "", "by_selection_range"], [25, 2, 1, "", "cell_range"], [25, 2, 1, "", "column_count"], [25, 2, 1, "", "footer_row_count"], [25, 2, 1, "", "header_column_count"], [25, 2, 1, "", "header_row_count"], [25, 2, 1, "", "name"], [25, 2, 1, "", "row_count"], [25, 2, 1, "", "selection_range"]], "PyXA.apps.iWorkApplicationBase.XAiWorkTextItem": [[25, 4, 1, "", "background_fill_type"], [25, 4, 1, "", "opacity"], [25, 4, 1, "", "reflection_showing"], [25, 4, 1, "", "reflection_value"], [25, 4, 1, "", "rotation"], [25, 4, 1, "", "text"]], "PyXA.apps.iWorkApplicationBase.XAiWorkTextItemList": [[25, 2, 1, "", "background_fill_type"], [25, 2, 1, "", "by_background_fill_type"], [25, 2, 1, "", "by_opacity"], [25, 2, 1, "", "by_reflection_showing"], [25, 2, 1, "", "by_reflection_value"], [25, 2, 1, "", "by_rotation"], [25, 2, 1, "", "by_text"], [25, 2, 1, "", "opacity"], [25, 2, 1, "", "reflection_showing"], [25, 2, 1, "", "reflection_value"], [25, 2, 1, "", "rotation"], [25, 2, 1, "", "text"]], "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItem": [[25, 2, 1, "", "delete"], [25, 2, 1, "", "duplicate"], [25, 4, 1, "", "height"], [25, 2, 1, "", "lock"], [25, 4, 1, "", "locked"], [25, 4, 1, "", "parent"], [25, 4, 1, "", "position"], [25, 2, 1, "", "resize"], [25, 2, 1, "", "set_position"], [25, 2, 1, "", "unlock"], [25, 4, 1, "", "width"]], "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItemList": [[25, 2, 1, "", "by_height"], [25, 2, 1, "", "by_locked"], [25, 2, 1, "", "by_parent"], [25, 2, 1, "", "by_position"], [25, 2, 1, "", "by_properties"], [25, 2, 1, "", "by_width"], [25, 2, 1, "", "height"], [25, 2, 1, "", "locked"], [25, 2, 1, "", "parent"], [25, 2, 1, "", "position"], [25, 2, 1, "", "properties"], [25, 2, 1, "", "width"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:property", "5": "py:function", "6": "py:data", "7": "py:exception"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "property", "Python property"], "5": ["py", "function", "Python function"], "6": ["py", "data", "Python data"], "7": ["py", "exception", "Python exception"]}, "titleterms": {"project": 0, "overview": [0, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101], "what": 0, "i": [0, 72], "pyxa": [0, 1, 2, 51, 52, 75, 99, 102], "me": 0, "bug": 1, "document": [1, 2, 51, 99], "content": [2, 59, 62, 63, 65, 66, 75, 81, 92, 93, 99, 103], "indic": 2, "tabl": [2, 59, 62, 63, 65, 66, 75, 81, 92, 93, 99], "learn": 3, "modul": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 59, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101], "speech": [4, 112], "ui": [5, 111], "util": 6, "web": 7, "autom": [8, 59], "refer": [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "bike": [9, 61], "calcul": [10, 62], "calendar": [11, 63, 70], "cardhop": [12, 64], "chromium": [13, 65], "consol": [14, 66], "contact": [15, 67], "dictionari": [16, 68], "draft": [17, 69], "fantast": [18, 70], "finder": [19, 71], "flow": [20, 72], "fontbook": 21, "hammerspoon": [22, 74], "imag": [23, 60, 75, 105], "event": [23, 45, 63, 70, 75, 96], "iterm": [24, 77], "iwork": 25, "base": 25, "keynot": [26, 78], "mail": [27, 79], "map": [28, 80], "media": 29, "applic": [29, 51, 76, 102, 108], "messag": [30, 81], "music": [31, 82], "note": [32, 83], "number": [33, 84], "omnioutlin": [34, 85], "page": [35, 86], "photo": [36, 75, 87], "todo": 36, "preview": [37, 88], "quicktim": [38, 89], "remind": [39, 90], "rstudio": [40, 91], "safari": [41, 83, 92], "shortcut": [42, 93], "spotifi": [43, 94], "stock": [44, 95], "system": [45, 46, 96, 97], "prefer": [46, 97], "termin": [47, 98], "textedit": [48, 99], "tv": [49, 100], "vlc": [50, 101], "code": [51, 58], "top": 51, "level": 51, "first": [51, 76], "parti": [51, 76], "third": [51, 76], "addit": [51, 106], "xabas": 53, "xabasescript": 54, "xaerror": 55, "xaprotocol": 56, "xatyp": 57, "run": [58, 59, 72, 81, 93], "applescript": 58, "creat": [58, 59, 60, 63, 70, 81, 83, 99], "read": [58, 75, 103, 104], "execut": 58, "result": 58, "load": [58, 105], "extern": 58, "script": [58, 111], "save": [58, 65, 83], "tutori": [59, 62, 63, 65, 66, 75, 81, 83, 92, 93, 99, 106], "exampl": [59, 62, 63, 65, 66, 70, 72, 75, 81, 83, 92, 93, 96, 98, 99, 101, 108], "1": [59, 60, 62, 63, 65, 66, 70, 72, 75, 81, 83, 92, 93, 96, 98, 99, 101, 108], "workflow": [59, 60, 81], "from": [59, 81, 99], "scratch": [59, 81], "2": [59, 60, 63, 65, 70, 75, 81, 93, 99, 108], "exist": [59, 81], "resourc": [59, 61, 62, 63, 64, 65, 66, 70, 72, 75, 81, 92, 93, 96, 98, 99, 101], "make": [60, 65], "combin": [60, 75, 93], "mosaic": 60, "part": 60, "get": [60, 112], "user": [60, 112], "input": [60, 112], "A": 60, "conclus": 60, "see": 60, "also": 60, "perform": 62, "oper": [62, 105], "app": [62, 63, 72, 75, 83], "list": [63, 75, 105, 107], "3": [63, 108], "modifi": [63, 105], "manipul": [63, 75, 105], "5": 63, "displai": 63, "window": 65, "tab": [65, 83], "bookmark": [65, 108], "open": [65, 72], "webpag": 65, "new": [65, 83, 107], "come": 66, "soon": 66, "interact": [70, 83], "current": 70, "select": 70, "item": [70, 108], "us": [70, 75, 92, 98, 99, 102], "natur": 70, "languag": 70, "session": 72, "onli": 72, "while": 72, "specif": 72, "font": 73, "book": 73, "basic": [75, 105, 106, 108], "relat": 75, "task": 75, "properti": 75, "work": [75, 101, 102, 103, 105, 107], "With": [75, 102, 103, 107], "alongsid": 75, "other": [75, 99], "featur": 75, "xaimag": 75, "more": 75, "access": [83, 105], "object": 83, "attribut": [83, 92, 98, 99, 101, 105], "folder": [83, 112], "attach": 83, "text": [83, 99, 105], "method": [92, 98, 99, 101], "receiv": 93, "return": [93, 99], "valu": 93, "output": 93, "python": 93, "sort": 96, "desktop": 96, "appscript": 102, "unsupport": 102, "convert": 102, "between": 102, "type": 102, "The": [103, 108], "clipboard": 103, "write": 103, "rss": 104, "feed": 104, "inform": 105, "appli": 105, "filter": [105, 107], "ad": [105, 107], "distort": 105, "composit": 105, "extract": 105, "instal": 106, "usag": 106, "topic": 106, "forc": 107, "evalu": 107, "bulk": 107, "action": 107, "element": 107, "add": 108, "menu": [108, 112], "bar": 108, "launcher": 108, "emoji": 108, "control": 108, "custom": 108, "search": 109, "spotlight": 109, "simpl": 109, "date": 109, "predic": 109, "tip": 110, "trick": 110, "alert": 112, "dialog": 112, "file": 112, "picker": 112, "name": 112, "color": 112, "command": 112, "detector": 112, "recogn": 112}, "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.todo": 2, "sphinx.ext.viewcode": 1, "sphinx": 57}, "alltitles": {"Project Overview": [[0, "project-overview"]], "What is PyXA?": [[0, "what-is-pyxa"]], "Is PyXA for Me?": [[0, "is-pyxa-for-me"]], "Bugs": [[1, "bugs"]], "Bugs in PyXA": [[1, "bugs-in-pyxa"]], "Documentation Bugs": [[1, "documentation-bugs"]], "PyXA Documentation": [[2, "pyxa-documentation"]], "Contents:": [[2, null]], "Indices and tables": [[2, "indices-and-tables"]], "Learn Module": [[3, "module-PyXA.Additions.Learn"]], "Speech Module": [[4, "module-PyXA.Additions.Speech"]], "UI Module": [[5, "module-PyXA.Additions.UI"]], "Utils Module": [[6, "module-PyXA.Additions.Utils"]], "Web Module": [[7, "module-PyXA.Additions.Web"]], "Automator Module Reference": [[8, "module-PyXA.apps.Automator"]], "Bike Module Reference": [[9, "module-PyXA.apps.Bike"]], "Calculator Module Reference": [[10, "module-PyXA.apps.Calculator"]], "Calendar Module Reference": [[11, "module-PyXA.apps.Calendar"]], "Cardhop Module Reference": [[12, "module-PyXA.apps.Cardhop"]], "Chromium Module Reference": [[13, "module-PyXA.apps.Chromium"]], "Console Module Reference": [[14, "module-PyXA.apps.Console"]], "Contacts Module Reference": [[15, "module-PyXA.apps.Contacts"]], "Dictionary Module Reference": [[16, "module-PyXA.apps.Dictionary"]], "Drafts Module Reference": [[17, "module-PyXA.apps.Drafts"]], "Fantastical Module Reference": [[18, "module-PyXA.apps.Fantastical"]], "Finder Module Reference": [[19, "module-PyXA.apps.Finder"]], "Flow Module Reference": [[20, "module-PyXA.apps.Flow"]], "FontBook Module Reference": [[21, "module-PyXA.apps.FontBook"]], "Hammerspoon Module Reference": [[22, "module-PyXA.apps.Hammerspoon"]], "Image Events Module Reference": [[23, "module-PyXA.apps.ImageEvents"]], "iTerm Module Reference": [[24, "module-PyXA.apps.iTerm"]], "iWork Base Reference": [[25, "module-PyXA.apps.iWorkApplicationBase"]], "Keynote Module Reference": [[26, "module-PyXA.apps.Keynote"]], "Mail Module Reference": [[27, "module-PyXA.apps.Mail"]], "Maps Module Reference": [[28, "module-PyXA.apps.Maps"]], "Media Application Reference": [[29, "module-PyXA.apps.MediaApplicationBase"]], "Messages Module Reference": [[30, "module-PyXA.apps.Messages"]], "Music Module Reference": [[31, "module-PyXA.apps.Music"]], "Notes Module Reference": [[32, "module-PyXA.apps.Notes"]], "Numbers Module Reference": [[33, "module-PyXA.apps.Notes"]], "OmniOutliner Module Reference": [[34, "module-PyXA.apps.OmniOutliner"]], "Pages Module Reference": [[35, "module-PyXA.apps.Pages"]], "Photos Module Reference": [[36, "module-PyXA.apps.PhotosApp"]], "Todo": [[36, "id1"]], "Preview Module Reference": [[37, "module-PyXA.apps.Preview"]], "QuickTime Module Reference": [[38, "module-PyXA.apps.QuickTimePlayer"]], "Reminders Module Reference": [[39, "module-PyXA.apps.Reminders"]], "RStudio Module Reference": [[40, "module-PyXA.apps.RStudio"]], "Safari Module Reference": [[41, "module-PyXA.apps.Safari"]], "Shortcuts Module Reference": [[42, "module-PyXA.apps.Shortcuts"]], "Spotify Module Reference": [[43, "module-PyXA.apps.Spotify"]], "Stocks Module Reference": [[44, "module-PyXA.apps.Stocks"]], "System Events Module Reference": [[45, "module-PyXA.apps.SystemEvents"]], "System Preferences Module Reference": [[46, "module-PyXA.apps.SystemPreferences"]], "Terminal Module Reference": [[47, "module-PyXA.apps.Terminal"]], "TextEdit Module Reference": [[48, "module-PyXA.apps.TextEdit"]], "TV Module Reference": [[49, "module-PyXA.apps.TV"]], "VLC Module Reference": [[50, "module-PyXA.apps.VLC"]], "Code Documentation and Reference": [[51, "code-documentation-and-reference"]], "Top-level PyXA Modules": [[51, "top-level-pyxa-modules"]], "First-Party Application Module Reference": [[51, "first-party-application-module-reference"]], "Third-Party Application Module Reference": [[51, "third-party-application-module-reference"]], "PyXA Additions": [[51, "pyxa-additions"]], "PyXA Module": [[52, "module-PyXA.PyXA"]], "XABase Module": [[53, "module-PyXA.XABase"]], "XABaseScriptable Module": [[54, "module-PyXA.XABaseScriptable"]], "XAErrors Module": [[55, "module-PyXA.XAErrors"]], "XAProtocols Module": [[56, "module-PyXA.XAProtocols"]], "XATypes Module": [[57, "module-PyXA.XATypes"]], "Running AppleScripts": [[58, "running-applescripts"]], "Creating and Running AppleScript Code": [[58, "creating-and-running-applescript-code"]], "Reading Execution Results": [[58, "reading-execution-results"]], "Loading External Scripts": [[58, "loading-external-scripts"]], "Saving Scripts": [[58, "saving-scripts"]], "Automator Module": [[59, "automator-module"]], "Table of Contents": [[59, "table-of-contents"], [62, "table-of-contents"], [63, "table-of-contents"], [65, "table-of-contents"], [66, "table-of-contents"], [75, "table-of-contents"], [81, "table-of-contents"], [92, "table-of-contents"], [93, "table-of-contents"], [99, "table-of-contents"]], "Overview": [[59, "overview"], [60, "overview"]], "Automator Tutorials": [[59, "automator-tutorials"]], "Automator Examples": [[59, "automator-examples"]], "Example 1 - Creating workflows from scratch": [[59, "example-1-creating-workflows-from-scratch"], [81, "example-1-creating-workflows-from-scratch"]], "Example 2 - Running existing workflows": [[59, "example-2-running-existing-workflows"], [81, "example-2-running-existing-workflows"]], "Automator Resources": [[59, "automator-resources"]], "Making a Combined Workflow for Creating Image Mosaic": [[60, "making-a-combined-workflow-for-creating-image-mosaic"]], "Part 1 - Getting User Input": [[60, "part-1-getting-user-input"]], "Part 2 - Creating A Mosaic": [[60, "part-2-creating-a-mosaic"]], "Conclusion": [[60, "conclusion"]], "See Also": [[60, "see-also"]], "Bike Module Overview": [[61, "bike-module-overview"]], "Bike Resources": [[61, "bike-resources"]], "Calculator Module Overview": [[62, "calculator-module-overview"]], "Calculator Tutorials": [[62, "calculator-tutorials"]], "Calculator Examples": [[62, "calculator-examples"]], "Example 1 - Performing Operations in Calculator.app": [[62, "example-1-performing-operations-in-calculator-app"]], "Calculator Resources": [[62, "calculator-resources"]], "Calendar Module Overview": [[63, "calendar-module-overview"]], "Calendar Tutorials": [[63, "calendar-tutorials"]], "Calendar Examples": [[63, "calendar-examples"]], "Example 1 - Listing Calendars and Events": [[63, "example-1-listing-calendars-and-events"]], "Example 2 - Creating Calendars and Events": [[63, "example-2-creating-calendars-and-events"]], "Example 3 - Modifying and Manipulating Events": [[63, "example-3-modifying-and-manipulating-events"]], "Example 5 - Displaying Events in Calendar.app": [[63, "example-5-displaying-events-in-calendar-app"]], "Calendar Resources": [[63, "calendar-resources"]], "Cardhop Module Overview": [[64, "cardhop-module-overview"]], "Cardhop Resources": [[64, "cardhop-resources"]], "Chromium Module Overview": [[65, "chromium-module-overview"]], "Windows and Tabs": [[65, "windows-and-tabs"]], "Bookmarks": [[65, "bookmarks"]], "Chromium Tutorials": [[65, "chromium-tutorials"]], "Chromium Examples": [[65, "chromium-examples"]], "Example 1 - Opening and saving a webpage": [[65, "example-1-opening-and-saving-a-webpage"]], "Example 2 - Making new windows and tabs": [[65, "example-2-making-new-windows-and-tabs"]], "Chromium Resources": [[65, "chromium-resources"]], "Console Module Overview": [[66, "console-module-overview"]], "Console Tutorials": [[66, "console-tutorials"]], "Console Examples": [[66, "console-examples"]], "Example 1 - Coming Soon": [[66, "example-1-coming-soon"]], "Console Resources": [[66, "console-resources"]], "Contacts Module Overview": [[67, "contacts-module-overview"]], "Dictionary Module Overview": [[68, "dictionary-module-overview"]], "Drafts Module Overview": [[69, "drafts-module-overview"]], "Fantastical Module Overview": [[70, "fantastical-module-overview"]], "Fantastical Examples": [[70, "fantastical-examples"]], "Example 1 - Interacting with Currently Selected Calendar Items": [[70, "example-1-interacting-with-currently-selected-calendar-items"]], "Example 2 - Using Natural Language to Create Events": [[70, "example-2-using-natural-language-to-create-events"]], "Fantastical Resources": [[70, "fantastical-resources"]], "Finder Module Overview": [[71, "finder-module-overview"]], "Flow Module Overview": [[72, "flow-module-overview"]], "Flow Examples": [[72, "flow-examples"]], "Example 1 - Run session only while a specific app is open": [[72, "example-1-run-session-only-while-a-specific-app-is-open"]], "Flow Resources": [[72, "flow-resources"]], "Font Book Module Overview": [[73, "font-book-module-overview"]], "Hammerspoon Module Overview": [[74, "hammerspoon-module-overview"]], "Image Events Module Overview": [[75, "image-events-module-overview"]], "Image Events Tutorials": [[75, "image-events-tutorials"]], "Tutorial 1 - Basic Image-Related Tasks": [[75, "tutorial-1-basic-image-related-tasks"]], "Reading Image Properties": [[75, "reading-image-properties"]], "Manipulating Images": [[75, "manipulating-images"]], "Tutorial 2 - Working With Lists of Images": [[75, "tutorial-2-working-with-lists-of-images"]], "Image Events Examples": [[75, "image-events-examples"]], "Example 1 - Using Image Events Alongside Other PyXA Features": [[75, "example-1-using-image-events-alongside-other-pyxa-features"]], "Combining Image Events, XAImages, Photos.app, and more": [[75, "combining-image-events-xaimages-photos-app-and-more"]], "Image Events Resources": [[75, "image-events-resources"]], "Application Module Overviews": [[76, "application-module-overviews"]], "First-Party Application Modules Overviews": [[76, "first-party-application-modules-overviews"]], "Third-Party Application Module Overviews": [[76, "third-party-application-module-overviews"]], "iTerm Module Overview": [[77, "iterm-module-overview"]], "Keynote Module Overview": [[78, "keynote-module-overview"]], "Mail Module Overview": [[79, "mail-module-overview"]], "Maps Module Overview": [[80, "maps-module-overview"]], "Messages Module Overview": [[81, "messages-module-overview"]], "Messages Tutorials": [[81, "messages-tutorials"]], "Messages Examples": [[81, "messages-examples"]], "Messages Resources": [[81, "messages-resources"]], "Music Module Overview": [[82, "music-module-overview"]], "Notes Module Overview": [[83, "notes-module-overview"]], "Notes Tutorials": [[83, "notes-tutorials"]], "Tutorial 1 - Interacting with Notes": [[83, "tutorial-1-interacting-with-notes"]], "Accessing Notes.app Objects": [[83, "accessing-notes-app-objects"]], "Accessing Attributes of Notes.app Objects": [[83, "accessing-attributes-of-notes-app-objects"]], "Creating New Folders, Notes, and Attachments": [[83, "creating-new-folders-notes-and-attachments"]], "Notes Examples": [[83, "notes-examples"]], "Example 1 - Saving Safari Tab Text to a Note": [[83, "example-1-saving-safari-tab-text-to-a-note"]], "Numbers Module Overview": [[84, "numbers-module-overview"]], "OmniOutliner Module Overview": [[85, "omnioutliner-module-overview"]], "Pages Module Overview": [[86, "pages-module-overview"]], "Photos Module Overview": [[87, "photos-module-overview"]], "Preview Module Overview": [[88, "preview-module-overview"]], "QuickTime Module Overview": [[89, "quicktime-module-overview"]], "Reminders Module Overview": [[90, "reminders-module-overview"]], "RStudio Module Overview": [[91, "rstudio-module-overview"]], "Safari Module Overview": [[92, "safari-module-overview"]], "Safari Tutorials": [[92, "safari-tutorials"]], "Safari Examples": [[92, "safari-examples"]], "Example 1 - Using Safari Methods and Attributes": [[92, "example-1-using-safari-methods-and-attributes"]], "Safari Resources": [[92, "safari-resources"]], "Shortcuts Module Overview": [[93, "shortcuts-module-overview"]], "Shortcuts Tutorials": [[93, "shortcuts-tutorials"]], "Shortcuts Examples": [[93, "shortcuts-examples"]], "Example 1 - Run shortcuts and receive their return values": [[93, "example-1-run-shortcuts-and-receive-their-return-values"]], "Example 2 - Combine shortcut output with Python": [[93, "example-2-combine-shortcut-output-with-python"]], "Shortcuts Resources": [[93, "shortcuts-resources"]], "Spotify Module Overview": [[94, "spotify-module-overview"]], "Stocks Module Overview": [[95, "stocks-module-overview"]], "System Events Module Overview": [[96, "system-events-module-overview"]], "System Events Examples": [[96, "system-events-examples"]], "Example 1 - Sorting the Desktop": [[96, "example-1-sorting-the-desktop"]], "System Events Resources": [[96, "system-events-resources"]], "System Preferences Module Overview": [[97, "system-preferences-module-overview"]], "Terminal Module Overview": [[98, "terminal-module-overview"]], "Terminal Examples": [[98, "terminal-examples"]], "Example 1 - Using Terminal methods and attributes": [[98, "example-1-using-terminal-methods-and-attributes"]], "Terminal Resources": [[98, "terminal-resources"]], "TextEdit Module Overview": [[99, "textedit-module-overview"]], "TextEdit Tutorials": [[99, "textedit-tutorials"]], "TextEdit Examples": [[99, "textedit-examples"]], "Example 1 - Using TextEdit methods and attributes": [[99, "example-1-using-textedit-methods-and-attributes"]], "Example 2 - Creating documents from text returned by other PyXA methods": [[99, "example-2-creating-documents-from-text-returned-by-other-pyxa-methods"]], "TextEdit Resources": [[99, "textedit-resources"]], "TV Module Overview": [[100, "tv-module-overview"]], "VLC Module Overview": [[101, "vlc-module-overview"]], "VLC Examples": [[101, "vlc-examples"]], "Example 1 - Working with VLC methods and attributes": [[101, "example-1-working-with-vlc-methods-and-attributes"]], "VLC Resources": [[101, "vlc-resources"]], "Using Appscript to Work With Unsupported Applications": [[102, "using-appscript-to-work-with-unsupported-applications"]], "Converting Between Appscript and PyXA Types": [[102, "converting-between-appscript-and-pyxa-types"]], "Working With The Clipboard": [[103, "working-with-the-clipboard"]], "Reading Clipboard Content": [[103, "reading-clipboard-content"]], "Writing Content to the Clipboard": [[103, "writing-content-to-the-clipboard"]], "Reading RSS Feeds": [[104, "reading-rss-feeds"]], "Working with Images": [[105, "working-with-images"]], "Loading Images": [[105, "loading-images"]], "Accessing Image Information": [[105, "accessing-image-information"]], "Modifying Image Attributes": [[105, "modifying-image-attributes"]], "Basics of Image Manipulation": [[105, "basics-of-image-manipulation"]], "Applying Filters": [[105, "applying-filters"]], "Adding Distortions": [[105, "adding-distortions"]], "Composite Operations": [[105, "composite-operations"]], "Text Extraction": [[105, "text-extraction"]], "Working with Lists of Images": [[105, "working-with-lists-of-images"]], "Tutorial": [[106, "tutorial"]], "Installation": [[106, "installation"]], "Basic Usage": [[106, "basic-usage"]], "Additional Tutorial Topics": [[106, "additional-tutorial-topics"]], "Working With Lists": [[107, "working-with-lists"]], "Forcing Evaluation": [[107, "forcing-evaluation"]], "Filters": [[107, "filters"]], "Bulk Actions": [[107, "bulk-actions"]], "Adding New Elements": [[107, "adding-new-elements"]], "Add Items to the Menu Bar": [[108, "add-items-to-the-menu-bar"]], "The Basics": [[108, "the-basics"]], "Example 1 - Application Launcher": [[108, "example-1-application-launcher"]], "Example 2 - Emoji Bookmarks": [[108, "example-2-emoji-bookmarks"]], "Example 3 - Application Controller": [[108, "example-3-application-controller"]], "Customization": [[108, "customization"]], "Searching Spotlight": [[109, "searching-spotlight"]], "Simple Searches": [[109, "simple-searches"]], "Search by Date": [[109, "search-by-date"]], "Search by Predicate": [[109, "search-by-predicate"]], "Tips and Tricks": [[110, "tips-and-tricks"]], "UI Scripting": [[111, "ui-scripting"]], "Getting User Input": [[112, "getting-user-input"]], "Alerts": [[112, "alerts"]], "Dialogs": [[112, "dialogs"]], "Menus": [[112, "menus"]], "File and Folder Pickers": [[112, "file-and-folder-pickers"]], "File Name Dialogs": [[112, "file-name-dialogs"]], "Color Pickers": [[112, "color-pickers"]], "Command Detectors": [[112, "command-detectors"]], "Speech Recognizers": [[112, "speech-recognizers"]]}, "indexentries": {"pyxa.additions.learn": [[3, "module-PyXA.Additions.Learn"]], "xalsm (class in pyxa.additions.learn)": [[3, "PyXA.Additions.Learn.XALSM"]], "add_category() (pyxa.additions.learn.xalsm method)": [[3, "PyXA.Additions.Learn.XALSM.add_category"]], "add_data() (pyxa.additions.learn.xalsm method)": [[3, "PyXA.Additions.Learn.XALSM.add_data"]], "add_text() (pyxa.additions.learn.xalsm method)": [[3, "PyXA.Additions.Learn.XALSM.add_text"]], "categorize_query() (pyxa.additions.learn.xalsm method)": [[3, "PyXA.Additions.Learn.XALSM.categorize_query"]], "load() (pyxa.additions.learn.xalsm method)": [[3, "PyXA.Additions.Learn.XALSM.load"]], "module": [[3, "module-PyXA.Additions.Learn"], [4, "module-PyXA.Additions.Speech"], [5, "module-PyXA.Additions.UI"], [6, "module-PyXA.Additions.Utils"], [7, "module-PyXA.Additions.Web"], [8, "module-PyXA.apps.Automator"], [9, "module-PyXA.apps.Bike"], [10, "module-PyXA.apps.Calculator"], [11, "module-PyXA.apps.Calendar"], [12, "module-PyXA.apps.Cardhop"], [13, "module-PyXA.apps.Chromium"], [14, "module-PyXA.apps.Console"], [15, "module-PyXA.apps.Contacts"], [16, "module-PyXA.apps.Dictionary"], [17, "module-PyXA.apps.Drafts"], [18, "module-PyXA.apps.Fantastical"], [19, "module-PyXA.apps.Finder"], [20, "module-PyXA.apps.Flow"], [21, "module-PyXA.apps.FontBook"], [22, "module-PyXA.apps.Hammerspoon"], [23, "module-PyXA.apps.ImageEvents"], [24, "module-PyXA.apps.iTerm"], [25, "module-PyXA.apps.iWorkApplicationBase"], [26, "module-PyXA.apps.Keynote"], [27, "module-PyXA.apps.Mail"], [28, "module-PyXA.apps.Maps"], [29, "module-PyXA.apps.MediaApplicationBase"], [30, "module-PyXA.apps.Messages"], [31, "module-PyXA.apps.Music"], [32, "module-PyXA.apps.Notes"], [33, "module-PyXA.apps.Notes"], [34, "module-PyXA.apps.OmniOutliner"], [35, "module-PyXA.apps.Pages"], [36, "module-PyXA.apps.PhotosApp"], [37, "module-PyXA.apps.Preview"], [38, "module-PyXA.apps.QuickTimePlayer"], [39, "module-PyXA.apps.Reminders"], [40, "module-PyXA.apps.RStudio"], [41, "module-PyXA.apps.Safari"], [42, "module-PyXA.apps.Shortcuts"], [43, "module-PyXA.apps.Spotify"], [44, "module-PyXA.apps.Stocks"], [45, "module-PyXA.apps.SystemEvents"], [46, "module-PyXA.apps.SystemPreferences"], [47, "module-PyXA.apps.Terminal"], [48, "module-PyXA.apps.TextEdit"], [49, "module-PyXA.apps.TV"], [50, "module-PyXA.apps.VLC"], [52, "module-PyXA.PyXA"], [53, "module-PyXA.XABase"], [54, "module-PyXA.XABaseScriptable"], [55, "module-PyXA.XAErrors"], [56, "module-PyXA.XAProtocols"], [57, "module-PyXA.XATypes"]], "save() (pyxa.additions.learn.xalsm method)": [[3, "PyXA.Additions.Learn.XALSM.save"]], "pyxa.additions.speech": [[4, "module-PyXA.Additions.Speech"]], "xacommanddetector (class in pyxa.additions.speech)": [[4, "PyXA.Additions.Speech.XACommandDetector"]], "xaspeech (class in pyxa.additions.speech)": [[4, "PyXA.Additions.Speech.XASpeech"]], "xaspeechrecognizer (class in pyxa.additions.speech)": [[4, "PyXA.Additions.Speech.XASpeechRecognizer"]], "command_function_map (pyxa.additions.speech.xacommanddetector attribute)": [[4, "PyXA.Additions.Speech.XACommandDetector.command_function_map"]], "finish_conditions (pyxa.additions.speech.xaspeechrecognizer attribute)": [[4, "PyXA.Additions.Speech.XASpeechRecognizer.finish_conditions"]], "listen() (pyxa.additions.speech.xacommanddetector method)": [[4, "PyXA.Additions.Speech.XACommandDetector.listen"]], "listen() (pyxa.additions.speech.xaspeechrecognizer method)": [[4, "PyXA.Additions.Speech.XASpeechRecognizer.listen"]], "message (pyxa.additions.speech.xaspeech attribute)": [[4, "PyXA.Additions.Speech.XASpeech.message"]], "on_detect() (pyxa.additions.speech.xacommanddetector method)": [[4, "PyXA.Additions.Speech.XACommandDetector.on_detect"]], "on_detect() (pyxa.additions.speech.xaspeechrecognizer method)": [[4, "PyXA.Additions.Speech.XASpeechRecognizer.on_detect"]], "rate (pyxa.additions.speech.xaspeech attribute)": [[4, "PyXA.Additions.Speech.XASpeech.rate"]], "speak() (pyxa.additions.speech.xaspeech method)": [[4, "PyXA.Additions.Speech.XASpeech.speak"]], "spoken_query (pyxa.additions.speech.xaspeechrecognizer attribute)": [[4, "PyXA.Additions.Speech.XASpeechRecognizer.spoken_query"]], "start_time (pyxa.additions.speech.xaspeechrecognizer attribute)": [[4, "PyXA.Additions.Speech.XASpeechRecognizer.start_time"]], "time_elapsed (pyxa.additions.speech.xaspeechrecognizer attribute)": [[4, "PyXA.Additions.Speech.XASpeechRecognizer.time_elapsed"]], "voice (pyxa.additions.speech.xaspeech attribute)": [[4, "PyXA.Additions.Speech.XASpeech.voice"]], "voices() (pyxa.additions.speech.xaspeech method)": [[4, "PyXA.Additions.Speech.XASpeech.voices"]], "volume (pyxa.additions.speech.xaspeech attribute)": [[4, "PyXA.Additions.Speech.XASpeech.volume"]], "critical (pyxa.additions.ui.xaalertstyle attribute)": [[5, "PyXA.Additions.UI.XAAlertStyle.CRITICAL"]], "informational (pyxa.additions.ui.xaalertstyle attribute)": [[5, "PyXA.Additions.UI.XAAlertStyle.INFORMATIONAL"]], "pyxa.additions.ui": [[5, "module-PyXA.Additions.UI"]], "warning (pyxa.additions.ui.xaalertstyle attribute)": [[5, "PyXA.Additions.UI.XAAlertStyle.WARNING"]], "xaalert (class in pyxa.additions.ui)": [[5, "PyXA.Additions.UI.XAAlert"]], "xaalertstyle (class in pyxa.additions.ui)": [[5, "PyXA.Additions.UI.XAAlertStyle"]], "xahud (class in pyxa.additions.ui)": [[5, "PyXA.Additions.UI.XAHUD"]], "xaimagemenuitem (class in pyxa.additions.ui)": [[5, "PyXA.Additions.UI.XAImageMenuItem"]], "xamenubar (class in pyxa.additions.ui)": [[5, "PyXA.Additions.UI.XAMenuBar"]], "xamenubarmenu (class in pyxa.additions.ui)": [[5, "PyXA.Additions.UI.XAMenuBarMenu"]], "xamenubarmenuitem (class in pyxa.additions.ui)": [[5, "PyXA.Additions.UI.XAMenuBarMenuItem"]], "xanotification (class in pyxa.additions.ui)": [[5, "PyXA.Additions.UI.XANotification"]], "xasegmentedcontrol (class in pyxa.additions.ui)": [[5, "PyXA.Additions.UI.XASegmentedControl"]], "xasegmentedcontrolmenuitem (class in pyxa.additions.ui)": [[5, "PyXA.Additions.UI.XASegmentedControlMenuItem"]], "xaseparatormenuitem (class in pyxa.additions.ui)": [[5, "PyXA.Additions.UI.XASeparatorMenuItem"]], "xaslider (class in pyxa.additions.ui)": [[5, "PyXA.Additions.UI.XASlider"]], "xaslidermenuitem (class in pyxa.additions.ui)": [[5, "PyXA.Additions.UI.XASliderMenuItem"]], "xaswitch (class in pyxa.additions.ui)": [[5, "PyXA.Additions.UI.XASwitch"]], "xaswitchmenuitem (class in pyxa.additions.ui)": [[5, "PyXA.Additions.UI.XASwitchMenuItem"]], "xatextmenuitem (class in pyxa.additions.ui)": [[5, "PyXA.Additions.UI.XATextMenuItem"]], "xaurlmenuitem (class in pyxa.additions.ui)": [[5, "PyXA.Additions.UI.XAURLMenuItem"]], "action (pyxa.additions.ui.xamenubarmenu attribute)": [[5, "PyXA.Additions.UI.XAMenuBarMenu.action"]], "action (pyxa.additions.ui.xamenubarmenuitem attribute)": [[5, "PyXA.Additions.UI.XAMenuBarMenuItem.action"]], "action (pyxa.additions.ui.xasegmentedcontrol attribute)": [[5, "PyXA.Additions.UI.XASegmentedControl.action"]], "action (pyxa.additions.ui.xaslider attribute)": [[5, "PyXA.Additions.UI.XASlider.action"]], "action (pyxa.additions.ui.xaswitch attribute)": [[5, "PyXA.Additions.UI.XASwitch.action"]], "add_item() (pyxa.additions.ui.xamenubar method)": [[5, "PyXA.Additions.UI.XAMenuBar.add_item"]], "add_menu() (pyxa.additions.ui.xamenubar method)": [[5, "PyXA.Additions.UI.XAMenuBar.add_menu"]], "add_separator() (pyxa.additions.ui.xamenubarmenu method)": [[5, "PyXA.Additions.UI.XAMenuBarMenu.add_separator"]], "args (pyxa.additions.ui.xamenubarmenuitem attribute)": [[5, "PyXA.Additions.UI.XAMenuBarMenuItem.args"]], "args (pyxa.additions.ui.xasegmentedcontrol attribute)": [[5, "PyXA.Additions.UI.XASegmentedControl.args"]], "args (pyxa.additions.ui.xaslider attribute)": [[5, "PyXA.Additions.UI.XASlider.args"]], "args (pyxa.additions.ui.xaswitch attribute)": [[5, "PyXA.Additions.UI.XASwitch.args"]], "background_color (pyxa.additions.ui.xahud attribute)": [[5, "PyXA.Additions.UI.XAHUD.background_color"]], "buttons (pyxa.additions.ui.xaalert attribute)": [[5, "PyXA.Additions.UI.XAAlert.buttons"]], "click_action (pyxa.additions.ui.xanotification attribute)": [[5, "PyXA.Additions.UI.XANotification.click_action"]], "content (pyxa.additions.ui.xamenubarmenu property)": [[5, "PyXA.Additions.UI.XAMenuBarMenu.content"]], "delete() (pyxa.additions.ui.xamenubarmenu method)": [[5, "PyXA.Additions.UI.XAMenuBarMenu.delete"]], "delete() (pyxa.additions.ui.xamenubarmenuitem method)": [[5, "PyXA.Additions.UI.XAMenuBarMenuItem.delete"]], "display() (pyxa.additions.ui.xaalert method)": [[5, "PyXA.Additions.UI.XAAlert.display"]], "display() (pyxa.additions.ui.xahud method)": [[5, "PyXA.Additions.UI.XAHUD.display"]], "display() (pyxa.additions.ui.xamenubar method)": [[5, "PyXA.Additions.UI.XAMenuBar.display"]], "display() (pyxa.additions.ui.xanotification method)": [[5, "PyXA.Additions.UI.XANotification.display"]], "duration (pyxa.additions.ui.xahud attribute)": [[5, "PyXA.Additions.UI.XAHUD.duration"]], "enabled (pyxa.additions.ui.xatextmenuitem property)": [[5, "PyXA.Additions.UI.XATextMenuItem.enabled"]], "font_size (pyxa.additions.ui.xahud attribute)": [[5, "PyXA.Additions.UI.XAHUD.font_size"]], "icon (pyxa.additions.ui.xaalert attribute)": [[5, "PyXA.Additions.UI.XAAlert.icon"]], "icon (pyxa.additions.ui.xamenubarmenu property)": [[5, "PyXA.Additions.UI.XAMenuBarMenu.icon"]], "icon (pyxa.additions.ui.xatextmenuitem property)": [[5, "PyXA.Additions.UI.XATextMenuItem.icon"]], "icon_dimensions (pyxa.additions.ui.xamenubarmenu property)": [[5, "PyXA.Additions.UI.XAMenuBarMenu.icon_dimensions"]], "icon_dimensions (pyxa.additions.ui.xatextmenuitem property)": [[5, "PyXA.Additions.UI.XATextMenuItem.icon_dimensions"]], "id (pyxa.additions.ui.xamenubarmenu attribute)": [[5, "PyXA.Additions.UI.XAMenuBarMenu.id"]], "image (pyxa.additions.ui.xanotification attribute)": [[5, "PyXA.Additions.UI.XANotification.image"]], "indent (pyxa.additions.ui.xatextmenuitem property)": [[5, "PyXA.Additions.UI.XATextMenuItem.indent"]], "items (pyxa.additions.ui.xamenubarmenu attribute)": [[5, "PyXA.Additions.UI.XAMenuBarMenu.items"]], "label (pyxa.additions.ui.xaswitchmenuitem property)": [[5, "PyXA.Additions.UI.XASwitchMenuItem.label"]], "label (pyxa.additions.ui.xaurlmenuitem property)": [[5, "PyXA.Additions.UI.XAURLMenuItem.label"]], "location (pyxa.additions.ui.xaurlmenuitem property)": [[5, "PyXA.Additions.UI.XAURLMenuItem.location"]], "max_value (pyxa.additions.ui.xaslider property)": [[5, "PyXA.Additions.UI.XASlider.max_value"]], "menus (pyxa.additions.ui.xamenubar attribute)": [[5, "PyXA.Additions.UI.XAMenuBar.menus"]], "message (pyxa.additions.ui.xaalert attribute)": [[5, "PyXA.Additions.UI.XAAlert.message"]], "message (pyxa.additions.ui.xahud attribute)": [[5, "PyXA.Additions.UI.XAHUD.message"]], "min_value (pyxa.additions.ui.xaslider property)": [[5, "PyXA.Additions.UI.XASlider.min_value"]], "new_image_item() (pyxa.additions.ui.xamenubarmenu method)": [[5, "PyXA.Additions.UI.XAMenuBarMenu.new_image_item"]], "new_item() (pyxa.additions.ui.xamenubarmenu method)": [[5, "PyXA.Additions.UI.XAMenuBarMenu.new_item"]], "new_item() (pyxa.additions.ui.xamenubarmenuitem method)": [[5, "PyXA.Additions.UI.XAMenuBarMenuItem.new_item"]], "new_menu() (pyxa.additions.ui.xamenubar method)": [[5, "PyXA.Additions.UI.XAMenuBar.new_menu"]], "new_segmented_control_item() (pyxa.additions.ui.xamenubarmenu method)": [[5, "PyXA.Additions.UI.XAMenuBarMenu.new_segmented_control_item"]], "new_separator() (pyxa.additions.ui.xamenubarmenu method)": [[5, "PyXA.Additions.UI.XAMenuBarMenu.new_separator"]], "new_slider_item() (pyxa.additions.ui.xamenubarmenu method)": [[5, "PyXA.Additions.UI.XAMenuBarMenu.new_slider_item"]], "new_subitem() (pyxa.additions.ui.xamenubarmenuitem method)": [[5, "PyXA.Additions.UI.XAMenuBarMenuItem.new_subitem"]], "new_subitem() (pyxa.additions.ui.xatextmenuitem method)": [[5, "PyXA.Additions.UI.XATextMenuItem.new_subitem"]], "new_switch_item() (pyxa.additions.ui.xamenubarmenu method)": [[5, "PyXA.Additions.UI.XAMenuBarMenu.new_switch_item"]], "new_url_item() (pyxa.additions.ui.xamenubarmenu method)": [[5, "PyXA.Additions.UI.XAMenuBarMenu.new_url_item"]], "parent (pyxa.additions.ui.xamenubarmenuitem attribute)": [[5, "PyXA.Additions.UI.XAMenuBarMenuItem.parent"]], "primary_action (pyxa.additions.ui.xanotification attribute)": [[5, "PyXA.Additions.UI.XANotification.primary_action"]], "primary_button_title (pyxa.additions.ui.xanotification attribute)": [[5, "PyXA.Additions.UI.XANotification.primary_button_title"]], "remove_item() (pyxa.additions.ui.xamenubarmenu method)": [[5, "PyXA.Additions.UI.XAMenuBarMenu.remove_item"]], "remove_item() (pyxa.additions.ui.xamenubarmenuitem method)": [[5, "PyXA.Additions.UI.XAMenuBarMenuItem.remove_item"]], "remove_menu() (pyxa.additions.ui.xamenubar method)": [[5, "PyXA.Additions.UI.XAMenuBar.remove_menu"]], "remove_subitem() (pyxa.additions.ui.xamenubarmenuitem method)": [[5, "PyXA.Additions.UI.XAMenuBarMenuItem.remove_subitem"]], "remove_subitem() (pyxa.additions.ui.xatextmenuitem method)": [[5, "PyXA.Additions.UI.XATextMenuItem.remove_subitem"]], "reply_action (pyxa.additions.ui.xanotification attribute)": [[5, "PyXA.Additions.UI.XANotification.reply_action"]], "run_action_() (pyxa.additions.ui.xasegmentedcontrol method)": [[5, "PyXA.Additions.UI.XASegmentedControl.run_action_"]], "run_action_() (pyxa.additions.ui.xaslider method)": [[5, "PyXA.Additions.UI.XASlider.run_action_"]], "run_action_() (pyxa.additions.ui.xaswitch method)": [[5, "PyXA.Additions.UI.XASwitch.run_action_"]], "selection (pyxa.additions.ui.xasegmentedcontrol property)": [[5, "PyXA.Additions.UI.XASegmentedControl.selection"]], "set_image() (pyxa.additions.ui.xamenubar method)": [[5, "PyXA.Additions.UI.XAMenuBar.set_image"]], "set_text() (pyxa.additions.ui.xamenubar method)": [[5, "PyXA.Additions.UI.XAMenuBar.set_text"]], "sound_name (pyxa.additions.ui.xanotification attribute)": [[5, "PyXA.Additions.UI.XANotification.sound_name"]], "state (pyxa.additions.ui.xaswitch property)": [[5, "PyXA.Additions.UI.XASwitch.state"]], "style (pyxa.additions.ui.xaalert attribute)": [[5, "PyXA.Additions.UI.XAAlert.style"]], "subtitle (pyxa.additions.ui.xanotification attribute)": [[5, "PyXA.Additions.UI.XANotification.subtitle"]], "text (pyxa.additions.ui.xanotification attribute)": [[5, "PyXA.Additions.UI.XANotification.text"]], "text (pyxa.additions.ui.xatextmenuitem property)": [[5, "PyXA.Additions.UI.XATextMenuItem.text"]], "text_color (pyxa.additions.ui.xahud attribute)": [[5, "PyXA.Additions.UI.XAHUD.text_color"]], "timeout (pyxa.additions.ui.xanotification attribute)": [[5, "PyXA.Additions.UI.XANotification.timeout"]], "title (pyxa.additions.ui.xaalert attribute)": [[5, "PyXA.Additions.UI.XAAlert.title"]], "title (pyxa.additions.ui.xanotification attribute)": [[5, "PyXA.Additions.UI.XANotification.title"]], "toggle() (pyxa.additions.ui.xaswitch method)": [[5, "PyXA.Additions.UI.XASwitch.toggle"]], "tooltip (pyxa.additions.ui.xamenubarmenu property)": [[5, "PyXA.Additions.UI.XAMenuBarMenu.tooltip"]], "tooltip (pyxa.additions.ui.xamenubarmenuitem property)": [[5, "PyXA.Additions.UI.XAMenuBarMenuItem.tooltip"]], "value (pyxa.additions.ui.xaslider property)": [[5, "PyXA.Additions.UI.XASlider.value"]], "value (pyxa.additions.ui.xaslidermenuitem property)": [[5, "PyXA.Additions.UI.XASliderMenuItem.value"]], "pyxa.additions.utils": [[6, "module-PyXA.Additions.Utils"]], "sdefparser (class in pyxa.additions.utils)": [[6, "PyXA.Additions.Utils.SDEFParser"]], "export() (pyxa.additions.utils.sdefparser method)": [[6, "PyXA.Additions.Utils.SDEFParser.export"]], "file (pyxa.additions.utils.sdefparser attribute)": [[6, "PyXA.Additions.Utils.SDEFParser.file"]], "parse() (pyxa.additions.utils.sdefparser method)": [[6, "PyXA.Additions.Utils.SDEFParser.parse"]], "pyxa.additions.web": [[7, "module-PyXA.Additions.Web"]], "rssfeed (class in pyxa.additions.web)": [[7, "PyXA.Additions.Web.RSSFeed"]], "rssitem (class in pyxa.additions.web)": [[7, "PyXA.Additions.Web.RSSItem"]], "rssitemcontent (class in pyxa.additions.web)": [[7, "PyXA.Additions.Web.RSSItemContent"]], "rssitemcontentlist (class in pyxa.additions.web)": [[7, "PyXA.Additions.Web.RSSItemContentList"]], "rssitemlist (class in pyxa.additions.web)": [[7, "PyXA.Additions.Web.RSSItemList"]], "author (pyxa.additions.web.rssitem property)": [[7, "PyXA.Additions.Web.RSSItem.author"]], "author() (pyxa.additions.web.rssitemlist method)": [[7, "PyXA.Additions.Web.RSSItemList.author"]], "category (pyxa.additions.web.rssitem property)": [[7, "PyXA.Additions.Web.RSSItem.category"]], "category() (pyxa.additions.web.rssitemlist method)": [[7, "PyXA.Additions.Web.RSSItemList.category"]], "comments (pyxa.additions.web.rssitem property)": [[7, "PyXA.Additions.Web.RSSItem.comments"]], "comments() (pyxa.additions.web.rssitemlist method)": [[7, "PyXA.Additions.Web.RSSItemList.comments"]], "content (pyxa.additions.web.rssitem property)": [[7, "PyXA.Additions.Web.RSSItem.content"]], "content() (pyxa.additions.web.rssitemlist method)": [[7, "PyXA.Additions.Web.RSSItemList.content"]], "copyright (pyxa.additions.web.rssitem property)": [[7, "PyXA.Additions.Web.RSSItem.copyright"]], "copyright() (pyxa.additions.web.rssitemlist method)": [[7, "PyXA.Additions.Web.RSSItemList.copyright"]], "description (pyxa.additions.web.rssitem property)": [[7, "PyXA.Additions.Web.RSSItem.description"]], "description() (pyxa.additions.web.rssitemlist method)": [[7, "PyXA.Additions.Web.RSSItemList.description"]], "enclosure (pyxa.additions.web.rssitem property)": [[7, "PyXA.Additions.Web.RSSItem.enclosure"]], "enclosure() (pyxa.additions.web.rssitemlist method)": [[7, "PyXA.Additions.Web.RSSItemList.enclosure"]], "html (pyxa.additions.web.rssitemcontent property)": [[7, "PyXA.Additions.Web.RSSItemContent.html"]], "html() (pyxa.additions.web.rssitemcontentlist method)": [[7, "PyXA.Additions.Web.RSSItemContentList.html"]], "images() (pyxa.additions.web.rssitemcontent method)": [[7, "PyXA.Additions.Web.RSSItemContent.images"]], "images() (pyxa.additions.web.rssitemcontentlist method)": [[7, "PyXA.Additions.Web.RSSItemContentList.images"]], "items() (pyxa.additions.web.rssfeed method)": [[7, "PyXA.Additions.Web.RSSFeed.items"]], "link (pyxa.additions.web.rssitem property)": [[7, "PyXA.Additions.Web.RSSItem.link"]], "link() (pyxa.additions.web.rssitemlist method)": [[7, "PyXA.Additions.Web.RSSItemList.link"]], "links() (pyxa.additions.web.rssitem method)": [[7, "PyXA.Additions.Web.RSSItem.links"]], "links() (pyxa.additions.web.rssitemcontent method)": [[7, "PyXA.Additions.Web.RSSItemContent.links"]], "links() (pyxa.additions.web.rssitemcontentlist method)": [[7, "PyXA.Additions.Web.RSSItemContentList.links"]], "links() (pyxa.additions.web.rssitemlist method)": [[7, "PyXA.Additions.Web.RSSItemList.links"]], "publication_date (pyxa.additions.web.rssitem property)": [[7, "PyXA.Additions.Web.RSSItem.publication_date"]], "publication_date() (pyxa.additions.web.rssitemlist method)": [[7, "PyXA.Additions.Web.RSSItemList.publication_date"]], "refetch() (pyxa.additions.web.rssfeed method)": [[7, "PyXA.Additions.Web.RSSFeed.refetch"]], "source (pyxa.additions.web.rssitem property)": [[7, "PyXA.Additions.Web.RSSItem.source"]], "source() (pyxa.additions.web.rssitemlist method)": [[7, "PyXA.Additions.Web.RSSItemList.source"]], "text (pyxa.additions.web.rssitem property)": [[7, "PyXA.Additions.Web.RSSItem.text"]], "text (pyxa.additions.web.rssitemcontent property)": [[7, "PyXA.Additions.Web.RSSItemContent.text"]], "text() (pyxa.additions.web.rssitemcontentlist method)": [[7, "PyXA.Additions.Web.RSSItemContentList.text"]], "text() (pyxa.additions.web.rssitemlist method)": [[7, "PyXA.Additions.Web.RSSItemList.text"]], "title (pyxa.additions.web.rssitem property)": [[7, "PyXA.Additions.Web.RSSItem.title"]], "title() (pyxa.additions.web.rssitemlist method)": [[7, "PyXA.Additions.Web.RSSItemList.title"]], "xml (pyxa.additions.web.rssitem property)": [[7, "PyXA.Additions.Web.RSSItem.xml"]], "xml() (pyxa.additions.web.rssitemlist method)": [[7, "PyXA.Additions.Web.RSSItemList.xml"]], "irreversible (pyxa.apps.automator.xaautomatorapplication.warninglevel attribute)": [[8, "PyXA.apps.Automator.XAAutomatorApplication.WarningLevel.IRREVERSIBLE"]], "none (pyxa.apps.automator.xaautomatorapplication.warninglevel attribute)": [[8, "PyXA.apps.Automator.XAAutomatorApplication.WarningLevel.NONE"]], "pyxa.apps.automator": [[8, "module-PyXA.apps.Automator"]], "reversible (pyxa.apps.automator.xaautomatorapplication.warninglevel attribute)": [[8, "PyXA.apps.Automator.XAAutomatorApplication.WarningLevel.REVERSIBLE"]], "xaautomatoraction (class in pyxa.apps.automator)": [[8, "PyXA.apps.Automator.XAAutomatorAction"]], "xaautomatoractionlist (class in pyxa.apps.automator)": [[8, "PyXA.apps.Automator.XAAutomatorActionList"]], "xaautomatorapplication (class in pyxa.apps.automator)": [[8, "PyXA.apps.Automator.XAAutomatorApplication"]], "xaautomatorapplication.warninglevel (class in pyxa.apps.automator)": [[8, "PyXA.apps.Automator.XAAutomatorApplication.WarningLevel"]], "xaautomatordocument (class in pyxa.apps.automator)": [[8, "PyXA.apps.Automator.XAAutomatorDocument"]], "xaautomatordocumentlist (class in pyxa.apps.automator)": [[8, "PyXA.apps.Automator.XAAutomatorDocumentList"]], "xaautomatorrequiredresource (class in pyxa.apps.automator)": [[8, "PyXA.apps.Automator.XAAutomatorRequiredResource"]], "xaautomatorrequiredresourcelist (class in pyxa.apps.automator)": [[8, "PyXA.apps.Automator.XAAutomatorRequiredResourceList"]], "xaautomatorsetting (class in pyxa.apps.automator)": [[8, "PyXA.apps.Automator.XAAutomatorSetting"]], "xaautomatorsettinglist (class in pyxa.apps.automator)": [[8, "PyXA.apps.Automator.XAAutomatorSettingList"]], "xaautomatorvariable (class in pyxa.apps.automator)": [[8, "PyXA.apps.Automator.XAAutomatorVariable"]], "xaautomatorvariablelist (class in pyxa.apps.automator)": [[8, "PyXA.apps.Automator.XAAutomatorVariableList"]], "xaautomatorwindow (class in pyxa.apps.automator)": [[8, "PyXA.apps.Automator.XAAutomatorWindow"]], "xaautomatorworkflow (class in pyxa.apps.automator)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflow"]], "xaautomatorworkflowlist (class in pyxa.apps.automator)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflowList"]], "add() (pyxa.apps.automator.xaautomatorapplication method)": [[8, "PyXA.apps.Automator.XAAutomatorApplication.add"]], "automator_actions() (pyxa.apps.automator.xaautomatorapplication method)": [[8, "PyXA.apps.Automator.XAAutomatorApplication.automator_actions"]], "automator_actions() (pyxa.apps.automator.xaautomatorworkflow method)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflow.automator_actions"]], "bundle_id (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.bundle_id"]], "bundle_id() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.bundle_id"]], "by_bundle_id() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_bundle_id"]], "by_category() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_category"]], "by_comment() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_comment"]], "by_current_action() (pyxa.apps.automator.xaautomatorworkflowlist method)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflowList.by_current_action"]], "by_default_value() (pyxa.apps.automator.xaautomatorsettinglist method)": [[8, "PyXA.apps.Automator.XAAutomatorSettingList.by_default_value"]], "by_enabled() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_enabled"]], "by_execution_error_message() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_execution_error_message"]], "by_execution_error_message() (pyxa.apps.automator.xaautomatorworkflowlist method)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflowList.by_execution_error_message"]], "by_execution_error_number() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_execution_error_number"]], "by_execution_error_number() (pyxa.apps.automator.xaautomatorworkflowlist method)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflowList.by_execution_error_number"]], "by_execution_id() (pyxa.apps.automator.xaautomatorworkflowlist method)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflowList.by_execution_id"]], "by_execution_result() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_execution_result"]], "by_execution_result() (pyxa.apps.automator.xaautomatorworkflowlist method)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflowList.by_execution_result"]], "by_icon_name() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_icon_name"]], "by_id() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_id"]], "by_id() (pyxa.apps.automator.xaautomatordocumentlist method)": [[8, "PyXA.apps.Automator.XAAutomatorDocumentList.by_id"]], "by_ignores_input() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_ignores_input"]], "by_index() (pyxa.apps.automator.xaautomatordocumentlist method)": [[8, "PyXA.apps.Automator.XAAutomatorDocumentList.by_index"]], "by_input_types() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_input_types"]], "by_keywords() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_keywords"]], "by_kind() (pyxa.apps.automator.xaautomatorrequiredresourcelist method)": [[8, "PyXA.apps.Automator.XAAutomatorRequiredResourceList.by_kind"]], "by_name() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_name"]], "by_name() (pyxa.apps.automator.xaautomatorrequiredresourcelist method)": [[8, "PyXA.apps.Automator.XAAutomatorRequiredResourceList.by_name"]], "by_name() (pyxa.apps.automator.xaautomatorsettinglist method)": [[8, "PyXA.apps.Automator.XAAutomatorSettingList.by_name"]], "by_name() (pyxa.apps.automator.xaautomatorvariablelist method)": [[8, "PyXA.apps.Automator.XAAutomatorVariableList.by_name"]], "by_name() (pyxa.apps.automator.xaautomatorworkflowlist method)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflowList.by_name"]], "by_output_types() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_output_types"]], "by_parent_workflow() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_parent_workflow"]], "by_path() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_path"]], "by_resource() (pyxa.apps.automator.xaautomatorrequiredresourcelist method)": [[8, "PyXA.apps.Automator.XAAutomatorRequiredResourceList.by_resource"]], "by_settable() (pyxa.apps.automator.xaautomatorvariablelist method)": [[8, "PyXA.apps.Automator.XAAutomatorVariableList.by_settable"]], "by_show_action_when_run() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_show_action_when_run"]], "by_target_application() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_target_application"]], "by_title() (pyxa.apps.automator.xaautomatordocumentlist method)": [[8, "PyXA.apps.Automator.XAAutomatorDocumentList.by_title"]], "by_value() (pyxa.apps.automator.xaautomatorsettinglist method)": [[8, "PyXA.apps.Automator.XAAutomatorSettingList.by_value"]], "by_value() (pyxa.apps.automator.xaautomatorvariablelist method)": [[8, "PyXA.apps.Automator.XAAutomatorVariableList.by_value"]], "by_version() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_version"]], "by_version() (pyxa.apps.automator.xaautomatorrequiredresourcelist method)": [[8, "PyXA.apps.Automator.XAAutomatorRequiredResourceList.by_version"]], "by_warning_action() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_warning_action"]], "by_warning_level() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_warning_level"]], "by_warning_message() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.by_warning_message"]], "category (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.category"]], "category() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.category"]], "comment (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.comment"]], "comment() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.comment"]], "current_action (pyxa.apps.automator.xaautomatorworkflow property)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflow.current_action"]], "current_action() (pyxa.apps.automator.xaautomatorworkflowlist method)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflowList.current_action"]], "default_value (pyxa.apps.automator.xaautomatorsetting property)": [[8, "PyXA.apps.Automator.XAAutomatorSetting.default_value"]], "default_value() (pyxa.apps.automator.xaautomatorsettinglist method)": [[8, "PyXA.apps.Automator.XAAutomatorSettingList.default_value"]], "delete() (pyxa.apps.automator.xaautomatorworkflow method)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflow.delete"]], "document (pyxa.apps.automator.xaautomatorwindow property)": [[8, "PyXA.apps.Automator.XAAutomatorWindow.document"]], "documents() (pyxa.apps.automator.xaautomatorapplication method)": [[8, "PyXA.apps.Automator.XAAutomatorApplication.documents"]], "enabled (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.enabled"]], "enabled() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.enabled"]], "execute() (pyxa.apps.automator.xaautomatorworkflow method)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflow.execute"]], "execution_error_message (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.execution_error_message"]], "execution_error_message (pyxa.apps.automator.xaautomatorworkflow property)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflow.execution_error_message"]], "execution_error_message() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.execution_error_message"]], "execution_error_message() (pyxa.apps.automator.xaautomatorworkflowlist method)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflowList.execution_error_message"]], "execution_error_number (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.execution_error_number"]], "execution_error_number (pyxa.apps.automator.xaautomatorworkflow property)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflow.execution_error_number"]], "execution_error_number() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.execution_error_number"]], "execution_error_number() (pyxa.apps.automator.xaautomatorworkflowlist method)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflowList.execution_error_number"]], "execution_id (pyxa.apps.automator.xaautomatorworkflow property)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflow.execution_id"]], "execution_id() (pyxa.apps.automator.xaautomatorworkflowlist method)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflowList.execution_id"]], "execution_result (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.execution_result"]], "execution_result (pyxa.apps.automator.xaautomatorworkflow property)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflow.execution_result"]], "execution_result() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.execution_result"]], "execution_result() (pyxa.apps.automator.xaautomatorworkflowlist method)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflowList.execution_result"]], "floating (pyxa.apps.automator.xaautomatorwindow property)": [[8, "PyXA.apps.Automator.XAAutomatorWindow.floating"]], "frontmost (pyxa.apps.automator.xaautomatorapplication property)": [[8, "PyXA.apps.Automator.XAAutomatorApplication.frontmost"]], "icon_name (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.icon_name"]], "icon_name() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.icon_name"]], "id (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.id"]], "id() (pyxa.apps.automator.xaautomatordocumentlist method)": [[8, "PyXA.apps.Automator.XAAutomatorDocumentList.id"]], "ignores_input (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.ignores_input"]], "ignores_input() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.ignores_input"]], "index (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.index"]], "index() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.index"]], "index() (pyxa.apps.automator.xaautomatordocumentlist method)": [[8, "PyXA.apps.Automator.XAAutomatorDocumentList.index"]], "input_types (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.input_types"]], "input_types() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.input_types"]], "keywords (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.keywords"]], "keywords() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.keywords"]], "kind (pyxa.apps.automator.xaautomatorrequiredresource property)": [[8, "PyXA.apps.Automator.XAAutomatorRequiredResource.kind"]], "kind() (pyxa.apps.automator.xaautomatorrequiredresourcelist method)": [[8, "PyXA.apps.Automator.XAAutomatorRequiredResourceList.kind"]], "make() (pyxa.apps.automator.xaautomatorapplication method)": [[8, "PyXA.apps.Automator.XAAutomatorApplication.make"]], "modal (pyxa.apps.automator.xaautomatorwindow property)": [[8, "PyXA.apps.Automator.XAAutomatorWindow.modal"]], "modified (pyxa.apps.automator.xaautomatordocument property)": [[8, "PyXA.apps.Automator.XAAutomatorDocument.modified"]], "name (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.name"]], "name (pyxa.apps.automator.xaautomatorapplication property)": [[8, "PyXA.apps.Automator.XAAutomatorApplication.name"]], "name (pyxa.apps.automator.xaautomatordocument property)": [[8, "PyXA.apps.Automator.XAAutomatorDocument.name"]], "name (pyxa.apps.automator.xaautomatorrequiredresource property)": [[8, "PyXA.apps.Automator.XAAutomatorRequiredResource.name"]], "name (pyxa.apps.automator.xaautomatorsetting property)": [[8, "PyXA.apps.Automator.XAAutomatorSetting.name"]], "name (pyxa.apps.automator.xaautomatorvariable property)": [[8, "PyXA.apps.Automator.XAAutomatorVariable.name"]], "name (pyxa.apps.automator.xaautomatorworkflow property)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflow.name"]], "name() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.name"]], "name() (pyxa.apps.automator.xaautomatorrequiredresourcelist method)": [[8, "PyXA.apps.Automator.XAAutomatorRequiredResourceList.name"]], "name() (pyxa.apps.automator.xaautomatorsettinglist method)": [[8, "PyXA.apps.Automator.XAAutomatorSettingList.name"]], "name() (pyxa.apps.automator.xaautomatorvariablelist method)": [[8, "PyXA.apps.Automator.XAAutomatorVariableList.name"]], "name() (pyxa.apps.automator.xaautomatorworkflowlist method)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflowList.name"]], "open() (pyxa.apps.automator.xaautomatorapplication method)": [[8, "PyXA.apps.Automator.XAAutomatorApplication.open"]], "output_types (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.output_types"]], "output_types() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.output_types"]], "parent_workflow (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.parent_workflow"]], "parent_workflow() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.parent_workflow"]], "path (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.path"]], "path (pyxa.apps.automator.xaautomatordocument property)": [[8, "PyXA.apps.Automator.XAAutomatorDocument.path"]], "path() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.path"]], "required_resources() (pyxa.apps.automator.xaautomatoraction method)": [[8, "PyXA.apps.Automator.XAAutomatorAction.required_resources"]], "resource (pyxa.apps.automator.xaautomatorrequiredresource property)": [[8, "PyXA.apps.Automator.XAAutomatorRequiredResource.resource"]], "resource() (pyxa.apps.automator.xaautomatorrequiredresourcelist method)": [[8, "PyXA.apps.Automator.XAAutomatorRequiredResourceList.resource"]], "save() (pyxa.apps.automator.xaautomatorworkflow method)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflow.save"]], "settable (pyxa.apps.automator.xaautomatorvariable property)": [[8, "PyXA.apps.Automator.XAAutomatorVariable.settable"]], "settable() (pyxa.apps.automator.xaautomatorvariablelist method)": [[8, "PyXA.apps.Automator.XAAutomatorVariableList.settable"]], "settings() (pyxa.apps.automator.xaautomatoraction method)": [[8, "PyXA.apps.Automator.XAAutomatorAction.settings"]], "show_action_when_run (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.show_action_when_run"]], "show_action_when_run() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.show_action_when_run"]], "target_application (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.target_application"]], "target_application() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.target_application"]], "title() (pyxa.apps.automator.xaautomatordocumentlist method)": [[8, "PyXA.apps.Automator.XAAutomatorDocumentList.title"]], "titled (pyxa.apps.automator.xaautomatorwindow property)": [[8, "PyXA.apps.Automator.XAAutomatorWindow.titled"]], "value (pyxa.apps.automator.xaautomatorsetting property)": [[8, "PyXA.apps.Automator.XAAutomatorSetting.value"]], "value (pyxa.apps.automator.xaautomatorvariable property)": [[8, "PyXA.apps.Automator.XAAutomatorVariable.value"]], "value() (pyxa.apps.automator.xaautomatorsettinglist method)": [[8, "PyXA.apps.Automator.XAAutomatorSettingList.value"]], "value() (pyxa.apps.automator.xaautomatorvariablelist method)": [[8, "PyXA.apps.Automator.XAAutomatorVariableList.value"]], "variables() (pyxa.apps.automator.xaautomatorapplication method)": [[8, "PyXA.apps.Automator.XAAutomatorApplication.variables"]], "variables() (pyxa.apps.automator.xaautomatorworkflow method)": [[8, "PyXA.apps.Automator.XAAutomatorWorkflow.variables"]], "version (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.version"]], "version (pyxa.apps.automator.xaautomatorapplication property)": [[8, "PyXA.apps.Automator.XAAutomatorApplication.version"]], "version (pyxa.apps.automator.xaautomatorrequiredresource property)": [[8, "PyXA.apps.Automator.XAAutomatorRequiredResource.version"]], "version() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.version"]], "version() (pyxa.apps.automator.xaautomatorrequiredresourcelist method)": [[8, "PyXA.apps.Automator.XAAutomatorRequiredResourceList.version"]], "warning_action (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.warning_action"]], "warning_action() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.warning_action"]], "warning_level (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.warning_level"]], "warning_level() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.warning_level"]], "warning_message (pyxa.apps.automator.xaautomatoraction property)": [[8, "PyXA.apps.Automator.XAAutomatorAction.warning_message"]], "warning_message() (pyxa.apps.automator.xaautomatoractionlist method)": [[8, "PyXA.apps.Automator.XAAutomatorActionList.warning_message"]], "workflows() (pyxa.apps.automator.xaautomatorapplication method)": [[8, "PyXA.apps.Automator.XAAutomatorApplication.workflows"]], "bike (pyxa.apps.bike.xabikeapplication.fileformat attribute)": [[9, "PyXA.apps.Bike.XABikeApplication.FileFormat.BIKE"]], "opml (pyxa.apps.bike.xabikeapplication.fileformat attribute)": [[9, "PyXA.apps.Bike.XABikeApplication.FileFormat.OPML"]], "plaintext (pyxa.apps.bike.xabikeapplication.fileformat attribute)": [[9, "PyXA.apps.Bike.XABikeApplication.FileFormat.PLAINTEXT"]], "pyxa.apps.bike": [[9, "module-PyXA.apps.Bike"]], "xabikeapplication (class in pyxa.apps.bike)": [[9, "PyXA.apps.Bike.XABikeApplication"]], "xabikeapplication.fileformat (class in pyxa.apps.bike)": [[9, "PyXA.apps.Bike.XABikeApplication.FileFormat"]], "xabikeattribute (class in pyxa.apps.bike)": [[9, "PyXA.apps.Bike.XABikeAttribute"]], "xabikeattributelist (class in pyxa.apps.bike)": [[9, "PyXA.apps.Bike.XABikeAttributeList"]], "xabikedocument (class in pyxa.apps.bike)": [[9, "PyXA.apps.Bike.XABikeDocument"]], "xabikedocumentlist (class in pyxa.apps.bike)": [[9, "PyXA.apps.Bike.XABikeDocumentList"]], "xabikerow (class in pyxa.apps.bike)": [[9, "PyXA.apps.Bike.XABikeRow"]], "xabikerowlist (class in pyxa.apps.bike)": [[9, "PyXA.apps.Bike.XABikeRowList"]], "xabikewindow (class in pyxa.apps.bike)": [[9, "PyXA.apps.Bike.XABikeWindow"]], "attributes() (pyxa.apps.bike.xabikerow method)": [[9, "PyXA.apps.Bike.XABikeRow.attributes"]], "background_color (pyxa.apps.bike.xabikeapplication property)": [[9, "PyXA.apps.Bike.XABikeApplication.background_color"]], "by_collapsed() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.by_collapsed"]], "by_container() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.by_container"]], "by_container_document() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.by_container_document"]], "by_container_row() (pyxa.apps.bike.xabikeattributelist method)": [[9, "PyXA.apps.Bike.XABikeAttributeList.by_container_row"]], "by_container_row() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.by_container_row"]], "by_contains_rows() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.by_contains_rows"]], "by_entire_contents() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.by_entire_contents"]], "by_entire_contents() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.by_entire_contents"]], "by_expanded() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.by_expanded"]], "by_file() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.by_file"]], "by_focused_row() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.by_focused_row"]], "by_hoisted_row() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.by_hoisted_row"]], "by_id() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.by_id"]], "by_id() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.by_id"]], "by_level() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.by_level"]], "by_modified() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.by_modified"]], "by_name() (pyxa.apps.bike.xabikeattributelist method)": [[9, "PyXA.apps.Bike.XABikeAttributeList.by_name"]], "by_name() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.by_name"]], "by_name() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.by_name"]], "by_next_sibling_row() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.by_next_sibling_row"]], "by_prev_sibling_row() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.by_prev_sibling_row"]], "by_root_row() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.by_root_row"]], "by_selected() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.by_selected"]], "by_selected_text() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.by_selected_text"]], "by_selection_row() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.by_selection_row"]], "by_selection_rows() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.by_selection_rows"]], "by_url() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.by_url"]], "by_url() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.by_url"]], "by_value() (pyxa.apps.bike.xabikeattributelist method)": [[9, "PyXA.apps.Bike.XABikeAttributeList.by_value"]], "by_visible() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.by_visible"]], "close() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.close"]], "collapse() (pyxa.apps.bike.xabikerow method)": [[9, "PyXA.apps.Bike.XABikeRow.collapse"]], "collapse() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.collapse"]], "collapsed (pyxa.apps.bike.xabikerow property)": [[9, "PyXA.apps.Bike.XABikeRow.collapsed"]], "collapsed() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.collapsed"]], "container (pyxa.apps.bike.xabikerow property)": [[9, "PyXA.apps.Bike.XABikeRow.container"]], "container() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.container"]], "container_document (pyxa.apps.bike.xabikerow property)": [[9, "PyXA.apps.Bike.XABikeRow.container_document"]], "container_row (pyxa.apps.bike.xabikeattribute property)": [[9, "PyXA.apps.Bike.XABikeAttribute.container_row"]], "container_row (pyxa.apps.bike.xabikerow property)": [[9, "PyXA.apps.Bike.XABikeRow.container_row"]], "container_row() (pyxa.apps.bike.xabikeattributelist method)": [[9, "PyXA.apps.Bike.XABikeAttributeList.container_row"]], "container_row() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.container_row"]], "contains_rows (pyxa.apps.bike.xabikerow property)": [[9, "PyXA.apps.Bike.XABikeRow.contains_rows"]], "contains_rows() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.contains_rows"]], "document (pyxa.apps.bike.xabikewindow property)": [[9, "PyXA.apps.Bike.XABikeWindow.document"]], "documents() (pyxa.apps.bike.xabikeapplication method)": [[9, "PyXA.apps.Bike.XABikeApplication.documents"]], "entirecontents() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.entireContents"]], "entire_contents (pyxa.apps.bike.xabikedocument property)": [[9, "PyXA.apps.Bike.XABikeDocument.entire_contents"]], "entire_contents (pyxa.apps.bike.xabikerow property)": [[9, "PyXA.apps.Bike.XABikeRow.entire_contents"]], "entire_contents() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.entire_contents"]], "expand() (pyxa.apps.bike.xabikerow method)": [[9, "PyXA.apps.Bike.XABikeRow.expand"]], "expand() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.expand"]], "expanded (pyxa.apps.bike.xabikerow property)": [[9, "PyXA.apps.Bike.XABikeRow.expanded"]], "expanded() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.expanded"]], "file (pyxa.apps.bike.xabikedocument property)": [[9, "PyXA.apps.Bike.XABikeDocument.file"]], "file() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.file"]], "focused_row (pyxa.apps.bike.xabikedocument property)": [[9, "PyXA.apps.Bike.XABikeDocument.focused_row"]], "focused_row() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.focused_row"]], "font_size (pyxa.apps.bike.xabikeapplication property)": [[9, "PyXA.apps.Bike.XABikeApplication.font_size"]], "foreground_color (pyxa.apps.bike.xabikeapplication property)": [[9, "PyXA.apps.Bike.XABikeApplication.foreground_color"]], "frontmost (pyxa.apps.bike.xabikeapplication property)": [[9, "PyXA.apps.Bike.XABikeApplication.frontmost"]], "hoisted_row (pyxa.apps.bike.xabikedocument property)": [[9, "PyXA.apps.Bike.XABikeDocument.hoisted_row"]], "hoisted_row() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.hoisted_row"]], "id (pyxa.apps.bike.xabikedocument property)": [[9, "PyXA.apps.Bike.XABikeDocument.id"]], "id (pyxa.apps.bike.xabikerow property)": [[9, "PyXA.apps.Bike.XABikeRow.id"]], "id() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.id"]], "id() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.id"]], "level (pyxa.apps.bike.xabikerow property)": [[9, "PyXA.apps.Bike.XABikeRow.level"]], "level() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.level"]], "make() (pyxa.apps.bike.xabikeapplication method)": [[9, "PyXA.apps.Bike.XABikeApplication.make"]], "modified (pyxa.apps.bike.xabikedocument property)": [[9, "PyXA.apps.Bike.XABikeDocument.modified"]], "modified() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.modified"]], "move_to() (pyxa.apps.bike.xabikerow method)": [[9, "PyXA.apps.Bike.XABikeRow.move_to"]], "name (pyxa.apps.bike.xabikeapplication property)": [[9, "PyXA.apps.Bike.XABikeApplication.name"]], "name (pyxa.apps.bike.xabikeattribute property)": [[9, "PyXA.apps.Bike.XABikeAttribute.name"]], "name (pyxa.apps.bike.xabikedocument property)": [[9, "PyXA.apps.Bike.XABikeDocument.name"]], "name (pyxa.apps.bike.xabikerow property)": [[9, "PyXA.apps.Bike.XABikeRow.name"]], "name() (pyxa.apps.bike.xabikeattributelist method)": [[9, "PyXA.apps.Bike.XABikeAttributeList.name"]], "name() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.name"]], "name() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.name"]], "next_sibling_row (pyxa.apps.bike.xabikerow property)": [[9, "PyXA.apps.Bike.XABikeRow.next_sibling_row"]], "next_sibling_row() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.next_sibling_row"]], "prev_sibling_row (pyxa.apps.bike.xabikerow property)": [[9, "PyXA.apps.Bike.XABikeRow.prev_sibling_row"]], "prev_sibling_row() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.prev_sibling_row"]], "root_row (pyxa.apps.bike.xabikedocument property)": [[9, "PyXA.apps.Bike.XABikeDocument.root_row"]], "root_row() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.root_row"]], "rows() (pyxa.apps.bike.xabikedocument method)": [[9, "PyXA.apps.Bike.XABikeDocument.rows"]], "rows() (pyxa.apps.bike.xabikerow method)": [[9, "PyXA.apps.Bike.XABikeRow.rows"]], "save() (pyxa.apps.bike.xabikedocument method)": [[9, "PyXA.apps.Bike.XABikeDocument.save"]], "selected (pyxa.apps.bike.xabikerow property)": [[9, "PyXA.apps.Bike.XABikeRow.selected"]], "selected() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.selected"]], "selected_text (pyxa.apps.bike.xabikedocument property)": [[9, "PyXA.apps.Bike.XABikeDocument.selected_text"]], "selected_text() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.selected_text"]], "selection_row (pyxa.apps.bike.xabikedocument property)": [[9, "PyXA.apps.Bike.XABikeDocument.selection_row"]], "selection_row() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.selection_row"]], "selection_rows (pyxa.apps.bike.xabikedocument property)": [[9, "PyXA.apps.Bike.XABikeDocument.selection_rows"]], "selection_rows() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.selection_rows"]], "url (pyxa.apps.bike.xabikedocument property)": [[9, "PyXA.apps.Bike.XABikeDocument.url"]], "url (pyxa.apps.bike.xabikerow property)": [[9, "PyXA.apps.Bike.XABikeRow.url"]], "url() (pyxa.apps.bike.xabikedocumentlist method)": [[9, "PyXA.apps.Bike.XABikeDocumentList.url"]], "url() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.url"]], "value (pyxa.apps.bike.xabikeattribute property)": [[9, "PyXA.apps.Bike.XABikeAttribute.value"]], "value() (pyxa.apps.bike.xabikeattributelist method)": [[9, "PyXA.apps.Bike.XABikeAttributeList.value"]], "version (pyxa.apps.bike.xabikeapplication property)": [[9, "PyXA.apps.Bike.XABikeApplication.version"]], "visible (pyxa.apps.bike.xabikerow property)": [[9, "PyXA.apps.Bike.XABikeRow.visible"]], "visible() (pyxa.apps.bike.xabikerowlist method)": [[9, "PyXA.apps.Bike.XABikeRowList.visible"]], "pyxa.apps.calculator": [[10, "module-PyXA.apps.Calculator"]], "xacalculatorapplication (class in pyxa.apps.calculator)": [[10, "PyXA.apps.Calculator.XACalculatorApplication"]], "clear_value() (pyxa.apps.calculator.xacalculatorapplication method)": [[10, "PyXA.apps.Calculator.XACalculatorApplication.clear_value"]], "copy_value() (pyxa.apps.calculator.xacalculatorapplication method)": [[10, "PyXA.apps.Calculator.XACalculatorApplication.copy_value"]], "current_value() (pyxa.apps.calculator.xacalculatorapplication method)": [[10, "PyXA.apps.Calculator.XACalculatorApplication.current_value"]], "input() (pyxa.apps.calculator.xacalculatorapplication method)": [[10, "PyXA.apps.Calculator.XACalculatorApplication.input"]], "open_about_panel() (pyxa.apps.calculator.xacalculatorapplication method)": [[10, "PyXA.apps.Calculator.XACalculatorApplication.open_about_panel"]], "open_page_setup() (pyxa.apps.calculator.xacalculatorapplication method)": [[10, "PyXA.apps.Calculator.XACalculatorApplication.open_page_setup"]], "print_tape() (pyxa.apps.calculator.xacalculatorapplication method)": [[10, "PyXA.apps.Calculator.XACalculatorApplication.print_tape"]], "save_tape() (pyxa.apps.calculator.xacalculatorapplication method)": [[10, "PyXA.apps.Calculator.XACalculatorApplication.save_tape"]], "show_basic_calculator() (pyxa.apps.calculator.xacalculatorapplication method)": [[10, "PyXA.apps.Calculator.XACalculatorApplication.show_basic_calculator"]], "show_help() (pyxa.apps.calculator.xacalculatorapplication method)": [[10, "PyXA.apps.Calculator.XACalculatorApplication.show_help"]], "show_paper_tape() (pyxa.apps.calculator.xacalculatorapplication method)": [[10, "PyXA.apps.Calculator.XACalculatorApplication.show_paper_tape"]], "show_programmer_calculator() (pyxa.apps.calculator.xacalculatorapplication method)": [[10, "PyXA.apps.Calculator.XACalculatorApplication.show_programmer_calculator"]], "show_scientific_calculator() (pyxa.apps.calculator.xacalculatorapplication method)": [[10, "PyXA.apps.Calculator.XACalculatorApplication.show_scientific_calculator"]], "toggle_rpn_mode() (pyxa.apps.calculator.xacalculatorapplication method)": [[10, "PyXA.apps.Calculator.XACalculatorApplication.toggle_RPN_mode"]], "toggle_thousands_separators() (pyxa.apps.calculator.xacalculatorapplication method)": [[10, "PyXA.apps.Calculator.XACalculatorApplication.toggle_thousands_separators"]], "accepted (pyxa.apps.calendar.xacalendarapplication.participationstatus attribute)": [[11, "PyXA.apps.Calendar.XACalendarApplication.ParticipationStatus.ACCEPTED"]], "cancelled (pyxa.apps.calendar.xacalendarapplication.eventstatus attribute)": [[11, "PyXA.apps.Calendar.XACalendarApplication.EventStatus.CANCELLED"]], "confirmed (pyxa.apps.calendar.xacalendarapplication.eventstatus attribute)": [[11, "PyXA.apps.Calendar.XACalendarApplication.EventStatus.CONFIRMED"]], "day (pyxa.apps.calendar.xacalendarapplication.viewtype attribute)": [[11, "PyXA.apps.Calendar.XACalendarApplication.ViewType.DAY"]], "declined (pyxa.apps.calendar.xacalendarapplication.participationstatus attribute)": [[11, "PyXA.apps.Calendar.XACalendarApplication.ParticipationStatus.DECLINED"]], "high (pyxa.apps.calendar.xacalendarapplication.priority attribute)": [[11, "PyXA.apps.Calendar.XACalendarApplication.Priority.HIGH"]], "low (pyxa.apps.calendar.xacalendarapplication.priority attribute)": [[11, "PyXA.apps.Calendar.XACalendarApplication.Priority.LOW"]], "medium (pyxa.apps.calendar.xacalendarapplication.priority attribute)": [[11, "PyXA.apps.Calendar.XACalendarApplication.Priority.MEDIUM"]], "month (pyxa.apps.calendar.xacalendarapplication.viewtype attribute)": [[11, "PyXA.apps.Calendar.XACalendarApplication.ViewType.MONTH"]], "none (pyxa.apps.calendar.xacalendarapplication.eventstatus attribute)": [[11, "PyXA.apps.Calendar.XACalendarApplication.EventStatus.NONE"]], "none (pyxa.apps.calendar.xacalendarapplication.priority attribute)": [[11, "PyXA.apps.Calendar.XACalendarApplication.Priority.NONE"]], "pyxa.apps.calendar": [[11, "module-PyXA.apps.Calendar"]], "tentative (pyxa.apps.calendar.xacalendarapplication.eventstatus attribute)": [[11, "PyXA.apps.Calendar.XACalendarApplication.EventStatus.TENTATIVE"]], "tentative (pyxa.apps.calendar.xacalendarapplication.participationstatus attribute)": [[11, "PyXA.apps.Calendar.XACalendarApplication.ParticipationStatus.TENTATIVE"]], "unknown (pyxa.apps.calendar.xacalendarapplication.participationstatus attribute)": [[11, "PyXA.apps.Calendar.XACalendarApplication.ParticipationStatus.UNKNOWN"]], "week (pyxa.apps.calendar.xacalendarapplication.viewtype attribute)": [[11, "PyXA.apps.Calendar.XACalendarApplication.ViewType.WEEK"]], "xacalendaralarm (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarAlarm"]], "xacalendarapplication (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarApplication"]], "xacalendarapplication.eventstatus (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarApplication.EventStatus"]], "xacalendarapplication.participationstatus (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarApplication.ParticipationStatus"]], "xacalendarapplication.priority (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarApplication.Priority"]], "xacalendarapplication.viewtype (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarApplication.ViewType"]], "xacalendarattachment (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarAttachment"]], "xacalendarattachmentlist (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarAttachmentList"]], "xacalendarattendee (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarAttendee"]], "xacalendarattendeelist (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarAttendeeList"]], "xacalendarcalendar (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarCalendar"]], "xacalendarcalendarlist (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarCalendarList"]], "xacalendardisplayalarm (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarDisplayAlarm"]], "xacalendardocument (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarDocument"]], "xacalendardocumentlist (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarDocumentList"]], "xacalendarevent (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarEvent"]], "xacalendareventlist (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarEventList"]], "xacalendarmailalarm (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarMailAlarm"]], "xacalendaropenfilealarm (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarOpenFileAlarm"]], "xacalendarsoundalarm (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarSoundAlarm"]], "xacalendarwindow (class in pyxa.apps.calendar)": [[11, "PyXA.apps.Calendar.XACalendarWindow"]], "year (pyxa.apps.calendar.xacalendarapplication.viewtype attribute)": [[11, "PyXA.apps.Calendar.XACalendarApplication.ViewType.YEAR"]], "add_attachment() (pyxa.apps.calendar.xacalendarevent method)": [[11, "PyXA.apps.Calendar.XACalendarEvent.add_attachment"]], "allday_event (pyxa.apps.calendar.xacalendarevent property)": [[11, "PyXA.apps.Calendar.XACalendarEvent.allday_event"]], "allday_event() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.allday_event"]], "attachments() (pyxa.apps.calendar.xacalendarevent method)": [[11, "PyXA.apps.Calendar.XACalendarEvent.attachments"]], "attendees() (pyxa.apps.calendar.xacalendarevent method)": [[11, "PyXA.apps.Calendar.XACalendarEvent.attendees"]], "by_allday_event() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.by_allday_event"]], "by_color() (pyxa.apps.calendar.xacalendarcalendarlist method)": [[11, "PyXA.apps.Calendar.XACalendarCalendarList.by_color"]], "by_description() (pyxa.apps.calendar.xacalendarcalendarlist method)": [[11, "PyXA.apps.Calendar.XACalendarCalendarList.by_description"]], "by_description() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.by_description"]], "by_display_name() (pyxa.apps.calendar.xacalendarattendeelist method)": [[11, "PyXA.apps.Calendar.XACalendarAttendeeList.by_display_name"]], "by_email() (pyxa.apps.calendar.xacalendarattendeelist method)": [[11, "PyXA.apps.Calendar.XACalendarAttendeeList.by_email"]], "by_end_date() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.by_end_date"]], "by_excluded_dates() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.by_excluded_dates"]], "by_file() (pyxa.apps.calendar.xacalendarattachmentlist method)": [[11, "PyXA.apps.Calendar.XACalendarAttachmentList.by_file"]], "by_file() (pyxa.apps.calendar.xacalendardocumentlist method)": [[11, "PyXA.apps.Calendar.XACalendarDocumentList.by_file"]], "by_file_name() (pyxa.apps.calendar.xacalendarattachmentlist method)": [[11, "PyXA.apps.Calendar.XACalendarAttachmentList.by_file_name"]], "by_location() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.by_location"]], "by_modified() (pyxa.apps.calendar.xacalendardocumentlist method)": [[11, "PyXA.apps.Calendar.XACalendarDocumentList.by_modified"]], "by_name() (pyxa.apps.calendar.xacalendarcalendarlist method)": [[11, "PyXA.apps.Calendar.XACalendarCalendarList.by_name"]], "by_name() (pyxa.apps.calendar.xacalendardocumentlist method)": [[11, "PyXA.apps.Calendar.XACalendarDocumentList.by_name"]], "by_participation_status() (pyxa.apps.calendar.xacalendarattendeelist method)": [[11, "PyXA.apps.Calendar.XACalendarAttendeeList.by_participation_status"]], "by_properties() (pyxa.apps.calendar.xacalendarattendeelist method)": [[11, "PyXA.apps.Calendar.XACalendarAttendeeList.by_properties"]], "by_properties() (pyxa.apps.calendar.xacalendarcalendarlist method)": [[11, "PyXA.apps.Calendar.XACalendarCalendarList.by_properties"]], "by_properties() (pyxa.apps.calendar.xacalendardocumentlist method)": [[11, "PyXA.apps.Calendar.XACalendarDocumentList.by_properties"]], "by_properties() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.by_properties"]], "by_recurrence() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.by_recurrence"]], "by_sequence() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.by_sequence"]], "by_stamp_date() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.by_stamp_date"]], "by_start_date() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.by_start_date"]], "by_status() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.by_status"]], "by_summary() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.by_summary"]], "by_type() (pyxa.apps.calendar.xacalendarattachmentlist method)": [[11, "PyXA.apps.Calendar.XACalendarAttachmentList.by_type"]], "by_uid() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.by_uid"]], "by_url() (pyxa.apps.calendar.xacalendarattachmentlist method)": [[11, "PyXA.apps.Calendar.XACalendarAttachmentList.by_url"]], "by_url() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.by_url"]], "by_uuid() (pyxa.apps.calendar.xacalendarattachmentlist method)": [[11, "PyXA.apps.Calendar.XACalendarAttachmentList.by_uuid"]], "by_writable() (pyxa.apps.calendar.xacalendarcalendarlist method)": [[11, "PyXA.apps.Calendar.XACalendarCalendarList.by_writable"]], "calendar_obj (pyxa.apps.calendar.xacalendarcalendar property)": [[11, "PyXA.apps.Calendar.XACalendarCalendar.calendar_obj"]], "calendars() (pyxa.apps.calendar.xacalendarapplication method)": [[11, "PyXA.apps.Calendar.XACalendarApplication.calendars"]], "color (pyxa.apps.calendar.xacalendarcalendar property)": [[11, "PyXA.apps.Calendar.XACalendarCalendar.color"]], "color() (pyxa.apps.calendar.xacalendarcalendarlist method)": [[11, "PyXA.apps.Calendar.XACalendarCalendarList.color"]], "default_calendar (pyxa.apps.calendar.xacalendarapplication property)": [[11, "PyXA.apps.Calendar.XACalendarApplication.default_calendar"]], "delete() (pyxa.apps.calendar.xacalendarcalendar method)": [[11, "PyXA.apps.Calendar.XACalendarCalendar.delete"]], "delete() (pyxa.apps.calendar.xacalendarevent method)": [[11, "PyXA.apps.Calendar.XACalendarEvent.delete"]], "description (pyxa.apps.calendar.xacalendarcalendar property)": [[11, "PyXA.apps.Calendar.XACalendarCalendar.description"]], "description (pyxa.apps.calendar.xacalendarevent property)": [[11, "PyXA.apps.Calendar.XACalendarEvent.description"]], "description() (pyxa.apps.calendar.xacalendarcalendarlist method)": [[11, "PyXA.apps.Calendar.XACalendarCalendarList.description"]], "description() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.description"]], "display_name (pyxa.apps.calendar.xacalendarattendee property)": [[11, "PyXA.apps.Calendar.XACalendarAttendee.display_name"]], "display_name() (pyxa.apps.calendar.xacalendarattendeelist method)": [[11, "PyXA.apps.Calendar.XACalendarAttendeeList.display_name"]], "document (pyxa.apps.calendar.xacalendarwindow property)": [[11, "PyXA.apps.Calendar.XACalendarWindow.document"]], "documents() (pyxa.apps.calendar.xacalendarapplication method)": [[11, "PyXA.apps.Calendar.XACalendarApplication.documents"]], "duplicate() (pyxa.apps.calendar.xacalendarevent method)": [[11, "PyXA.apps.Calendar.XACalendarEvent.duplicate"]], "duplicate_to() (pyxa.apps.calendar.xacalendarevent method)": [[11, "PyXA.apps.Calendar.XACalendarEvent.duplicate_to"]], "email (pyxa.apps.calendar.xacalendarattendee property)": [[11, "PyXA.apps.Calendar.XACalendarAttendee.email"]], "email() (pyxa.apps.calendar.xacalendarattendeelist method)": [[11, "PyXA.apps.Calendar.XACalendarAttendeeList.email"]], "end_date (pyxa.apps.calendar.xacalendarevent property)": [[11, "PyXA.apps.Calendar.XACalendarEvent.end_date"]], "end_date() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.end_date"]], "events() (pyxa.apps.calendar.xacalendarcalendar method)": [[11, "PyXA.apps.Calendar.XACalendarCalendar.events"]], "events() (pyxa.apps.calendar.xacalendarcalendarlist method)": [[11, "PyXA.apps.Calendar.XACalendarCalendarList.events"]], "events_in_range() (pyxa.apps.calendar.xacalendarcalendar method)": [[11, "PyXA.apps.Calendar.XACalendarCalendar.events_in_range"]], "events_today() (pyxa.apps.calendar.xacalendarcalendar method)": [[11, "PyXA.apps.Calendar.XACalendarCalendar.events_today"]], "excluded_dates (pyxa.apps.calendar.xacalendarevent property)": [[11, "PyXA.apps.Calendar.XACalendarEvent.excluded_dates"]], "excluded_dates() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.excluded_dates"]], "file (pyxa.apps.calendar.xacalendarattachment property)": [[11, "PyXA.apps.Calendar.XACalendarAttachment.file"]], "file (pyxa.apps.calendar.xacalendardocument property)": [[11, "PyXA.apps.Calendar.XACalendarDocument.file"]], "file() (pyxa.apps.calendar.xacalendarattachmentlist method)": [[11, "PyXA.apps.Calendar.XACalendarAttachmentList.file"]], "file() (pyxa.apps.calendar.xacalendardocumentlist method)": [[11, "PyXA.apps.Calendar.XACalendarDocumentList.file"]], "file_name (pyxa.apps.calendar.xacalendarattachment property)": [[11, "PyXA.apps.Calendar.XACalendarAttachment.file_name"]], "file_name() (pyxa.apps.calendar.xacalendarattachmentlist method)": [[11, "PyXA.apps.Calendar.XACalendarAttachmentList.file_name"]], "file_path (pyxa.apps.calendar.xacalendaropenfilealarm property)": [[11, "PyXA.apps.Calendar.XACalendarOpenFileAlarm.file_path"]], "frontmost (pyxa.apps.calendar.xacalendarapplication property)": [[11, "PyXA.apps.Calendar.XACalendarApplication.frontmost"]], "location (pyxa.apps.calendar.xacalendarevent property)": [[11, "PyXA.apps.Calendar.XACalendarEvent.location"]], "location() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.location"]], "make() (pyxa.apps.calendar.xacalendarapplication method)": [[11, "PyXA.apps.Calendar.XACalendarApplication.make"]], "modified (pyxa.apps.calendar.xacalendardocument property)": [[11, "PyXA.apps.Calendar.XACalendarDocument.modified"]], "modified() (pyxa.apps.calendar.xacalendardocumentlist method)": [[11, "PyXA.apps.Calendar.XACalendarDocumentList.modified"]], "move_to() (pyxa.apps.calendar.xacalendarevent method)": [[11, "PyXA.apps.Calendar.XACalendarEvent.move_to"]], "name (pyxa.apps.calendar.xacalendarapplication property)": [[11, "PyXA.apps.Calendar.XACalendarApplication.name"]], "name (pyxa.apps.calendar.xacalendarcalendar property)": [[11, "PyXA.apps.Calendar.XACalendarCalendar.name"]], "name (pyxa.apps.calendar.xacalendardocument property)": [[11, "PyXA.apps.Calendar.XACalendarDocument.name"]], "name() (pyxa.apps.calendar.xacalendarcalendarlist method)": [[11, "PyXA.apps.Calendar.XACalendarCalendarList.name"]], "name() (pyxa.apps.calendar.xacalendardocumentlist method)": [[11, "PyXA.apps.Calendar.XACalendarDocumentList.name"]], "new_calendar() (pyxa.apps.calendar.xacalendarapplication method)": [[11, "PyXA.apps.Calendar.XACalendarApplication.new_calendar"]], "new_event() (pyxa.apps.calendar.xacalendarapplication method)": [[11, "PyXA.apps.Calendar.XACalendarApplication.new_event"]], "new_event() (pyxa.apps.calendar.xacalendarcalendar method)": [[11, "PyXA.apps.Calendar.XACalendarCalendar.new_event"]], "open() (pyxa.apps.calendar.xacalendarattachment method)": [[11, "PyXA.apps.Calendar.XACalendarAttachment.open"]], "participation_status (pyxa.apps.calendar.xacalendarattendee property)": [[11, "PyXA.apps.Calendar.XACalendarAttendee.participation_status"]], "participation_status() (pyxa.apps.calendar.xacalendarattendeelist method)": [[11, "PyXA.apps.Calendar.XACalendarAttendeeList.participation_status"]], "properties (pyxa.apps.calendar.xacalendaralarm property)": [[11, "PyXA.apps.Calendar.XACalendarAlarm.properties"]], "properties (pyxa.apps.calendar.xacalendarapplication property)": [[11, "PyXA.apps.Calendar.XACalendarApplication.properties"]], "properties (pyxa.apps.calendar.xacalendarattendee property)": [[11, "PyXA.apps.Calendar.XACalendarAttendee.properties"]], "properties (pyxa.apps.calendar.xacalendarcalendar property)": [[11, "PyXA.apps.Calendar.XACalendarCalendar.properties"]], "properties (pyxa.apps.calendar.xacalendardocument property)": [[11, "PyXA.apps.Calendar.XACalendarDocument.properties"]], "properties (pyxa.apps.calendar.xacalendarevent property)": [[11, "PyXA.apps.Calendar.XACalendarEvent.properties"]], "properties (pyxa.apps.calendar.xacalendarwindow property)": [[11, "PyXA.apps.Calendar.XACalendarWindow.properties"]], "properties() (pyxa.apps.calendar.xacalendarattendeelist method)": [[11, "PyXA.apps.Calendar.XACalendarAttendeeList.properties"]], "properties() (pyxa.apps.calendar.xacalendarcalendarlist method)": [[11, "PyXA.apps.Calendar.XACalendarCalendarList.properties"]], "properties() (pyxa.apps.calendar.xacalendardocumentlist method)": [[11, "PyXA.apps.Calendar.XACalendarDocumentList.properties"]], "properties() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.properties"]], "recurrence (pyxa.apps.calendar.xacalendarevent property)": [[11, "PyXA.apps.Calendar.XACalendarEvent.recurrence"]], "recurrence() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.recurrence"]], "reload_calendars() (pyxa.apps.calendar.xacalendarapplication method)": [[11, "PyXA.apps.Calendar.XACalendarApplication.reload_calendars"]], "sequence (pyxa.apps.calendar.xacalendarevent property)": [[11, "PyXA.apps.Calendar.XACalendarEvent.sequence"]], "sequence() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.sequence"]], "show() (pyxa.apps.calendar.xacalendarevent method)": [[11, "PyXA.apps.Calendar.XACalendarEvent.show"]], "sound_file (pyxa.apps.calendar.xacalendarsoundalarm property)": [[11, "PyXA.apps.Calendar.XACalendarSoundAlarm.sound_file"]], "sound_name (pyxa.apps.calendar.xacalendarsoundalarm property)": [[11, "PyXA.apps.Calendar.XACalendarSoundAlarm.sound_name"]], "stamp_date (pyxa.apps.calendar.xacalendarevent property)": [[11, "PyXA.apps.Calendar.XACalendarEvent.stamp_date"]], "stamp_date() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.stamp_date"]], "start_date (pyxa.apps.calendar.xacalendarevent property)": [[11, "PyXA.apps.Calendar.XACalendarEvent.start_date"]], "start_date() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.start_date"]], "status (pyxa.apps.calendar.xacalendarevent property)": [[11, "PyXA.apps.Calendar.XACalendarEvent.status"]], "status() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.status"]], "subscribe_to() (pyxa.apps.calendar.xacalendarapplication method)": [[11, "PyXA.apps.Calendar.XACalendarApplication.subscribe_to"]], "summary (pyxa.apps.calendar.xacalendarevent property)": [[11, "PyXA.apps.Calendar.XACalendarEvent.summary"]], "summary() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.summary"]], "switch_view_to() (pyxa.apps.calendar.xacalendarapplication method)": [[11, "PyXA.apps.Calendar.XACalendarApplication.switch_view_to"]], "trigger_date (pyxa.apps.calendar.xacalendaralarm property)": [[11, "PyXA.apps.Calendar.XACalendarAlarm.trigger_date"]], "trigger_interval (pyxa.apps.calendar.xacalendaralarm property)": [[11, "PyXA.apps.Calendar.XACalendarAlarm.trigger_interval"]], "type (pyxa.apps.calendar.xacalendarattachment property)": [[11, "PyXA.apps.Calendar.XACalendarAttachment.type"]], "type() (pyxa.apps.calendar.xacalendarattachmentlist method)": [[11, "PyXA.apps.Calendar.XACalendarAttachmentList.type"]], "uid (pyxa.apps.calendar.xacalendarevent property)": [[11, "PyXA.apps.Calendar.XACalendarEvent.uid"]], "uid() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.uid"]], "url (pyxa.apps.calendar.xacalendarattachment property)": [[11, "PyXA.apps.Calendar.XACalendarAttachment.url"]], "url (pyxa.apps.calendar.xacalendarevent property)": [[11, "PyXA.apps.Calendar.XACalendarEvent.url"]], "url() (pyxa.apps.calendar.xacalendarattachmentlist method)": [[11, "PyXA.apps.Calendar.XACalendarAttachmentList.url"]], "url() (pyxa.apps.calendar.xacalendareventlist method)": [[11, "PyXA.apps.Calendar.XACalendarEventList.url"]], "uuid (pyxa.apps.calendar.xacalendarattachment property)": [[11, "PyXA.apps.Calendar.XACalendarAttachment.uuid"]], "uuid() (pyxa.apps.calendar.xacalendarattachmentlist method)": [[11, "PyXA.apps.Calendar.XACalendarAttachmentList.uuid"]], "version (pyxa.apps.calendar.xacalendarapplication property)": [[11, "PyXA.apps.Calendar.XACalendarApplication.version"]], "view_calendar_at() (pyxa.apps.calendar.xacalendarapplication method)": [[11, "PyXA.apps.Calendar.XACalendarApplication.view_calendar_at"]], "week_events() (pyxa.apps.calendar.xacalendarcalendar method)": [[11, "PyXA.apps.Calendar.XACalendarCalendar.week_events"]], "writable (pyxa.apps.calendar.xacalendarcalendar property)": [[11, "PyXA.apps.Calendar.XACalendarCalendar.writable"]], "writable() (pyxa.apps.calendar.xacalendarcalendarlist method)": [[11, "PyXA.apps.Calendar.XACalendarCalendarList.writable"]], "xa_event_obj (pyxa.apps.calendar.xacalendarevent property)": [[11, "PyXA.apps.Calendar.XACalendarEvent.xa_event_obj"]], "fit_height (pyxa.apps.cardhop.xacardhopappplication.zoomtype attribute)": [[12, "PyXA.apps.Cardhop.XACardhopAppplication.ZoomType.FIT_HEIGHT"]], "fit_page (pyxa.apps.cardhop.xacardhopappplication.zoomtype attribute)": [[12, "PyXA.apps.Cardhop.XACardhopAppplication.ZoomType.FIT_PAGE"]], "fit_visible_width (pyxa.apps.cardhop.xacardhopappplication.zoomtype attribute)": [[12, "PyXA.apps.Cardhop.XACardhopAppplication.ZoomType.FIT_VISIBLE_WIDTH"]], "fit_width (pyxa.apps.cardhop.xacardhopappplication.zoomtype attribute)": [[12, "PyXA.apps.Cardhop.XACardhopAppplication.ZoomType.FIT_WIDTH"]], "no_vary (pyxa.apps.cardhop.xacardhopappplication.zoomtype attribute)": [[12, "PyXA.apps.Cardhop.XACardhopAppplication.ZoomType.NO_VARY"]], "pyxa.apps.cardhop": [[12, "module-PyXA.apps.Cardhop"]], "xacardhopappplication (class in pyxa.apps.cardhop)": [[12, "PyXA.apps.Cardhop.XACardhopAppplication"]], "xacardhopappplication.zoomtype (class in pyxa.apps.cardhop)": [[12, "PyXA.apps.Cardhop.XACardhopAppplication.ZoomType"]], "xacardhopdocument (class in pyxa.apps.cardhop)": [[12, "PyXA.apps.Cardhop.XACardhopDocument"]], "xacardhopdocumentlist (class in pyxa.apps.cardhop)": [[12, "PyXA.apps.Cardhop.XACardhopDocumentList"]], "xacardhopwindow (class in pyxa.apps.cardhop)": [[12, "PyXA.apps.Cardhop.XACardhopWindow"]], "by_file() (pyxa.apps.cardhop.xacardhopdocumentlist method)": [[12, "PyXA.apps.Cardhop.XACardhopDocumentList.by_file"]], "by_modified() (pyxa.apps.cardhop.xacardhopdocumentlist method)": [[12, "PyXA.apps.Cardhop.XACardhopDocumentList.by_modified"]], "by_name() (pyxa.apps.cardhop.xacardhopdocumentlist method)": [[12, "PyXA.apps.Cardhop.XACardhopDocumentList.by_name"]], "document (pyxa.apps.cardhop.xacardhopwindow property)": [[12, "PyXA.apps.Cardhop.XACardhopWindow.document"]], "documents() (pyxa.apps.cardhop.xacardhopappplication method)": [[12, "PyXA.apps.Cardhop.XACardhopAppplication.documents"]], "file (pyxa.apps.cardhop.xacardhopdocument property)": [[12, "PyXA.apps.Cardhop.XACardhopDocument.file"]], "file() (pyxa.apps.cardhop.xacardhopdocumentlist method)": [[12, "PyXA.apps.Cardhop.XACardhopDocumentList.file"]], "frontmost (pyxa.apps.cardhop.xacardhopappplication property)": [[12, "PyXA.apps.Cardhop.XACardhopAppplication.frontmost"]], "get_clipboard_representation() (pyxa.apps.cardhop.xacardhopdocumentlist method)": [[12, "PyXA.apps.Cardhop.XACardhopDocumentList.get_clipboard_representation"]], "modified (pyxa.apps.cardhop.xacardhopdocument property)": [[12, "PyXA.apps.Cardhop.XACardhopDocument.modified"]], "modified() (pyxa.apps.cardhop.xacardhopdocumentlist method)": [[12, "PyXA.apps.Cardhop.XACardhopDocumentList.modified"]], "name (pyxa.apps.cardhop.xacardhopappplication property)": [[12, "PyXA.apps.Cardhop.XACardhopAppplication.name"]], "name (pyxa.apps.cardhop.xacardhopdocument property)": [[12, "PyXA.apps.Cardhop.XACardhopDocument.name"]], "name() (pyxa.apps.cardhop.xacardhopdocumentlist method)": [[12, "PyXA.apps.Cardhop.XACardhopDocumentList.name"]], "parse_sentence() (pyxa.apps.cardhop.xacardhopappplication method)": [[12, "PyXA.apps.Cardhop.XACardhopAppplication.parse_sentence"]], "version (pyxa.apps.cardhop.xacardhopappplication property)": [[12, "PyXA.apps.Cardhop.XACardhopAppplication.version"]], "pyxa.apps.chromium": [[13, "module-PyXA.apps.Chromium"]], "xachromiumapplication (class in pyxa.apps.chromium)": [[13, "PyXA.apps.Chromium.XAChromiumApplication"]], "xachromiumbookmarkfolder (class in pyxa.apps.chromium)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkFolder"]], "xachromiumbookmarkfolderlist (class in pyxa.apps.chromium)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkFolderList"]], "xachromiumbookmarkitem (class in pyxa.apps.chromium)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkItem"]], "xachromiumbookmarkitemlist (class in pyxa.apps.chromium)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkItemList"]], "xachromiumtab (class in pyxa.apps.chromium)": [[13, "PyXA.apps.Chromium.XAChromiumTab"]], "xachromiumtablist (class in pyxa.apps.chromium)": [[13, "PyXA.apps.Chromium.XAChromiumTabList"]], "xachromiumwindow (class in pyxa.apps.chromium)": [[13, "PyXA.apps.Chromium.XAChromiumWindow"]], "active_tab (pyxa.apps.chromium.xachromiumwindow property)": [[13, "PyXA.apps.Chromium.XAChromiumWindow.active_tab"]], "active_tab_index (pyxa.apps.chromium.xachromiumwindow property)": [[13, "PyXA.apps.Chromium.XAChromiumWindow.active_tab_index"]], "bookmark_folders() (pyxa.apps.chromium.xachromiumapplication method)": [[13, "PyXA.apps.Chromium.XAChromiumApplication.bookmark_folders"]], "bookmark_folders() (pyxa.apps.chromium.xachromiumbookmarkfolder method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkFolder.bookmark_folders"]], "bookmark_items() (pyxa.apps.chromium.xachromiumbookmarkfolder method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkFolder.bookmark_items"]], "bookmarks_bar (pyxa.apps.chromium.xachromiumapplication property)": [[13, "PyXA.apps.Chromium.XAChromiumApplication.bookmarks_bar"]], "by_id() (pyxa.apps.chromium.xachromiumbookmarkfolderlist method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkFolderList.by_id"]], "by_id() (pyxa.apps.chromium.xachromiumbookmarkitemlist method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkItemList.by_id"]], "by_id() (pyxa.apps.chromium.xachromiumtablist method)": [[13, "PyXA.apps.Chromium.XAChromiumTabList.by_id"]], "by_index() (pyxa.apps.chromium.xachromiumbookmarkfolderlist method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkFolderList.by_index"]], "by_index() (pyxa.apps.chromium.xachromiumbookmarkitemlist method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkItemList.by_index"]], "by_loading() (pyxa.apps.chromium.xachromiumtablist method)": [[13, "PyXA.apps.Chromium.XAChromiumTabList.by_loading"]], "by_title() (pyxa.apps.chromium.xachromiumbookmarkfolderlist method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkFolderList.by_title"]], "by_title() (pyxa.apps.chromium.xachromiumbookmarkitemlist method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkItemList.by_title"]], "by_title() (pyxa.apps.chromium.xachromiumtablist method)": [[13, "PyXA.apps.Chromium.XAChromiumTabList.by_title"]], "by_url() (pyxa.apps.chromium.xachromiumbookmarkitemlist method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkItemList.by_url"]], "by_url() (pyxa.apps.chromium.xachromiumtablist method)": [[13, "PyXA.apps.Chromium.XAChromiumTabList.by_url"]], "close() (pyxa.apps.chromium.xachromiumtab method)": [[13, "PyXA.apps.Chromium.XAChromiumTab.close"]], "copy_selection() (pyxa.apps.chromium.xachromiumtab method)": [[13, "PyXA.apps.Chromium.XAChromiumTab.copy_selection"]], "cut_selection() (pyxa.apps.chromium.xachromiumtab method)": [[13, "PyXA.apps.Chromium.XAChromiumTab.cut_selection"]], "delete() (pyxa.apps.chromium.xachromiumbookmarkfolder method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkFolder.delete"]], "delete() (pyxa.apps.chromium.xachromiumbookmarkitem method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkItem.delete"]], "duplicate_to() (pyxa.apps.chromium.xachromiumtab method)": [[13, "PyXA.apps.Chromium.XAChromiumTab.duplicate_to"]], "execute() (pyxa.apps.chromium.xachromiumtab method)": [[13, "PyXA.apps.Chromium.XAChromiumTab.execute"]], "frontmost (pyxa.apps.chromium.xachromiumapplication property)": [[13, "PyXA.apps.Chromium.XAChromiumApplication.frontmost"]], "get_clipboard_representation() (pyxa.apps.chromium.xachromiumbookmarkfolder method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkFolder.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.chromium.xachromiumbookmarkfolderlist method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkFolderList.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.chromium.xachromiumbookmarkitem method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkItem.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.chromium.xachromiumbookmarkitemlist method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkItemList.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.chromium.xachromiumtab method)": [[13, "PyXA.apps.Chromium.XAChromiumTab.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.chromium.xachromiumtablist method)": [[13, "PyXA.apps.Chromium.XAChromiumTabList.get_clipboard_representation"]], "given_name (pyxa.apps.chromium.xachromiumwindow property)": [[13, "PyXA.apps.Chromium.XAChromiumWindow.given_name"]], "go_back() (pyxa.apps.chromium.xachromiumtab method)": [[13, "PyXA.apps.Chromium.XAChromiumTab.go_back"]], "go_forward() (pyxa.apps.chromium.xachromiumtab method)": [[13, "PyXA.apps.Chromium.XAChromiumTab.go_forward"]], "id (pyxa.apps.chromium.xachromiumbookmarkfolder property)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkFolder.id"]], "id (pyxa.apps.chromium.xachromiumbookmarkitem property)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkItem.id"]], "id (pyxa.apps.chromium.xachromiumtab property)": [[13, "PyXA.apps.Chromium.XAChromiumTab.id"]], "id() (pyxa.apps.chromium.xachromiumbookmarkfolderlist method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkFolderList.id"]], "id() (pyxa.apps.chromium.xachromiumbookmarkitemlist method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkItemList.id"]], "id() (pyxa.apps.chromium.xachromiumtablist method)": [[13, "PyXA.apps.Chromium.XAChromiumTabList.id"]], "index (pyxa.apps.chromium.xachromiumbookmarkfolder property)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkFolder.index"]], "index (pyxa.apps.chromium.xachromiumbookmarkitem property)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkItem.index"]], "index() (pyxa.apps.chromium.xachromiumbookmarkfolderlist method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkFolderList.index"]], "index() (pyxa.apps.chromium.xachromiumbookmarkitemlist method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkItemList.index"]], "loading (pyxa.apps.chromium.xachromiumtab property)": [[13, "PyXA.apps.Chromium.XAChromiumTab.loading"]], "loading() (pyxa.apps.chromium.xachromiumtablist method)": [[13, "PyXA.apps.Chromium.XAChromiumTabList.loading"]], "make() (pyxa.apps.chromium.xachromiumapplication method)": [[13, "PyXA.apps.Chromium.XAChromiumApplication.make"]], "minimizable (pyxa.apps.chromium.xachromiumwindow property)": [[13, "PyXA.apps.Chromium.XAChromiumWindow.minimizable"]], "minimized (pyxa.apps.chromium.xachromiumwindow property)": [[13, "PyXA.apps.Chromium.XAChromiumWindow.minimized"]], "mode (pyxa.apps.chromium.xachromiumwindow property)": [[13, "PyXA.apps.Chromium.XAChromiumWindow.mode"]], "move_to() (pyxa.apps.chromium.xachromiumtab method)": [[13, "PyXA.apps.Chromium.XAChromiumTab.move_to"]], "name (pyxa.apps.chromium.xachromiumapplication property)": [[13, "PyXA.apps.Chromium.XAChromiumApplication.name"]], "new_tab() (pyxa.apps.chromium.xachromiumapplication method)": [[13, "PyXA.apps.Chromium.XAChromiumApplication.new_tab"]], "new_tab() (pyxa.apps.chromium.xachromiumwindow method)": [[13, "PyXA.apps.Chromium.XAChromiumWindow.new_tab"]], "new_window() (pyxa.apps.chromium.xachromiumapplication method)": [[13, "PyXA.apps.Chromium.XAChromiumApplication.new_window"]], "open() (pyxa.apps.chromium.xachromiumapplication method)": [[13, "PyXA.apps.Chromium.XAChromiumApplication.open"]], "other_bookmarks (pyxa.apps.chromium.xachromiumapplication property)": [[13, "PyXA.apps.Chromium.XAChromiumApplication.other_bookmarks"]], "paste_selection() (pyxa.apps.chromium.xachromiumtab method)": [[13, "PyXA.apps.Chromium.XAChromiumTab.paste_selection"]], "print() (pyxa.apps.chromium.xachromiumtab method)": [[13, "PyXA.apps.Chromium.XAChromiumTab.print"]], "redo() (pyxa.apps.chromium.xachromiumtab method)": [[13, "PyXA.apps.Chromium.XAChromiumTab.redo"]], "reload() (pyxa.apps.chromium.xachromiumtab method)": [[13, "PyXA.apps.Chromium.XAChromiumTab.reload"]], "save() (pyxa.apps.chromium.xachromiumtab method)": [[13, "PyXA.apps.Chromium.XAChromiumTab.save"]], "select_all() (pyxa.apps.chromium.xachromiumtab method)": [[13, "PyXA.apps.Chromium.XAChromiumTab.select_all"]], "stop() (pyxa.apps.chromium.xachromiumtab method)": [[13, "PyXA.apps.Chromium.XAChromiumTab.stop"]], "tabs() (pyxa.apps.chromium.xachromiumwindow method)": [[13, "PyXA.apps.Chromium.XAChromiumWindow.tabs"]], "title (pyxa.apps.chromium.xachromiumbookmarkfolder property)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkFolder.title"]], "title (pyxa.apps.chromium.xachromiumbookmarkitem property)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkItem.title"]], "title (pyxa.apps.chromium.xachromiumtab property)": [[13, "PyXA.apps.Chromium.XAChromiumTab.title"]], "title() (pyxa.apps.chromium.xachromiumbookmarkfolderlist method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkFolderList.title"]], "title() (pyxa.apps.chromium.xachromiumbookmarkitemlist method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkItemList.title"]], "title() (pyxa.apps.chromium.xachromiumtablist method)": [[13, "PyXA.apps.Chromium.XAChromiumTabList.title"]], "undo() (pyxa.apps.chromium.xachromiumtab method)": [[13, "PyXA.apps.Chromium.XAChromiumTab.undo"]], "url (pyxa.apps.chromium.xachromiumbookmarkitem property)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkItem.url"]], "url (pyxa.apps.chromium.xachromiumtab property)": [[13, "PyXA.apps.Chromium.XAChromiumTab.url"]], "url() (pyxa.apps.chromium.xachromiumbookmarkitemlist method)": [[13, "PyXA.apps.Chromium.XAChromiumBookmarkItemList.url"]], "url() (pyxa.apps.chromium.xachromiumtablist method)": [[13, "PyXA.apps.Chromium.XAChromiumTabList.url"]], "version (pyxa.apps.chromium.xachromiumapplication property)": [[13, "PyXA.apps.Chromium.XAChromiumApplication.version"]], "view_source() (pyxa.apps.chromium.xachromiumtab method)": [[13, "PyXA.apps.Chromium.XAChromiumTab.view_source"]], "pyxa.apps.console": [[14, "module-PyXA.apps.Console"]], "xaconsoleapplication (class in pyxa.apps.console)": [[14, "PyXA.apps.Console.XAConsoleApplication"]], "select_device() (pyxa.apps.console.xaconsoleapplication method)": [[14, "PyXA.apps.Console.XAConsoleApplication.select_device"]], "aim (pyxa.apps.contacts.xacontactsapplication.servicetype attribute)": [[15, "PyXA.apps.Contacts.XAContactsApplication.ServiceType.AIM"]], "archive (pyxa.apps.contacts.xacontactsapplication.format attribute)": [[15, "PyXA.apps.Contacts.XAContactsApplication.Format.ARCHIVE"]], "facebook (pyxa.apps.contacts.xacontactsapplication.servicetype attribute)": [[15, "PyXA.apps.Contacts.XAContactsApplication.ServiceType.FACEBOOK"]], "gadu_gadu (pyxa.apps.contacts.xacontactsapplication.servicetype attribute)": [[15, "PyXA.apps.Contacts.XAContactsApplication.ServiceType.GADU_GADU"]], "google_talk (pyxa.apps.contacts.xacontactsapplication.servicetype attribute)": [[15, "PyXA.apps.Contacts.XAContactsApplication.ServiceType.GOOGLE_TALK"]], "icq (pyxa.apps.contacts.xacontactsapplication.servicetype attribute)": [[15, "PyXA.apps.Contacts.XAContactsApplication.ServiceType.ICQ"]], "jabber (pyxa.apps.contacts.xacontactsapplication.servicetype attribute)": [[15, "PyXA.apps.Contacts.XAContactsApplication.ServiceType.JABBER"]], "msn (pyxa.apps.contacts.xacontactsapplication.servicetype attribute)": [[15, "PyXA.apps.Contacts.XAContactsApplication.ServiceType.MSN"]], "pyxa.apps.contacts": [[15, "module-PyXA.apps.Contacts"]], "qq (pyxa.apps.contacts.xacontactsapplication.servicetype attribute)": [[15, "PyXA.apps.Contacts.XAContactsApplication.ServiceType.QQ"]], "skype (pyxa.apps.contacts.xacontactsapplication.servicetype attribute)": [[15, "PyXA.apps.Contacts.XAContactsApplication.ServiceType.SKYPE"]], "xacontactsaddress (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsAddress"]], "xacontactsaddresslist (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsAddressList"]], "xacontactsapplication (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsApplication"]], "xacontactsapplication.format (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsApplication.Format"]], "xacontactsapplication.servicetype (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsApplication.ServiceType"]], "xacontactscontactinfo (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsContactInfo"]], "xacontactscontactinfolist (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsContactInfoList"]], "xacontactscustomdate (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsCustomDate"]], "xacontactscustomdatelist (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsCustomDateList"]], "xacontactsdocument (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsDocument"]], "xacontactsdocumentlist (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsDocumentList"]], "xacontactsemail (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsEmail"]], "xacontactsemaillist (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsEmailList"]], "xacontactsentry (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsEntry"]], "xacontactsentrylist (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsEntryList"]], "xacontactsgroup (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsGroup"]], "xacontactsgrouplist (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsGroupList"]], "xacontactsinstantmessage (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsInstantMessage"]], "xacontactsinstantmessagelist (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsInstantMessageList"]], "xacontactsperson (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsPerson"]], "xacontactspersonlist (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsPersonList"]], "xacontactsphone (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsPhone"]], "xacontactsphonelist (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsPhoneList"]], "xacontactsrelatedname (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsRelatedName"]], "xacontactsrelatednamelist (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsRelatedNameList"]], "xacontactssocialprofile (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsSocialProfile"]], "xacontactssocialprofilelist (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsSocialProfileList"]], "xacontactsurl (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsURL"]], "xacontactsurllist (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsURLList"]], "xacontactswindow (class in pyxa.apps.contacts)": [[15, "PyXA.apps.Contacts.XAContactsWindow"]], "yahoo (pyxa.apps.contacts.xacontactsapplication.servicetype attribute)": [[15, "PyXA.apps.Contacts.XAContactsApplication.ServiceType.YAHOO"]], "add_to() (pyxa.apps.contacts.xacontactsentry method)": [[15, "PyXA.apps.Contacts.XAContactsEntry.add_to"]], "addresses() (pyxa.apps.contacts.xacontactsperson method)": [[15, "PyXA.apps.Contacts.XAContactsPerson.addresses"]], "birth_date (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.birth_date"]], "birth_date() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.birth_date"]], "by_birth_date() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_birth_date"]], "by_city() (pyxa.apps.contacts.xacontactsaddresslist method)": [[15, "PyXA.apps.Contacts.XAContactsAddressList.by_city"]], "by_company() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_company"]], "by_country() (pyxa.apps.contacts.xacontactsaddresslist method)": [[15, "PyXA.apps.Contacts.XAContactsAddressList.by_country"]], "by_country_code() (pyxa.apps.contacts.xacontactsaddresslist method)": [[15, "PyXA.apps.Contacts.XAContactsAddressList.by_country_code"]], "by_creation_date() (pyxa.apps.contacts.xacontactsentrylist method)": [[15, "PyXA.apps.Contacts.XAContactsEntryList.by_creation_date"]], "by_department() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_department"]], "by_file() (pyxa.apps.contacts.xacontactsdocumentlist method)": [[15, "PyXA.apps.Contacts.XAContactsDocumentList.by_file"]], "by_first_name() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_first_name"]], "by_formatted_address() (pyxa.apps.contacts.xacontactsaddresslist method)": [[15, "PyXA.apps.Contacts.XAContactsAddressList.by_formatted_address"]], "by_home_page() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_home_page"]], "by_id() (pyxa.apps.contacts.xacontactsaddresslist method)": [[15, "PyXA.apps.Contacts.XAContactsAddressList.by_id"]], "by_id() (pyxa.apps.contacts.xacontactscontactinfolist method)": [[15, "PyXA.apps.Contacts.XAContactsContactInfoList.by_id"]], "by_id() (pyxa.apps.contacts.xacontactsentrylist method)": [[15, "PyXA.apps.Contacts.XAContactsEntryList.by_id"]], "by_id() (pyxa.apps.contacts.xacontactssocialprofilelist method)": [[15, "PyXA.apps.Contacts.XAContactsSocialProfileList.by_id"]], "by_image() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_image"]], "by_job_title() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_job_title"]], "by_label() (pyxa.apps.contacts.xacontactsaddresslist method)": [[15, "PyXA.apps.Contacts.XAContactsAddressList.by_label"]], "by_label() (pyxa.apps.contacts.xacontactscontactinfolist method)": [[15, "PyXA.apps.Contacts.XAContactsContactInfoList.by_label"]], "by_last_name() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_last_name"]], "by_maiden_name() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_maiden_name"]], "by_middle_name() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_middle_name"]], "by_modification_date() (pyxa.apps.contacts.xacontactsentrylist method)": [[15, "PyXA.apps.Contacts.XAContactsEntryList.by_modification_date"]], "by_modified() (pyxa.apps.contacts.xacontactsdocumentlist method)": [[15, "PyXA.apps.Contacts.XAContactsDocumentList.by_modified"]], "by_name() (pyxa.apps.contacts.xacontactsdocumentlist method)": [[15, "PyXA.apps.Contacts.XAContactsDocumentList.by_name"]], "by_name() (pyxa.apps.contacts.xacontactsgrouplist method)": [[15, "PyXA.apps.Contacts.XAContactsGroupList.by_name"]], "by_name() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_name"]], "by_nickname() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_nickname"]], "by_note() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_note"]], "by_organization() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_organization"]], "by_phonetic_first_name() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_phonetic_first_name"]], "by_phonetic_last_name() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_phonetic_last_name"]], "by_phonetic_middle_name() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_phonetic_middle_name"]], "by_selected() (pyxa.apps.contacts.xacontactsentrylist method)": [[15, "PyXA.apps.Contacts.XAContactsEntryList.by_selected"]], "by_service_name() (pyxa.apps.contacts.xacontactsinstantmessagelist method)": [[15, "PyXA.apps.Contacts.XAContactsInstantMessageList.by_service_name"]], "by_service_name() (pyxa.apps.contacts.xacontactssocialprofilelist method)": [[15, "PyXA.apps.Contacts.XAContactsSocialProfileList.by_service_name"]], "by_service_type() (pyxa.apps.contacts.xacontactsinstantmessagelist method)": [[15, "PyXA.apps.Contacts.XAContactsInstantMessageList.by_service_type"]], "by_state() (pyxa.apps.contacts.xacontactsaddresslist method)": [[15, "PyXA.apps.Contacts.XAContactsAddressList.by_state"]], "by_street() (pyxa.apps.contacts.xacontactsaddresslist method)": [[15, "PyXA.apps.Contacts.XAContactsAddressList.by_street"]], "by_suffix() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_suffix"]], "by_title() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_title"]], "by_url() (pyxa.apps.contacts.xacontactssocialprofilelist method)": [[15, "PyXA.apps.Contacts.XAContactsSocialProfileList.by_url"]], "by_user_identifier() (pyxa.apps.contacts.xacontactssocialprofilelist method)": [[15, "PyXA.apps.Contacts.XAContactsSocialProfileList.by_user_identifier"]], "by_user_name() (pyxa.apps.contacts.xacontactsinstantmessagelist method)": [[15, "PyXA.apps.Contacts.XAContactsInstantMessageList.by_user_name"]], "by_user_name() (pyxa.apps.contacts.xacontactssocialprofilelist method)": [[15, "PyXA.apps.Contacts.XAContactsSocialProfileList.by_user_name"]], "by_value() (pyxa.apps.contacts.xacontactscontactinfolist method)": [[15, "PyXA.apps.Contacts.XAContactsContactInfoList.by_value"]], "by_vcard() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.by_vcard"]], "by_zip() (pyxa.apps.contacts.xacontactsaddresslist method)": [[15, "PyXA.apps.Contacts.XAContactsAddressList.by_zip"]], "city (pyxa.apps.contacts.xacontactsaddress property)": [[15, "PyXA.apps.Contacts.XAContactsAddress.city"]], "city() (pyxa.apps.contacts.xacontactsaddresslist method)": [[15, "PyXA.apps.Contacts.XAContactsAddressList.city"]], "company (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.company"]], "company() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.company"]], "country (pyxa.apps.contacts.xacontactsaddress property)": [[15, "PyXA.apps.Contacts.XAContactsAddress.country"]], "country() (pyxa.apps.contacts.xacontactsaddresslist method)": [[15, "PyXA.apps.Contacts.XAContactsAddressList.country"]], "country_code (pyxa.apps.contacts.xacontactsaddress property)": [[15, "PyXA.apps.Contacts.XAContactsAddress.country_code"]], "country_code() (pyxa.apps.contacts.xacontactsaddresslist method)": [[15, "PyXA.apps.Contacts.XAContactsAddressList.country_code"]], "creation_date (pyxa.apps.contacts.xacontactsentry property)": [[15, "PyXA.apps.Contacts.XAContactsEntry.creation_date"]], "creation_date() (pyxa.apps.contacts.xacontactsentrylist method)": [[15, "PyXA.apps.Contacts.XAContactsEntryList.creation_date"]], "custom_dates() (pyxa.apps.contacts.xacontactsperson method)": [[15, "PyXA.apps.Contacts.XAContactsPerson.custom_dates"]], "default_country_code (pyxa.apps.contacts.xacontactsapplication property)": [[15, "PyXA.apps.Contacts.XAContactsApplication.default_country_code"]], "delete() (pyxa.apps.contacts.xacontactsentry method)": [[15, "PyXA.apps.Contacts.XAContactsEntry.delete"]], "department (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.department"]], "department() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.department"]], "document (pyxa.apps.contacts.xacontactswindow property)": [[15, "PyXA.apps.Contacts.XAContactsWindow.document"]], "documents() (pyxa.apps.contacts.xacontactsapplication method)": [[15, "PyXA.apps.Contacts.XAContactsApplication.documents"]], "emails() (pyxa.apps.contacts.xacontactsperson method)": [[15, "PyXA.apps.Contacts.XAContactsPerson.emails"]], "file (pyxa.apps.contacts.xacontactsdocument property)": [[15, "PyXA.apps.Contacts.XAContactsDocument.file"]], "file() (pyxa.apps.contacts.xacontactsdocumentlist method)": [[15, "PyXA.apps.Contacts.XAContactsDocumentList.file"]], "first_name (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.first_name"]], "first_name() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.first_name"]], "formatted_address (pyxa.apps.contacts.xacontactsaddress property)": [[15, "PyXA.apps.Contacts.XAContactsAddress.formatted_address"]], "formatted_address() (pyxa.apps.contacts.xacontactsaddresslist method)": [[15, "PyXA.apps.Contacts.XAContactsAddressList.formatted_address"]], "frontmost (pyxa.apps.contacts.xacontactsapplication property)": [[15, "PyXA.apps.Contacts.XAContactsApplication.frontmost"]], "groups() (pyxa.apps.contacts.xacontactsapplication method)": [[15, "PyXA.apps.Contacts.XAContactsApplication.groups"]], "groups() (pyxa.apps.contacts.xacontactsgroup method)": [[15, "PyXA.apps.Contacts.XAContactsGroup.groups"]], "groups() (pyxa.apps.contacts.xacontactsperson method)": [[15, "PyXA.apps.Contacts.XAContactsPerson.groups"]], "home_page (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.home_page"]], "home_page() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.home_page"]], "id (pyxa.apps.contacts.xacontactsaddress property)": [[15, "PyXA.apps.Contacts.XAContactsAddress.id"]], "id (pyxa.apps.contacts.xacontactscontactinfo property)": [[15, "PyXA.apps.Contacts.XAContactsContactInfo.id"]], "id (pyxa.apps.contacts.xacontactsentry property)": [[15, "PyXA.apps.Contacts.XAContactsEntry.id"]], "id (pyxa.apps.contacts.xacontactssocialprofile property)": [[15, "PyXA.apps.Contacts.XAContactsSocialProfile.id"]], "id() (pyxa.apps.contacts.xacontactsaddresslist method)": [[15, "PyXA.apps.Contacts.XAContactsAddressList.id"]], "id() (pyxa.apps.contacts.xacontactscontactinfolist method)": [[15, "PyXA.apps.Contacts.XAContactsContactInfoList.id"]], "id() (pyxa.apps.contacts.xacontactsentrylist method)": [[15, "PyXA.apps.Contacts.XAContactsEntryList.id"]], "id() (pyxa.apps.contacts.xacontactssocialprofilelist method)": [[15, "PyXA.apps.Contacts.XAContactsSocialProfileList.id"]], "image (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.image"]], "image() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.image"]], "instant_messages() (pyxa.apps.contacts.xacontactsperson method)": [[15, "PyXA.apps.Contacts.XAContactsPerson.instant_messages"]], "job_title (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.job_title"]], "job_title() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.job_title"]], "label (pyxa.apps.contacts.xacontactsaddress property)": [[15, "PyXA.apps.Contacts.XAContactsAddress.label"]], "label (pyxa.apps.contacts.xacontactscontactinfo property)": [[15, "PyXA.apps.Contacts.XAContactsContactInfo.label"]], "label() (pyxa.apps.contacts.xacontactsaddresslist method)": [[15, "PyXA.apps.Contacts.XAContactsAddressList.label"]], "label() (pyxa.apps.contacts.xacontactscontactinfolist method)": [[15, "PyXA.apps.Contacts.XAContactsContactInfoList.label"]], "last_name (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.last_name"]], "last_name() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.last_name"]], "maiden_name (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.maiden_name"]], "maiden_name() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.maiden_name"]], "make() (pyxa.apps.contacts.xacontactsapplication method)": [[15, "PyXA.apps.Contacts.XAContactsApplication.make"]], "middle_name (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.middle_name"]], "middle_name() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.middle_name"]], "modification_date (pyxa.apps.contacts.xacontactsentry property)": [[15, "PyXA.apps.Contacts.XAContactsEntry.modification_date"]], "modification_date() (pyxa.apps.contacts.xacontactsentrylist method)": [[15, "PyXA.apps.Contacts.XAContactsEntryList.modification_date"]], "modified (pyxa.apps.contacts.xacontactsdocument property)": [[15, "PyXA.apps.Contacts.XAContactsDocument.modified"]], "modified() (pyxa.apps.contacts.xacontactsdocumentlist method)": [[15, "PyXA.apps.Contacts.XAContactsDocumentList.modified"]], "my_card (pyxa.apps.contacts.xacontactsapplication property)": [[15, "PyXA.apps.Contacts.XAContactsApplication.my_card"]], "name (pyxa.apps.contacts.xacontactsapplication property)": [[15, "PyXA.apps.Contacts.XAContactsApplication.name"]], "name (pyxa.apps.contacts.xacontactsdocument property)": [[15, "PyXA.apps.Contacts.XAContactsDocument.name"]], "name (pyxa.apps.contacts.xacontactsgroup property)": [[15, "PyXA.apps.Contacts.XAContactsGroup.name"]], "name (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.name"]], "name() (pyxa.apps.contacts.xacontactsdocumentlist method)": [[15, "PyXA.apps.Contacts.XAContactsDocumentList.name"]], "name() (pyxa.apps.contacts.xacontactsgrouplist method)": [[15, "PyXA.apps.Contacts.XAContactsGroupList.name"]], "name() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.name"]], "nickname (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.nickname"]], "nickname() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.nickname"]], "note (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.note"]], "note() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.note"]], "open() (pyxa.apps.contacts.xacontactsapplication method)": [[15, "PyXA.apps.Contacts.XAContactsApplication.open"]], "organization (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.organization"]], "organization() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.organization"]], "people() (pyxa.apps.contacts.xacontactsapplication method)": [[15, "PyXA.apps.Contacts.XAContactsApplication.people"]], "people() (pyxa.apps.contacts.xacontactsgroup method)": [[15, "PyXA.apps.Contacts.XAContactsGroup.people"]], "phones() (pyxa.apps.contacts.xacontactsperson method)": [[15, "PyXA.apps.Contacts.XAContactsPerson.phones"]], "phonetic_first_name (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.phonetic_first_name"]], "phonetic_first_name() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.phonetic_first_name"]], "phonetic_last_name (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.phonetic_last_name"]], "phonetic_last_name() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.phonetic_last_name"]], "phonetic_middle_name (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.phonetic_middle_name"]], "phonetic_middle_name() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.phonetic_middle_name"]], "related_names() (pyxa.apps.contacts.xacontactsperson method)": [[15, "PyXA.apps.Contacts.XAContactsPerson.related_names"]], "remove_from() (pyxa.apps.contacts.xacontactsentry method)": [[15, "PyXA.apps.Contacts.XAContactsEntry.remove_from"]], "save() (pyxa.apps.contacts.xacontactsapplication method)": [[15, "PyXA.apps.Contacts.XAContactsApplication.save"]], "selected (pyxa.apps.contacts.xacontactsentry property)": [[15, "PyXA.apps.Contacts.XAContactsEntry.selected"]], "selected() (pyxa.apps.contacts.xacontactsentrylist method)": [[15, "PyXA.apps.Contacts.XAContactsEntryList.selected"]], "selection (pyxa.apps.contacts.xacontactsapplication property)": [[15, "PyXA.apps.Contacts.XAContactsApplication.selection"]], "service_name (pyxa.apps.contacts.xacontactsinstantmessage property)": [[15, "PyXA.apps.Contacts.XAContactsInstantMessage.service_name"]], "service_name (pyxa.apps.contacts.xacontactssocialprofile property)": [[15, "PyXA.apps.Contacts.XAContactsSocialProfile.service_name"]], "service_name() (pyxa.apps.contacts.xacontactsinstantmessagelist method)": [[15, "PyXA.apps.Contacts.XAContactsInstantMessageList.service_name"]], "service_name() (pyxa.apps.contacts.xacontactssocialprofilelist method)": [[15, "PyXA.apps.Contacts.XAContactsSocialProfileList.service_name"]], "service_type (pyxa.apps.contacts.xacontactsinstantmessage property)": [[15, "PyXA.apps.Contacts.XAContactsInstantMessage.service_type"]], "service_type() (pyxa.apps.contacts.xacontactsinstantmessagelist method)": [[15, "PyXA.apps.Contacts.XAContactsInstantMessageList.service_type"]], "show() (pyxa.apps.contacts.xacontactsperson method)": [[15, "PyXA.apps.Contacts.XAContactsPerson.show"]], "social_profiles() (pyxa.apps.contacts.xacontactsperson method)": [[15, "PyXA.apps.Contacts.XAContactsPerson.social_profiles"]], "state (pyxa.apps.contacts.xacontactsaddress property)": [[15, "PyXA.apps.Contacts.XAContactsAddress.state"]], "state() (pyxa.apps.contacts.xacontactsaddresslist method)": [[15, "PyXA.apps.Contacts.XAContactsAddressList.state"]], "street (pyxa.apps.contacts.xacontactsaddress property)": [[15, "PyXA.apps.Contacts.XAContactsAddress.street"]], "street() (pyxa.apps.contacts.xacontactsaddresslist method)": [[15, "PyXA.apps.Contacts.XAContactsAddressList.street"]], "suffix (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.suffix"]], "suffix() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.suffix"]], "title (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.title"]], "title() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.title"]], "unsaved (pyxa.apps.contacts.xacontactsapplication property)": [[15, "PyXA.apps.Contacts.XAContactsApplication.unsaved"]], "url (pyxa.apps.contacts.xacontactssocialprofile property)": [[15, "PyXA.apps.Contacts.XAContactsSocialProfile.url"]], "url() (pyxa.apps.contacts.xacontactssocialprofilelist method)": [[15, "PyXA.apps.Contacts.XAContactsSocialProfileList.url"]], "urls() (pyxa.apps.contacts.xacontactsperson method)": [[15, "PyXA.apps.Contacts.XAContactsPerson.urls"]], "user_identifier (pyxa.apps.contacts.xacontactssocialprofile property)": [[15, "PyXA.apps.Contacts.XAContactsSocialProfile.user_identifier"]], "user_identifier() (pyxa.apps.contacts.xacontactssocialprofilelist method)": [[15, "PyXA.apps.Contacts.XAContactsSocialProfileList.user_identifier"]], "user_name (pyxa.apps.contacts.xacontactsinstantmessage property)": [[15, "PyXA.apps.Contacts.XAContactsInstantMessage.user_name"]], "user_name (pyxa.apps.contacts.xacontactssocialprofile property)": [[15, "PyXA.apps.Contacts.XAContactsSocialProfile.user_name"]], "user_name() (pyxa.apps.contacts.xacontactsinstantmessagelist method)": [[15, "PyXA.apps.Contacts.XAContactsInstantMessageList.user_name"]], "user_name() (pyxa.apps.contacts.xacontactssocialprofilelist method)": [[15, "PyXA.apps.Contacts.XAContactsSocialProfileList.user_name"]], "value (pyxa.apps.contacts.xacontactscontactinfo property)": [[15, "PyXA.apps.Contacts.XAContactsContactInfo.value"]], "value() (pyxa.apps.contacts.xacontactscontactinfolist method)": [[15, "PyXA.apps.Contacts.XAContactsContactInfoList.value"]], "vcard (pyxa.apps.contacts.xacontactsperson property)": [[15, "PyXA.apps.Contacts.XAContactsPerson.vcard"]], "vcard() (pyxa.apps.contacts.xacontactspersonlist method)": [[15, "PyXA.apps.Contacts.XAContactsPersonList.vcard"]], "version (pyxa.apps.contacts.xacontactsapplication property)": [[15, "PyXA.apps.Contacts.XAContactsApplication.version"]], "zip (pyxa.apps.contacts.xacontactsaddress property)": [[15, "PyXA.apps.Contacts.XAContactsAddress.zip"]], "zip() (pyxa.apps.contacts.xacontactsaddresslist method)": [[15, "PyXA.apps.Contacts.XAContactsAddressList.zip"]], "dcscopytextdefinition() (in module pyxa.apps.dictionary)": [[16, "PyXA.apps.Dictionary.DCSCopyTextDefinition"]], "pyxa.apps.dictionary": [[16, "module-PyXA.apps.Dictionary"]], "xadictionaryapplication (class in pyxa.apps.dictionary)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication"]], "define() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.define"]], "fullscreen() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.fullscreen"]], "go_back() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.go_back"]], "go_forward() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.go_forward"]], "new_tab() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.new_tab"]], "new_window() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.new_window"]], "open_about_panel() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.open_about_panel"]], "open_dictionaries_folder() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.open_dictionaries_folder"]], "open_preferences() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.open_preferences"]], "paste() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.paste"]], "print() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.print"]], "search() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.search"]], "search_all() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.search_all"]], "search_apple_dictionary() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.search_apple_dictionary"]], "search_new_oxford() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.search_new_oxford"]], "search_oxford_thesaurus() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.search_oxford_thesaurus"]], "search_wikipedia() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.search_wikipedia"]], "show_help() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.show_help"]], "start_dictation() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.start_dictation"]], "switch_to_all() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.switch_to_all"]], "switch_to_apple_dictionary() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.switch_to_apple_dictionary"]], "switch_to_new_oxford() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.switch_to_new_oxford"]], "switch_to_oxford_thesaurus() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.switch_to_oxford_thesaurus"]], "switch_to_wikipedia() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.switch_to_wikipedia"]], "view_front_back_matter() (pyxa.apps.dictionary.xadictionaryapplication method)": [[16, "PyXA.apps.Dictionary.XADictionaryApplication.view_front_back_matter"]], "pyxa.apps.drafts": [[17, "module-PyXA.apps.Drafts"]], "xadraftsapplication (class in pyxa.apps.drafts)": [[17, "PyXA.apps.Drafts.XADraftsApplication"]], "xadraftsdraft (class in pyxa.apps.drafts)": [[17, "PyXA.apps.Drafts.XADraftsDraft"]], "xadraftsdraftlist (class in pyxa.apps.drafts)": [[17, "PyXA.apps.Drafts.XADraftsDraftList"]], "accessed_at (pyxa.apps.drafts.xadraftsdraft property)": [[17, "PyXA.apps.Drafts.XADraftsDraft.accessed_at"]], "accessed_at() (pyxa.apps.drafts.xadraftsdraftlist method)": [[17, "PyXA.apps.Drafts.XADraftsDraftList.accessed_at"]], "by_accessed_at() (pyxa.apps.drafts.xadraftsdraftlist method)": [[17, "PyXA.apps.Drafts.XADraftsDraftList.by_accessed_at"]], "by_content() (pyxa.apps.drafts.xadraftsdraftlist method)": [[17, "PyXA.apps.Drafts.XADraftsDraftList.by_content"]], "by_created_at() (pyxa.apps.drafts.xadraftsdraftlist method)": [[17, "PyXA.apps.Drafts.XADraftsDraftList.by_created_at"]], "by_flagged() (pyxa.apps.drafts.xadraftsdraftlist method)": [[17, "PyXA.apps.Drafts.XADraftsDraftList.by_flagged"]], "by_id() (pyxa.apps.drafts.xadraftsdraftlist method)": [[17, "PyXA.apps.Drafts.XADraftsDraftList.by_id"]], "by_modified_at() (pyxa.apps.drafts.xadraftsdraftlist method)": [[17, "PyXA.apps.Drafts.XADraftsDraftList.by_modified_at"]], "by_name() (pyxa.apps.drafts.xadraftsdraftlist method)": [[17, "PyXA.apps.Drafts.XADraftsDraftList.by_name"]], "by_permalink() (pyxa.apps.drafts.xadraftsdraftlist method)": [[17, "PyXA.apps.Drafts.XADraftsDraftList.by_permalink"]], "by_tags() (pyxa.apps.drafts.xadraftsdraftlist method)": [[17, "PyXA.apps.Drafts.XADraftsDraftList.by_tags"]], "content (pyxa.apps.drafts.xadraftsdraft property)": [[17, "PyXA.apps.Drafts.XADraftsDraft.content"]], "content() (pyxa.apps.drafts.xadraftsdraftlist method)": [[17, "PyXA.apps.Drafts.XADraftsDraftList.content"]], "created_at (pyxa.apps.drafts.xadraftsdraft property)": [[17, "PyXA.apps.Drafts.XADraftsDraft.created_at"]], "created_at() (pyxa.apps.drafts.xadraftsdraftlist method)": [[17, "PyXA.apps.Drafts.XADraftsDraftList.created_at"]], "drafts() (pyxa.apps.drafts.xadraftsapplication method)": [[17, "PyXA.apps.Drafts.XADraftsApplication.drafts"]], "flagged (pyxa.apps.drafts.xadraftsdraft property)": [[17, "PyXA.apps.Drafts.XADraftsDraft.flagged"]], "flagged() (pyxa.apps.drafts.xadraftsdraftlist method)": [[17, "PyXA.apps.Drafts.XADraftsDraftList.flagged"]], "id (pyxa.apps.drafts.xadraftsdraft property)": [[17, "PyXA.apps.Drafts.XADraftsDraft.id"]], "id() (pyxa.apps.drafts.xadraftsdraftlist method)": [[17, "PyXA.apps.Drafts.XADraftsDraftList.id"]], "make() (pyxa.apps.drafts.xadraftsapplication method)": [[17, "PyXA.apps.Drafts.XADraftsApplication.make"]], "modified_at (pyxa.apps.drafts.xadraftsdraft property)": [[17, "PyXA.apps.Drafts.XADraftsDraft.modified_at"]], "modified_at() (pyxa.apps.drafts.xadraftsdraftlist method)": [[17, "PyXA.apps.Drafts.XADraftsDraftList.modified_at"]], "name (pyxa.apps.drafts.xadraftsapplication property)": [[17, "PyXA.apps.Drafts.XADraftsApplication.name"]], "name (pyxa.apps.drafts.xadraftsdraft property)": [[17, "PyXA.apps.Drafts.XADraftsDraft.name"]], "name() (pyxa.apps.drafts.xadraftsdraftlist method)": [[17, "PyXA.apps.Drafts.XADraftsDraftList.name"]], "new_draft() (pyxa.apps.drafts.xadraftsapplication method)": [[17, "PyXA.apps.Drafts.XADraftsApplication.new_draft"]], "permalink (pyxa.apps.drafts.xadraftsdraft property)": [[17, "PyXA.apps.Drafts.XADraftsDraft.permalink"]], "permalink() (pyxa.apps.drafts.xadraftsdraftlist method)": [[17, "PyXA.apps.Drafts.XADraftsDraftList.permalink"]], "tags (pyxa.apps.drafts.xadraftsdraft property)": [[17, "PyXA.apps.Drafts.XADraftsDraft.tags"]], "tags() (pyxa.apps.drafts.xadraftsdraftlist method)": [[17, "PyXA.apps.Drafts.XADraftsDraftList.tags"]], "version (pyxa.apps.drafts.xadraftsapplication property)": [[17, "PyXA.apps.Drafts.XADraftsApplication.version"]], "pyxa.apps.fantastical": [[18, "module-PyXA.apps.Fantastical"]], "xafantasticalapplication (class in pyxa.apps.fantastical)": [[18, "PyXA.apps.Fantastical.XAFantasticalApplication"]], "xafantasticalcalendar (class in pyxa.apps.fantastical)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendar"]], "xafantasticalcalendarevent (class in pyxa.apps.fantastical)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarEvent"]], "xafantasticalcalendaritem (class in pyxa.apps.fantastical)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItem"]], "xafantasticalcalendaritemlist (class in pyxa.apps.fantastical)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItemList"]], "xafantasticalcalendarlist (class in pyxa.apps.fantastical)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarList"]], "xafantasticaldocument (class in pyxa.apps.fantastical)": [[18, "PyXA.apps.Fantastical.XAFantasticalDocument"]], "xafantasticaldocumentlist (class in pyxa.apps.fantastical)": [[18, "PyXA.apps.Fantastical.XAFantasticalDocumentList"]], "xafantasticalselectedcalendaritem (class in pyxa.apps.fantastical)": [[18, "PyXA.apps.Fantastical.XAFantasticalSelectedCalendarItem"]], "xafantasticalselectedcalendaritemlist (class in pyxa.apps.fantastical)": [[18, "PyXA.apps.Fantastical.XAFantasticalSelectedCalendarItemList"]], "xafantasticaltaskitem (class in pyxa.apps.fantastical)": [[18, "PyXA.apps.Fantastical.XAFantasticalTaskItem"]], "xafantasticalwindow (class in pyxa.apps.fantastical)": [[18, "PyXA.apps.Fantastical.XAFantasticalWindow"]], "by_end_date() (pyxa.apps.fantastical.xafantasticalcalendaritemlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItemList.by_end_date"]], "by_file() (pyxa.apps.fantastical.xafantasticaldocumentlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalDocumentList.by_file"]], "by_id() (pyxa.apps.fantastical.xafantasticalcalendaritemlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItemList.by_id"]], "by_id() (pyxa.apps.fantastical.xafantasticalcalendarlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarList.by_id"]], "by_is_all_day() (pyxa.apps.fantastical.xafantasticalcalendaritemlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItemList.by_is_all_day"]], "by_is_recurring() (pyxa.apps.fantastical.xafantasticalcalendaritemlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItemList.by_is_recurring"]], "by_modified() (pyxa.apps.fantastical.xafantasticaldocumentlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalDocumentList.by_modified"]], "by_name() (pyxa.apps.fantastical.xafantasticaldocumentlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalDocumentList.by_name"]], "by_notes() (pyxa.apps.fantastical.xafantasticalcalendaritemlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItemList.by_notes"]], "by_show_url() (pyxa.apps.fantastical.xafantasticalcalendaritemlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItemList.by_show_url"]], "by_start_date() (pyxa.apps.fantastical.xafantasticalcalendaritemlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItemList.by_start_date"]], "by_title() (pyxa.apps.fantastical.xafantasticalcalendaritemlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItemList.by_title"]], "by_title() (pyxa.apps.fantastical.xafantasticalcalendarlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarList.by_title"]], "by_url() (pyxa.apps.fantastical.xafantasticalcalendaritemlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItemList.by_url"]], "calendars() (pyxa.apps.fantastical.xafantasticalapplication method)": [[18, "PyXA.apps.Fantastical.XAFantasticalApplication.calendars"]], "document (pyxa.apps.fantastical.xafantasticalwindow property)": [[18, "PyXA.apps.Fantastical.XAFantasticalWindow.document"]], "documents() (pyxa.apps.fantastical.xafantasticalapplication method)": [[18, "PyXA.apps.Fantastical.XAFantasticalApplication.documents"]], "end_date (pyxa.apps.fantastical.xafantasticalcalendaritem property)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItem.end_date"]], "end_date() (pyxa.apps.fantastical.xafantasticalcalendaritemlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItemList.end_date"]], "file (pyxa.apps.fantastical.xafantasticaldocument property)": [[18, "PyXA.apps.Fantastical.XAFantasticalDocument.file"]], "file() (pyxa.apps.fantastical.xafantasticaldocumentlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalDocumentList.file"]], "frontmost (pyxa.apps.fantastical.xafantasticalapplication property)": [[18, "PyXA.apps.Fantastical.XAFantasticalApplication.frontmost"]], "get_clipboard_representation() (pyxa.apps.fantastical.xafantasticaldocument method)": [[18, "PyXA.apps.Fantastical.XAFantasticalDocument.get_clipboard_representation"]], "id (pyxa.apps.fantastical.xafantasticalcalendar property)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendar.id"]], "id (pyxa.apps.fantastical.xafantasticalcalendaritem property)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItem.id"]], "id() (pyxa.apps.fantastical.xafantasticalcalendaritemlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItemList.id"]], "id() (pyxa.apps.fantastical.xafantasticalcalendarlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarList.id"]], "is_all_day (pyxa.apps.fantastical.xafantasticalcalendaritem property)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItem.is_all_day"]], "is_all_day() (pyxa.apps.fantastical.xafantasticalcalendaritemlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItemList.is_all_day"]], "is_recurring (pyxa.apps.fantastical.xafantasticalcalendaritem property)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItem.is_recurring"]], "is_recurring() (pyxa.apps.fantastical.xafantasticalcalendaritemlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItemList.is_recurring"]], "location (pyxa.apps.fantastical.xafantasticalcalendarevent property)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarEvent.location"]], "modified (pyxa.apps.fantastical.xafantasticaldocument property)": [[18, "PyXA.apps.Fantastical.XAFantasticalDocument.modified"]], "modified() (pyxa.apps.fantastical.xafantasticaldocumentlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalDocumentList.modified"]], "name (pyxa.apps.fantastical.xafantasticalapplication property)": [[18, "PyXA.apps.Fantastical.XAFantasticalApplication.name"]], "name (pyxa.apps.fantastical.xafantasticaldocument property)": [[18, "PyXA.apps.Fantastical.XAFantasticalDocument.name"]], "name() (pyxa.apps.fantastical.xafantasticaldocumentlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalDocumentList.name"]], "notes (pyxa.apps.fantastical.xafantasticalcalendaritem property)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItem.notes"]], "notes() (pyxa.apps.fantastical.xafantasticalcalendaritemlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItemList.notes"]], "parse_sentence() (pyxa.apps.fantastical.xafantasticalapplication method)": [[18, "PyXA.apps.Fantastical.XAFantasticalApplication.parse_sentence"]], "print() (pyxa.apps.fantastical.xafantasticaldocument method)": [[18, "PyXA.apps.Fantastical.XAFantasticalDocument.print"]], "priority (pyxa.apps.fantastical.xafantasticaltaskitem property)": [[18, "PyXA.apps.Fantastical.XAFantasticalTaskItem.priority"]], "save() (pyxa.apps.fantastical.xafantasticalcalendaritem method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItem.save"]], "selected_calendar_items() (pyxa.apps.fantastical.xafantasticalapplication method)": [[18, "PyXA.apps.Fantastical.XAFantasticalApplication.selected_calendar_items"]], "show_calendar_view() (pyxa.apps.fantastical.xafantasticalapplication method)": [[18, "PyXA.apps.Fantastical.XAFantasticalApplication.show_calendar_view"]], "show_mini_view() (pyxa.apps.fantastical.xafantasticalapplication method)": [[18, "PyXA.apps.Fantastical.XAFantasticalApplication.show_mini_view"]], "show_url (pyxa.apps.fantastical.xafantasticalcalendaritem property)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItem.show_url"]], "show_url() (pyxa.apps.fantastical.xafantasticalcalendaritemlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItemList.show_url"]], "start_date (pyxa.apps.fantastical.xafantasticalcalendaritem property)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItem.start_date"]], "start_date() (pyxa.apps.fantastical.xafantasticalcalendaritemlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItemList.start_date"]], "title (pyxa.apps.fantastical.xafantasticalcalendar property)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendar.title"]], "title (pyxa.apps.fantastical.xafantasticalcalendaritem property)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItem.title"]], "title() (pyxa.apps.fantastical.xafantasticalcalendaritemlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItemList.title"]], "title() (pyxa.apps.fantastical.xafantasticalcalendarlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarList.title"]], "url (pyxa.apps.fantastical.xafantasticalcalendaritem property)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItem.url"]], "url() (pyxa.apps.fantastical.xafantasticalcalendaritemlist method)": [[18, "PyXA.apps.Fantastical.XAFantasticalCalendarItemList.url"]], "version (pyxa.apps.fantastical.xafantasticalapplication property)": [[18, "PyXA.apps.Fantastical.XAFantasticalApplication.version"]], "advanced_preferences (pyxa.apps.finder.xafinderapplication.panel attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Panel.ADVANCED_PREFERENCES"]], "apfs (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.APFS"]], "apple_photo (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.APPLE_PHOTO"]], "apple_share (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.APPLE_SHARE"]], "application (pyxa.apps.finder.xafinderapplication.panel attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Panel.APPLICATION"]], "audio (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.AUDIO"]], "bottom (pyxa.apps.finder.xafinderapplication.labelposition attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.LabelPosition.BOTTOM"]], "burning (pyxa.apps.finder.xafinderapplication.panel attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Panel.BURNING"]], "by_creation_date (pyxa.apps.finder.xafinderapplication.arrangement attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Arrangement.BY_CREATION_DATE"]], "by_kind (pyxa.apps.finder.xafinderapplication.arrangement attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Arrangement.BY_KIND"]], "by_label (pyxa.apps.finder.xafinderapplication.arrangement attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Arrangement.BY_LABEL"]], "by_modification_date (pyxa.apps.finder.xafinderapplication.arrangement attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Arrangement.BY_MODIFICATION_DATE"]], "by_name (pyxa.apps.finder.xafinderapplication.arrangement attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Arrangement.BY_NAME"]], "by_size (pyxa.apps.finder.xafinderapplication.arrangement attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Arrangement.BY_SIZE"]], "column_view (pyxa.apps.finder.xafinderapplication.viewsetting attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ViewSetting.COLUMN_VIEW"]], "comment (pyxa.apps.finder.xafinderapplication.columnname attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ColumnName.COMMENT"]], "comments (pyxa.apps.finder.xafinderapplication.panel attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Panel.COMMENTS"]], "content_index (pyxa.apps.finder.xafinderapplication.panel attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Panel.CONTENT_INDEX"]], "creation_date (pyxa.apps.finder.xafinderapplication.columnname attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ColumnName.CREATION_DATE"]], "exfat (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.EXFAT"]], "flow_view (pyxa.apps.finder.xafinderapplication.viewsetting attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ViewSetting.FLOW_VIEW"]], "ftp (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.FTP"]], "general_information (pyxa.apps.finder.xafinderapplication.panel attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Panel.GENERAL_INFORMATION"]], "general_preferences (pyxa.apps.finder.xafinderapplication.panel attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Panel.GENERAL_PREFERENCES"]], "group_view (pyxa.apps.finder.xafinderapplication.viewsetting attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ViewSetting.GROUP_VIEW"]], "high_sierra (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.HIGH_SIERRA"]], "icon_view (pyxa.apps.finder.xafinderapplication.viewsetting attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ViewSetting.ICON_VIEW"]], "iso9660 (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.ISO9660"]], "kind (pyxa.apps.finder.xafinderapplication.columnname attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ColumnName.KIND"]], "label (pyxa.apps.finder.xafinderapplication.columnname attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ColumnName.LABEL"]], "label_preferences (pyxa.apps.finder.xafinderapplication.panel attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Panel.LABEL_PREFERENCES"]], "languages (pyxa.apps.finder.xafinderapplication.panel attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Panel.LANGUAGES"]], "large (pyxa.apps.finder.xafinderapplication.iconsize attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.IconSize.LARGE"]], "list_view (pyxa.apps.finder.xafinderapplication.viewsetting attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ViewSetting.LIST_VIEW"]], "macos (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.MACOS"]], "macos_extended (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.MACOS_EXTENDED"]], "memory (pyxa.apps.finder.xafinderapplication.panel attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Panel.MEMORY"]], "modificate_date (pyxa.apps.finder.xafinderapplication.columnname attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ColumnName.MODIFICATE_DATE"]], "more_info (pyxa.apps.finder.xafinderapplication.panel attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Panel.MORE_INFO"]], "msdos (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.MSDOS"]], "name (pyxa.apps.finder.xafinderapplication.columnname attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ColumnName.NAME"]], "name_extension (pyxa.apps.finder.xafinderapplication.panel attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Panel.NAME_EXTENSION"]], "nfs (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.NFS"]], "none (pyxa.apps.finder.xafinderapplication.privacysetting attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.PrivacySetting.NONE"]], "normal (pyxa.apps.finder.xafinderapplication.sortdirection attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.SortDirection.NORMAL"]], "not_arranged (pyxa.apps.finder.xafinderapplication.arrangement attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Arrangement.NOT_ARRANGED"]], "ntfs (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.NTFS"]], "packet_written_udf (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.PACKET_WRITTEN_UDF"]], "plugins (pyxa.apps.finder.xafinderapplication.panel attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Panel.PLUGINS"]], "preview (pyxa.apps.finder.xafinderapplication.panel attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Panel.PREVIEW"]], "pro_dos (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.PRO_DOS"]], "pyxa.apps.finder": [[19, "module-PyXA.apps.Finder"]], "quicktake (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.QUICKTAKE"]], "read_only (pyxa.apps.finder.xafinderapplication.privacysetting attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.PrivacySetting.READ_ONLY"]], "read_write (pyxa.apps.finder.xafinderapplication.privacysetting attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.PrivacySetting.READ_WRITE"]], "reversed (pyxa.apps.finder.xafinderapplication.sortdirection attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.SortDirection.REVERSED"]], "right (pyxa.apps.finder.xafinderapplication.labelposition attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.LabelPosition.RIGHT"]], "sharing (pyxa.apps.finder.xafinderapplication.panel attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Panel.SHARING"]], "sidebar_preferences (pyxa.apps.finder.xafinderapplication.panel attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Panel.SIDEBAR_PREFERENCES"]], "simple_header (pyxa.apps.finder.xafinderapplication.panel attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Panel.SIMPLE_HEADER"]], "size (pyxa.apps.finder.xafinderapplication.columnname attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ColumnName.SIZE"]], "small (pyxa.apps.finder.xafinderapplication.iconsize attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.IconSize.SMALL"]], "smb (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.SMB"]], "snap_to_grid (pyxa.apps.finder.xafinderapplication.arrangement attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.Arrangement.SNAP_TO_GRID"]], "udf (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.UDF"]], "ufs (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.UFS"]], "unknown (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.UNKNOWN"]], "version (pyxa.apps.finder.xafinderapplication.columnname attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ColumnName.VERSION"]], "webdav (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.WEBDAV"]], "write_only (pyxa.apps.finder.xafinderapplication.privacysetting attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.PrivacySetting.WRITE_ONLY"]], "xafinderaliasfile (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderAliasFile"]], "xafinderaliasfilelist (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderAliasFileList"]], "xafinderapplication (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderApplication"]], "xafinderapplication.arrangement (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderApplication.Arrangement"]], "xafinderapplication.columnname (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderApplication.ColumnName"]], "xafinderapplication.iconsize (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderApplication.IconSize"]], "xafinderapplication.itemformat (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat"]], "xafinderapplication.labelposition (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderApplication.LabelPosition"]], "xafinderapplication.panel (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderApplication.Panel"]], "xafinderapplication.privacysetting (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderApplication.PrivacySetting"]], "xafinderapplication.sortdirection (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderApplication.SortDirection"]], "xafinderapplication.viewsetting (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderApplication.ViewSetting"]], "xafinderapplicationfile (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderApplicationFile"]], "xafinderapplicationfilelist (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderApplicationFileList"]], "xafinderclipping (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderClipping"]], "xafinderclippinglist (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderClippingList"]], "xafinderclippingwindow (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderClippingWindow"]], "xafinderclippingwindowlist (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderClippingWindowList"]], "xafindercolumn (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderColumn"]], "xafindercolumnlist (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderColumnList"]], "xafindercolumnviewoptions (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderColumnViewOptions"]], "xafindercomputer (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderComputer"]], "xafindercontainer (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderContainer"]], "xafindercontainerlist (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderContainerList"]], "xafinderdesktop (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderDesktop"]], "xafinderdesktopwindow (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderDesktopWindow"]], "xafinderdisk (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderDisk"]], "xafinderdisklist (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderDiskList"]], "xafinderdocumentfile (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderDocumentFile"]], "xafinderdocumentfilelist (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderDocumentFileList"]], "xafinderfile (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderFile"]], "xafinderfilelist (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderFileList"]], "xafinderfinderwindow (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderFinderWindow"]], "xafinderfinderwindowlist (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderFinderWindowList"]], "xafinderfolder (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderFolder"]], "xafinderfolderlist (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderFolderList"]], "xafindericonviewoptions (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderIconViewOptions"]], "xafinderinformationwindow (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderInformationWindow"]], "xafinderinformationwindowlist (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderInformationWindowList"]], "xafinderinternetlocationfile (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderInternetLocationFile"]], "xafinderinternetlocationfilelist (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderInternetLocationFileList"]], "xafinderitem (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderItem"]], "xafinderitemlist (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderItemList"]], "xafinderlistviewoptions (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderListViewOptions"]], "xafinderpackage (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderPackage"]], "xafinderpackagelist (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderPackageList"]], "xafinderpreferences (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderPreferences"]], "xafinderpreferenceswindow (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderPreferencesWindow"]], "xafindertrash (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderTrash"]], "xafinderwindow (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderWindow"]], "xafinderwindowlist (class in pyxa.apps.finder)": [[19, "PyXA.apps.Finder.XAFinderWindowList"]], "xsan (pyxa.apps.finder.xafinderapplication.itemformat attribute)": [[19, "PyXA.apps.Finder.XAFinderApplication.ItemFormat.XSAN"]], "alias_files() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.alias_files"]], "alias_files() (pyxa.apps.finder.xafindercontainer method)": [[19, "PyXA.apps.Finder.XAFinderContainer.alias_files"]], "alias_files() (pyxa.apps.finder.xafindercontainerlist method)": [[19, "PyXA.apps.Finder.XAFinderContainerList.alias_files"]], "all_name_extensions_showing (pyxa.apps.finder.xafinderpreferences property)": [[19, "PyXA.apps.Finder.XAFinderPreferences.all_name_extensions_showing"]], "application_files() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.application_files"]], "application_files() (pyxa.apps.finder.xafindercontainer method)": [[19, "PyXA.apps.Finder.XAFinderContainer.application_files"]], "application_files() (pyxa.apps.finder.xafindercontainerlist method)": [[19, "PyXA.apps.Finder.XAFinderContainerList.application_files"]], "applications_directory() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.applications_directory"]], "arrangement (pyxa.apps.finder.xafindericonviewoptions property)": [[19, "PyXA.apps.Finder.XAFinderIconViewOptions.arrangement"]], "background_color (pyxa.apps.finder.xafindericonviewoptions property)": [[19, "PyXA.apps.Finder.XAFinderIconViewOptions.background_color"]], "background_picture (pyxa.apps.finder.xafindericonviewoptions property)": [[19, "PyXA.apps.Finder.XAFinderIconViewOptions.background_picture"]], "bounds (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.bounds"]], "bounds() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.bounds"]], "by_bounds() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_bounds"]], "by_capacity() (pyxa.apps.finder.xafinderdisklist method)": [[19, "PyXA.apps.Finder.XAFinderDiskList.by_capacity"]], "by_collapsed() (pyxa.apps.finder.xafinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderWindowList.by_collapsed"]], "by_column_view_options() (pyxa.apps.finder.xafinderfinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderFinderWindowList.by_column_view_options"]], "by_comment() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_comment"]], "by_container() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_container"]], "by_container_window() (pyxa.apps.finder.xafindercontainerlist method)": [[19, "PyXA.apps.Finder.XAFinderContainerList.by_container_window"]], "by_creation_date() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_creation_date"]], "by_creator_type() (pyxa.apps.finder.xafinderfilelist method)": [[19, "PyXA.apps.Finder.XAFinderFileList.by_creator_type"]], "by_current_panel() (pyxa.apps.finder.xafinderinformationwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderInformationWindowList.by_current_panel"]], "by_current_view() (pyxa.apps.finder.xafinderfinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderFinderWindowList.by_current_view"]], "by_description() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_description"]], "by_desktop_position() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_desktop_position"]], "by_disk() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_disk"]], "by_displayed_name() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_displayed_name"]], "by_ejectable() (pyxa.apps.finder.xafinderdisklist method)": [[19, "PyXA.apps.Finder.XAFinderDiskList.by_ejectable"]], "by_entire_contents() (pyxa.apps.finder.xafindercontainerlist method)": [[19, "PyXA.apps.Finder.XAFinderContainerList.by_entire_contents"]], "by_everyone_privileges() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_everyone_privileges"]], "by_extension_hidden() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_extension_hidden"]], "by_file_type() (pyxa.apps.finder.xafinderfilelist method)": [[19, "PyXA.apps.Finder.XAFinderFileList.by_file_type"]], "by_floating() (pyxa.apps.finder.xafinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderWindowList.by_floating"]], "by_format() (pyxa.apps.finder.xafinderdisklist method)": [[19, "PyXA.apps.Finder.XAFinderDiskList.by_format"]], "by_free_space() (pyxa.apps.finder.xafinderdisklist method)": [[19, "PyXA.apps.Finder.XAFinderDiskList.by_free_space"]], "by_group() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_group"]], "by_group_privileges() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_group_privileges"]], "by_has_scripting_terminology() (pyxa.apps.finder.xafinderapplicationfilelist method)": [[19, "PyXA.apps.Finder.XAFinderApplicationFileList.by_has_scripting_terminology"]], "by_icon() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_icon"]], "by_icon_view_options() (pyxa.apps.finder.xafinderfinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderFinderWindowList.by_icon_view_options"]], "by_id() (pyxa.apps.finder.xafinderapplicationfilelist method)": [[19, "PyXA.apps.Finder.XAFinderApplicationFileList.by_id"]], "by_id() (pyxa.apps.finder.xafinderdisklist method)": [[19, "PyXA.apps.Finder.XAFinderDiskList.by_id"]], "by_ignore_privileges() (pyxa.apps.finder.xafinderdisklist method)": [[19, "PyXA.apps.Finder.XAFinderDiskList.by_ignore_privileges"]], "by_index() (pyxa.apps.finder.xafindercolumnlist method)": [[19, "PyXA.apps.Finder.XAFinderColumnList.by_index"]], "by_index() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_index"]], "by_information_window() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_information_window"]], "by_item() (pyxa.apps.finder.xafinderinformationwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderInformationWindowList.by_item"]], "by_journaling_enabled() (pyxa.apps.finder.xafinderdisklist method)": [[19, "PyXA.apps.Finder.XAFinderDiskList.by_journaling_enabled"]], "by_kind() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_kind"]], "by_label_index() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_label_index"]], "by_list_view_options() (pyxa.apps.finder.xafinderfinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderFinderWindowList.by_list_view_options"]], "by_local_volume() (pyxa.apps.finder.xafinderdisklist method)": [[19, "PyXA.apps.Finder.XAFinderDiskList.by_local_volume"]], "by_location() (pyxa.apps.finder.xafinderinternetlocationfilelist method)": [[19, "PyXA.apps.Finder.XAFinderInternetLocationFileList.by_location"]], "by_locked() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_locked"]], "by_maximum_width() (pyxa.apps.finder.xafindercolumnlist method)": [[19, "PyXA.apps.Finder.XAFinderColumnList.by_maximum_width"]], "by_minimum_width() (pyxa.apps.finder.xafindercolumnlist method)": [[19, "PyXA.apps.Finder.XAFinderColumnList.by_minimum_width"]], "by_modal() (pyxa.apps.finder.xafinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderWindowList.by_modal"]], "by_modification_date() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_modification_date"]], "by_name() (pyxa.apps.finder.xafindercolumnlist method)": [[19, "PyXA.apps.Finder.XAFinderColumnList.by_name"]], "by_name() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_name"]], "by_name_extension() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_name_extension"]], "by_original_item() (pyxa.apps.finder.xafinderaliasfilelist method)": [[19, "PyXA.apps.Finder.XAFinderAliasFileList.by_original_item"]], "by_owner() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_owner"]], "by_owner_privileges() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_owner_privileges"]], "by_pathbar_visible() (pyxa.apps.finder.xafinderfinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderFinderWindowList.by_pathbar_visible"]], "by_physical_size() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_physical_size"]], "by_position() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_position"]], "by_position() (pyxa.apps.finder.xafinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderWindowList.by_position"]], "by_product_version() (pyxa.apps.finder.xafinderfilelist method)": [[19, "PyXA.apps.Finder.XAFinderFileList.by_product_version"]], "by_properties() (pyxa.apps.finder.xafinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderWindowList.by_properties"]], "by_sidebar_width() (pyxa.apps.finder.xafinderfinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderFinderWindowList.by_sidebar_width"]], "by_size() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_size"]], "by_sort_direction() (pyxa.apps.finder.xafindercolumnlist method)": [[19, "PyXA.apps.Finder.XAFinderColumnList.by_sort_direction"]], "by_startup() (pyxa.apps.finder.xafinderdisklist method)": [[19, "PyXA.apps.Finder.XAFinderDiskList.by_startup"]], "by_stationery() (pyxa.apps.finder.xafinderfilelist method)": [[19, "PyXA.apps.Finder.XAFinderFileList.by_stationery"]], "by_statusbar_visible() (pyxa.apps.finder.xafinderfinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderFinderWindowList.by_statusbar_visible"]], "by_target() (pyxa.apps.finder.xafinderfinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderFinderWindowList.by_target"]], "by_titled() (pyxa.apps.finder.xafinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderWindowList.by_titled"]], "by_toolbar_visible() (pyxa.apps.finder.xafinderfinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderFinderWindowList.by_toolbar_visible"]], "by_url() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.by_url"]], "by_version() (pyxa.apps.finder.xafinderfilelist method)": [[19, "PyXA.apps.Finder.XAFinderFileList.by_version"]], "by_visible() (pyxa.apps.finder.xafindercolumnlist method)": [[19, "PyXA.apps.Finder.XAFinderColumnList.by_visible"]], "by_width() (pyxa.apps.finder.xafindercolumnlist method)": [[19, "PyXA.apps.Finder.XAFinderColumnList.by_width"]], "calculates_folder_sizes (pyxa.apps.finder.xafinderlistviewoptions property)": [[19, "PyXA.apps.Finder.XAFinderListViewOptions.calculates_folder_sizes"]], "capacity (pyxa.apps.finder.xafinderdisk property)": [[19, "PyXA.apps.Finder.XAFinderDisk.capacity"]], "capacity() (pyxa.apps.finder.xafinderdisklist method)": [[19, "PyXA.apps.Finder.XAFinderDiskList.capacity"]], "clipping_windows() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.clipping_windows"]], "clippings() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.clippings"]], "clippings() (pyxa.apps.finder.xafindercontainer method)": [[19, "PyXA.apps.Finder.XAFinderContainer.clippings"]], "clippings() (pyxa.apps.finder.xafindercontainerlist method)": [[19, "PyXA.apps.Finder.XAFinderContainerList.clippings"]], "collapsed (pyxa.apps.finder.xafinderwindow property)": [[19, "PyXA.apps.Finder.XAFinderWindow.collapsed"]], "collapsed() (pyxa.apps.finder.xafinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderWindowList.collapsed"]], "column_view_options (pyxa.apps.finder.xafinderfinderwindow property)": [[19, "PyXA.apps.Finder.XAFinderFinderWindow.column_view_options"]], "column_view_options (pyxa.apps.finder.xafinderpreferences property)": [[19, "PyXA.apps.Finder.XAFinderPreferences.column_view_options"]], "column_view_options() (pyxa.apps.finder.xafinderfinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderFinderWindowList.column_view_options"]], "columns() (pyxa.apps.finder.xafinderlistviewoptions method)": [[19, "PyXA.apps.Finder.XAFinderListViewOptions.columns"]], "comment (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.comment"]], "comment() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.comment"]], "computer_container (pyxa.apps.finder.xafinderapplication property)": [[19, "PyXA.apps.Finder.XAFinderApplication.computer_container"]], "container (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.container"]], "container() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.container"]], "container_window (pyxa.apps.finder.xafindercontainer property)": [[19, "PyXA.apps.Finder.XAFinderContainer.container_window"]], "container_window() (pyxa.apps.finder.xafindercontainerlist method)": [[19, "PyXA.apps.Finder.XAFinderContainerList.container_window"]], "containers() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.containers"]], "containers() (pyxa.apps.finder.xafindercontainer method)": [[19, "PyXA.apps.Finder.XAFinderContainer.containers"]], "containers() (pyxa.apps.finder.xafindercontainerlist method)": [[19, "PyXA.apps.Finder.XAFinderContainerList.containers"]], "copy() (pyxa.apps.finder.xafinderitem method)": [[19, "PyXA.apps.Finder.XAFinderItem.copy"]], "creation_date (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.creation_date"]], "creation_date() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.creation_date"]], "creator_type (pyxa.apps.finder.xafinderfile property)": [[19, "PyXA.apps.Finder.XAFinderFile.creator_type"]], "creator_type() (pyxa.apps.finder.xafinderfilelist method)": [[19, "PyXA.apps.Finder.XAFinderFileList.creator_type"]], "current_panel (pyxa.apps.finder.xafinderinformationwindow property)": [[19, "PyXA.apps.Finder.XAFinderInformationWindow.current_panel"]], "current_panel (pyxa.apps.finder.xafinderpreferenceswindow property)": [[19, "PyXA.apps.Finder.XAFinderPreferencesWindow.current_panel"]], "current_panel() (pyxa.apps.finder.xafinderinformationwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderInformationWindowList.current_panel"]], "current_view (pyxa.apps.finder.xafinderfinderwindow property)": [[19, "PyXA.apps.Finder.XAFinderFinderWindow.current_view"]], "current_view() (pyxa.apps.finder.xafinderfinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderFinderWindowList.current_view"]], "delay_before_springing (pyxa.apps.finder.xafinderpreferences property)": [[19, "PyXA.apps.Finder.XAFinderPreferences.delay_before_springing"]], "delete_item() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.delete_item"]], "delete_items() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.delete_items"]], "description (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.description"]], "description() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.description"]], "desktop (pyxa.apps.finder.xafinderapplication property)": [[19, "PyXA.apps.Finder.XAFinderApplication.desktop"]], "desktop_picture (pyxa.apps.finder.xafinderapplication property)": [[19, "PyXA.apps.Finder.XAFinderApplication.desktop_picture"]], "desktop_position (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.desktop_position"]], "desktop_position() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.desktop_position"]], "desktop_shows_connected_servers (pyxa.apps.finder.xafinderpreferences property)": [[19, "PyXA.apps.Finder.XAFinderPreferences.desktop_shows_connected_servers"]], "desktop_shows_external_hard_disks (pyxa.apps.finder.xafinderpreferences property)": [[19, "PyXA.apps.Finder.XAFinderPreferences.desktop_shows_external_hard_disks"]], "desktop_shows_hard_disks (pyxa.apps.finder.xafinderpreferences property)": [[19, "PyXA.apps.Finder.XAFinderPreferences.desktop_shows_hard_disks"]], "desktop_shows_removable_media (pyxa.apps.finder.xafinderpreferences property)": [[19, "PyXA.apps.Finder.XAFinderPreferences.desktop_shows_removable_media"]], "directory() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.directory"]], "discloses_preview_pane (pyxa.apps.finder.xafindercolumnviewoptions property)": [[19, "PyXA.apps.Finder.XAFinderColumnViewOptions.discloses_preview_pane"]], "disk (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.disk"]], "disk() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.disk"]], "disks() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.disks"]], "displayed_name (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.displayed_name"]], "displayed_name() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.displayed_name"]], "document_files() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.document_files"]], "document_files() (pyxa.apps.finder.xafindercontainer method)": [[19, "PyXA.apps.Finder.XAFinderContainer.document_files"]], "document_files() (pyxa.apps.finder.xafindercontainerlist method)": [[19, "PyXA.apps.Finder.XAFinderContainerList.document_files"]], "documents_directory() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.documents_directory"]], "downloads_directory() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.downloads_directory"]], "duplicate_item() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.duplicate_item"]], "duplicate_items() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.duplicate_items"]], "ejectable (pyxa.apps.finder.xafinderdisk property)": [[19, "PyXA.apps.Finder.XAFinderDisk.ejectable"]], "ejectable() (pyxa.apps.finder.xafinderdisklist method)": [[19, "PyXA.apps.Finder.XAFinderDiskList.ejectable"]], "empty_trash() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.empty_trash"]], "entire_contents (pyxa.apps.finder.xafindercontainer property)": [[19, "PyXA.apps.Finder.XAFinderContainer.entire_contents"]], "entire_contents() (pyxa.apps.finder.xafindercontainerlist method)": [[19, "PyXA.apps.Finder.XAFinderContainerList.entire_contents"]], "everyone_privileges (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.everyone_privileges"]], "everyone_privileges() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.everyone_privileges"]], "exists() (pyxa.apps.finder.xafinderitem method)": [[19, "PyXA.apps.Finder.XAFinderItem.exists"]], "extension_hidden (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.extension_hidden"]], "extension_hidden() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.extension_hidden"]], "file_type (pyxa.apps.finder.xafinderfile property)": [[19, "PyXA.apps.Finder.XAFinderFile.file_type"]], "file_type() (pyxa.apps.finder.xafinderfilelist method)": [[19, "PyXA.apps.Finder.XAFinderFileList.file_type"]], "files() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.files"]], "files() (pyxa.apps.finder.xafindercontainer method)": [[19, "PyXA.apps.Finder.XAFinderContainer.files"]], "files() (pyxa.apps.finder.xafindercontainerlist method)": [[19, "PyXA.apps.Finder.XAFinderContainerList.files"]], "finder_preferences (pyxa.apps.finder.xafinderapplication property)": [[19, "PyXA.apps.Finder.XAFinderApplication.finder_preferences"]], "finder_windows() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.finder_windows"]], "floating (pyxa.apps.finder.xafinderwindow property)": [[19, "PyXA.apps.Finder.XAFinderWindow.floating"]], "floating() (pyxa.apps.finder.xafinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderWindowList.floating"]], "folders() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.folders"]], "folders() (pyxa.apps.finder.xafindercontainer method)": [[19, "PyXA.apps.Finder.XAFinderContainer.folders"]], "folders() (pyxa.apps.finder.xafindercontainerlist method)": [[19, "PyXA.apps.Finder.XAFinderContainerList.folders"]], "folders_open_in_new_tabs (pyxa.apps.finder.xafinderpreferences property)": [[19, "PyXA.apps.Finder.XAFinderPreferences.folders_open_in_new_tabs"]], "folders_open_in_new_windows (pyxa.apps.finder.xafinderpreferences property)": [[19, "PyXA.apps.Finder.XAFinderPreferences.folders_open_in_new_windows"]], "folders_spring_open (pyxa.apps.finder.xafinderpreferences property)": [[19, "PyXA.apps.Finder.XAFinderPreferences.folders_spring_open"]], "format (pyxa.apps.finder.xafinderdisk property)": [[19, "PyXA.apps.Finder.XAFinderDisk.format"]], "format() (pyxa.apps.finder.xafinderdisklist method)": [[19, "PyXA.apps.Finder.XAFinderDiskList.format"]], "free_space (pyxa.apps.finder.xafinderdisk property)": [[19, "PyXA.apps.Finder.XAFinderDisk.free_space"]], "free_space() (pyxa.apps.finder.xafinderdisklist method)": [[19, "PyXA.apps.Finder.XAFinderDiskList.free_space"]], "frontmost (pyxa.apps.finder.xafinderapplication property)": [[19, "PyXA.apps.Finder.XAFinderApplication.frontmost"]], "get_clipboard_representation() (pyxa.apps.finder.xafinderitem method)": [[19, "PyXA.apps.Finder.XAFinderItem.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.get_clipboard_representation"]], "get_labels() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.get_labels"]], "group (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.group"]], "group() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.group"]], "group_privileges (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.group_privileges"]], "group_privileges() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.group_privileges"]], "has_scripting_terminology (pyxa.apps.finder.xafinderapplicationfile property)": [[19, "PyXA.apps.Finder.XAFinderApplicationFile.has_scripting_terminology"]], "has_scripting_terminology() (pyxa.apps.finder.xafinderapplicationfilelist method)": [[19, "PyXA.apps.Finder.XAFinderApplicationFileList.has_scripting_terminology"]], "home (pyxa.apps.finder.xafinderapplication property)": [[19, "PyXA.apps.Finder.XAFinderApplication.home"]], "home_directory() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.home_directory"]], "icon (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.icon"]], "icon() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.icon"]], "icon_size (pyxa.apps.finder.xafindericonviewoptions property)": [[19, "PyXA.apps.Finder.XAFinderIconViewOptions.icon_size"]], "icon_size (pyxa.apps.finder.xafinderlistviewoptions property)": [[19, "PyXA.apps.Finder.XAFinderListViewOptions.icon_size"]], "icon_view_options (pyxa.apps.finder.xafinderfinderwindow property)": [[19, "PyXA.apps.Finder.XAFinderFinderWindow.icon_view_options"]], "icon_view_options (pyxa.apps.finder.xafinderpreferences property)": [[19, "PyXA.apps.Finder.XAFinderPreferences.icon_view_options"]], "icon_view_options() (pyxa.apps.finder.xafinderfinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderFinderWindowList.icon_view_options"]], "id (pyxa.apps.finder.xafinderapplicationfile property)": [[19, "PyXA.apps.Finder.XAFinderApplicationFile.id"]], "id (pyxa.apps.finder.xafinderdisk property)": [[19, "PyXA.apps.Finder.XAFinderDisk.id"]], "id() (pyxa.apps.finder.xafinderapplicationfilelist method)": [[19, "PyXA.apps.Finder.XAFinderApplicationFileList.id"]], "id() (pyxa.apps.finder.xafinderdisklist method)": [[19, "PyXA.apps.Finder.XAFinderDiskList.id"]], "ignore_privileges (pyxa.apps.finder.xafinderdisk property)": [[19, "PyXA.apps.Finder.XAFinderDisk.ignore_privileges"]], "ignore_privileges() (pyxa.apps.finder.xafinderdisklist method)": [[19, "PyXA.apps.Finder.XAFinderDiskList.ignore_privileges"]], "index (pyxa.apps.finder.xafindercolumn property)": [[19, "PyXA.apps.Finder.XAFinderColumn.index"]], "index (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.index"]], "index() (pyxa.apps.finder.xafindercolumnlist method)": [[19, "PyXA.apps.Finder.XAFinderColumnList.index"]], "index() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.index"]], "information_window (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.information_window"]], "information_window() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.information_window"]], "insertion_location (pyxa.apps.finder.xafinderapplication property)": [[19, "PyXA.apps.Finder.XAFinderApplication.insertion_location"]], "internet_location_files() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.internet_location_files"]], "internet_location_files() (pyxa.apps.finder.xafindercontainer method)": [[19, "PyXA.apps.Finder.XAFinderContainer.internet_location_files"]], "internet_location_files() (pyxa.apps.finder.xafindercontainerlist method)": [[19, "PyXA.apps.Finder.XAFinderContainerList.internet_location_files"]], "item (pyxa.apps.finder.xafinderinformationwindow property)": [[19, "PyXA.apps.Finder.XAFinderInformationWindow.item"]], "item() (pyxa.apps.finder.xafinderinformationwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderInformationWindowList.item"]], "items() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.items"]], "items() (pyxa.apps.finder.xafindercontainer method)": [[19, "PyXA.apps.Finder.XAFinderContainer.items"]], "items() (pyxa.apps.finder.xafindercontainerlist method)": [[19, "PyXA.apps.Finder.XAFinderContainerList.items"]], "journaling_enabled (pyxa.apps.finder.xafinderdisk property)": [[19, "PyXA.apps.Finder.XAFinderDisk.journaling_enabled"]], "journaling_enabled() (pyxa.apps.finder.xafinderdisklist method)": [[19, "PyXA.apps.Finder.XAFinderDiskList.journaling_enabled"]], "kind (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.kind"]], "kind() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.kind"]], "label_index (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.label_index"]], "label_index() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.label_index"]], "label_position (pyxa.apps.finder.xafindericonviewoptions property)": [[19, "PyXA.apps.Finder.XAFinderIconViewOptions.label_position"]], "list_view_options (pyxa.apps.finder.xafinderfinderwindow property)": [[19, "PyXA.apps.Finder.XAFinderFinderWindow.list_view_options"]], "list_view_options (pyxa.apps.finder.xafinderpreferences property)": [[19, "PyXA.apps.Finder.XAFinderPreferences.list_view_options"]], "list_view_options() (pyxa.apps.finder.xafinderfinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderFinderWindowList.list_view_options"]], "local_volume (pyxa.apps.finder.xafinderdisk property)": [[19, "PyXA.apps.Finder.XAFinderDisk.local_volume"]], "local_volume() (pyxa.apps.finder.xafinderdisklist method)": [[19, "PyXA.apps.Finder.XAFinderDiskList.local_volume"]], "location (pyxa.apps.finder.xafinderinternetlocationfile property)": [[19, "PyXA.apps.Finder.XAFinderInternetLocationFile.location"]], "location() (pyxa.apps.finder.xafinderinternetlocationfilelist method)": [[19, "PyXA.apps.Finder.XAFinderInternetLocationFileList.location"]], "locked (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.locked"]], "locked() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.locked"]], "maximum_width (pyxa.apps.finder.xafindercolumn property)": [[19, "PyXA.apps.Finder.XAFinderColumn.maximum_width"]], "maximum_width() (pyxa.apps.finder.xafindercolumnlist method)": [[19, "PyXA.apps.Finder.XAFinderColumnList.maximum_width"]], "minimum_width (pyxa.apps.finder.xafindercolumn property)": [[19, "PyXA.apps.Finder.XAFinderColumn.minimum_width"]], "minimum_width() (pyxa.apps.finder.xafindercolumnlist method)": [[19, "PyXA.apps.Finder.XAFinderColumnList.minimum_width"]], "modal (pyxa.apps.finder.xafinderwindow property)": [[19, "PyXA.apps.Finder.XAFinderWindow.modal"]], "modal() (pyxa.apps.finder.xafinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderWindowList.modal"]], "modification_date (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.modification_date"]], "modification_date() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.modification_date"]], "move_to() (pyxa.apps.finder.xafinderitem method)": [[19, "PyXA.apps.Finder.XAFinderItem.move_to"]], "movies_directory() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.movies_directory"]], "music_directory() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.music_directory"]], "name (pyxa.apps.finder.xafinderapplication property)": [[19, "PyXA.apps.Finder.XAFinderApplication.name"]], "name (pyxa.apps.finder.xafindercolumn property)": [[19, "PyXA.apps.Finder.XAFinderColumn.name"]], "name (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.name"]], "name() (pyxa.apps.finder.xafindercolumnlist method)": [[19, "PyXA.apps.Finder.XAFinderColumnList.name"]], "name() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.name"]], "name_extension (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.name_extension"]], "name_extension() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.name_extension"]], "new_window_target (pyxa.apps.finder.xafinderpreferences property)": [[19, "PyXA.apps.Finder.XAFinderPreferences.new_window_target"]], "new_windows_open_in_column_view (pyxa.apps.finder.xafinderpreferences property)": [[19, "PyXA.apps.Finder.XAFinderPreferences.new_windows_open_in_column_view"]], "open() (pyxa.apps.finder.xafinderitem method)": [[19, "PyXA.apps.Finder.XAFinderItem.open"]], "original_item (pyxa.apps.finder.xafinderaliasfile property)": [[19, "PyXA.apps.Finder.XAFinderAliasFile.original_item"]], "original_item() (pyxa.apps.finder.xafinderaliasfilelist method)": [[19, "PyXA.apps.Finder.XAFinderAliasFileList.original_item"]], "owner (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.owner"]], "owner() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.owner"]], "owner_privileges (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.owner_privileges"]], "owner_privileges() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.owner_privileges"]], "packages() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.packages"]], "packages() (pyxa.apps.finder.xafindercontainer method)": [[19, "PyXA.apps.Finder.XAFinderContainer.packages"]], "packages() (pyxa.apps.finder.xafindercontainerlist method)": [[19, "PyXA.apps.Finder.XAFinderContainerList.packages"]], "pathbar_visible (pyxa.apps.finder.xafinderfinderwindow property)": [[19, "PyXA.apps.Finder.XAFinderFinderWindow.pathbar_visible"]], "pathbar_visible() (pyxa.apps.finder.xafinderfinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderFinderWindowList.pathbar_visible"]], "physical_size (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.physical_size"]], "physical_size() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.physical_size"]], "pictures_directory() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.pictures_directory"]], "position (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.position"]], "position (pyxa.apps.finder.xafinderwindow property)": [[19, "PyXA.apps.Finder.XAFinderWindow.position"]], "position() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.position"]], "position() (pyxa.apps.finder.xafinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderWindowList.position"]], "product_version (pyxa.apps.finder.xafinderapplication property)": [[19, "PyXA.apps.Finder.XAFinderApplication.product_version"]], "product_version (pyxa.apps.finder.xafinderfile property)": [[19, "PyXA.apps.Finder.XAFinderFile.product_version"]], "product_version() (pyxa.apps.finder.xafinderfilelist method)": [[19, "PyXA.apps.Finder.XAFinderFileList.product_version"]], "properties (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.properties"]], "properties (pyxa.apps.finder.xafinderwindow property)": [[19, "PyXA.apps.Finder.XAFinderWindow.properties"]], "properties() (pyxa.apps.finder.xafinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderWindowList.properties"]], "public_directory() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.public_directory"]], "recycle_item() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.recycle_item"]], "recycle_items() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.recycle_items"]], "reveal() (pyxa.apps.finder.xafinderitem method)": [[19, "PyXA.apps.Finder.XAFinderItem.reveal"]], "search() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.search"]], "select_item() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.select_item"]], "select_items() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.select_items"]], "selection (pyxa.apps.finder.xafinderapplication property)": [[19, "PyXA.apps.Finder.XAFinderApplication.selection"]], "shows_icon (pyxa.apps.finder.xafindercolumnviewoptions property)": [[19, "PyXA.apps.Finder.XAFinderColumnViewOptions.shows_icon"]], "shows_icon_preview (pyxa.apps.finder.xafindercolumnviewoptions property)": [[19, "PyXA.apps.Finder.XAFinderColumnViewOptions.shows_icon_preview"]], "shows_icon_preview (pyxa.apps.finder.xafindericonviewoptions property)": [[19, "PyXA.apps.Finder.XAFinderIconViewOptions.shows_icon_preview"]], "shows_icon_preview (pyxa.apps.finder.xafinderlistviewoptions property)": [[19, "PyXA.apps.Finder.XAFinderListViewOptions.shows_icon_preview"]], "shows_item_info (pyxa.apps.finder.xafindericonviewoptions property)": [[19, "PyXA.apps.Finder.XAFinderIconViewOptions.shows_item_info"]], "shows_preview_column (pyxa.apps.finder.xafindercolumnviewoptions property)": [[19, "PyXA.apps.Finder.XAFinderColumnViewOptions.shows_preview_column"]], "sidebar_width (pyxa.apps.finder.xafinderfinderwindow property)": [[19, "PyXA.apps.Finder.XAFinderFinderWindow.sidebar_width"]], "sidebar_width() (pyxa.apps.finder.xafinderfinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderFinderWindowList.sidebar_width"]], "size (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.size"]], "size() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.size"]], "sort_column (pyxa.apps.finder.xafinderlistviewoptions property)": [[19, "PyXA.apps.Finder.XAFinderListViewOptions.sort_column"]], "sort_direction (pyxa.apps.finder.xafindercolumn property)": [[19, "PyXA.apps.Finder.XAFinderColumn.sort_direction"]], "sort_direction() (pyxa.apps.finder.xafindercolumnlist method)": [[19, "PyXA.apps.Finder.XAFinderColumnList.sort_direction"]], "startup (pyxa.apps.finder.xafinderdisk property)": [[19, "PyXA.apps.Finder.XAFinderDisk.startup"]], "startup() (pyxa.apps.finder.xafinderdisklist method)": [[19, "PyXA.apps.Finder.XAFinderDiskList.startup"]], "startup_disk (pyxa.apps.finder.xafinderapplication property)": [[19, "PyXA.apps.Finder.XAFinderApplication.startup_disk"]], "stationery (pyxa.apps.finder.xafinderfile property)": [[19, "PyXA.apps.Finder.XAFinderFile.stationery"]], "stationery() (pyxa.apps.finder.xafinderfilelist method)": [[19, "PyXA.apps.Finder.XAFinderFileList.stationery"]], "statusbar_visible (pyxa.apps.finder.xafinderfinderwindow property)": [[19, "PyXA.apps.Finder.XAFinderFinderWindow.statusbar_visible"]], "statusbar_visible() (pyxa.apps.finder.xafinderfinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderFinderWindowList.statusbar_visible"]], "target (pyxa.apps.finder.xafinderfinderwindow property)": [[19, "PyXA.apps.Finder.XAFinderFinderWindow.target"]], "target() (pyxa.apps.finder.xafinderfinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderFinderWindowList.target"]], "temp_directory() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.temp_directory"]], "text_size (pyxa.apps.finder.xafindercolumnviewoptions property)": [[19, "PyXA.apps.Finder.XAFinderColumnViewOptions.text_size"]], "text_size (pyxa.apps.finder.xafindericonviewoptions property)": [[19, "PyXA.apps.Finder.XAFinderIconViewOptions.text_size"]], "text_size (pyxa.apps.finder.xafinderlistviewoptions property)": [[19, "PyXA.apps.Finder.XAFinderListViewOptions.text_size"]], "titled (pyxa.apps.finder.xafinderwindow property)": [[19, "PyXA.apps.Finder.XAFinderWindow.titled"]], "titled() (pyxa.apps.finder.xafinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderWindowList.titled"]], "toolbar_visible (pyxa.apps.finder.xafinderfinderwindow property)": [[19, "PyXA.apps.Finder.XAFinderFinderWindow.toolbar_visible"]], "toolbar_visible() (pyxa.apps.finder.xafinderfinderwindowlist method)": [[19, "PyXA.apps.Finder.XAFinderFinderWindowList.toolbar_visible"]], "trash (pyxa.apps.finder.xafinderapplication property)": [[19, "PyXA.apps.Finder.XAFinderApplication.trash"]], "trash_directory() (pyxa.apps.finder.xafinderapplication method)": [[19, "PyXA.apps.Finder.XAFinderApplication.trash_directory"]], "url (pyxa.apps.finder.xafinderitem property)": [[19, "PyXA.apps.Finder.XAFinderItem.url"]], "url() (pyxa.apps.finder.xafinderitemlist method)": [[19, "PyXA.apps.Finder.XAFinderItemList.url"]], "uses_relative_dates (pyxa.apps.finder.xafinderlistviewoptions property)": [[19, "PyXA.apps.Finder.XAFinderListViewOptions.uses_relative_dates"]], "version (pyxa.apps.finder.xafinderapplication property)": [[19, "PyXA.apps.Finder.XAFinderApplication.version"]], "version (pyxa.apps.finder.xafinderfile property)": [[19, "PyXA.apps.Finder.XAFinderFile.version"]], "version() (pyxa.apps.finder.xafinderfilelist method)": [[19, "PyXA.apps.Finder.XAFinderFileList.version"]], "visible (pyxa.apps.finder.xafinderapplication property)": [[19, "PyXA.apps.Finder.XAFinderApplication.visible"]], "visible (pyxa.apps.finder.xafindercolumn property)": [[19, "PyXA.apps.Finder.XAFinderColumn.visible"]], "visible() (pyxa.apps.finder.xafindercolumnlist method)": [[19, "PyXA.apps.Finder.XAFinderColumnList.visible"]], "warns_before_emptying (pyxa.apps.finder.xafindertrash property)": [[19, "PyXA.apps.Finder.XAFinderTrash.warns_before_emptying"]], "width (pyxa.apps.finder.xafindercolumn property)": [[19, "PyXA.apps.Finder.XAFinderColumn.width"]], "width() (pyxa.apps.finder.xafindercolumnlist method)": [[19, "PyXA.apps.Finder.XAFinderColumnList.width"]], "window (pyxa.apps.finder.xafinderdesktop property)": [[19, "PyXA.apps.Finder.XAFinderDesktop.window"]], "window (pyxa.apps.finder.xafinderpreferences property)": [[19, "PyXA.apps.Finder.XAFinderPreferences.window"]], "pyxa.apps.flow": [[20, "module-PyXA.apps.Flow"]], "xaflowapplication (class in pyxa.apps.flow)": [[20, "PyXA.apps.Flow.XAFlowApplication"]], "get_phase() (pyxa.apps.flow.xaflowapplication method)": [[20, "PyXA.apps.Flow.XAFlowApplication.get_phase"]], "get_time() (pyxa.apps.flow.xaflowapplication method)": [[20, "PyXA.apps.Flow.XAFlowApplication.get_time"]], "hide() (pyxa.apps.flow.xaflowapplication method)": [[20, "PyXA.apps.Flow.XAFlowApplication.hide"]], "previous() (pyxa.apps.flow.xaflowapplication method)": [[20, "PyXA.apps.Flow.XAFlowApplication.previous"]], "reset() (pyxa.apps.flow.xaflowapplication method)": [[20, "PyXA.apps.Flow.XAFlowApplication.reset"]], "show() (pyxa.apps.flow.xaflowapplication method)": [[20, "PyXA.apps.Flow.XAFlowApplication.show"]], "skip() (pyxa.apps.flow.xaflowapplication method)": [[20, "PyXA.apps.Flow.XAFlowApplication.skip"]], "start() (pyxa.apps.flow.xaflowapplication method)": [[20, "PyXA.apps.Flow.XAFlowApplication.start"]], "stop() (pyxa.apps.flow.xaflowapplication method)": [[20, "PyXA.apps.Flow.XAFlowApplication.stop"]], "pyxa.apps.fontbook": [[21, "module-PyXA.apps.FontBook"]], "xafontbookapplication (class in pyxa.apps.fontbook)": [[21, "PyXA.apps.FontBook.XAFontBookApplication"]], "xafontbookdocument (class in pyxa.apps.fontbook)": [[21, "PyXA.apps.FontBook.XAFontBookDocument"]], "xafontbookdocumentlist (class in pyxa.apps.fontbook)": [[21, "PyXA.apps.FontBook.XAFontBookDocumentList"]], "xafontbookfontbookallfontslibraryobject (class in pyxa.apps.fontbook)": [[21, "PyXA.apps.FontBook.XAFontBookFontBookAllFontsLibraryObject"]], "xafontbookfontcollection (class in pyxa.apps.fontbook)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollection"]], "xafontbookfontcollectionlist (class in pyxa.apps.fontbook)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollectionList"]], "xafontbookfontcontainer (class in pyxa.apps.fontbook)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainer"]], "xafontbookfontcontainerlist (class in pyxa.apps.fontbook)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainerList"]], "xafontbookfontdomain (class in pyxa.apps.fontbook)": [[21, "PyXA.apps.FontBook.XAFontBookFontDomain"]], "xafontbookfontdomainlist (class in pyxa.apps.fontbook)": [[21, "PyXA.apps.FontBook.XAFontBookFontDomainList"]], "xafontbookfontfamily (class in pyxa.apps.fontbook)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamily"]], "xafontbookfontfamilylist (class in pyxa.apps.fontbook)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamilyList"]], "xafontbookfontlibrary (class in pyxa.apps.fontbook)": [[21, "PyXA.apps.FontBook.XAFontBookFontLibrary"]], "xafontbookfontlibrarylist (class in pyxa.apps.fontbook)": [[21, "PyXA.apps.FontBook.XAFontBookFontLibraryList"]], "xafontbooktypeface (class in pyxa.apps.fontbook)": [[21, "PyXA.apps.FontBook.XAFontBookTypeface"]], "xafontbooktypefacelist (class in pyxa.apps.fontbook)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList"]], "xafontbookwindow (class in pyxa.apps.fontbook)": [[21, "PyXA.apps.FontBook.XAFontBookWindow"]], "by_copyright() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.by_copyright"]], "by_display_name() (pyxa.apps.fontbook.xafontbookfontcollectionlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollectionList.by_display_name"]], "by_display_name() (pyxa.apps.fontbook.xafontbookfontfamilylist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamilyList.by_display_name"]], "by_display_name() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.by_display_name"]], "by_displayed_name() (pyxa.apps.fontbook.xafontbookfontcollectionlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollectionList.by_displayed_name"]], "by_displayed_name() (pyxa.apps.fontbook.xafontbookfontfamilylist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamilyList.by_displayed_name"]], "by_displayed_name() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.by_displayed_name"]], "by_domain() (pyxa.apps.fontbook.xafontbookfontcontainerlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainerList.by_domain"]], "by_duplicated() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.by_duplicated"]], "by_duplicates() (pyxa.apps.fontbook.xafontbookfontfamilylist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamilyList.by_duplicates"]], "by_enabled() (pyxa.apps.fontbook.xafontbookfontcollectionlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollectionList.by_enabled"]], "by_enabled() (pyxa.apps.fontbook.xafontbookfontfamilylist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamilyList.by_enabled"]], "by_enabled() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.by_enabled"]], "by_family_name() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.by_family_name"]], "by_files() (pyxa.apps.fontbook.xafontbookfontcontainerlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainerList.by_files"]], "by_files() (pyxa.apps.fontbook.xafontbookfontfamilylist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamilyList.by_files"]], "by_files() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.by_files"]], "by_font_container() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.by_font_container"]], "by_font_family() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.by_font_family"]], "by_font_type() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.by_font_type"]], "by_id() (pyxa.apps.fontbook.xafontbookfontcontainerlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainerList.by_id"]], "by_id() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.by_id"]], "by_modified() (pyxa.apps.fontbook.xafontbookdocumentlist method)": [[21, "PyXA.apps.FontBook.XAFontBookDocumentList.by_modified"]], "by_name() (pyxa.apps.fontbook.xafontbookdocumentlist method)": [[21, "PyXA.apps.FontBook.XAFontBookDocumentList.by_name"]], "by_name() (pyxa.apps.fontbook.xafontbookfontcollectionlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollectionList.by_name"]], "by_name() (pyxa.apps.fontbook.xafontbookfontcontainerlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainerList.by_name"]], "by_name() (pyxa.apps.fontbook.xafontbookfontfamilylist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamilyList.by_name"]], "by_name() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.by_name"]], "by_path() (pyxa.apps.fontbook.xafontbookdocumentlist method)": [[21, "PyXA.apps.FontBook.XAFontBookDocumentList.by_path"]], "by_path() (pyxa.apps.fontbook.xafontbookfontcontainerlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainerList.by_path"]], "by_post_script_name() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.by_post_script_name"]], "by_properties() (pyxa.apps.fontbook.xafontbookfontcollectionlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollectionList.by_properties"]], "by_properties() (pyxa.apps.fontbook.xafontbookfontcontainerlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainerList.by_properties"]], "by_properties() (pyxa.apps.fontbook.xafontbookfontfamilylist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamilyList.by_properties"]], "by_properties() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.by_properties"]], "by_style_name() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.by_style_name"]], "copyright (pyxa.apps.fontbook.xafontbooktypeface property)": [[21, "PyXA.apps.FontBook.XAFontBookTypeface.copyright"]], "copyright() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.copyright"]], "delete() (pyxa.apps.fontbook.xafontbookfontfamily method)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamily.delete"]], "display_name (pyxa.apps.fontbook.xafontbookfontcollection property)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollection.display_name"]], "display_name (pyxa.apps.fontbook.xafontbookfontfamily property)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamily.display_name"]], "display_name (pyxa.apps.fontbook.xafontbooktypeface property)": [[21, "PyXA.apps.FontBook.XAFontBookTypeface.display_name"]], "display_name() (pyxa.apps.fontbook.xafontbookfontcollectionlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollectionList.display_name"]], "display_name() (pyxa.apps.fontbook.xafontbookfontfamilylist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamilyList.display_name"]], "display_name() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.display_name"]], "displayed_name (pyxa.apps.fontbook.xafontbookfontcollection property)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollection.displayed_name"]], "displayed_name (pyxa.apps.fontbook.xafontbookfontfamily property)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamily.displayed_name"]], "displayed_name (pyxa.apps.fontbook.xafontbooktypeface property)": [[21, "PyXA.apps.FontBook.XAFontBookTypeface.displayed_name"]], "displayed_name() (pyxa.apps.fontbook.xafontbookfontcollectionlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollectionList.displayed_name"]], "displayed_name() (pyxa.apps.fontbook.xafontbookfontfamilylist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamilyList.displayed_name"]], "displayed_name() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.displayed_name"]], "documents() (pyxa.apps.fontbook.xafontbookapplication method)": [[21, "PyXA.apps.FontBook.XAFontBookApplication.documents"]], "domain (pyxa.apps.fontbook.xafontbookfontcontainer property)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainer.domain"]], "domain() (pyxa.apps.fontbook.xafontbookfontcontainerlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainerList.domain"]], "duplicated (pyxa.apps.fontbook.xafontbookfontfamily property)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamily.duplicated"]], "duplicated (pyxa.apps.fontbook.xafontbooktypeface property)": [[21, "PyXA.apps.FontBook.XAFontBookTypeface.duplicated"]], "duplicated() (pyxa.apps.fontbook.xafontbookfontfamilylist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamilyList.duplicated"]], "duplicated() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.duplicated"]], "enabled (pyxa.apps.fontbook.xafontbookfontcollection property)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollection.enabled"]], "enabled (pyxa.apps.fontbook.xafontbookfontfamily property)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamily.enabled"]], "enabled (pyxa.apps.fontbook.xafontbooktypeface property)": [[21, "PyXA.apps.FontBook.XAFontBookTypeface.enabled"]], "enabled() (pyxa.apps.fontbook.xafontbookfontcollectionlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollectionList.enabled"]], "enabled() (pyxa.apps.fontbook.xafontbookfontfamilylist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamilyList.enabled"]], "enabled() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.enabled"]], "family_name (pyxa.apps.fontbook.xafontbooktypeface property)": [[21, "PyXA.apps.FontBook.XAFontBookTypeface.family_name"]], "family_name() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.family_name"]], "files (pyxa.apps.fontbook.xafontbookfontcontainer property)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainer.files"]], "files (pyxa.apps.fontbook.xafontbookfontfamily property)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamily.files"]], "files (pyxa.apps.fontbook.xafontbooktypeface property)": [[21, "PyXA.apps.FontBook.XAFontBookTypeface.files"]], "files() (pyxa.apps.fontbook.xafontbookfontcontainerlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainerList.files"]], "files() (pyxa.apps.fontbook.xafontbookfontfamilylist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamilyList.files"]], "files() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.files"]], "floating (pyxa.apps.fontbook.xafontbookwindow property)": [[21, "PyXA.apps.FontBook.XAFontBookWindow.floating"]], "font_collections() (pyxa.apps.fontbook.xafontbookapplication method)": [[21, "PyXA.apps.FontBook.XAFontBookApplication.font_collections"]], "font_container (pyxa.apps.fontbook.xafontbooktypeface property)": [[21, "PyXA.apps.FontBook.XAFontBookTypeface.font_container"]], "font_container() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.font_container"]], "font_containers() (pyxa.apps.fontbook.xafontbookapplication method)": [[21, "PyXA.apps.FontBook.XAFontBookApplication.font_containers"]], "font_containers() (pyxa.apps.fontbook.xafontbookfontlibrary method)": [[21, "PyXA.apps.FontBook.XAFontBookFontLibrary.font_containers"]], "font_domains() (pyxa.apps.fontbook.xafontbookapplication method)": [[21, "PyXA.apps.FontBook.XAFontBookApplication.font_domains"]], "font_domains() (pyxa.apps.fontbook.xafontbookfontcontainer method)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainer.font_domains"]], "font_families() (pyxa.apps.fontbook.xafontbookapplication method)": [[21, "PyXA.apps.FontBook.XAFontBookApplication.font_families"]], "font_families() (pyxa.apps.fontbook.xafontbookfontcollection method)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollection.font_families"]], "font_families() (pyxa.apps.fontbook.xafontbookfontcontainer method)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainer.font_families"]], "font_family (pyxa.apps.fontbook.xafontbooktypeface property)": [[21, "PyXA.apps.FontBook.XAFontBookTypeface.font_family"]], "font_family() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.font_family"]], "font_libraries() (pyxa.apps.fontbook.xafontbookapplication method)": [[21, "PyXA.apps.FontBook.XAFontBookApplication.font_libraries"]], "font_type (pyxa.apps.fontbook.xafontbooktypeface property)": [[21, "PyXA.apps.FontBook.XAFontBookTypeface.font_type"]], "font_type() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.font_type"]], "fonts_library (pyxa.apps.fontbook.xafontbookapplication property)": [[21, "PyXA.apps.FontBook.XAFontBookApplication.fonts_library"]], "get_clipboard_representation() (pyxa.apps.fontbook.xafontbookfontcollection method)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollection.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.fontbook.xafontbookfontcollectionlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollectionList.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.fontbook.xafontbookfontcontainer method)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainer.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.fontbook.xafontbookfontcontainerlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainerList.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.fontbook.xafontbookfontfamily method)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamily.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.fontbook.xafontbookfontfamilylist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamilyList.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.fontbook.xafontbooktypeface method)": [[21, "PyXA.apps.FontBook.XAFontBookTypeface.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.get_clipboard_representation"]], "id (pyxa.apps.fontbook.xafontbookfontcontainer property)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainer.id"]], "id (pyxa.apps.fontbook.xafontbookfontlibrary property)": [[21, "PyXA.apps.FontBook.XAFontBookFontLibrary.id"]], "id (pyxa.apps.fontbook.xafontbooktypeface property)": [[21, "PyXA.apps.FontBook.XAFontBookTypeface.id"]], "id() (pyxa.apps.fontbook.xafontbookfontcontainerlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainerList.id"]], "id() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.id"]], "installation_target (pyxa.apps.fontbook.xafontbookapplication property)": [[21, "PyXA.apps.FontBook.XAFontBookApplication.installation_target"]], "modal (pyxa.apps.fontbook.xafontbookwindow property)": [[21, "PyXA.apps.FontBook.XAFontBookWindow.modal"]], "modified (pyxa.apps.fontbook.xafontbookdocument property)": [[21, "PyXA.apps.FontBook.XAFontBookDocument.modified"]], "modified() (pyxa.apps.fontbook.xafontbookdocumentlist method)": [[21, "PyXA.apps.FontBook.XAFontBookDocumentList.modified"]], "name (pyxa.apps.fontbook.xafontbookapplication property)": [[21, "PyXA.apps.FontBook.XAFontBookApplication.name"]], "name (pyxa.apps.fontbook.xafontbookdocument property)": [[21, "PyXA.apps.FontBook.XAFontBookDocument.name"]], "name (pyxa.apps.fontbook.xafontbookfontcollection property)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollection.name"]], "name (pyxa.apps.fontbook.xafontbookfontcontainer property)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainer.name"]], "name (pyxa.apps.fontbook.xafontbookfontfamily property)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamily.name"]], "name (pyxa.apps.fontbook.xafontbooktypeface property)": [[21, "PyXA.apps.FontBook.XAFontBookTypeface.name"]], "name() (pyxa.apps.fontbook.xafontbookdocumentlist method)": [[21, "PyXA.apps.FontBook.XAFontBookDocumentList.name"]], "name() (pyxa.apps.fontbook.xafontbookfontcollectionlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollectionList.name"]], "name() (pyxa.apps.fontbook.xafontbookfontcontainerlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainerList.name"]], "name() (pyxa.apps.fontbook.xafontbookfontfamilylist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamilyList.name"]], "name() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.name"]], "path (pyxa.apps.fontbook.xafontbookdocument property)": [[21, "PyXA.apps.FontBook.XAFontBookDocument.path"]], "path (pyxa.apps.fontbook.xafontbookfontcontainer property)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainer.path"]], "path() (pyxa.apps.fontbook.xafontbookdocumentlist method)": [[21, "PyXA.apps.FontBook.XAFontBookDocumentList.path"]], "path() (pyxa.apps.fontbook.xafontbookfontcontainerlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainerList.path"]], "post_script_name (pyxa.apps.fontbook.xafontbooktypeface property)": [[21, "PyXA.apps.FontBook.XAFontBookTypeface.post_script_name"]], "post_script_name() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.post_script_name"]], "properties (pyxa.apps.fontbook.xafontbookfontcollection property)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollection.properties"]], "properties (pyxa.apps.fontbook.xafontbookfontcontainer property)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainer.properties"]], "properties (pyxa.apps.fontbook.xafontbookfontfamily property)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamily.properties"]], "properties (pyxa.apps.fontbook.xafontbooktypeface property)": [[21, "PyXA.apps.FontBook.XAFontBookTypeface.properties"]], "properties() (pyxa.apps.fontbook.xafontbookfontcollectionlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollectionList.properties"]], "properties() (pyxa.apps.fontbook.xafontbookfontcontainerlist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainerList.properties"]], "properties() (pyxa.apps.fontbook.xafontbookfontfamilylist method)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamilyList.properties"]], "properties() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.properties"]], "selected_collections (pyxa.apps.fontbook.xafontbookapplication property)": [[21, "PyXA.apps.FontBook.XAFontBookApplication.selected_collections"]], "selected_font_families (pyxa.apps.fontbook.xafontbookapplication property)": [[21, "PyXA.apps.FontBook.XAFontBookApplication.selected_font_families"]], "selection (pyxa.apps.fontbook.xafontbookapplication property)": [[21, "PyXA.apps.FontBook.XAFontBookApplication.selection"]], "style_name (pyxa.apps.fontbook.xafontbooktypeface property)": [[21, "PyXA.apps.FontBook.XAFontBookTypeface.style_name"]], "style_name() (pyxa.apps.fontbook.xafontbooktypefacelist method)": [[21, "PyXA.apps.FontBook.XAFontBookTypefaceList.style_name"]], "titled (pyxa.apps.fontbook.xafontbookwindow property)": [[21, "PyXA.apps.FontBook.XAFontBookWindow.titled"]], "typefaces() (pyxa.apps.fontbook.xafontbookapplication method)": [[21, "PyXA.apps.FontBook.XAFontBookApplication.typefaces"]], "typefaces() (pyxa.apps.fontbook.xafontbookfontcollection method)": [[21, "PyXA.apps.FontBook.XAFontBookFontCollection.typefaces"]], "typefaces() (pyxa.apps.fontbook.xafontbookfontcontainer method)": [[21, "PyXA.apps.FontBook.XAFontBookFontContainer.typefaces"]], "typefaces() (pyxa.apps.fontbook.xafontbookfontfamily method)": [[21, "PyXA.apps.FontBook.XAFontBookFontFamily.typefaces"]], "validate_fonts_before_installing (pyxa.apps.fontbook.xafontbookapplication property)": [[21, "PyXA.apps.FontBook.XAFontBookApplication.validate_fonts_before_installing"]], "version (pyxa.apps.fontbook.xafontbookapplication property)": [[21, "PyXA.apps.FontBook.XAFontBookApplication.version"]], "pyxa.apps.hammerspoon": [[22, "module-PyXA.apps.Hammerspoon"]], "xahammerspoonapplication (class in pyxa.apps.hammerspoon)": [[22, "PyXA.apps.Hammerspoon.XAHammerspoonApplication"]], "execute_lua_code() (pyxa.apps.hammerspoon.xahammerspoonapplication method)": [[22, "PyXA.apps.Hammerspoon.XAHammerspoonApplication.execute_lua_code"]], "frontmost (pyxa.apps.hammerspoon.xahammerspoonapplication property)": [[22, "PyXA.apps.Hammerspoon.XAHammerspoonApplication.frontmost"]], "name (pyxa.apps.hammerspoon.xahammerspoonapplication property)": [[22, "PyXA.apps.Hammerspoon.XAHammerspoonApplication.name"]], "version (pyxa.apps.hammerspoon.xahammerspoonapplication property)": [[22, "PyXA.apps.Hammerspoon.XAHammerspoonApplication.version"]], "absolute_colorimetric (pyxa.apps.imageevents.xaimageeventsapplication.renderingintent attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.RenderingIntent.ABSOLUTE_COLORIMETRIC"]], "abstract (pyxa.apps.imageevents.xaimageeventsapplication.deviceclass attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.DeviceClass.ABSTRACT"]], "best (pyxa.apps.imageevents.xaimageeventsapplication.bitdepth attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.BitDepth.BEST"]], "best (pyxa.apps.imageevents.xaimageeventsapplication.imagequality attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ImageQuality.BEST"]], "best (pyxa.apps.imageevents.xaimageeventsapplication.profilequality attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ProfileQuality.BEST"]], "black_and_white (pyxa.apps.imageevents.xaimageeventsapplication.bitdepth attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.BitDepth.BLACK_AND_WHITE"]], "bmp (pyxa.apps.imageevents.xaimageeventsapplication.filetype attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.FileType.BMP"]], "cmyk (pyxa.apps.imageevents.xaimageeventsapplication.colorspace attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ColorSpace.CMYK"]], "color (pyxa.apps.imageevents.xaimageeventsapplication.bitdepth attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.BitDepth.COLOR"]], "colorspace (pyxa.apps.imageevents.xaimageeventsapplication.deviceclass attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.DeviceClass.COLORSPACE"]], "draft (pyxa.apps.imageevents.xaimageeventsapplication.profilequality attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ProfileQuality.DRAFT"]], "eight_channel (pyxa.apps.imageevents.xaimageeventsapplication.colorspace attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ColorSpace.EIGHT_CHANNEL"]], "eight_color (pyxa.apps.imageevents.xaimageeventsapplication.colorspace attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ColorSpace.EIGHT_COLOR"]], "five_channel (pyxa.apps.imageevents.xaimageeventsapplication.colorspace attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ColorSpace.FIVE_CHANNEL"]], "five_color (pyxa.apps.imageevents.xaimageeventsapplication.colorspace attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ColorSpace.FIVE_COLOR"]], "four_colors (pyxa.apps.imageevents.xaimageeventsapplication.bitdepth attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.BitDepth.FOUR_COLORS"]], "four_grays (pyxa.apps.imageevents.xaimageeventsapplication.bitdepth attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.BitDepth.FOUR_GRAYS"]], "gif (pyxa.apps.imageevents.xaimageeventsapplication.filetype attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.FileType.GIF"]], "gray (pyxa.apps.imageevents.xaimageeventsapplication.colorspace attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ColorSpace.GRAY"]], "grayscale (pyxa.apps.imageevents.xaimageeventsapplication.bitdepth attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.BitDepth.GRAYSCALE"]], "high (pyxa.apps.imageevents.xaimageeventsapplication.compressionlevel attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.CompressionLevel.HIGH"]], "high (pyxa.apps.imageevents.xaimageeventsapplication.imagequality attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ImageQuality.HIGH"]], "input (pyxa.apps.imageevents.xaimageeventsapplication.deviceclass attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.DeviceClass.INPUT"]], "jpeg (pyxa.apps.imageevents.xaimageeventsapplication.filetype attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.FileType.JPEG"]], "jpeg2 (pyxa.apps.imageevents.xaimageeventsapplication.filetype attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.FileType.JPEG2"]], "lab (pyxa.apps.imageevents.xaimageeventsapplication.colorspace attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ColorSpace.LAB"]], "lab (pyxa.apps.imageevents.xaimageeventsapplication.connectionspace attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ConnectionSpace.LAB"]], "least (pyxa.apps.imageevents.xaimageeventsapplication.imagequality attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ImageQuality.LEAST"]], "link (pyxa.apps.imageevents.xaimageeventsapplication.deviceclass attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.DeviceClass.LINK"]], "low (pyxa.apps.imageevents.xaimageeventsapplication.compressionlevel attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.CompressionLevel.LOW"]], "low (pyxa.apps.imageevents.xaimageeventsapplication.imagequality attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ImageQuality.LOW"]], "macpaint (pyxa.apps.imageevents.xaimageeventsapplication.filetype attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.FileType.MACPAINT"]], "medium (pyxa.apps.imageevents.xaimageeventsapplication.compressionlevel attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.CompressionLevel.MEDIUM"]], "medium (pyxa.apps.imageevents.xaimageeventsapplication.imagequality attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ImageQuality.MEDIUM"]], "millions_of_colors (pyxa.apps.imageevents.xaimageeventsapplication.bitdepth attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.BitDepth.MILLIONS_OF_COLORS"]], "millions_of_colors_plus (pyxa.apps.imageevents.xaimageeventsapplication.bitdepth attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.BitDepth.MILLIONS_OF_COLORS_PLUS"]], "monitor (pyxa.apps.imageevents.xaimageeventsapplication.deviceclass attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.DeviceClass.MONITOR"]], "named (pyxa.apps.imageevents.xaimageeventsapplication.colorspace attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ColorSpace.NAMED"]], "named (pyxa.apps.imageevents.xaimageeventsapplication.deviceclass attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.DeviceClass.NAMED"]], "normal (pyxa.apps.imageevents.xaimageeventsapplication.profilequality attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ProfileQuality.NORMAL"]], "output (pyxa.apps.imageevents.xaimageeventsapplication.deviceclass attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.DeviceClass.OUTPUT"]], "pdf (pyxa.apps.imageevents.xaimageeventsapplication.filetype attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.FileType.PDF"]], "perceptual (pyxa.apps.imageevents.xaimageeventsapplication.renderingintent attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.RenderingIntent.PERCEPTUAL"]], "photoshop (pyxa.apps.imageevents.xaimageeventsapplication.filetype attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.FileType.PHOTOSHOP"]], "pict (pyxa.apps.imageevents.xaimageeventsapplication.filetype attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.FileType.PICT"]], "png (pyxa.apps.imageevents.xaimageeventsapplication.filetype attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.FileType.PNG"]], "psd (pyxa.apps.imageevents.xaimageeventsapplication.filetype attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.FileType.PSD"]], "pyxa.apps.imageevents": [[23, "module-PyXA.apps.ImageEvents"]], "quicktime (pyxa.apps.imageevents.xaimageeventsapplication.filetype attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.FileType.QUICKTIME"]], "relative_colorimetric (pyxa.apps.imageevents.xaimageeventsapplication.renderingintent attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.RenderingIntent.RELATIVE_COLORIMETRIC"]], "rgb (pyxa.apps.imageevents.xaimageeventsapplication.colorspace attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ColorSpace.RGB"]], "saturation (pyxa.apps.imageevents.xaimageeventsapplication.renderingintent attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.RenderingIntent.SATURATION"]], "seven_channel (pyxa.apps.imageevents.xaimageeventsapplication.colorspace attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ColorSpace.SEVEN_CHANNEL"]], "seven_color (pyxa.apps.imageevents.xaimageeventsapplication.colorspace attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ColorSpace.SEVEN_COLOR"]], "sgi (pyxa.apps.imageevents.xaimageeventsapplication.filetype attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.FileType.SGI"]], "sixteen_colors (pyxa.apps.imageevents.xaimageeventsapplication.bitdepth attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.BitDepth.SIXTEEN_COLORS"]], "sixteen_grays (pyxa.apps.imageevents.xaimageeventsapplication.bitdepth attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.BitDepth.SIXTEEN_GRAYS"]], "six_channel (pyxa.apps.imageevents.xaimageeventsapplication.colorspace attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ColorSpace.SIX_CHANNEL"]], "six_color (pyxa.apps.imageevents.xaimageeventsapplication.colorspace attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ColorSpace.SIX_COLOR"]], "text (pyxa.apps.imageevents.xaimageeventsapplication.filetype attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.FileType.TEXT"]], "tga (pyxa.apps.imageevents.xaimageeventsapplication.filetype attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.FileType.TGA"]], "thousands_of_colors (pyxa.apps.imageevents.xaimageeventsapplication.bitdepth attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.BitDepth.THOUSANDS_OF_COLORS"]], "tiff (pyxa.apps.imageevents.xaimageeventsapplication.filetype attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.FileType.TIFF"]], "two_hundred_fifty_six_colors (pyxa.apps.imageevents.xaimageeventsapplication.bitdepth attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.BitDepth.TWO_HUNDRED_FIFTY_SIX_COLORS"]], "two_hundred_fifty_six_grays (pyxa.apps.imageevents.xaimageeventsapplication.bitdepth attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.BitDepth.TWO_HUNDRED_FIFTY_SIX_GRAYS"]], "xaimageeventsapplication (class in pyxa.apps.imageevents)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication"]], "xaimageeventsapplication.bitdepth (class in pyxa.apps.imageevents)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.BitDepth"]], "xaimageeventsapplication.colorspace (class in pyxa.apps.imageevents)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ColorSpace"]], "xaimageeventsapplication.compressionlevel (class in pyxa.apps.imageevents)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.CompressionLevel"]], "xaimageeventsapplication.connectionspace (class in pyxa.apps.imageevents)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ConnectionSpace"]], "xaimageeventsapplication.deviceclass (class in pyxa.apps.imageevents)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.DeviceClass"]], "xaimageeventsapplication.filetype (class in pyxa.apps.imageevents)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.FileType"]], "xaimageeventsapplication.imagequality (class in pyxa.apps.imageevents)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ImageQuality"]], "xaimageeventsapplication.profilequality (class in pyxa.apps.imageevents)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ProfileQuality"]], "xaimageeventsapplication.renderingintent (class in pyxa.apps.imageevents)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.RenderingIntent"]], "xaimageeventsdisplay (class in pyxa.apps.imageevents)": [[23, "PyXA.apps.ImageEvents.XAImageEventsDisplay"]], "xaimageeventsdisplaylist (class in pyxa.apps.imageevents)": [[23, "PyXA.apps.ImageEvents.XAImageEventsDisplayList"]], "xaimageeventsimage (class in pyxa.apps.imageevents)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImage"]], "xaimageeventsimagelist (class in pyxa.apps.imageevents)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList"]], "xaimageeventsmetadatatag (class in pyxa.apps.imageevents)": [[23, "PyXA.apps.ImageEvents.XAImageEventsMetadataTag"]], "xaimageeventsmetadatataglist (class in pyxa.apps.imageevents)": [[23, "PyXA.apps.ImageEvents.XAImageEventsMetadataTagList"]], "xaimageeventsprofile (class in pyxa.apps.imageevents)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfile"]], "xaimageeventsprofilelist (class in pyxa.apps.imageevents)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList"]], "xyz (pyxa.apps.imageevents.xaimageeventsapplication.colorspace attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ColorSpace.XYZ"]], "xyz (pyxa.apps.imageevents.xaimageeventsapplication.connectionspace attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.ConnectionSpace.XYZ"]], "aliases() (pyxa.apps.imageevents.xaimageeventsapplication method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.aliases"]], "application_support_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.application_support_folder"]], "applications_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.applications_folder"]], "bit_depth (pyxa.apps.imageevents.xaimageeventsimage property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImage.bit_depth"]], "bit_depth() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.bit_depth"]], "by_bit_depth() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.by_bit_depth"]], "by_color_space() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.by_color_space"]], "by_color_space() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.by_color_space"]], "by_connection_space() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.by_connection_space"]], "by_creation_date() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.by_creation_date"]], "by_creator() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.by_creator"]], "by_description() (pyxa.apps.imageevents.xaimageeventsmetadatataglist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsMetadataTagList.by_description"]], "by_device_class() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.by_device_class"]], "by_device_manufacturer() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.by_device_manufacturer"]], "by_device_model() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.by_device_model"]], "by_dimensions() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.by_dimensions"]], "by_display_number() (pyxa.apps.imageevents.xaimageeventsdisplaylist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsDisplayList.by_display_number"]], "by_display_profile() (pyxa.apps.imageevents.xaimageeventsdisplaylist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsDisplayList.by_display_profile"]], "by_embedded_profile() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.by_embedded_profile"]], "by_file_type() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.by_file_type"]], "by_image_file() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.by_image_file"]], "by_location() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.by_location"]], "by_location() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.by_location"]], "by_name() (pyxa.apps.imageevents.xaimageeventsdisplaylist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsDisplayList.by_name"]], "by_name() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.by_name"]], "by_name() (pyxa.apps.imageevents.xaimageeventsmetadatataglist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsMetadataTagList.by_name"]], "by_name() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.by_name"]], "by_platform() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.by_platform"]], "by_preferred_cmm() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.by_preferred_cmm"]], "by_quality() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.by_quality"]], "by_rendering_intent() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.by_rendering_intent"]], "by_resolution() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.by_resolution"]], "by_size() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.by_size"]], "by_value() (pyxa.apps.imageevents.xaimageeventsmetadatataglist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsMetadataTagList.by_value"]], "by_version() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.by_version"]], "classic_domain (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.classic_domain"]], "color_space (pyxa.apps.imageevents.xaimageeventsimage property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImage.color_space"]], "color_space (pyxa.apps.imageevents.xaimageeventsprofile property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfile.color_space"]], "color_space() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.color_space"]], "color_space() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.color_space"]], "connection_space (pyxa.apps.imageevents.xaimageeventsprofile property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfile.connection_space"]], "connection_space() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.connection_space"]], "creation_date (pyxa.apps.imageevents.xaimageeventsprofile property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfile.creation_date"]], "creation_date() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.creation_date"]], "creator (pyxa.apps.imageevents.xaimageeventsprofile property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfile.creator"]], "creator() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.creator"]], "default_cmyk_profile (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.default_cmyk_profile"]], "default_cmyk_profile_location (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.default_cmyk_profile_location"]], "default_gray_profile (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.default_gray_profile"]], "default_gray_profile_location (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.default_gray_profile_location"]], "default_lab_profile (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.default_lab_profile"]], "default_lab_profile_location (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.default_lab_profile_location"]], "default_rgb_profile (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.default_rgb_profile"]], "default_rgb_profile_location (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.default_rgb_profile_location"]], "default_xyz_profile (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.default_xyz_profile"]], "default_xyz_profile_location (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.default_xyz_profile_location"]], "description (pyxa.apps.imageevents.xaimageeventsmetadatatag property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsMetadataTag.description"]], "description() (pyxa.apps.imageevents.xaimageeventsmetadatataglist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsMetadataTagList.description"]], "desktop_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.desktop_folder"]], "desktop_pictures_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.desktop_pictures_folder"]], "device_class (pyxa.apps.imageevents.xaimageeventsprofile property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfile.device_class"]], "device_class() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.device_class"]], "device_manufacturer (pyxa.apps.imageevents.xaimageeventsprofile property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfile.device_manufacturer"]], "device_manufacturer() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.device_manufacturer"]], "device_model (pyxa.apps.imageevents.xaimageeventsprofile property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfile.device_model"]], "device_model() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.device_model"]], "dimensions (pyxa.apps.imageevents.xaimageeventsimage property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImage.dimensions"]], "dimensions() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.dimensions"]], "disk_items() (pyxa.apps.imageevents.xaimageeventsapplication method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.disk_items"]], "disks() (pyxa.apps.imageevents.xaimageeventsapplication method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.disks"]], "display_number (pyxa.apps.imageevents.xaimageeventsdisplay property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsDisplay.display_number"]], "display_number() (pyxa.apps.imageevents.xaimageeventsdisplaylist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsDisplayList.display_number"]], "display_profile (pyxa.apps.imageevents.xaimageeventsdisplay property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsDisplay.display_profile"]], "display_profile() (pyxa.apps.imageevents.xaimageeventsdisplaylist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsDisplayList.display_profile"]], "displays() (pyxa.apps.imageevents.xaimageeventsapplication method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.displays"]], "documents_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.documents_folder"]], "domains() (pyxa.apps.imageevents.xaimageeventsapplication method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.domains"]], "downloads_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.downloads_folder"]], "embed_profile() (pyxa.apps.imageevents.xaimageeventsimage method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImage.embed_profile"]], "embed_profile() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.embed_profile"]], "embedded_profile (pyxa.apps.imageevents.xaimageeventsimage property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImage.embedded_profile"]], "embedded_profile() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.embedded_profile"]], "favorites_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.favorites_folder"]], "file (pyxa.apps.imageevents.xaimageeventsimage attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImage.file"]], "file_packages() (pyxa.apps.imageevents.xaimageeventsapplication method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.file_packages"]], "file_type (pyxa.apps.imageevents.xaimageeventsimage property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImage.file_type"]], "file_type() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.file_type"]], "files() (pyxa.apps.imageevents.xaimageeventsapplication method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.files"]], "folder_action_scripts_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.folder_action_scripts_folder"]], "folders() (pyxa.apps.imageevents.xaimageeventsapplication method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.folders"]], "fonts_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.fonts_folder"]], "frontmost (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.frontmost"]], "home_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.home_folder"]], "image_file (pyxa.apps.imageevents.xaimageeventsimage property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImage.image_file"]], "image_file() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.image_file"]], "images() (pyxa.apps.imageevents.xaimageeventsapplication method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.images"]], "items() (pyxa.apps.imageevents.xaimageeventsapplication method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.items"]], "library_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.library_folder"]], "local_domain (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.local_domain"]], "location (pyxa.apps.imageevents.xaimageeventsimage property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImage.location"]], "location (pyxa.apps.imageevents.xaimageeventsprofile property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfile.location"]], "location() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.location"]], "location() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.location"]], "metadata_tags() (pyxa.apps.imageevents.xaimageeventsimage method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImage.metadata_tags"]], "modified (pyxa.apps.imageevents.xaimageeventsimage attribute)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImage.modified"]], "modified_image_object (pyxa.apps.imageevents.xaimageeventsimage property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImage.modified_image_object"]], "modified_image_objects() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.modified_image_objects"]], "movies_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.movies_folder"]], "music_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.music_folder"]], "name (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.name"]], "name (pyxa.apps.imageevents.xaimageeventsdisplay property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsDisplay.name"]], "name (pyxa.apps.imageevents.xaimageeventsimage property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImage.name"]], "name (pyxa.apps.imageevents.xaimageeventsmetadatatag property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsMetadataTag.name"]], "name (pyxa.apps.imageevents.xaimageeventsprofile property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfile.name"]], "name() (pyxa.apps.imageevents.xaimageeventsdisplaylist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsDisplayList.name"]], "name() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.name"]], "name() (pyxa.apps.imageevents.xaimageeventsmetadatataglist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsMetadataTagList.name"]], "name() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.name"]], "network_domain (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.network_domain"]], "open() (pyxa.apps.imageevents.xaimageeventsapplication method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.open"]], "original_image_object (pyxa.apps.imageevents.xaimageeventsimage property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImage.original_image_object"]], "original_image_objects() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.original_image_objects"]], "pictures_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.pictures_folder"]], "platform (pyxa.apps.imageevents.xaimageeventsprofile property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfile.platform"]], "platform() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.platform"]], "preferences_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.preferences_folder"]], "preferred_cmm (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.preferred_cmm"]], "preferred_cmm (pyxa.apps.imageevents.xaimageeventsprofile property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfile.preferred_cmm"]], "preferred_cmm() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.preferred_cmm"]], "profile_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.profile_folder"]], "profiles() (pyxa.apps.imageevents.xaimageeventsapplication method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.profiles"]], "profiles() (pyxa.apps.imageevents.xaimageeventsimage method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImage.profiles"]], "properties (pyxa.apps.imageevents.xaimageeventsimage property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImage.properties"]], "properties() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.properties"]], "public_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.public_folder"]], "quality (pyxa.apps.imageevents.xaimageeventsprofile property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfile.quality"]], "quality() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.quality"]], "quit_delay (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.quit_delay"]], "rendering_intent (pyxa.apps.imageevents.xaimageeventsprofile property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfile.rendering_intent"]], "rendering_intent() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.rendering_intent"]], "resolution (pyxa.apps.imageevents.xaimageeventsimage property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImage.resolution"]], "resolution() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.resolution"]], "scripting_additions_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.scripting_additions_folder"]], "scripts_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.scripts_folder"]], "shared_documents_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.shared_documents_folder"]], "sites_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.sites_folder"]], "size (pyxa.apps.imageevents.xaimageeventsprofile property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfile.size"]], "size() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.size"]], "speakable_items_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.speakable_items_folder"]], "startup_disk (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.startup_disk"]], "system_domain (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.system_domain"]], "system_profile (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.system_profile"]], "system_profile_location (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.system_profile_location"]], "temporary_items_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.temporary_items_folder"]], "trash (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.trash"]], "unembed() (pyxa.apps.imageevents.xaimageeventsimage method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImage.unembed"]], "unembed() (pyxa.apps.imageevents.xaimageeventsimagelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsImageList.unembed"]], "user_domain (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.user_domain"]], "utilities_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.utilities_folder"]], "value (pyxa.apps.imageevents.xaimageeventsmetadatatag property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsMetadataTag.value"]], "value() (pyxa.apps.imageevents.xaimageeventsmetadatataglist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsMetadataTagList.value"]], "version (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.version"]], "version (pyxa.apps.imageevents.xaimageeventsprofile property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfile.version"]], "version() (pyxa.apps.imageevents.xaimageeventsprofilelist method)": [[23, "PyXA.apps.ImageEvents.XAImageEventsProfileList.version"]], "workflows_folder (pyxa.apps.imageevents.xaimageeventsapplication property)": [[23, "PyXA.apps.ImageEvents.XAImageEventsApplication.workflows_folder"]], "pyxa.apps.iterm": [[24, "module-PyXA.apps.iTerm"]], "xaitermapplication (class in pyxa.apps.iterm)": [[24, "PyXA.apps.iTerm.XAiTermApplication"]], "xaitermhotkeywindow (class in pyxa.apps.iterm)": [[24, "PyXA.apps.iTerm.XAiTermHotkeyWindow"]], "xaitermsession (class in pyxa.apps.iterm)": [[24, "PyXA.apps.iTerm.XAiTermSession"]], "xaitermtab (class in pyxa.apps.iterm)": [[24, "PyXA.apps.iTerm.XAiTermTab"]], "xaitermwindow (class in pyxa.apps.iterm)": [[24, "PyXA.apps.iTerm.XAiTermWindow"]], "alternate_identifier (pyxa.apps.iterm.xaitermwindow property)": [[24, "PyXA.apps.iTerm.XAiTermWindow.alternate_identifier"]], "ansi_black_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.ansi_black_color"]], "ansi_blue_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.ansi_blue_color"]], "ansi_bright_black_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.ansi_bright_black_color"]], "ansi_bright_blue_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.ansi_bright_blue_color"]], "ansi_bright_cyan_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.ansi_bright_cyan_color"]], "ansi_bright_green_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.ansi_bright_green_color"]], "ansi_bright_magenta_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.ansi_bright_magenta_color"]], "ansi_bright_red_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.ansi_bright_red_color"]], "ansi_bright_white_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.ansi_bright_white_color"]], "ansi_bright_yellow_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.ansi_bright_yellow_color"]], "ansi_cyan_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.ansi_cyan_color"]], "ansi_green_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.ansi_green_color"]], "ansi_magenta_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.ansi_magenta_color"]], "ansi_red_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.ansi_red_color"]], "ansi_white_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.ansi_white_color"]], "ansi_yellow_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.ansi_yellow_color"]], "answerback_string (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.answerback_string"]], "background_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.background_color"]], "background_image (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.background_image"]], "bold_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.bold_color"]], "close() (pyxa.apps.iterm.xaitermsession method)": [[24, "PyXA.apps.iTerm.XAiTermSession.close"]], "close() (pyxa.apps.iterm.xaitermtab method)": [[24, "PyXA.apps.iTerm.XAiTermTab.close"]], "close() (pyxa.apps.iterm.xaitermwindow method)": [[24, "PyXA.apps.iTerm.XAiTermWindow.close"]], "color_preset (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.color_preset"]], "columns (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.columns"]], "contents (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.contents"]], "create_hotkey_window() (pyxa.apps.iterm.xaitermapplication method)": [[24, "PyXA.apps.iTerm.XAiTermApplication.create_hotkey_window"]], "create_tab() (pyxa.apps.iterm.xaitermwindow method)": [[24, "PyXA.apps.iTerm.XAiTermWindow.create_tab"]], "create_window() (pyxa.apps.iterm.xaitermapplication method)": [[24, "PyXA.apps.iTerm.XAiTermApplication.create_window"]], "current_session (pyxa.apps.iterm.xaitermtab property)": [[24, "PyXA.apps.iTerm.XAiTermTab.current_session"]], "current_session (pyxa.apps.iterm.xaitermwindow property)": [[24, "PyXA.apps.iTerm.XAiTermWindow.current_session"]], "current_tab (pyxa.apps.iterm.xaitermwindow property)": [[24, "PyXA.apps.iTerm.XAiTermWindow.current_tab"]], "current_window (pyxa.apps.iterm.xaitermapplication property)": [[24, "PyXA.apps.iTerm.XAiTermApplication.current_window"]], "cursor_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.cursor_color"]], "cursor_text_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.cursor_text_color"]], "foreground_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.foreground_color"]], "frontmost (pyxa.apps.iterm.xaitermapplication property)": [[24, "PyXA.apps.iTerm.XAiTermApplication.frontmost"]], "frontmost (pyxa.apps.iterm.xaitermwindow property)": [[24, "PyXA.apps.iTerm.XAiTermWindow.frontmost"]], "hide_hotkey_window() (pyxa.apps.iterm.xaitermhotkeywindow method)": [[24, "PyXA.apps.iTerm.XAiTermHotkeyWindow.hide_hotkey_window"]], "hotkey_window_profile (pyxa.apps.iterm.xaitermwindow property)": [[24, "PyXA.apps.iTerm.XAiTermWindow.hotkey_window_profile"]], "id (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.id"]], "index (pyxa.apps.iterm.xaitermtab property)": [[24, "PyXA.apps.iTerm.XAiTermTab.index"]], "invoke_api_expression() (pyxa.apps.iterm.xaitermapplication method)": [[24, "PyXA.apps.iTerm.XAiTermApplication.invoke_api_expression"]], "is_at_shell_prompt (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.is_at_shell_prompt"]], "is_hotkey_window (pyxa.apps.iterm.xaitermwindow property)": [[24, "PyXA.apps.iTerm.XAiTermWindow.is_hotkey_window"]], "is_processing (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.is_processing"]], "launch_api_script() (pyxa.apps.iterm.xaitermapplication method)": [[24, "PyXA.apps.iTerm.XAiTermApplication.launch_api_script"]], "move_to() (pyxa.apps.iterm.xaitermtab method)": [[24, "PyXA.apps.iTerm.XAiTermTab.move_to"]], "name (pyxa.apps.iterm.xaitermapplication property)": [[24, "PyXA.apps.iTerm.XAiTermApplication.name"]], "name (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.name"]], "position (pyxa.apps.iterm.xaitermwindow property)": [[24, "PyXA.apps.iTerm.XAiTermWindow.position"]], "profile_name (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.profile_name"]], "request_cookie_and_key() (pyxa.apps.iterm.xaitermapplication method)": [[24, "PyXA.apps.iTerm.XAiTermApplication.request_cookie_and_key"]], "reveal_hotkey_window() (pyxa.apps.iterm.xaitermhotkeywindow method)": [[24, "PyXA.apps.iTerm.XAiTermHotkeyWindow.reveal_hotkey_window"]], "rows (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.rows"]], "selected_text_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.selected_text_color"]], "selection_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.selection_color"]], "set_variable() (pyxa.apps.iterm.xaitermsession method)": [[24, "PyXA.apps.iTerm.XAiTermSession.set_variable"]], "split_horizontally() (pyxa.apps.iterm.xaitermsession method)": [[24, "PyXA.apps.iTerm.XAiTermSession.split_horizontally"]], "split_horizontally_with_default_profile() (pyxa.apps.iterm.xaitermsession method)": [[24, "PyXA.apps.iTerm.XAiTermSession.split_horizontally_with_default_profile"]], "split_vertically() (pyxa.apps.iterm.xaitermsession method)": [[24, "PyXA.apps.iTerm.XAiTermSession.split_vertically"]], "split_vertically_with_default_profile() (pyxa.apps.iterm.xaitermsession method)": [[24, "PyXA.apps.iTerm.XAiTermSession.split_vertically_with_default_profile"]], "text (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.text"]], "toggle_hotkey_window() (pyxa.apps.iterm.xaitermhotkeywindow method)": [[24, "PyXA.apps.iTerm.XAiTermHotkeyWindow.toggle_hotkey_window"]], "transparency (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.transparency"]], "tty (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.tty"]], "underline_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.underline_color"]], "unique_id (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.unique_id"]], "use_underline_color (pyxa.apps.iterm.xaitermsession property)": [[24, "PyXA.apps.iTerm.XAiTermSession.use_underline_color"]], "variable() (pyxa.apps.iterm.xaitermsession method)": [[24, "PyXA.apps.iTerm.XAiTermSession.variable"]], "version (pyxa.apps.iterm.xaitermapplication property)": [[24, "PyXA.apps.iTerm.XAiTermApplication.version"]], "write() (pyxa.apps.iterm.xaitermsession method)": [[24, "PyXA.apps.iTerm.XAiTermSession.write"]], "advanced_gradient_fill (pyxa.apps.iworkapplicationbase.xaiworkapplication.filloption attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.FillOption.ADVANCED_GRADIENT_FILL"]], "advanced_image_fill (pyxa.apps.iworkapplicationbase.xaiworkapplication.filloption attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.FillOption.ADVANCED_IMAGE_FILL"]], "area_2d (pyxa.apps.iworkapplicationbase.xaiworkapplication.charttype attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartType.AREA_2D"]], "area_3d (pyxa.apps.iworkapplicationbase.xaiworkapplication.charttype attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartType.AREA_3D"]], "ascending (pyxa.apps.iworkapplicationbase.xaiworkapplication.sortdirection attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.SortDirection.ASCENDING"]], "auto (pyxa.apps.iworkapplicationbase.xaiworkapplication.alignment attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.Alignment.AUTO"]], "auto (pyxa.apps.iworkapplicationbase.xaiworkapplication.cellformat attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.CellFormat.AUTO"]], "best (pyxa.apps.iworkapplicationbase.xaiworkapplication.imagequality attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ImageQuality.BEST"]], "better (pyxa.apps.iworkapplicationbase.xaiworkapplication.imagequality attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ImageQuality.BETTER"]], "bottom (pyxa.apps.iworkapplicationbase.xaiworkapplication.alignment attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.Alignment.BOTTOM"]], "center_horizontal (pyxa.apps.iworkapplicationbase.xaiworkapplication.alignment attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.Alignment.CENTER_HORIZONTAL"]], "center_vertical (pyxa.apps.iworkapplicationbase.xaiworkapplication.alignment attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.Alignment.CENTER_VERTICAL"]], "checkbox (pyxa.apps.iworkapplicationbase.xaiworkapplication.cellformat attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.CellFormat.CHECKBOX"]], "color_fill (pyxa.apps.iworkapplicationbase.xaiworkapplication.filloption attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.FillOption.COLOR_FILL"]], "column (pyxa.apps.iworkapplicationbase.xaiworkapplication.chartgrouping attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartGrouping.COLUMN"]], "command_down (pyxa.apps.iworkapplicationbase.xaiworkapplication.keyaction attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.KeyAction.COMMAND_DOWN"]], "control_down (pyxa.apps.iworkapplicationbase.xaiworkapplication.keyaction attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.KeyAction.CONTROL_DOWN"]], "currency (pyxa.apps.iworkapplicationbase.xaiworkapplication.cellformat attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.CellFormat.CURRENCY"]], "date_and_time (pyxa.apps.iworkapplicationbase.xaiworkapplication.cellformat attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.CellFormat.DATE_AND_TIME"]], "decimal_number (pyxa.apps.iworkapplicationbase.xaiworkapplication.cellformat attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.CellFormat.DECIMAL_NUMBER"]], "descending (pyxa.apps.iworkapplicationbase.xaiworkapplication.sortdirection attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.SortDirection.DESCENDING"]], "duration (pyxa.apps.iworkapplicationbase.xaiworkapplication.cellformat attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.CellFormat.DURATION"]], "fraction (pyxa.apps.iworkapplicationbase.xaiworkapplication.cellformat attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.CellFormat.FRACTION"]], "good (pyxa.apps.iworkapplicationbase.xaiworkapplication.imagequality attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ImageQuality.GOOD"]], "gradient_fill (pyxa.apps.iworkapplicationbase.xaiworkapplication.filloption attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.FillOption.GRADIENT_FILL"]], "horizontal_bar_2d (pyxa.apps.iworkapplicationbase.xaiworkapplication.charttype attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartType.HORIZONTAL_BAR_2D"]], "horizontal_bar_3d (pyxa.apps.iworkapplicationbase.xaiworkapplication.charttype attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartType.HORIZONTAL_BAR_3D"]], "image_fill (pyxa.apps.iworkapplicationbase.xaiworkapplication.filloption attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.FillOption.IMAGE_FILL"]], "justify (pyxa.apps.iworkapplicationbase.xaiworkapplication.alignment attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.Alignment.JUSTIFY"]], "left (pyxa.apps.iworkapplicationbase.xaiworkapplication.alignment attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.Alignment.LEFT"]], "line_2d (pyxa.apps.iworkapplicationbase.xaiworkapplication.charttype attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartType.LINE_2D"]], "line_3d (pyxa.apps.iworkapplicationbase.xaiworkapplication.charttype attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartType.LINE_3D"]], "loop (pyxa.apps.iworkapplicationbase.xaiworkapplication.repetitionmethod attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.RepetitionMethod.LOOP"]], "loop_back_and_forth (pyxa.apps.iworkapplicationbase.xaiworkapplication.repetitionmethod attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.RepetitionMethod.LOOP_BACK_AND_FORTH"]], "none (pyxa.apps.iworkapplicationbase.xaiworkapplication.repetitionmethod attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.RepetitionMethod.NONE"]], "no_fill (pyxa.apps.iworkapplicationbase.xaiworkapplication.filloption attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.FillOption.NO_FILL"]], "numeral_system (pyxa.apps.iworkapplicationbase.xaiworkapplication.cellformat attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.CellFormat.NUMERAL_SYSTEM"]], "option_down (pyxa.apps.iworkapplicationbase.xaiworkapplication.keyaction attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.KeyAction.OPTION_DOWN"]], "percent (pyxa.apps.iworkapplicationbase.xaiworkapplication.cellformat attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.CellFormat.PERCENT"]], "pie_2d (pyxa.apps.iworkapplicationbase.xaiworkapplication.charttype attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartType.PIE_2D"]], "pie_3d (pyxa.apps.iworkapplicationbase.xaiworkapplication.charttype attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartType.PIE_3D"]], "popup_menu (pyxa.apps.iworkapplicationbase.xaiworkapplication.cellformat attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.CellFormat.POPUP_MENU"]], "pyxa.apps.iworkapplicationbase": [[25, "module-PyXA.apps.iWorkApplicationBase"]], "rating (pyxa.apps.iworkapplicationbase.xaiworkapplication.cellformat attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.CellFormat.RATING"]], "right (pyxa.apps.iworkapplicationbase.xaiworkapplication.alignment attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.Alignment.RIGHT"]], "row (pyxa.apps.iworkapplicationbase.xaiworkapplication.chartgrouping attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartGrouping.ROW"]], "scatterplot_2d (pyxa.apps.iworkapplicationbase.xaiworkapplication.charttype attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartType.SCATTERPLOT_2D"]], "scientific (pyxa.apps.iworkapplicationbase.xaiworkapplication.cellformat attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.CellFormat.SCIENTIFIC"]], "shift_down (pyxa.apps.iworkapplicationbase.xaiworkapplication.keyaction attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.KeyAction.SHIFT_DOWN"]], "slider (pyxa.apps.iworkapplicationbase.xaiworkapplication.cellformat attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.CellFormat.SLIDER"]], "stacked_area_2d (pyxa.apps.iworkapplicationbase.xaiworkapplication.charttype attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartType.STACKED_AREA_2D"]], "stacked_area_3d (pyxa.apps.iworkapplicationbase.xaiworkapplication.charttype attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartType.STACKED_AREA_3D"]], "stacked_horizontal_bar_2d (pyxa.apps.iworkapplicationbase.xaiworkapplication.charttype attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartType.STACKED_HORIZONTAL_BAR_2D"]], "stacked_horizontal_bar_3d (pyxa.apps.iworkapplicationbase.xaiworkapplication.charttype attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartType.STACKED_HORIZONTAL_BAR_3D"]], "stacked_vertical_bar_2d (pyxa.apps.iworkapplicationbase.xaiworkapplication.charttype attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartType.STACKED_VERTICAL_BAR_2D"]], "stacked_vertical_bar_3d (pyxa.apps.iworkapplicationbase.xaiworkapplication.charttype attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartType.STACKED_VERTICAL_BAR_3D"]], "stepper (pyxa.apps.iworkapplicationbase.xaiworkapplication.cellformat attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.CellFormat.STEPPER"]], "text (pyxa.apps.iworkapplicationbase.xaiworkapplication.cellformat attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.CellFormat.TEXT"]], "top (pyxa.apps.iworkapplicationbase.xaiworkapplication.alignment attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.Alignment.TOP"]], "vertical_bar_2d (pyxa.apps.iworkapplicationbase.xaiworkapplication.charttype attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartType.VERTICAL_BAR_2D"]], "vertical_bar_3d (pyxa.apps.iworkapplicationbase.xaiworkapplication.charttype attribute)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartType.VERTICAL_BAR_3D"]], "xaiworkapplication (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication"]], "xaiworkapplication.alignment (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.Alignment"]], "xaiworkapplication.cellformat (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.CellFormat"]], "xaiworkapplication.chartgrouping (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartGrouping"]], "xaiworkapplication.charttype (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ChartType"]], "xaiworkapplication.filloption (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.FillOption"]], "xaiworkapplication.imagequality (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.ImageQuality"]], "xaiworkapplication.keyaction (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.KeyAction"]], "xaiworkapplication.repetitionmethod (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.RepetitionMethod"]], "xaiworkapplication.sortdirection (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.SortDirection"]], "xaiworkaudioclip (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkAudioClip"]], "xaiworkaudiocliplist (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkAudioClipList"]], "xaiworkcell (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCell"]], "xaiworkcelllist (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCellList"]], "xaiworkchart (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkChart"]], "xaiworkchartlist (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkChartList"]], "xaiworkcolumn (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkColumn"]], "xaiworkcolumnlist (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkColumnList"]], "xaiworkcontainer (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainer"]], "xaiworkcontainerlist (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainerList"]], "xaiworkdocument (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocument"]], "xaiworkdocumentlist (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocumentList"]], "xaiworkgroup (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkGroup"]], "xaiworkgrouplist (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkGroupList"]], "xaiworkimage (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImage"]], "xaiworkimagelist (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImageList"]], "xaiworkline (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkLine"]], "xaiworklinelist (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkLineList"]], "xaiworkmovie (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovie"]], "xaiworkmovielist (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovieList"]], "xaiworkrange (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRange"]], "xaiworkrangelist (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList"]], "xaiworkrow (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRow"]], "xaiworkrowlist (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRowList"]], "xaiworkshape (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShape"]], "xaiworkshapelist (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShapeList"]], "xaiworktable (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTable"]], "xaiworktablelist (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTableList"]], "xaiworktextitem (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItem"]], "xaiworktextitemlist (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItemList"]], "xaiworkwindow (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkWindow"]], "xaiworkiworkitem (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItem"]], "xaiworkiworkitemlist (class in pyxa.apps.iworkapplicationbase)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItemList"]], "address (pyxa.apps.iworkapplicationbase.xaiworkcolumn property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkColumn.address"]], "address (pyxa.apps.iworkapplicationbase.xaiworkrow property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRow.address"]], "address() (pyxa.apps.iworkapplicationbase.xaiworkcolumnlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkColumnList.address"]], "address() (pyxa.apps.iworkapplicationbase.xaiworkrowlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRowList.address"]], "alignment (pyxa.apps.iworkapplicationbase.xaiworkrange property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRange.alignment"]], "alignment() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.alignment"]], "audio_clips() (pyxa.apps.iworkapplicationbase.xaiworkcontainer method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainer.audio_clips"]], "background_color (pyxa.apps.iworkapplicationbase.xaiworkrange property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRange.background_color"]], "background_color() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.background_color"]], "background_fill_type (pyxa.apps.iworkapplicationbase.xaiworkshape property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShape.background_fill_type"]], "background_fill_type (pyxa.apps.iworkapplicationbase.xaiworktextitem property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItem.background_fill_type"]], "background_fill_type() (pyxa.apps.iworkapplicationbase.xaiworkshapelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShapeList.background_fill_type"]], "background_fill_type() (pyxa.apps.iworkapplicationbase.xaiworktextitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItemList.background_fill_type"]], "by_address() (pyxa.apps.iworkapplicationbase.xaiworkcolumnlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkColumnList.by_address"]], "by_address() (pyxa.apps.iworkapplicationbase.xaiworkrowlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRowList.by_address"]], "by_alignment() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.by_alignment"]], "by_background_color() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.by_background_color"]], "by_background_fill_type() (pyxa.apps.iworkapplicationbase.xaiworkshapelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShapeList.by_background_fill_type"]], "by_background_fill_type() (pyxa.apps.iworkapplicationbase.xaiworktextitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItemList.by_background_fill_type"]], "by_cell_range() (pyxa.apps.iworkapplicationbase.xaiworktablelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTableList.by_cell_range"]], "by_clip_volume() (pyxa.apps.iworkapplicationbase.xaiworkaudiocliplist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkAudioClipList.by_clip_volume"]], "by_column() (pyxa.apps.iworkapplicationbase.xaiworkcelllist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCellList.by_column"]], "by_column_count() (pyxa.apps.iworkapplicationbase.xaiworktablelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTableList.by_column_count"]], "by_description() (pyxa.apps.iworkapplicationbase.xaiworkimagelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImageList.by_description"]], "by_end_point() (pyxa.apps.iworkapplicationbase.xaiworklinelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkLineList.by_end_point"]], "by_file() (pyxa.apps.iworkapplicationbase.xaiworkdocumentlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocumentList.by_file"]], "by_file() (pyxa.apps.iworkapplicationbase.xaiworkimagelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImageList.by_file"]], "by_file_name() (pyxa.apps.iworkapplicationbase.xaiworkaudiocliplist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkAudioClipList.by_file_name"]], "by_file_name() (pyxa.apps.iworkapplicationbase.xaiworkimagelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImageList.by_file_name"]], "by_file_name() (pyxa.apps.iworkapplicationbase.xaiworkmovielist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovieList.by_file_name"]], "by_font_name() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.by_font_name"]], "by_font_size() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.by_font_size"]], "by_footer_row_count() (pyxa.apps.iworkapplicationbase.xaiworktablelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTableList.by_footer_row_count"]], "by_format() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.by_format"]], "by_formatted_value() (pyxa.apps.iworkapplicationbase.xaiworkcelllist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCellList.by_formatted_value"]], "by_formula() (pyxa.apps.iworkapplicationbase.xaiworkcelllist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCellList.by_formula"]], "by_header_column_count() (pyxa.apps.iworkapplicationbase.xaiworktablelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTableList.by_header_column_count"]], "by_header_row_count() (pyxa.apps.iworkapplicationbase.xaiworktablelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTableList.by_header_row_count"]], "by_height() (pyxa.apps.iworkapplicationbase.xaiworkgrouplist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkGroupList.by_height"]], "by_height() (pyxa.apps.iworkapplicationbase.xaiworkrowlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRowList.by_height"]], "by_height() (pyxa.apps.iworkapplicationbase.xaiworkiworkitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItemList.by_height"]], "by_id() (pyxa.apps.iworkapplicationbase.xaiworkdocumentlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocumentList.by_id"]], "by_locked() (pyxa.apps.iworkapplicationbase.xaiworkiworkitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItemList.by_locked"]], "by_modified() (pyxa.apps.iworkapplicationbase.xaiworkdocumentlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocumentList.by_modified"]], "by_movie_volume() (pyxa.apps.iworkapplicationbase.xaiworkmovielist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovieList.by_movie_volume"]], "by_name() (pyxa.apps.iworkapplicationbase.xaiworkdocumentlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocumentList.by_name"]], "by_name() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.by_name"]], "by_name() (pyxa.apps.iworkapplicationbase.xaiworktablelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTableList.by_name"]], "by_object_text() (pyxa.apps.iworkapplicationbase.xaiworkshapelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShapeList.by_object_text"]], "by_opacity() (pyxa.apps.iworkapplicationbase.xaiworkimagelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImageList.by_opacity"]], "by_opacity() (pyxa.apps.iworkapplicationbase.xaiworkmovielist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovieList.by_opacity"]], "by_opacity() (pyxa.apps.iworkapplicationbase.xaiworkshapelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShapeList.by_opacity"]], "by_opacity() (pyxa.apps.iworkapplicationbase.xaiworktextitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItemList.by_opacity"]], "by_parent() (pyxa.apps.iworkapplicationbase.xaiworkgrouplist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkGroupList.by_parent"]], "by_parent() (pyxa.apps.iworkapplicationbase.xaiworkiworkitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItemList.by_parent"]], "by_password_protected() (pyxa.apps.iworkapplicationbase.xaiworkdocumentlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocumentList.by_password_protected"]], "by_position() (pyxa.apps.iworkapplicationbase.xaiworkgrouplist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkGroupList.by_position"]], "by_position() (pyxa.apps.iworkapplicationbase.xaiworkiworkitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItemList.by_position"]], "by_properties() (pyxa.apps.iworkapplicationbase.xaiworkcelllist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCellList.by_properties"]], "by_properties() (pyxa.apps.iworkapplicationbase.xaiworkcolumnlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkColumnList.by_properties"]], "by_properties() (pyxa.apps.iworkapplicationbase.xaiworkdocumentlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocumentList.by_properties"]], "by_properties() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.by_properties"]], "by_properties() (pyxa.apps.iworkapplicationbase.xaiworkrowlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRowList.by_properties"]], "by_properties() (pyxa.apps.iworkapplicationbase.xaiworkshapelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShapeList.by_properties"]], "by_properties() (pyxa.apps.iworkapplicationbase.xaiworkiworkitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItemList.by_properties"]], "by_reflection_showing() (pyxa.apps.iworkapplicationbase.xaiworkimagelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImageList.by_reflection_showing"]], "by_reflection_showing() (pyxa.apps.iworkapplicationbase.xaiworklinelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkLineList.by_reflection_showing"]], "by_reflection_showing() (pyxa.apps.iworkapplicationbase.xaiworkmovielist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovieList.by_reflection_showing"]], "by_reflection_showing() (pyxa.apps.iworkapplicationbase.xaiworkshapelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShapeList.by_reflection_showing"]], "by_reflection_showing() (pyxa.apps.iworkapplicationbase.xaiworktextitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItemList.by_reflection_showing"]], "by_reflection_value() (pyxa.apps.iworkapplicationbase.xaiworkimagelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImageList.by_reflection_value"]], "by_reflection_value() (pyxa.apps.iworkapplicationbase.xaiworklinelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkLineList.by_reflection_value"]], "by_reflection_value() (pyxa.apps.iworkapplicationbase.xaiworkmovielist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovieList.by_reflection_value"]], "by_reflection_value() (pyxa.apps.iworkapplicationbase.xaiworkshapelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShapeList.by_reflection_value"]], "by_reflection_value() (pyxa.apps.iworkapplicationbase.xaiworktextitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItemList.by_reflection_value"]], "by_repetition_method() (pyxa.apps.iworkapplicationbase.xaiworkaudiocliplist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkAudioClipList.by_repetition_method"]], "by_repetition_method() (pyxa.apps.iworkapplicationbase.xaiworkmovielist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovieList.by_repetition_method"]], "by_rotation() (pyxa.apps.iworkapplicationbase.xaiworkgrouplist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkGroupList.by_rotation"]], "by_rotation() (pyxa.apps.iworkapplicationbase.xaiworkimagelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImageList.by_rotation"]], "by_rotation() (pyxa.apps.iworkapplicationbase.xaiworklinelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkLineList.by_rotation"]], "by_rotation() (pyxa.apps.iworkapplicationbase.xaiworkmovielist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovieList.by_rotation"]], "by_rotation() (pyxa.apps.iworkapplicationbase.xaiworkshapelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShapeList.by_rotation"]], "by_rotation() (pyxa.apps.iworkapplicationbase.xaiworktextitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItemList.by_rotation"]], "by_row() (pyxa.apps.iworkapplicationbase.xaiworkcelllist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCellList.by_row"]], "by_row_count() (pyxa.apps.iworkapplicationbase.xaiworktablelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTableList.by_row_count"]], "by_selection() (pyxa.apps.iworkapplicationbase.xaiworkdocumentlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocumentList.by_selection"]], "by_selection_range() (pyxa.apps.iworkapplicationbase.xaiworktablelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTableList.by_selection_range"]], "by_start_point() (pyxa.apps.iworkapplicationbase.xaiworklinelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkLineList.by_start_point"]], "by_text() (pyxa.apps.iworkapplicationbase.xaiworktextitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItemList.by_text"]], "by_text_color() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.by_text_color"]], "by_text_wrap() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.by_text_wrap"]], "by_value() (pyxa.apps.iworkapplicationbase.xaiworkcelllist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCellList.by_value"]], "by_vertical_alignment() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.by_vertical_alignment"]], "by_width() (pyxa.apps.iworkapplicationbase.xaiworkcolumnlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkColumnList.by_width"]], "by_width() (pyxa.apps.iworkapplicationbase.xaiworkgrouplist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkGroupList.by_width"]], "by_width() (pyxa.apps.iworkapplicationbase.xaiworkiworkitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItemList.by_width"]], "cell_range (pyxa.apps.iworkapplicationbase.xaiworktable property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTable.cell_range"]], "cell_range() (pyxa.apps.iworkapplicationbase.xaiworktablelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTableList.cell_range"]], "cells() (pyxa.apps.iworkapplicationbase.xaiworkrange method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRange.cells"]], "cells() (pyxa.apps.iworkapplicationbase.xaiworktable method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTable.cells"]], "charts() (pyxa.apps.iworkapplicationbase.xaiworkcontainer method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainer.charts"]], "charts() (pyxa.apps.iworkapplicationbase.xaiworkcontainerlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainerList.charts"]], "clear() (pyxa.apps.iworkapplicationbase.xaiworkrange method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRange.clear"]], "clip_volume (pyxa.apps.iworkapplicationbase.xaiworkaudioclip property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkAudioClip.clip_volume"]], "clip_volume() (pyxa.apps.iworkapplicationbase.xaiworkaudiocliplist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkAudioClipList.clip_volume"]], "column (pyxa.apps.iworkapplicationbase.xaiworkcell property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCell.column"]], "column() (pyxa.apps.iworkapplicationbase.xaiworkcelllist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCellList.column"]], "column_count (pyxa.apps.iworkapplicationbase.xaiworktable property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTable.column_count"]], "column_count() (pyxa.apps.iworkapplicationbase.xaiworktablelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTableList.column_count"]], "columns() (pyxa.apps.iworkapplicationbase.xaiworkrange method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRange.columns"]], "columns() (pyxa.apps.iworkapplicationbase.xaiworktable method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTable.columns"]], "current_document (pyxa.apps.iworkapplicationbase.xaiworkapplication property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.current_document"]], "delete() (pyxa.apps.iworkapplicationbase.xaiworkiworkitem method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItem.delete"]], "description (pyxa.apps.iworkapplicationbase.xaiworkimage property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImage.description"]], "description() (pyxa.apps.iworkapplicationbase.xaiworkimagelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImageList.description"]], "duplicate() (pyxa.apps.iworkapplicationbase.xaiworkiworkitem method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItem.duplicate"]], "end_point (pyxa.apps.iworkapplicationbase.xaiworkline property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkLine.end_point"]], "end_point() (pyxa.apps.iworkapplicationbase.xaiworklinelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkLineList.end_point"]], "file (pyxa.apps.iworkapplicationbase.xaiworkdocument property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocument.file"]], "file (pyxa.apps.iworkapplicationbase.xaiworkimage property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImage.file"]], "file() (pyxa.apps.iworkapplicationbase.xaiworkdocumentlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocumentList.file"]], "file() (pyxa.apps.iworkapplicationbase.xaiworkimagelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImageList.file"]], "file_name (pyxa.apps.iworkapplicationbase.xaiworkaudioclip property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkAudioClip.file_name"]], "file_name (pyxa.apps.iworkapplicationbase.xaiworkimage property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImage.file_name"]], "file_name (pyxa.apps.iworkapplicationbase.xaiworkmovie property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovie.file_name"]], "file_name() (pyxa.apps.iworkapplicationbase.xaiworkaudiocliplist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkAudioClipList.file_name"]], "file_name() (pyxa.apps.iworkapplicationbase.xaiworkimagelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImageList.file_name"]], "file_name() (pyxa.apps.iworkapplicationbase.xaiworkmovielist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovieList.file_name"]], "font_name (pyxa.apps.iworkapplicationbase.xaiworkrange property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRange.font_name"]], "font_name() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.font_name"]], "font_size (pyxa.apps.iworkapplicationbase.xaiworkrange property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRange.font_size"]], "font_size() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.font_size"]], "footer_row_count (pyxa.apps.iworkapplicationbase.xaiworktable property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTable.footer_row_count"]], "footer_row_count() (pyxa.apps.iworkapplicationbase.xaiworktablelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTableList.footer_row_count"]], "format (pyxa.apps.iworkapplicationbase.xaiworkrange property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRange.format"]], "format() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.format"]], "formatted_value (pyxa.apps.iworkapplicationbase.xaiworkcell property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCell.formatted_value"]], "formatted_value() (pyxa.apps.iworkapplicationbase.xaiworkcelllist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCellList.formatted_value"]], "formula (pyxa.apps.iworkapplicationbase.xaiworkcell property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCell.formula"]], "formula() (pyxa.apps.iworkapplicationbase.xaiworkcelllist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCellList.formula"]], "frontmost (pyxa.apps.iworkapplicationbase.xaiworkapplication property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.frontmost"]], "groups() (pyxa.apps.iworkapplicationbase.xaiworkcontainer method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainer.groups"]], "groups() (pyxa.apps.iworkapplicationbase.xaiworkcontainerlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainerList.groups"]], "header_column_count (pyxa.apps.iworkapplicationbase.xaiworktable property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTable.header_column_count"]], "header_column_count() (pyxa.apps.iworkapplicationbase.xaiworktablelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTableList.header_column_count"]], "header_row_count (pyxa.apps.iworkapplicationbase.xaiworktable property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTable.header_row_count"]], "header_row_count() (pyxa.apps.iworkapplicationbase.xaiworktablelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTableList.header_row_count"]], "height (pyxa.apps.iworkapplicationbase.xaiworkgroup property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkGroup.height"]], "height (pyxa.apps.iworkapplicationbase.xaiworkrow property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRow.height"]], "height (pyxa.apps.iworkapplicationbase.xaiworkiworkitem property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItem.height"]], "height() (pyxa.apps.iworkapplicationbase.xaiworkgrouplist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkGroupList.height"]], "height() (pyxa.apps.iworkapplicationbase.xaiworkrowlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRowList.height"]], "height() (pyxa.apps.iworkapplicationbase.xaiworkiworkitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItemList.height"]], "id (pyxa.apps.iworkapplicationbase.xaiworkdocument property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocument.id"]], "id() (pyxa.apps.iworkapplicationbase.xaiworkdocumentlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocumentList.id"]], "images() (pyxa.apps.iworkapplicationbase.xaiworkcontainer method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainer.images"]], "images() (pyxa.apps.iworkapplicationbase.xaiworkcontainerlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainerList.images"]], "iwork_items() (pyxa.apps.iworkapplicationbase.xaiworkcontainer method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainer.iwork_items"]], "iwork_items() (pyxa.apps.iworkapplicationbase.xaiworkcontainerlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainerList.iwork_items"]], "lines() (pyxa.apps.iworkapplicationbase.xaiworkcontainer method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainer.lines"]], "lines() (pyxa.apps.iworkapplicationbase.xaiworkcontainerlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainerList.lines"]], "lock() (pyxa.apps.iworkapplicationbase.xaiworkiworkitem method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItem.lock"]], "locked (pyxa.apps.iworkapplicationbase.xaiworkiworkitem property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItem.locked"]], "locked() (pyxa.apps.iworkapplicationbase.xaiworkiworkitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItemList.locked"]], "merge() (pyxa.apps.iworkapplicationbase.xaiworkrange method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRange.merge"]], "modified (pyxa.apps.iworkapplicationbase.xaiworkdocument property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocument.modified"]], "modified() (pyxa.apps.iworkapplicationbase.xaiworkdocumentlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocumentList.modified"]], "movie_volume (pyxa.apps.iworkapplicationbase.xaiworkmovie property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovie.movie_volume"]], "movie_volume() (pyxa.apps.iworkapplicationbase.xaiworkmovielist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovieList.movie_volume"]], "movies() (pyxa.apps.iworkapplicationbase.xaiworkcontainer method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainer.movies"]], "movies() (pyxa.apps.iworkapplicationbase.xaiworkcontainerlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainerList.movies"]], "name (pyxa.apps.iworkapplicationbase.xaiworkapplication property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.name"]], "name (pyxa.apps.iworkapplicationbase.xaiworkdocument property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocument.name"]], "name (pyxa.apps.iworkapplicationbase.xaiworkrange property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRange.name"]], "name (pyxa.apps.iworkapplicationbase.xaiworktable property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTable.name"]], "name() (pyxa.apps.iworkapplicationbase.xaiworkdocumentlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocumentList.name"]], "name() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.name"]], "name() (pyxa.apps.iworkapplicationbase.xaiworktablelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTableList.name"]], "object_text (pyxa.apps.iworkapplicationbase.xaiworkshape property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShape.object_text"]], "object_text() (pyxa.apps.iworkapplicationbase.xaiworkshapelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShapeList.object_text"]], "opacity (pyxa.apps.iworkapplicationbase.xaiworkimage property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImage.opacity"]], "opacity (pyxa.apps.iworkapplicationbase.xaiworkmovie property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovie.opacity"]], "opacity (pyxa.apps.iworkapplicationbase.xaiworkshape property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShape.opacity"]], "opacity (pyxa.apps.iworkapplicationbase.xaiworktextitem property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItem.opacity"]], "opacity() (pyxa.apps.iworkapplicationbase.xaiworkimagelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImageList.opacity"]], "opacity() (pyxa.apps.iworkapplicationbase.xaiworkmovielist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovieList.opacity"]], "opacity() (pyxa.apps.iworkapplicationbase.xaiworkshapelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShapeList.opacity"]], "opacity() (pyxa.apps.iworkapplicationbase.xaiworktextitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItemList.opacity"]], "open() (pyxa.apps.iworkapplicationbase.xaiworkapplication method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.open"]], "parent (pyxa.apps.iworkapplicationbase.xaiworkgroup property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkGroup.parent"]], "parent (pyxa.apps.iworkapplicationbase.xaiworkiworkitem property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItem.parent"]], "parent() (pyxa.apps.iworkapplicationbase.xaiworkgrouplist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkGroupList.parent"]], "parent() (pyxa.apps.iworkapplicationbase.xaiworkiworkitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItemList.parent"]], "password_protected (pyxa.apps.iworkapplicationbase.xaiworkdocument property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocument.password_protected"]], "password_protected() (pyxa.apps.iworkapplicationbase.xaiworkdocumentlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocumentList.password_protected"]], "position (pyxa.apps.iworkapplicationbase.xaiworkgroup property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkGroup.position"]], "position (pyxa.apps.iworkapplicationbase.xaiworkiworkitem property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItem.position"]], "position() (pyxa.apps.iworkapplicationbase.xaiworkgrouplist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkGroupList.position"]], "position() (pyxa.apps.iworkapplicationbase.xaiworkiworkitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItemList.position"]], "print() (pyxa.apps.iworkapplicationbase.xaiworkapplication method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.print"]], "properties (pyxa.apps.iworkapplicationbase.xaiworkapplication property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.properties"]], "properties (pyxa.apps.iworkapplicationbase.xaiworkcell property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCell.properties"]], "properties (pyxa.apps.iworkapplicationbase.xaiworkcolumn property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkColumn.properties"]], "properties (pyxa.apps.iworkapplicationbase.xaiworkdocument property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocument.properties"]], "properties (pyxa.apps.iworkapplicationbase.xaiworkrange property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRange.properties"]], "properties (pyxa.apps.iworkapplicationbase.xaiworkrow property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRow.properties"]], "properties (pyxa.apps.iworkapplicationbase.xaiworkshape property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShape.properties"]], "properties() (pyxa.apps.iworkapplicationbase.xaiworkcelllist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCellList.properties"]], "properties() (pyxa.apps.iworkapplicationbase.xaiworkcolumnlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkColumnList.properties"]], "properties() (pyxa.apps.iworkapplicationbase.xaiworkdocumentlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocumentList.properties"]], "properties() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.properties"]], "properties() (pyxa.apps.iworkapplicationbase.xaiworkrowlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRowList.properties"]], "properties() (pyxa.apps.iworkapplicationbase.xaiworkshapelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShapeList.properties"]], "properties() (pyxa.apps.iworkapplicationbase.xaiworkiworkitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItemList.properties"]], "ranges() (pyxa.apps.iworkapplicationbase.xaiworktable method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTable.ranges"]], "reflection_showing (pyxa.apps.iworkapplicationbase.xaiworkimage property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImage.reflection_showing"]], "reflection_showing (pyxa.apps.iworkapplicationbase.xaiworkline property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkLine.reflection_showing"]], "reflection_showing (pyxa.apps.iworkapplicationbase.xaiworkmovie property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovie.reflection_showing"]], "reflection_showing (pyxa.apps.iworkapplicationbase.xaiworkshape property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShape.reflection_showing"]], "reflection_showing (pyxa.apps.iworkapplicationbase.xaiworktextitem property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItem.reflection_showing"]], "reflection_showing() (pyxa.apps.iworkapplicationbase.xaiworkimagelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImageList.reflection_showing"]], "reflection_showing() (pyxa.apps.iworkapplicationbase.xaiworklinelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkLineList.reflection_showing"]], "reflection_showing() (pyxa.apps.iworkapplicationbase.xaiworkmovielist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovieList.reflection_showing"]], "reflection_showing() (pyxa.apps.iworkapplicationbase.xaiworkshapelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShapeList.reflection_showing"]], "reflection_showing() (pyxa.apps.iworkapplicationbase.xaiworktextitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItemList.reflection_showing"]], "reflection_value (pyxa.apps.iworkapplicationbase.xaiworkimage property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImage.reflection_value"]], "reflection_value (pyxa.apps.iworkapplicationbase.xaiworkline property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkLine.reflection_value"]], "reflection_value (pyxa.apps.iworkapplicationbase.xaiworkmovie property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovie.reflection_value"]], "reflection_value (pyxa.apps.iworkapplicationbase.xaiworkshape property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShape.reflection_value"]], "reflection_value (pyxa.apps.iworkapplicationbase.xaiworktextitem property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItem.reflection_value"]], "reflection_value() (pyxa.apps.iworkapplicationbase.xaiworkimagelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImageList.reflection_value"]], "reflection_value() (pyxa.apps.iworkapplicationbase.xaiworklinelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkLineList.reflection_value"]], "reflection_value() (pyxa.apps.iworkapplicationbase.xaiworkmovielist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovieList.reflection_value"]], "reflection_value() (pyxa.apps.iworkapplicationbase.xaiworkshapelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShapeList.reflection_value"]], "reflection_value() (pyxa.apps.iworkapplicationbase.xaiworktextitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItemList.reflection_value"]], "remove_password() (pyxa.apps.iworkapplicationbase.xaiworkapplication method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.remove_password"]], "repetition_method (pyxa.apps.iworkapplicationbase.xaiworkaudioclip property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkAudioClip.repetition_method"]], "repetition_method (pyxa.apps.iworkapplicationbase.xaiworkmovie property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovie.repetition_method"]], "repetition_method() (pyxa.apps.iworkapplicationbase.xaiworkaudiocliplist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkAudioClipList.repetition_method"]], "replace_with() (pyxa.apps.iworkapplicationbase.xaiworkimage method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImage.replace_with"]], "resize() (pyxa.apps.iworkapplicationbase.xaiworkiworkitem method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItem.resize"]], "rotate() (pyxa.apps.iworkapplicationbase.xaiworkimage method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImage.rotate"]], "rotate() (pyxa.apps.iworkapplicationbase.xaiworkshape method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShape.rotate"]], "rotation (pyxa.apps.iworkapplicationbase.xaiworkgroup property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkGroup.rotation"]], "rotation (pyxa.apps.iworkapplicationbase.xaiworkimage property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImage.rotation"]], "rotation (pyxa.apps.iworkapplicationbase.xaiworkline property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkLine.rotation"]], "rotation (pyxa.apps.iworkapplicationbase.xaiworkmovie property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovie.rotation"]], "rotation (pyxa.apps.iworkapplicationbase.xaiworkshape property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShape.rotation"]], "rotation (pyxa.apps.iworkapplicationbase.xaiworktextitem property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItem.rotation"]], "rotation() (pyxa.apps.iworkapplicationbase.xaiworkgrouplist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkGroupList.rotation"]], "rotation() (pyxa.apps.iworkapplicationbase.xaiworkimagelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkImageList.rotation"]], "rotation() (pyxa.apps.iworkapplicationbase.xaiworklinelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkLineList.rotation"]], "rotation() (pyxa.apps.iworkapplicationbase.xaiworkmovielist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkMovieList.rotation"]], "rotation() (pyxa.apps.iworkapplicationbase.xaiworkshapelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShapeList.rotation"]], "rotation() (pyxa.apps.iworkapplicationbase.xaiworktextitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItemList.rotation"]], "row (pyxa.apps.iworkapplicationbase.xaiworkcell property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCell.row"]], "row() (pyxa.apps.iworkapplicationbase.xaiworkcelllist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCellList.row"]], "row_count (pyxa.apps.iworkapplicationbase.xaiworktable property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTable.row_count"]], "row_count() (pyxa.apps.iworkapplicationbase.xaiworktablelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTableList.row_count"]], "rows() (pyxa.apps.iworkapplicationbase.xaiworkrange method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRange.rows"]], "rows() (pyxa.apps.iworkapplicationbase.xaiworktable method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTable.rows"]], "selection (pyxa.apps.iworkapplicationbase.xaiworkdocument property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocument.selection"]], "selection() (pyxa.apps.iworkapplicationbase.xaiworkdocumentlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkDocumentList.selection"]], "selection_range (pyxa.apps.iworkapplicationbase.xaiworktable property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTable.selection_range"]], "selection_range() (pyxa.apps.iworkapplicationbase.xaiworktablelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTableList.selection_range"]], "set_password() (pyxa.apps.iworkapplicationbase.xaiworkapplication method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.set_password"]], "set_position() (pyxa.apps.iworkapplicationbase.xaiworkiworkitem method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItem.set_position"]], "set_property() (pyxa.apps.iworkapplicationbase.xaiworkshape method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkShape.set_property"]], "shapes() (pyxa.apps.iworkapplicationbase.xaiworkcontainer method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainer.shapes"]], "shapes() (pyxa.apps.iworkapplicationbase.xaiworkcontainerlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainerList.shapes"]], "sort() (pyxa.apps.iworkapplicationbase.xaiworktable method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTable.sort"]], "start_point (pyxa.apps.iworkapplicationbase.xaiworkline property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkLine.start_point"]], "start_point() (pyxa.apps.iworkapplicationbase.xaiworklinelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkLineList.start_point"]], "tables() (pyxa.apps.iworkapplicationbase.xaiworkcontainer method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainer.tables"]], "tables() (pyxa.apps.iworkapplicationbase.xaiworkcontainerlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainerList.tables"]], "text (pyxa.apps.iworkapplicationbase.xaiworktextitem property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItem.text"]], "text() (pyxa.apps.iworkapplicationbase.xaiworktextitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkTextItemList.text"]], "text_color (pyxa.apps.iworkapplicationbase.xaiworkrange property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRange.text_color"]], "text_color() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.text_color"]], "text_items() (pyxa.apps.iworkapplicationbase.xaiworkcontainer method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainer.text_items"]], "text_items() (pyxa.apps.iworkapplicationbase.xaiworkcontainerlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkContainerList.text_items"]], "text_wrap (pyxa.apps.iworkapplicationbase.xaiworkrange property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRange.text_wrap"]], "text_wrap() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.text_wrap"]], "unlock() (pyxa.apps.iworkapplicationbase.xaiworkiworkitem method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItem.unlock"]], "unmerge() (pyxa.apps.iworkapplicationbase.xaiworkrange method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRange.unmerge"]], "value (pyxa.apps.iworkapplicationbase.xaiworkcell property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCell.value"]], "value() (pyxa.apps.iworkapplicationbase.xaiworkcelllist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkCellList.value"]], "version (pyxa.apps.iworkapplicationbase.xaiworkapplication property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkApplication.version"]], "vertical_alignment (pyxa.apps.iworkapplicationbase.xaiworkrange property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRange.vertical_alignment"]], "vertical_alignment() (pyxa.apps.iworkapplicationbase.xaiworkrangelist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkRangeList.vertical_alignment"]], "width (pyxa.apps.iworkapplicationbase.xaiworkcolumn property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkColumn.width"]], "width (pyxa.apps.iworkapplicationbase.xaiworkgroup property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkGroup.width"]], "width (pyxa.apps.iworkapplicationbase.xaiworkiworkitem property)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItem.width"]], "width() (pyxa.apps.iworkapplicationbase.xaiworkcolumnlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkColumnList.width"]], "width() (pyxa.apps.iworkapplicationbase.xaiworkgrouplist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkGroupList.width"]], "width() (pyxa.apps.iworkapplicationbase.xaiworkiworkitemlist method)": [[25, "PyXA.apps.iWorkApplicationBase.XAiWorkiWorkItemList.width"]], "apple_pro_res_422 (pyxa.apps.keynote.xakeynoteapplication.codec attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Codec.APPLE_PRO_RES_422"]], "apple_pro_res_422hq (pyxa.apps.keynote.xakeynoteapplication.codec attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Codec.APPLE_PRO_RES_422HQ"]], "apple_pro_res_422lt (pyxa.apps.keynote.xakeynoteapplication.codec attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Codec.APPLE_PRO_RES_422LT"]], "apple_pro_res_422proxy (pyxa.apps.keynote.xakeynoteapplication.codec attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Codec.APPLE_PRO_RES_422Proxy"]], "apple_pro_res_4444 (pyxa.apps.keynote.xakeynoteapplication.codec attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Codec.APPLE_PRO_RES_4444"]], "blinds (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.BLINDS"]], "clothesline (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.CLOTHESLINE"]], "color_panes (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.COLOR_PANES"]], "confetti (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.CONFETTI"]], "cube (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.CUBE"]], "detailed_error_handling (pyxa.apps.keynote.xakeynoteapplication.printsetting attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.PrintSetting.DETAILED_ERROR_HANDLING"]], "dissolve (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.DISSOLVE"]], "doorway (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.DOORWAY"]], "drop (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.DROP"]], "droplet (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.DROPLET"]], "fade_and_move (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.FADE_AND_MOVE"]], "fade_through_color (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.FADE_THROUGH_COLOR"]], "fall (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.FALL"]], "flip (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.FLIP"]], "flop (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.FLOP"]], "fps_12 (pyxa.apps.keynote.xakeynoteapplication.framerate attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Framerate.FPS_12"]], "fps_2398 (pyxa.apps.keynote.xakeynoteapplication.framerate attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Framerate.FPS_2398"]], "fps_24 (pyxa.apps.keynote.xakeynoteapplication.framerate attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Framerate.FPS_24"]], "fps_25 (pyxa.apps.keynote.xakeynoteapplication.framerate attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Framerate.FPS_25"]], "fps_2997 (pyxa.apps.keynote.xakeynoteapplication.framerate attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Framerate.FPS_2997"]], "fps_30 (pyxa.apps.keynote.xakeynoteapplication.framerate attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Framerate.FPS_30"]], "fps_50 (pyxa.apps.keynote.xakeynoteapplication.framerate attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Framerate.FPS_50"]], "fps_5994 (pyxa.apps.keynote.xakeynoteapplication.framerate attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Framerate.FPS_5994"]], "fps_60 (pyxa.apps.keynote.xakeynoteapplication.framerate attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Framerate.FPS_60"]], "grid (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.GRID"]], "h264 (pyxa.apps.keynote.xakeynoteapplication.codec attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Codec.H264"]], "handouts (pyxa.apps.keynote.xakeynoteapplication.printsetting attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.PrintSetting.HANDOUTS"]], "hevc (pyxa.apps.keynote.xakeynoteapplication.codec attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Codec.HEVC"]], "html (pyxa.apps.keynote.xakeynoteapplication.exportformat attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.ExportFormat.HTML"]], "individual_slides (pyxa.apps.keynote.xakeynoteapplication.printsetting attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.PrintSetting.INDIVIDUAL_SLIDES"]], "iris (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.IRIS"]], "jpeg (pyxa.apps.keynote.xakeynoteapplication.exportformat attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.ExportFormat.JPEG"]], "keynote (pyxa.apps.keynote.xakeynoteapplication.exportformat attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.ExportFormat.KEYNOTE"]], "keynote_09 (pyxa.apps.keynote.xakeynoteapplication.exportformat attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.ExportFormat.KEYNOTE_09"]], "magic_move (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.MAGIC_MOVE"]], "microsoft_powerpoint (pyxa.apps.keynote.xakeynoteapplication.exportformat attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.ExportFormat.MICROSOFT_POWERPOINT"]], "mosaic (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.MOSAIC"]], "move_in (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.MOVE_IN"]], "none (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.NONE"]], "nativesize (pyxa.apps.keynote.xakeynoteapplication.exportformat attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.ExportFormat.NativeSize"]], "object_cube (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.OBJECT_CUBE"]], "object_flip (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.OBJECT_FLIP"]], "object_pop (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.OBJECT_POP"]], "object_push (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.OBJECT_PUSH"]], "object_revolve (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.OBJECT_REVOLVE"]], "object_zoom (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.OBJECT_ZOOM"]], "page_flip (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.PAGE_FLIP"]], "pdf (pyxa.apps.keynote.xakeynoteapplication.exportformat attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.ExportFormat.PDF"]], "perspective (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.PERSPECTIVE"]], "pivot (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.PIVOT"]], "png (pyxa.apps.keynote.xakeynoteapplication.exportformat attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.ExportFormat.PNG"]], "push (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.PUSH"]], "pyxa.apps.keynote": [[26, "module-PyXA.apps.Keynote"]], "quicktime_movie (pyxa.apps.keynote.xakeynoteapplication.exportformat attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.ExportFormat.QUICKTIME_MOVIE"]], "reflection (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.REFLECTION"]], "reveal (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.REVEAL"]], "revolving_door (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.REVOLVING_DOOR"]], "scale (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.SCALE"]], "shimmer (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.SHIMMER"]], "slide_images (pyxa.apps.keynote.xakeynoteapplication.exportformat attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.ExportFormat.SLIDE_IMAGES"]], "slide_with_notes (pyxa.apps.keynote.xakeynoteapplication.printsetting attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.PrintSetting.SLIDE_WITH_NOTES"]], "sparkle (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.SPARKLE"]], "standard_error_handling (pyxa.apps.keynote.xakeynoteapplication.printsetting attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.PrintSetting.STANDARD_ERROR_HANDLING"]], "swap (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.SWAP"]], "swing (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.SWING"]], "switch (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.SWITCH"]], "swoosh (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.SWOOSH"]], "tiff (pyxa.apps.keynote.xakeynoteapplication.exportformat attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.ExportFormat.TIFF"]], "twirl (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.TWIRL"]], "twist (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.TWIST"]], "wipe (pyxa.apps.keynote.xakeynoteapplication.transition attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition.WIPE"]], "xakeynoteapplication (class in pyxa.apps.keynote)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication"]], "xakeynoteapplication.codec (class in pyxa.apps.keynote)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Codec"]], "xakeynoteapplication.exportformat (class in pyxa.apps.keynote)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.ExportFormat"]], "xakeynoteapplication.framerate (class in pyxa.apps.keynote)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Framerate"]], "xakeynoteapplication.printsetting (class in pyxa.apps.keynote)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.PrintSetting"]], "xakeynoteapplication.transition (class in pyxa.apps.keynote)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.Transition"]], "xakeynotecontainer (class in pyxa.apps.keynote)": [[26, "PyXA.apps.Keynote.XAKeynoteContainer"]], "xakeynotecontainerlist (class in pyxa.apps.keynote)": [[26, "PyXA.apps.Keynote.XAKeynoteContainerList"]], "xakeynotedocument (class in pyxa.apps.keynote)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument"]], "xakeynotedocumentlist (class in pyxa.apps.keynote)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList"]], "xakeynoteslide (class in pyxa.apps.keynote)": [[26, "PyXA.apps.Keynote.XAKeynoteSlide"]], "xakeynoteslidelayout (class in pyxa.apps.keynote)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideLayout"]], "xakeynoteslidelayoutlist (class in pyxa.apps.keynote)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideLayoutList"]], "xakeynoteslidelist (class in pyxa.apps.keynote)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList"]], "xakeynotetheme (class in pyxa.apps.keynote)": [[26, "PyXA.apps.Keynote.XAKeynoteTheme"]], "xakeynotethemelist (class in pyxa.apps.keynote)": [[26, "PyXA.apps.Keynote.XAKeynoteThemeList"]], "xakeynotetransitionsettings (class in pyxa.apps.keynote)": [[26, "PyXA.apps.Keynote.XAKeynoteTransitionSettings"]], "xakeynotewindow (class in pyxa.apps.keynote)": [[26, "PyXA.apps.Keynote.XAKeynoteWindow"]], "accept_slide_switcher() (pyxa.apps.keynote.xakeynotedocument method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.accept_slide_switcher"]], "add_chart() (pyxa.apps.keynote.xakeynoteslide method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlide.add_chart"]], "add_image() (pyxa.apps.keynote.xakeynoteslide method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlide.add_image"]], "auto_loop (pyxa.apps.keynote.xakeynotedocument property)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.auto_loop"]], "auto_loop() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.auto_loop"]], "auto_play (pyxa.apps.keynote.xakeynotedocument property)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.auto_play"]], "auto_play() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.auto_play"]], "auto_restart (pyxa.apps.keynote.xakeynotedocument property)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.auto_restart"]], "auto_restart() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.auto_restart"]], "automatic_transition (pyxa.apps.keynote.xakeynotetransitionsettings property)": [[26, "PyXA.apps.Keynote.XAKeynoteTransitionSettings.automatic_transition"]], "base_layout (pyxa.apps.keynote.xakeynoteslide property)": [[26, "PyXA.apps.Keynote.XAKeynoteSlide.base_layout"]], "base_layout() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.base_layout"]], "body_showing (pyxa.apps.keynote.xakeynoteslide property)": [[26, "PyXA.apps.Keynote.XAKeynoteSlide.body_showing"]], "body_showing() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.body_showing"]], "by_auto_loop() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.by_auto_loop"]], "by_auto_play() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.by_auto_play"]], "by_auto_restart() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.by_auto_restart"]], "by_base_layout() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.by_base_layout"]], "by_body_showing() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.by_body_showing"]], "by_current_slide() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.by_current_slide"]], "by_default_body_item() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.by_default_body_item"]], "by_default_text_item() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.by_default_text_item"]], "by_document_theme() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.by_document_theme"]], "by_height() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.by_height"]], "by_id() (pyxa.apps.keynote.xakeynotethemelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteThemeList.by_id"]], "by_maximum_idle_duration() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.by_maximum_idle_duration"]], "by_name() (pyxa.apps.keynote.xakeynoteslidelayoutlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideLayoutList.by_name"]], "by_name() (pyxa.apps.keynote.xakeynotethemelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteThemeList.by_name"]], "by_password_protected() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.by_password_protected"]], "by_presenter_notes() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.by_presenter_notes"]], "by_properties() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.by_properties"]], "by_properties() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.by_properties"]], "by_properties() (pyxa.apps.keynote.xakeynotethemelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteThemeList.by_properties"]], "by_selection() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.by_selection"]], "by_skipped() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.by_skipped"]], "by_slide_number() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.by_slide_number"]], "by_slide_numbers_showing() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.by_slide_numbers_showing"]], "by_title_showing() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.by_title_showing"]], "by_transition_properties() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.by_transition_properties"]], "by_width() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.by_width"]], "cancel_slide_switcher() (pyxa.apps.keynote.xakeynotedocument method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.cancel_slide_switcher"]], "current_slide (pyxa.apps.keynote.xakeynotedocument property)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.current_slide"]], "current_slide() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.current_slide"]], "default_body_item (pyxa.apps.keynote.xakeynoteslide property)": [[26, "PyXA.apps.Keynote.XAKeynoteSlide.default_body_item"]], "default_body_item() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.default_body_item"]], "default_title_item (pyxa.apps.keynote.xakeynoteslide property)": [[26, "PyXA.apps.Keynote.XAKeynoteSlide.default_title_item"]], "default_title_item() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.default_title_item"]], "delete() (pyxa.apps.keynote.xakeynoteslide method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlide.delete"]], "document (pyxa.apps.keynote.xakeynotewindow property)": [[26, "PyXA.apps.Keynote.XAKeynoteWindow.document"]], "document_theme (pyxa.apps.keynote.xakeynotedocument property)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.document_theme"]], "document_theme() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.document_theme"]], "documents() (pyxa.apps.keynote.xakeynoteapplication method)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.documents"]], "duplicate() (pyxa.apps.keynote.xakeynoteslide method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlide.duplicate"]], "export() (pyxa.apps.keynote.xakeynotedocument method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.export"]], "f1080p (pyxa.apps.keynote.xakeynoteapplication.exportformat attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.ExportFormat.f1080p"]], "f2160p (pyxa.apps.keynote.xakeynoteapplication.exportformat attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.ExportFormat.f2160p"]], "f360p (pyxa.apps.keynote.xakeynoteapplication.exportformat attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.ExportFormat.f360p"]], "f540p (pyxa.apps.keynote.xakeynoteapplication.exportformat attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.ExportFormat.f540p"]], "f720p (pyxa.apps.keynote.xakeynoteapplication.exportformat attribute)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.ExportFormat.f720p"]], "file (pyxa.apps.keynote.xakeynotedocument property)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.file"]], "height (pyxa.apps.keynote.xakeynotedocument property)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.height"]], "height() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.height"]], "hide_slide_switcher() (pyxa.apps.keynote.xakeynotedocument method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.hide_slide_switcher"]], "id (pyxa.apps.keynote.xakeynotedocument property)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.id"]], "id (pyxa.apps.keynote.xakeynotetheme property)": [[26, "PyXA.apps.Keynote.XAKeynoteTheme.id"]], "id() (pyxa.apps.keynote.xakeynotethemelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteThemeList.id"]], "make() (pyxa.apps.keynote.xakeynoteapplication method)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.make"]], "make_image_slides() (pyxa.apps.keynote.xakeynotedocument method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.make_image_slides"]], "maximum_idle_duration (pyxa.apps.keynote.xakeynotedocument property)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.maximum_idle_duration"]], "maximum_idle_duration() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.maximum_idle_duration"]], "modified (pyxa.apps.keynote.xakeynotedocument property)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.modified"]], "move_slide_switcher_backward() (pyxa.apps.keynote.xakeynotedocument method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.move_slide_switcher_backward"]], "move_slide_switcher_forward() (pyxa.apps.keynote.xakeynotedocument method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.move_slide_switcher_forward"]], "name (pyxa.apps.keynote.xakeynotedocument property)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.name"]], "name (pyxa.apps.keynote.xakeynoteslidelayout property)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideLayout.name"]], "name (pyxa.apps.keynote.xakeynotetheme property)": [[26, "PyXA.apps.Keynote.XAKeynoteTheme.name"]], "name() (pyxa.apps.keynote.xakeynoteslidelayoutlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideLayoutList.name"]], "name() (pyxa.apps.keynote.xakeynotethemelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteThemeList.name"]], "new_document() (pyxa.apps.keynote.xakeynoteapplication method)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.new_document"]], "new_slide() (pyxa.apps.keynote.xakeynotedocument method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.new_slide"]], "password_protected (pyxa.apps.keynote.xakeynotedocument property)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.password_protected"]], "playing (pyxa.apps.keynote.xakeynoteapplication property)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.playing"]], "presenter_notes (pyxa.apps.keynote.xakeynoteslide property)": [[26, "PyXA.apps.Keynote.XAKeynoteSlide.presenter_notes"]], "presenter_notes() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.presenter_notes"]], "properties (pyxa.apps.keynote.xakeynoteapplication property)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.properties"]], "properties (pyxa.apps.keynote.xakeynotedocument property)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.properties"]], "properties (pyxa.apps.keynote.xakeynoteslide property)": [[26, "PyXA.apps.Keynote.XAKeynoteSlide.properties"]], "properties (pyxa.apps.keynote.xakeynotetheme property)": [[26, "PyXA.apps.Keynote.XAKeynoteTheme.properties"]], "properties() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.properties"]], "properties() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.properties"]], "properties() (pyxa.apps.keynote.xakeynotethemelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteThemeList.properties"]], "save() (pyxa.apps.keynote.xakeynotedocument method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.save"]], "selection (pyxa.apps.keynote.xakeynotedocument property)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.selection"]], "show_next() (pyxa.apps.keynote.xakeynoteapplication method)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.show_next"]], "show_previous() (pyxa.apps.keynote.xakeynoteapplication method)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.show_previous"]], "show_slide_switcher() (pyxa.apps.keynote.xakeynotedocument method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.show_slide_switcher"]], "skipped (pyxa.apps.keynote.xakeynoteslide property)": [[26, "PyXA.apps.Keynote.XAKeynoteSlide.skipped"]], "skipped() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.skipped"]], "slide_layouts() (pyxa.apps.keynote.xakeynotedocument method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.slide_layouts"]], "slide_number (pyxa.apps.keynote.xakeynoteslide property)": [[26, "PyXA.apps.Keynote.XAKeynoteSlide.slide_number"]], "slide_number() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.slide_number"]], "slide_numbers_showing (pyxa.apps.keynote.xakeynotedocument property)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.slide_numbers_showing"]], "slide_numbers_showing() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.slide_numbers_showing"]], "slide_switcher_visible (pyxa.apps.keynote.xakeynoteapplication property)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.slide_switcher_visible"]], "slides() (pyxa.apps.keynote.xakeynotedocument method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.slides"]], "start_from() (pyxa.apps.keynote.xakeynotedocument method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.start_from"]], "stop() (pyxa.apps.keynote.xakeynotedocument method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.stop"]], "themes() (pyxa.apps.keynote.xakeynoteapplication method)": [[26, "PyXA.apps.Keynote.XAKeynoteApplication.themes"]], "title_showing (pyxa.apps.keynote.xakeynoteslide property)": [[26, "PyXA.apps.Keynote.XAKeynoteSlide.title_showing"]], "title_showing() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.title_showing"]], "transition_delay (pyxa.apps.keynote.xakeynotetransitionsettings property)": [[26, "PyXA.apps.Keynote.XAKeynoteTransitionSettings.transition_delay"]], "transition_duration (pyxa.apps.keynote.xakeynotetransitionsettings property)": [[26, "PyXA.apps.Keynote.XAKeynoteTransitionSettings.transition_duration"]], "transition_effect (pyxa.apps.keynote.xakeynotetransitionsettings property)": [[26, "PyXA.apps.Keynote.XAKeynoteTransitionSettings.transition_effect"]], "transition_properties (pyxa.apps.keynote.xakeynoteslide property)": [[26, "PyXA.apps.Keynote.XAKeynoteSlide.transition_properties"]], "transition_properties() (pyxa.apps.keynote.xakeynoteslidelist method)": [[26, "PyXA.apps.Keynote.XAKeynoteSlideList.transition_properties"]], "width (pyxa.apps.keynote.xakeynotedocument property)": [[26, "PyXA.apps.Keynote.XAKeynoteDocument.width"]], "width() (pyxa.apps.keynote.xakeynotedocumentlist method)": [[26, "PyXA.apps.Keynote.XAKeynoteDocumentList.width"]], "account (pyxa.apps.mail.xamailapplication.ruletype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType.ACCOUNT"]], "all_messages_and_their_attachments (pyxa.apps.mail.xamailapplication.cachingpolicy attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.CachingPolicy.ALL_MESSAGES_AND_THEIR_ATTACHMENTS"]], "all_messages_but_omit_attachments (pyxa.apps.mail.xamailapplication.cachingpolicy attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.CachingPolicy.ALL_MESSAGES_BUT_OMIT_ATTACHMENTS"]], "any_recipient (pyxa.apps.mail.xamailapplication.ruletype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType.ANY_RECIPIENT"]], "apop (pyxa.apps.mail.xamailapplication.authenticationmethod attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.AuthenticationMethod.APOP"]], "apple_token (pyxa.apps.mail.xamailapplication.authenticationmethod attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.AuthenticationMethod.APPLE_TOKEN"]], "attachments (pyxa.apps.mail.xamailapplication.viewercolumn attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.ViewerColumn.ATTACHMENTS"]], "attachment_type (pyxa.apps.mail.xamailapplication.ruletype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType.ATTACHMENT_TYPE"]], "begins_with_value (pyxa.apps.mail.xamailapplication.rulequalifier attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleQualifier.BEGINS_WITH_VALUE"]], "blue (pyxa.apps.mail.xamailapplication.highlightcolor attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.HighlightColor.BLUE"]], "blue (pyxa.apps.mail.xamailapplication.quotingcolor attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.QuotingColor.BLUE"]], "cc_header (pyxa.apps.mail.xamailapplication.ruletype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType.CC_HEADER"]], "date_last_saved (pyxa.apps.mail.xamailapplication.viewercolumn attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.ViewerColumn.DATE_LAST_SAVED"]], "date_received (pyxa.apps.mail.xamailapplication.viewercolumn attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.ViewerColumn.DATE_RECEIVED"]], "date_sent (pyxa.apps.mail.xamailapplication.viewercolumn attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.ViewerColumn.DATE_SENT"]], "does_contain_value (pyxa.apps.mail.xamailapplication.rulequalifier attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleQualifier.DOES_CONTAIN_VALUE"]], "does_not_contain_value (pyxa.apps.mail.xamailapplication.rulequalifier attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleQualifier.DOES_NOT_CONTAIN_VALUE"]], "do_not_keep_copies_of_any_messages (pyxa.apps.mail.xamailapplication.cachingpolicy attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.CachingPolicy.DO_NOT_KEEP_COPIES_OF_ANY_MESSAGES"]], "ends_with_value (pyxa.apps.mail.xamailapplication.rulequalifier attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleQualifier.ENDS_WITH_VALUE"]], "equal_to_value (pyxa.apps.mail.xamailapplication.rulequalifier attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleQualifier.EQUAL_TO_VALUE"]], "external (pyxa.apps.mail.xamailapplication.authenticationmethod attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.AuthenticationMethod.EXTERNAL"]], "flags (pyxa.apps.mail.xamailapplication.viewercolumn attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.ViewerColumn.FLAGS"]], "from (pyxa.apps.mail.xamailapplication.viewercolumn attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.ViewerColumn.FROM"]], "from_header (pyxa.apps.mail.xamailapplication.ruletype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType.FROM_HEADER"]], "gray (pyxa.apps.mail.xamailapplication.highlightcolor attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.HighlightColor.GRAY"]], "greater_than_value (pyxa.apps.mail.xamailapplication.rulequalifier attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleQualifier.GREATER_THAN_VALUE"]], "green (pyxa.apps.mail.xamailapplication.highlightcolor attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.HighlightColor.GREEN"]], "green (pyxa.apps.mail.xamailapplication.quotingcolor attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.QuotingColor.GREEN"]], "header_key (pyxa.apps.mail.xamailapplication.ruletype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType.HEADER_KEY"]], "icloud (pyxa.apps.mail.xamailapplication.accounttype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.AccountType.ICLOUD"]], "imap (pyxa.apps.mail.xamailapplication.accounttype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.AccountType.IMAP"]], "kerberos5 (pyxa.apps.mail.xamailapplication.authenticationmethod attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.AuthenticationMethod.KERBEROS5"]], "less_than_value (pyxa.apps.mail.xamailapplication.rulequalifier attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleQualifier.LESS_THAN_VALUE"]], "mailbox (pyxa.apps.mail.xamailapplication.viewercolumn attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.ViewerColumn.MAILBOX"]], "matches_every_message (pyxa.apps.mail.xamailapplication.ruletype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType.MATCHES_EVERY_MESSAGE"]], "md5 (pyxa.apps.mail.xamailapplication.authenticationmethod attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.AuthenticationMethod.MD5"]], "message_color (pyxa.apps.mail.xamailapplication.viewercolumn attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.ViewerColumn.MESSAGE_COLOR"]], "message_content (pyxa.apps.mail.xamailapplication.ruletype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType.MESSAGE_CONTENT"]], "message_is_junk_mail (pyxa.apps.mail.xamailapplication.ruletype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType.MESSAGE_IS_JUNK_MAIL"]], "message_status (pyxa.apps.mail.xamailapplication.viewercolumn attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.ViewerColumn.MESSAGE_STATUS"]], "native (pyxa.apps.mail.xamailapplication.format attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.Format.NATIVE"]], "none (pyxa.apps.mail.xamailapplication.authenticationmethod attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.AuthenticationMethod.NONE"]], "none (pyxa.apps.mail.xamailapplication.highlightcolor attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.HighlightColor.NONE"]], "none (pyxa.apps.mail.xamailapplication.rulequalifier attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleQualifier.NONE"]], "ntlm (pyxa.apps.mail.xamailapplication.authenticationmethod attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.AuthenticationMethod.NTLM"]], "number (pyxa.apps.mail.xamailapplication.viewercolumn attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.ViewerColumn.NUMBER"]], "only_messages_i_have_read (pyxa.apps.mail.xamailapplication.cachingpolicy attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.CachingPolicy.ONLY_MESSAGES_I_HAVE_READ"]], "orange (pyxa.apps.mail.xamailapplication.highlightcolor attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.HighlightColor.ORANGE"]], "orange (pyxa.apps.mail.xamailapplication.quotingcolor attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.QuotingColor.ORANGE"]], "other (pyxa.apps.mail.xamailapplication.highlightcolor attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.HighlightColor.OTHER"]], "other (pyxa.apps.mail.xamailapplication.quotingcolor attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.QuotingColor.OTHER"]], "password (pyxa.apps.mail.xamailapplication.authenticationmethod attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.AuthenticationMethod.PASSWORD"]], "plain_message (pyxa.apps.mail.xamailapplication.format attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.Format.PLAIN_MESSAGE"]], "pop (pyxa.apps.mail.xamailapplication.accounttype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.AccountType.POP"]], "purple (pyxa.apps.mail.xamailapplication.highlightcolor attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.HighlightColor.PURPLE"]], "purple (pyxa.apps.mail.xamailapplication.quotingcolor attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.QuotingColor.PURPLE"]], "pyxa.apps.mail": [[27, "module-PyXA.apps.Mail"]], "recipients (pyxa.apps.mail.xamailapplication.viewercolumn attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.ViewerColumn.RECIPIENTS"]], "red (pyxa.apps.mail.xamailapplication.highlightcolor attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.HighlightColor.RED"]], "red (pyxa.apps.mail.xamailapplication.quotingcolor attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.QuotingColor.RED"]], "rich_message (pyxa.apps.mail.xamailapplication.format attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.Format.RICH_MESSAGE"]], "sender_is_in_my_contacts (pyxa.apps.mail.xamailapplication.ruletype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType.SENDER_IS_IN_MY_CONTACTS"]], "sender_is_in_my_previous_recipients (pyxa.apps.mail.xamailapplication.ruletype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType.SENDER_IS_IN_MY_PREVIOUS_RECIPIENTS"]], "sender_is_member_of_group (pyxa.apps.mail.xamailapplication.ruletype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType.SENDER_IS_MEMBER_OF_GROUP"]], "sender_is_not_in_my_contacts (pyxa.apps.mail.xamailapplication.ruletype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType.SENDER_IS_NOT_IN_MY_CONTACTS"]], "sender_is_not_in_my_previous_recipients (pyxa.apps.mail.xamailapplication.ruletype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType.SENDER_IS_NOT_IN_MY_PREVIOUS_RECIPIENTS"]], "sender_is_not_member_of_group (pyxa.apps.mail.xamailapplication.ruletype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType.SENDER_IS_NOT_MEMBER_OF_GROUP"]], "sender_is_vip (pyxa.apps.mail.xamailapplication.ruletype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType.SENDER_IS_VIP"]], "size (pyxa.apps.mail.xamailapplication.viewercolumn attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.ViewerColumn.SIZE"]], "smtp (pyxa.apps.mail.xamailapplication.accounttype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.AccountType.SMTP"]], "subject (pyxa.apps.mail.xamailapplication.viewercolumn attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.ViewerColumn.SUBJECT"]], "subject_header (pyxa.apps.mail.xamailapplication.ruletype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType.SUBJECT_HEADER"]], "to_header (pyxa.apps.mail.xamailapplication.ruletype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType.TO_HEADER"]], "to_or_cc_header (pyxa.apps.mail.xamailapplication.ruletype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType.TO_OR_CC_HEADER"]], "unknown (pyxa.apps.mail.xamailapplication.accounttype attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.AccountType.UNKNOWN"]], "xamailaccount (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailAccount"]], "xamailaccountlist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailAccountList"]], "xamailapplication (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailApplication"]], "xamailapplication.accounttype (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailApplication.AccountType"]], "xamailapplication.authenticationmethod (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailApplication.AuthenticationMethod"]], "xamailapplication.cachingpolicy (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailApplication.CachingPolicy"]], "xamailapplication.format (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailApplication.Format"]], "xamailapplication.highlightcolor (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailApplication.HighlightColor"]], "xamailapplication.quotingcolor (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailApplication.QuotingColor"]], "xamailapplication.rulequalifier (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleQualifier"]], "xamailapplication.ruletype (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailApplication.RuleType"]], "xamailapplication.viewercolumn (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailApplication.ViewerColumn"]], "xamailattachment (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailAttachment"]], "xamailattachmentlist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailAttachmentList"]], "xamailbccrecipient (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailBccRecipient"]], "xamailbccrecipientlist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailBccRecipientList"]], "xamailccrecipient (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailCcRecipient"]], "xamailccrecipientlist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailCcRecipientList"]], "xamailcontainer (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailContainer"]], "xamailcontainerlist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailContainerList"]], "xamaildocument (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailDocument"]], "xamaildocumentlist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailDocumentList"]], "xamailheader (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailHeader"]], "xamailheaderlist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailHeaderList"]], "xamailicloudaccount (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailICloudAccount"]], "xamailicloudaccountlist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailICloudAccountList"]], "xamailimapaccount (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailIMAPAccount"]], "xamailimapaccountlist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailIMAPAccountList"]], "xamailmessage (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailMessage"]], "xamailmessagelist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailMessageList"]], "xamailmessageviewer (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailMessageViewer"]], "xamailmessageviewerlist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList"]], "xamailoutgoingmessage (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessage"]], "xamailoutgoingmessagelist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessageList"]], "xamailpopaccount (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailPOPAccount"]], "xamailpopaccountlist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailPOPAccountList"]], "xamailrecipient (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailRecipient"]], "xamailrecipientlist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailRecipientList"]], "xamailrule (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailRule"]], "xamailrulecondition (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailRuleCondition"]], "xamailruleconditionlist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailRuleConditionList"]], "xamailrulelist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailRuleList"]], "xamailsmtpserver (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailSMTPServer"]], "xamailsmtpserverlist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailSMTPServerList"]], "xamailsignature (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailSignature"]], "xamailsignaturelist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailSignatureList"]], "xamailtorecipient (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailToRecipient"]], "xamailtorecipientlist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailToRecipientList"]], "xamailwindow (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailWindow"]], "xamailbox (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailbox"]], "xamailboxlist (class in pyxa.apps.mail)": [[27, "PyXA.apps.Mail.XAMailboxList"]], "yellow (pyxa.apps.mail.xamailapplication.highlightcolor attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.HighlightColor.YELLOW"]], "yellow (pyxa.apps.mail.xamailapplication.quotingcolor attribute)": [[27, "PyXA.apps.Mail.XAMailApplication.QuotingColor.YELLOW"]], "account (pyxa.apps.mail.xamailbox property)": [[27, "PyXA.apps.Mail.XAMailbox.account"]], "account() (pyxa.apps.mail.xamailboxlist method)": [[27, "PyXA.apps.Mail.XAMailboxList.account"]], "account_directory (pyxa.apps.mail.xamailaccount property)": [[27, "PyXA.apps.Mail.XAMailAccount.account_directory"]], "account_directory() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.account_directory"]], "account_type (pyxa.apps.mail.xamailaccount property)": [[27, "PyXA.apps.Mail.XAMailAccount.account_type"]], "account_type (pyxa.apps.mail.xamailsmtpserver property)": [[27, "PyXA.apps.Mail.XAMailSMTPServer.account_type"]], "account_type() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.account_type"]], "account_type() (pyxa.apps.mail.xamailsmtpserverlist method)": [[27, "PyXA.apps.Mail.XAMailSMTPServerList.account_type"]], "accounts() (pyxa.apps.mail.xamailapplication method)": [[27, "PyXA.apps.Mail.XAMailApplication.accounts"]], "address (pyxa.apps.mail.xamailrecipient property)": [[27, "PyXA.apps.Mail.XAMailRecipient.address"]], "address() (pyxa.apps.mail.xamailrecipientlist method)": [[27, "PyXA.apps.Mail.XAMailRecipientList.address"]], "all_conditions_must_be_met (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.all_conditions_must_be_met"]], "all_conditions_must_be_met() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.all_conditions_must_be_met"]], "all_headers (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.all_headers"]], "all_headers() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.all_headers"]], "always_bcc_myself (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.always_bcc_myself"]], "always_cc_myself (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.always_cc_myself"]], "application_version (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.application_version"]], "authentication (pyxa.apps.mail.xamailaccount property)": [[27, "PyXA.apps.Mail.XAMailAccount.authentication"]], "authentication (pyxa.apps.mail.xamailsmtpserver property)": [[27, "PyXA.apps.Mail.XAMailSMTPServer.authentication"]], "authentication() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.authentication"]], "authentication() (pyxa.apps.mail.xamailsmtpserverlist method)": [[27, "PyXA.apps.Mail.XAMailSMTPServerList.authentication"]], "background_activity_count (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.background_activity_count"]], "background_color (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.background_color"]], "background_color() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.background_color"]], "bcc_recipients() (pyxa.apps.mail.xamailmessage method)": [[27, "PyXA.apps.Mail.XAMailMessage.bcc_recipients"]], "big_message_warning_size (pyxa.apps.mail.xamailpopaccount property)": [[27, "PyXA.apps.Mail.XAMailPOPAccount.big_message_warning_size"]], "big_message_warning_size() (pyxa.apps.mail.xamailpopaccountlist method)": [[27, "PyXA.apps.Mail.XAMailPOPAccountList.big_message_warning_size"]], "by_account() (pyxa.apps.mail.xamailboxlist method)": [[27, "PyXA.apps.Mail.XAMailboxList.by_account"]], "by_account_directory() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.by_account_directory"]], "by_account_type() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.by_account_type"]], "by_account_type() (pyxa.apps.mail.xamailsmtpserverlist method)": [[27, "PyXA.apps.Mail.XAMailSMTPServerList.by_account_type"]], "by_address() (pyxa.apps.mail.xamailrecipientlist method)": [[27, "PyXA.apps.Mail.XAMailRecipientList.by_address"]], "by_all_conditions_must_be_met() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_all_conditions_must_be_met"]], "by_all_headers() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_all_headers"]], "by_authentication() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.by_authentication"]], "by_authentication() (pyxa.apps.mail.xamailsmtpserverlist method)": [[27, "PyXA.apps.Mail.XAMailSMTPServerList.by_authentication"]], "by_background_color() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_background_color"]], "by_big_message_warning_size() (pyxa.apps.mail.xamailpopaccountlist method)": [[27, "PyXA.apps.Mail.XAMailPOPAccountList.by_big_message_warning_size"]], "by_color_message() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_color_message"]], "by_compact_mailboxes_when_closing() (pyxa.apps.mail.xamailimapaccountlist method)": [[27, "PyXA.apps.Mail.XAMailIMAPAccountList.by_compact_mailboxes_when_closing"]], "by_container() (pyxa.apps.mail.xamailboxlist method)": [[27, "PyXA.apps.Mail.XAMailboxList.by_container"]], "by_content() (pyxa.apps.mail.xamailheaderlist method)": [[27, "PyXA.apps.Mail.XAMailHeaderList.by_content"]], "by_content() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_content"]], "by_content() (pyxa.apps.mail.xamailoutgoingmessagelist method)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessageList.by_content"]], "by_content() (pyxa.apps.mail.xamailsignaturelist method)": [[27, "PyXA.apps.Mail.XAMailSignatureList.by_content"]], "by_copy_message() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_copy_message"]], "by_date_received() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_date_received"]], "by_date_sent() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_date_sent"]], "by_delayed_message_deletion_interval() (pyxa.apps.mail.xamailpopaccountlist method)": [[27, "PyXA.apps.Mail.XAMailPOPAccountList.by_delayed_message_deletion_interval"]], "by_delete_mail_on_server() (pyxa.apps.mail.xamailpopaccountlist method)": [[27, "PyXA.apps.Mail.XAMailPOPAccountList.by_delete_mail_on_server"]], "by_delete_message() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_delete_message"]], "by_delete_messages_when_moved_from_inbox() (pyxa.apps.mail.xamailpopaccountlist method)": [[27, "PyXA.apps.Mail.XAMailPOPAccountList.by_delete_messages_when_moved_from_inbox"]], "by_deleted_status() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_deleted_status"]], "by_delivery_account() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.by_delivery_account"]], "by_downloaded() (pyxa.apps.mail.xamailattachmentlist method)": [[27, "PyXA.apps.Mail.XAMailAttachmentList.by_downloaded"]], "by_drafts_mailbox() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.by_drafts_mailbox"]], "by_email_addresses() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.by_email_addresses"]], "by_empty_junk_messages_frequency() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.by_empty_junk_messages_frequency"]], "by_empty_junk_messages_on_quit() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.by_empty_junk_messages_on_quit"]], "by_empty_trash_frequency() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.by_empty_trash_frequency"]], "by_empty_trash_on_quit() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.by_empty_trash_on_quit"]], "by_enabled() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.by_enabled"]], "by_enabled() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_enabled"]], "by_enabled() (pyxa.apps.mail.xamailsmtpserverlist method)": [[27, "PyXA.apps.Mail.XAMailSMTPServerList.by_enabled"]], "by_expression() (pyxa.apps.mail.xamailruleconditionlist method)": [[27, "PyXA.apps.Mail.XAMailRuleConditionList.by_expression"]], "by_file() (pyxa.apps.mail.xamaildocumentlist method)": [[27, "PyXA.apps.Mail.XAMailDocumentList.by_file"]], "by_file_size() (pyxa.apps.mail.xamailattachmentlist method)": [[27, "PyXA.apps.Mail.XAMailAttachmentList.by_file_size"]], "by_flag_index() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_flag_index"]], "by_flagged_status() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_flagged_status"]], "by_forward_message() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_forward_message"]], "by_forward_text() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_forward_text"]], "by_full_name() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.by_full_name"]], "by_header() (pyxa.apps.mail.xamailruleconditionlist method)": [[27, "PyXA.apps.Mail.XAMailRuleConditionList.by_header"]], "by_highlight_text_using_color() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_highlight_text_using_color"]], "by_id() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.by_id"]], "by_id() (pyxa.apps.mail.xamailattachmentlist method)": [[27, "PyXA.apps.Mail.XAMailAttachmentList.by_id"]], "by_id() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_id"]], "by_id() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.by_id"]], "by_id() (pyxa.apps.mail.xamailoutgoingmessagelist method)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessageList.by_id"]], "by_inbox() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.by_inbox"]], "by_junk_mail_status() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_junk_mail_status"]], "by_junk_mailbox() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.by_junk_mailbox"]], "by_mailbox() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_mailbox"]], "by_mailbox_list_visible() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.by_mailbox_list_visible"]], "by_mark_flag_index() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_mark_flag_index"]], "by_mark_flagged() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_mark_flagged"]], "by_mark_read() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_mark_read"]], "by_message_caching() (pyxa.apps.mail.xamailimapaccountlist method)": [[27, "PyXA.apps.Mail.XAMailIMAPAccountList.by_message_caching"]], "by_message_id() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_message_id"]], "by_message_signature() (pyxa.apps.mail.xamailoutgoingmessagelist method)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessageList.by_message_signature"]], "by_message_size() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_message_size"]], "by_mime_type() (pyxa.apps.mail.xamailattachmentlist method)": [[27, "PyXA.apps.Mail.XAMailAttachmentList.by_mime_type"]], "by_modified() (pyxa.apps.mail.xamaildocumentlist method)": [[27, "PyXA.apps.Mail.XAMailDocumentList.by_modified"]], "by_move_deleted_messages_to_trash() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.by_move_deleted_messages_to_trash"]], "by_move_message() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_move_message"]], "by_name() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.by_name"]], "by_name() (pyxa.apps.mail.xamailattachmentlist method)": [[27, "PyXA.apps.Mail.XAMailAttachmentList.by_name"]], "by_name() (pyxa.apps.mail.xamaildocumentlist method)": [[27, "PyXA.apps.Mail.XAMailDocumentList.by_name"]], "by_name() (pyxa.apps.mail.xamailheaderlist method)": [[27, "PyXA.apps.Mail.XAMailHeaderList.by_name"]], "by_name() (pyxa.apps.mail.xamailrecipientlist method)": [[27, "PyXA.apps.Mail.XAMailRecipientList.by_name"]], "by_name() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_name"]], "by_name() (pyxa.apps.mail.xamailsmtpserverlist method)": [[27, "PyXA.apps.Mail.XAMailSMTPServerList.by_name"]], "by_name() (pyxa.apps.mail.xamailsignaturelist method)": [[27, "PyXA.apps.Mail.XAMailSignatureList.by_name"]], "by_name() (pyxa.apps.mail.xamailboxlist method)": [[27, "PyXA.apps.Mail.XAMailboxList.by_name"]], "by_outbox() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.by_outbox"]], "by_play_sound() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_play_sound"]], "by_port() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.by_port"]], "by_port() (pyxa.apps.mail.xamailsmtpserverlist method)": [[27, "PyXA.apps.Mail.XAMailSMTPServerList.by_port"]], "by_preview_pane_is_visible() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.by_preview_pane_is_visible"]], "by_qualifier() (pyxa.apps.mail.xamailruleconditionlist method)": [[27, "PyXA.apps.Mail.XAMailRuleConditionList.by_qualifier"]], "by_read_status() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_read_status"]], "by_redirect_message() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_redirect_message"]], "by_reply_text() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_reply_text"]], "by_reply_to() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_reply_to"]], "by_rule_type() (pyxa.apps.mail.xamailruleconditionlist method)": [[27, "PyXA.apps.Mail.XAMailRuleConditionList.by_rule_type"]], "by_run_script() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_run_script"]], "by_selected_mailboxes() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.by_selected_mailboxes"]], "by_selected_messages() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.by_selected_messages"]], "by_sender() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_sender"]], "by_sender() (pyxa.apps.mail.xamailoutgoingmessagelist method)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessageList.by_sender"]], "by_sent_mailbox() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.by_sent_mailbox"]], "by_server_name() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.by_server_name"]], "by_server_name() (pyxa.apps.mail.xamailsmtpserverlist method)": [[27, "PyXA.apps.Mail.XAMailSMTPServerList.by_server_name"]], "by_should_copy_message() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_should_copy_message"]], "by_should_move_message() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_should_move_message"]], "by_sort_column() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.by_sort_column"]], "by_sorted_ascending() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.by_sorted_ascending"]], "by_source() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_source"]], "by_stop_evaluating_rules() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.by_stop_evaluating_rules"]], "by_store_deleted_messages_on_server() (pyxa.apps.mail.xamailimapaccountlist method)": [[27, "PyXA.apps.Mail.XAMailIMAPAccountList.by_store_deleted_messages_on_server"]], "by_store_drafts_on_server() (pyxa.apps.mail.xamailimapaccountlist method)": [[27, "PyXA.apps.Mail.XAMailIMAPAccountList.by_store_drafts_on_server"]], "by_store_junk_mail_on_server() (pyxa.apps.mail.xamailimapaccountlist method)": [[27, "PyXA.apps.Mail.XAMailIMAPAccountList.by_store_junk_mail_on_server"]], "by_store_sent_messages_on_server() (pyxa.apps.mail.xamailimapaccountlist method)": [[27, "PyXA.apps.Mail.XAMailIMAPAccountList.by_store_sent_messages_on_server"]], "by_subject() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_subject"]], "by_subject() (pyxa.apps.mail.xamailoutgoingmessagelist method)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessageList.by_subject"]], "by_trash_mailbox() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.by_trash_mailbox"]], "by_unread_count() (pyxa.apps.mail.xamailboxlist method)": [[27, "PyXA.apps.Mail.XAMailboxList.by_unread_count"]], "by_user_name() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.by_user_name"]], "by_user_name() (pyxa.apps.mail.xamailsmtpserverlist method)": [[27, "PyXA.apps.Mail.XAMailSMTPServerList.by_user_name"]], "by_uses_ssl() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.by_uses_ssl"]], "by_uses_ssl() (pyxa.apps.mail.xamailsmtpserverlist method)": [[27, "PyXA.apps.Mail.XAMailSMTPServerList.by_uses_ssl"]], "by_visible() (pyxa.apps.mail.xamailoutgoingmessagelist method)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessageList.by_visible"]], "by_visible_columns() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.by_visible_columns"]], "by_visible_messages() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.by_visible_messages"]], "by_was_forwarded() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_was_forwarded"]], "by_was_redirected() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_was_redirected"]], "by_was_replied_to() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.by_was_replied_to"]], "by_window() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.by_window"]], "cc_recpients() (pyxa.apps.mail.xamailmessage method)": [[27, "PyXA.apps.Mail.XAMailMessage.cc_recpients"]], "check_for_new_mail() (pyxa.apps.mail.xamailapplication method)": [[27, "PyXA.apps.Mail.XAMailApplication.check_for_new_mail"]], "check_spelling_while_typing (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.check_spelling_while_typing"]], "choose_signature_when_composing (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.choose_signature_when_composing"]], "close() (pyxa.apps.mail.xamailoutgoingmessage method)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessage.close"]], "color_message (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.color_message"]], "color_message() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.color_message"]], "color_quoted_text (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.color_quoted_text"]], "compact_mailboxes_when_closing (pyxa.apps.mail.xamailimapaccount property)": [[27, "PyXA.apps.Mail.XAMailIMAPAccount.compact_mailboxes_when_closing"]], "compact_mailboxes_when_closing() (pyxa.apps.mail.xamailimapaccountlist method)": [[27, "PyXA.apps.Mail.XAMailIMAPAccountList.compact_mailboxes_when_closing"]], "container (pyxa.apps.mail.xamailbox property)": [[27, "PyXA.apps.Mail.XAMailbox.container"]], "container() (pyxa.apps.mail.xamailboxlist method)": [[27, "PyXA.apps.Mail.XAMailboxList.container"]], "content (pyxa.apps.mail.xamailheader property)": [[27, "PyXA.apps.Mail.XAMailHeader.content"]], "content (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.content"]], "content (pyxa.apps.mail.xamailoutgoingmessage property)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessage.content"]], "content (pyxa.apps.mail.xamailsignature property)": [[27, "PyXA.apps.Mail.XAMailSignature.content"]], "content() (pyxa.apps.mail.xamailheaderlist method)": [[27, "PyXA.apps.Mail.XAMailHeaderList.content"]], "content() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.content"]], "content() (pyxa.apps.mail.xamailoutgoingmessagelist method)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessageList.content"]], "content() (pyxa.apps.mail.xamailsignaturelist method)": [[27, "PyXA.apps.Mail.XAMailSignatureList.content"]], "copy_message (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.copy_message"]], "copy_message() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.copy_message"]], "date_received (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.date_received"]], "date_received() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.date_received"]], "date_sent (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.date_sent"]], "date_sent() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.date_sent"]], "default_message_format (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.default_message_format"]], "delayed_message_deletion_interval (pyxa.apps.mail.xamailpopaccount property)": [[27, "PyXA.apps.Mail.XAMailPOPAccount.delayed_message_deletion_interval"]], "delayed_message_deletion_interval() (pyxa.apps.mail.xamailpopaccountlist method)": [[27, "PyXA.apps.Mail.XAMailPOPAccountList.delayed_message_deletion_interval"]], "delete() (pyxa.apps.mail.xamailattachment method)": [[27, "PyXA.apps.Mail.XAMailAttachment.delete"]], "delete() (pyxa.apps.mail.xamaildocument method)": [[27, "PyXA.apps.Mail.XAMailDocument.delete"]], "delete() (pyxa.apps.mail.xamailmessage method)": [[27, "PyXA.apps.Mail.XAMailMessage.delete"]], "delete() (pyxa.apps.mail.xamailoutgoingmessage method)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessage.delete"]], "delete() (pyxa.apps.mail.xamailrule method)": [[27, "PyXA.apps.Mail.XAMailRule.delete"]], "delete() (pyxa.apps.mail.xamailrulecondition method)": [[27, "PyXA.apps.Mail.XAMailRuleCondition.delete"]], "delete() (pyxa.apps.mail.xamailsignature method)": [[27, "PyXA.apps.Mail.XAMailSignature.delete"]], "delete() (pyxa.apps.mail.xamailbox method)": [[27, "PyXA.apps.Mail.XAMailbox.delete"]], "delete_mail_on_server (pyxa.apps.mail.xamailpopaccount property)": [[27, "PyXA.apps.Mail.XAMailPOPAccount.delete_mail_on_server"]], "delete_mail_on_server() (pyxa.apps.mail.xamailpopaccountlist method)": [[27, "PyXA.apps.Mail.XAMailPOPAccountList.delete_mail_on_server"]], "delete_message (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.delete_message"]], "delete_message() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.delete_message"]], "delete_messages_when_moved_from_inbox (pyxa.apps.mail.xamailpopaccount property)": [[27, "PyXA.apps.Mail.XAMailPOPAccount.delete_messages_when_moved_from_inbox"]], "delete_messages_when_moved_from_inbox() (pyxa.apps.mail.xamailpopaccountlist method)": [[27, "PyXA.apps.Mail.XAMailPOPAccountList.delete_messages_when_moved_from_inbox"]], "deleted_status (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.deleted_status"]], "deleted_status() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.deleted_status"]], "delivery_account (pyxa.apps.mail.xamailaccount property)": [[27, "PyXA.apps.Mail.XAMailAccount.delivery_account"]], "delivery_account() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.delivery_account"]], "document (pyxa.apps.mail.xamailwindow property)": [[27, "PyXA.apps.Mail.XAMailWindow.document"]], "download_html_attachments (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.download_html_attachments"]], "downloaded (pyxa.apps.mail.xamailattachment property)": [[27, "PyXA.apps.Mail.XAMailAttachment.downloaded"]], "downloaded() (pyxa.apps.mail.xamailattachmentlist method)": [[27, "PyXA.apps.Mail.XAMailAttachmentList.downloaded"]], "drafts_mailbox (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.drafts_mailbox"]], "drafts_mailbox (pyxa.apps.mail.xamailmessageviewer property)": [[27, "PyXA.apps.Mail.XAMailMessageViewer.drafts_mailbox"]], "drafts_mailbox() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.drafts_mailbox"]], "email_addresses (pyxa.apps.mail.xamailaccount property)": [[27, "PyXA.apps.Mail.XAMailAccount.email_addresses"]], "email_addresses() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.email_addresses"]], "empty_junk_messages_frequency (pyxa.apps.mail.xamailaccount property)": [[27, "PyXA.apps.Mail.XAMailAccount.empty_junk_messages_frequency"]], "empty_junk_messages_frequency() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.empty_junk_messages_frequency"]], "empty_junk_messages_on_quit (pyxa.apps.mail.xamailaccount property)": [[27, "PyXA.apps.Mail.XAMailAccount.empty_junk_messages_on_quit"]], "empty_junk_messages_on_quit() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.empty_junk_messages_on_quit"]], "empty_trash_frequency (pyxa.apps.mail.xamailaccount property)": [[27, "PyXA.apps.Mail.XAMailAccount.empty_trash_frequency"]], "empty_trash_frequency() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.empty_trash_frequency"]], "empty_trash_on_quit (pyxa.apps.mail.xamailaccount property)": [[27, "PyXA.apps.Mail.XAMailAccount.empty_trash_on_quit"]], "empty_trash_on_quit() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.empty_trash_on_quit"]], "enabled (pyxa.apps.mail.xamailaccount property)": [[27, "PyXA.apps.Mail.XAMailAccount.enabled"]], "enabled (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.enabled"]], "enabled (pyxa.apps.mail.xamailsmtpserver property)": [[27, "PyXA.apps.Mail.XAMailSMTPServer.enabled"]], "enabled() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.enabled"]], "enabled() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.enabled"]], "enabled() (pyxa.apps.mail.xamailsmtpserverlist method)": [[27, "PyXA.apps.Mail.XAMailSMTPServerList.enabled"]], "expand_group_addresses (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.expand_group_addresses"]], "expression (pyxa.apps.mail.xamailrulecondition property)": [[27, "PyXA.apps.Mail.XAMailRuleCondition.expression"]], "expression() (pyxa.apps.mail.xamailruleconditionlist method)": [[27, "PyXA.apps.Mail.XAMailRuleConditionList.expression"]], "fetch_interval (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.fetch_interval"]], "fetches_automatically (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.fetches_automatically"]], "file (pyxa.apps.mail.xamaildocument property)": [[27, "PyXA.apps.Mail.XAMailDocument.file"]], "file() (pyxa.apps.mail.xamaildocumentlist method)": [[27, "PyXA.apps.Mail.XAMailDocumentList.file"]], "file_size (pyxa.apps.mail.xamailattachment property)": [[27, "PyXA.apps.Mail.XAMailAttachment.file_size"]], "file_size() (pyxa.apps.mail.xamailattachmentlist method)": [[27, "PyXA.apps.Mail.XAMailAttachmentList.file_size"]], "fixed_width_font (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.fixed_width_font"]], "fixed_width_font_size (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.fixed_width_font_size"]], "flag_index (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.flag_index"]], "flag_index() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.flag_index"]], "flagged_status (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.flagged_status"]], "flagged_status() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.flagged_status"]], "forward() (pyxa.apps.mail.xamailmessage method)": [[27, "PyXA.apps.Mail.XAMailMessage.forward"]], "forward_message (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.forward_message"]], "forward_message() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.forward_message"]], "forward_text (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.forward_text"]], "forward_text() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.forward_text"]], "frontmost (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.frontmost"]], "full_name (pyxa.apps.mail.xamailaccount property)": [[27, "PyXA.apps.Mail.XAMailAccount.full_name"]], "full_name() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.full_name"]], "header (pyxa.apps.mail.xamailrulecondition property)": [[27, "PyXA.apps.Mail.XAMailRuleCondition.header"]], "header() (pyxa.apps.mail.xamailruleconditionlist method)": [[27, "PyXA.apps.Mail.XAMailRuleConditionList.header"]], "headers() (pyxa.apps.mail.xamailmessage method)": [[27, "PyXA.apps.Mail.XAMailMessage.headers"]], "highlight_selected_conversation (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.highlight_selected_conversation"]], "highlight_text_using_color (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.highlight_text_using_color"]], "highlight_text_using_color() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.highlight_text_using_color"]], "id (pyxa.apps.mail.xamailaccount property)": [[27, "PyXA.apps.Mail.XAMailAccount.id"]], "id (pyxa.apps.mail.xamailattachment property)": [[27, "PyXA.apps.Mail.XAMailAttachment.id"]], "id (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.id"]], "id (pyxa.apps.mail.xamailmessageviewer property)": [[27, "PyXA.apps.Mail.XAMailMessageViewer.id"]], "id (pyxa.apps.mail.xamailoutgoingmessage property)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessage.id"]], "id() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.id"]], "id() (pyxa.apps.mail.xamailattachmentlist method)": [[27, "PyXA.apps.Mail.XAMailAttachmentList.id"]], "id() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.id"]], "id() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.id"]], "id() (pyxa.apps.mail.xamailoutgoingmessagelist method)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessageList.id"]], "imap_accounts() (pyxa.apps.mail.xamailapplication method)": [[27, "PyXA.apps.Mail.XAMailApplication.imap_accounts"]], "import_mailbox() (pyxa.apps.mail.xamailapplication method)": [[27, "PyXA.apps.Mail.XAMailApplication.import_mailbox"]], "inbox (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.inbox"]], "inbox (pyxa.apps.mail.xamailmessageviewer property)": [[27, "PyXA.apps.Mail.XAMailMessageViewer.inbox"]], "inbox() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.inbox"]], "include_all_original_message_text (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.include_all_original_message_text"]], "junk_mail_status (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.junk_mail_status"]], "junk_mail_status() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.junk_mail_status"]], "junk_mailbox (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.junk_mailbox"]], "junk_mailbox (pyxa.apps.mail.xamailmessageviewer property)": [[27, "PyXA.apps.Mail.XAMailMessageViewer.junk_mailbox"]], "junk_mailbox() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.junk_mailbox"]], "level_one_quoting_color (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.level_one_quoting_color"]], "level_three_quoting_color (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.level_three_quoting_color"]], "level_two_quoting_color (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.level_two_quoting_color"]], "mail_attachments() (pyxa.apps.mail.xamailmessage method)": [[27, "PyXA.apps.Mail.XAMailMessage.mail_attachments"]], "mailbox (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.mailbox"]], "mailbox() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.mailbox"]], "mailbox_list_visible (pyxa.apps.mail.xamailmessageviewer property)": [[27, "PyXA.apps.Mail.XAMailMessageViewer.mailbox_list_visible"]], "mailbox_list_visible() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.mailbox_list_visible"]], "mailboxes() (pyxa.apps.mail.xamailaccount method)": [[27, "PyXA.apps.Mail.XAMailAccount.mailboxes"]], "mailboxes() (pyxa.apps.mail.xamailapplication method)": [[27, "PyXA.apps.Mail.XAMailApplication.mailboxes"]], "mailboxes() (pyxa.apps.mail.xamailbox method)": [[27, "PyXA.apps.Mail.XAMailbox.mailboxes"]], "mark_flag_index (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.mark_flag_index"]], "mark_flag_index() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.mark_flag_index"]], "mark_flagged (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.mark_flagged"]], "mark_flagged() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.mark_flagged"]], "mark_read (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.mark_read"]], "mark_read() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.mark_read"]], "message_caching (pyxa.apps.mail.xamailimapaccount property)": [[27, "PyXA.apps.Mail.XAMailIMAPAccount.message_caching"]], "message_caching() (pyxa.apps.mail.xamailimapaccountlist method)": [[27, "PyXA.apps.Mail.XAMailIMAPAccountList.message_caching"]], "message_font (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.message_font"]], "message_font_size (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.message_font_size"]], "message_id (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.message_id"]], "message_id() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.message_id"]], "message_list_font (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.message_list_font"]], "message_list_font_size (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.message_list_font_size"]], "message_signature (pyxa.apps.mail.xamailoutgoingmessage property)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessage.message_signature"]], "message_signature() (pyxa.apps.mail.xamailoutgoingmessagelist method)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessageList.message_signature"]], "message_size (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.message_size"]], "message_size() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.message_size"]], "message_viewers() (pyxa.apps.mail.xamailapplication method)": [[27, "PyXA.apps.Mail.XAMailApplication.message_viewers"]], "messages() (pyxa.apps.mail.xamailmessageviewer method)": [[27, "PyXA.apps.Mail.XAMailMessageViewer.messages"]], "messages() (pyxa.apps.mail.xamailbox method)": [[27, "PyXA.apps.Mail.XAMailbox.messages"]], "mime_type (pyxa.apps.mail.xamailattachment property)": [[27, "PyXA.apps.Mail.XAMailAttachment.mime_type"]], "mime_type() (pyxa.apps.mail.xamailattachmentlist method)": [[27, "PyXA.apps.Mail.XAMailAttachmentList.mime_type"]], "modified (pyxa.apps.mail.xamaildocument property)": [[27, "PyXA.apps.Mail.XAMailDocument.modified"]], "modified() (pyxa.apps.mail.xamaildocumentlist method)": [[27, "PyXA.apps.Mail.XAMailDocumentList.modified"]], "move_deleted_messages_to_trash (pyxa.apps.mail.xamailaccount property)": [[27, "PyXA.apps.Mail.XAMailAccount.move_deleted_messages_to_trash"]], "move_deleted_messages_to_trash() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.move_deleted_messages_to_trash"]], "move_message (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.move_message"]], "move_message() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.move_message"]], "name (pyxa.apps.mail.xamailaccount property)": [[27, "PyXA.apps.Mail.XAMailAccount.name"]], "name (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.name"]], "name (pyxa.apps.mail.xamailattachment property)": [[27, "PyXA.apps.Mail.XAMailAttachment.name"]], "name (pyxa.apps.mail.xamaildocument property)": [[27, "PyXA.apps.Mail.XAMailDocument.name"]], "name (pyxa.apps.mail.xamailheader property)": [[27, "PyXA.apps.Mail.XAMailHeader.name"]], "name (pyxa.apps.mail.xamailrecipient property)": [[27, "PyXA.apps.Mail.XAMailRecipient.name"]], "name (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.name"]], "name (pyxa.apps.mail.xamailsmtpserver property)": [[27, "PyXA.apps.Mail.XAMailSMTPServer.name"]], "name (pyxa.apps.mail.xamailsignature property)": [[27, "PyXA.apps.Mail.XAMailSignature.name"]], "name (pyxa.apps.mail.xamailbox property)": [[27, "PyXA.apps.Mail.XAMailbox.name"]], "name() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.name"]], "name() (pyxa.apps.mail.xamailattachmentlist method)": [[27, "PyXA.apps.Mail.XAMailAttachmentList.name"]], "name() (pyxa.apps.mail.xamaildocumentlist method)": [[27, "PyXA.apps.Mail.XAMailDocumentList.name"]], "name() (pyxa.apps.mail.xamailheaderlist method)": [[27, "PyXA.apps.Mail.XAMailHeaderList.name"]], "name() (pyxa.apps.mail.xamailrecipientlist method)": [[27, "PyXA.apps.Mail.XAMailRecipientList.name"]], "name() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.name"]], "name() (pyxa.apps.mail.xamailsmtpserverlist method)": [[27, "PyXA.apps.Mail.XAMailSMTPServerList.name"]], "name() (pyxa.apps.mail.xamailsignaturelist method)": [[27, "PyXA.apps.Mail.XAMailSignatureList.name"]], "name() (pyxa.apps.mail.xamailboxlist method)": [[27, "PyXA.apps.Mail.XAMailboxList.name"]], "new_mail_sound (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.new_mail_sound"]], "open() (pyxa.apps.mail.xamailmessage method)": [[27, "PyXA.apps.Mail.XAMailMessage.open"]], "outbox (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.outbox"]], "outbox (pyxa.apps.mail.xamailmessageviewer property)": [[27, "PyXA.apps.Mail.XAMailMessageViewer.outbox"]], "outbox() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.outbox"]], "outgoing_messages() (pyxa.apps.mail.xamailapplication method)": [[27, "PyXA.apps.Mail.XAMailApplication.outgoing_messages"]], "password (pyxa.apps.mail.xamailaccount property)": [[27, "PyXA.apps.Mail.XAMailAccount.password"]], "password (pyxa.apps.mail.xamailsmtpserver property)": [[27, "PyXA.apps.Mail.XAMailSMTPServer.password"]], "play_sound (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.play_sound"]], "play_sound() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.play_sound"]], "pop_accounts() (pyxa.apps.mail.xamailapplication method)": [[27, "PyXA.apps.Mail.XAMailApplication.pop_accounts"]], "port (pyxa.apps.mail.xamailaccount property)": [[27, "PyXA.apps.Mail.XAMailAccount.port"]], "port (pyxa.apps.mail.xamailsmtpserver property)": [[27, "PyXA.apps.Mail.XAMailSMTPServer.port"]], "port() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.port"]], "port() (pyxa.apps.mail.xamailsmtpserverlist method)": [[27, "PyXA.apps.Mail.XAMailSMTPServerList.port"]], "preview_pane_is_visible (pyxa.apps.mail.xamailmessageviewer property)": [[27, "PyXA.apps.Mail.XAMailMessageViewer.preview_pane_is_visible"]], "preview_pane_is_visible() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.preview_pane_is_visible"]], "primary_email (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.primary_email"]], "qualifier (pyxa.apps.mail.xamailrulecondition property)": [[27, "PyXA.apps.Mail.XAMailRuleCondition.qualifier"]], "qualifier() (pyxa.apps.mail.xamailruleconditionlist method)": [[27, "PyXA.apps.Mail.XAMailRuleConditionList.qualifier"]], "quote_original_message (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.quote_original_message"]], "read_status (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.read_status"]], "read_status() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.read_status"]], "recipients() (pyxa.apps.mail.xamailmessage method)": [[27, "PyXA.apps.Mail.XAMailMessage.recipients"]], "redirect() (pyxa.apps.mail.xamailmessage method)": [[27, "PyXA.apps.Mail.XAMailMessage.redirect"]], "redirect_message (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.redirect_message"]], "redirect_message() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.redirect_message"]], "reply() (pyxa.apps.mail.xamailmessage method)": [[27, "PyXA.apps.Mail.XAMailMessage.reply"]], "reply_text (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.reply_text"]], "reply_text() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.reply_text"]], "reply_to (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.reply_to"]], "reply_to() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.reply_to"]], "rule_conditions() (pyxa.apps.mail.xamailrule method)": [[27, "PyXA.apps.Mail.XAMailRule.rule_conditions"]], "rule_type (pyxa.apps.mail.xamailrulecondition property)": [[27, "PyXA.apps.Mail.XAMailRuleCondition.rule_type"]], "rule_type() (pyxa.apps.mail.xamailruleconditionlist method)": [[27, "PyXA.apps.Mail.XAMailRuleConditionList.rule_type"]], "rules() (pyxa.apps.mail.xamailapplication method)": [[27, "PyXA.apps.Mail.XAMailApplication.rules"]], "run_script (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.run_script"]], "run_script() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.run_script"]], "same_reply_format (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.same_reply_format"]], "save() (pyxa.apps.mail.xamailoutgoingmessage method)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessage.save"]], "selected_mailboxes (pyxa.apps.mail.xamailmessageviewer property)": [[27, "PyXA.apps.Mail.XAMailMessageViewer.selected_mailboxes"]], "selected_mailboxes() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.selected_mailboxes"]], "selected_messages (pyxa.apps.mail.xamailmessageviewer property)": [[27, "PyXA.apps.Mail.XAMailMessageViewer.selected_messages"]], "selected_messages() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.selected_messages"]], "selected_signature (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.selected_signature"]], "selection (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.selection"]], "send() (pyxa.apps.mail.xamailoutgoingmessage method)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessage.send"]], "sender (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.sender"]], "sender (pyxa.apps.mail.xamailoutgoingmessage property)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessage.sender"]], "sender() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.sender"]], "sender() (pyxa.apps.mail.xamailoutgoingmessagelist method)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessageList.sender"]], "sent_mailbox (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.sent_mailbox"]], "sent_mailbox (pyxa.apps.mail.xamailmessageviewer property)": [[27, "PyXA.apps.Mail.XAMailMessageViewer.sent_mailbox"]], "sent_mailbox() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.sent_mailbox"]], "server_name (pyxa.apps.mail.xamailaccount property)": [[27, "PyXA.apps.Mail.XAMailAccount.server_name"]], "server_name (pyxa.apps.mail.xamailsmtpserver property)": [[27, "PyXA.apps.Mail.XAMailSMTPServer.server_name"]], "server_name() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.server_name"]], "server_name() (pyxa.apps.mail.xamailsmtpserverlist method)": [[27, "PyXA.apps.Mail.XAMailSMTPServerList.server_name"]], "should_copy_message (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.should_copy_message"]], "should_copy_message() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.should_copy_message"]], "should_move_message (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.should_move_message"]], "should_move_message() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.should_move_message"]], "should_play_other_mail_sounds (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.should_play_other_mail_sounds"]], "signatures() (pyxa.apps.mail.xamailapplication method)": [[27, "PyXA.apps.Mail.XAMailApplication.signatures"]], "smtp_servers() (pyxa.apps.mail.xamailapplication method)": [[27, "PyXA.apps.Mail.XAMailApplication.smtp_servers"]], "sort_ascending (pyxa.apps.mail.xamailmessageviewer property)": [[27, "PyXA.apps.Mail.XAMailMessageViewer.sort_ascending"]], "sort_column (pyxa.apps.mail.xamailmessageviewer property)": [[27, "PyXA.apps.Mail.XAMailMessageViewer.sort_column"]], "sort_column() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.sort_column"]], "sorted_ascending() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.sorted_ascending"]], "source (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.source"]], "source() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.source"]], "stop_evaluating_rule (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.stop_evaluating_rule"]], "stop_evaluating_rules (pyxa.apps.mail.xamailrule property)": [[27, "PyXA.apps.Mail.XAMailRule.stop_evaluating_rules"]], "stop_evaluating_rules() (pyxa.apps.mail.xamailrulelist method)": [[27, "PyXA.apps.Mail.XAMailRuleList.stop_evaluating_rules"]], "store_deleted_messages_on_server (pyxa.apps.mail.xamailimapaccount property)": [[27, "PyXA.apps.Mail.XAMailIMAPAccount.store_deleted_messages_on_server"]], "store_deleted_messages_on_server() (pyxa.apps.mail.xamailimapaccountlist method)": [[27, "PyXA.apps.Mail.XAMailIMAPAccountList.store_deleted_messages_on_server"]], "store_drafts_on_server (pyxa.apps.mail.xamailimapaccount property)": [[27, "PyXA.apps.Mail.XAMailIMAPAccount.store_drafts_on_server"]], "store_drafts_on_server() (pyxa.apps.mail.xamailimapaccountlist method)": [[27, "PyXA.apps.Mail.XAMailIMAPAccountList.store_drafts_on_server"]], "store_junk_mail_on_server (pyxa.apps.mail.xamailimapaccount property)": [[27, "PyXA.apps.Mail.XAMailIMAPAccount.store_junk_mail_on_server"]], "store_junk_mail_on_server() (pyxa.apps.mail.xamailimapaccountlist method)": [[27, "PyXA.apps.Mail.XAMailIMAPAccountList.store_junk_mail_on_server"]], "store_sent_messages_on_server (pyxa.apps.mail.xamailimapaccount property)": [[27, "PyXA.apps.Mail.XAMailIMAPAccount.store_sent_messages_on_server"]], "store_sent_messages_on_server() (pyxa.apps.mail.xamailimapaccountlist method)": [[27, "PyXA.apps.Mail.XAMailIMAPAccountList.store_sent_messages_on_server"]], "subject (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.subject"]], "subject (pyxa.apps.mail.xamailoutgoingmessage property)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessage.subject"]], "subject() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.subject"]], "subject() (pyxa.apps.mail.xamailoutgoingmessagelist method)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessageList.subject"]], "synchronize() (pyxa.apps.mail.xamailapplication method)": [[27, "PyXA.apps.Mail.XAMailApplication.synchronize"]], "to_recipients() (pyxa.apps.mail.xamailmessage method)": [[27, "PyXA.apps.Mail.XAMailMessage.to_recipients"]], "trash_mailbox (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.trash_mailbox"]], "trash_mailbox (pyxa.apps.mail.xamailmessageviewer property)": [[27, "PyXA.apps.Mail.XAMailMessageViewer.trash_mailbox"]], "trash_mailbox() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.trash_mailbox"]], "unread_count (pyxa.apps.mail.xamailbox property)": [[27, "PyXA.apps.Mail.XAMailbox.unread_count"]], "unread_count() (pyxa.apps.mail.xamailboxlist method)": [[27, "PyXA.apps.Mail.XAMailboxList.unread_count"]], "use_fixed_width_font (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.use_fixed_width_font"]], "user_name (pyxa.apps.mail.xamailaccount property)": [[27, "PyXA.apps.Mail.XAMailAccount.user_name"]], "user_name (pyxa.apps.mail.xamailsmtpserver property)": [[27, "PyXA.apps.Mail.XAMailSMTPServer.user_name"]], "user_name() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.user_name"]], "user_name() (pyxa.apps.mail.xamailsmtpserverlist method)": [[27, "PyXA.apps.Mail.XAMailSMTPServerList.user_name"]], "uses_ssl (pyxa.apps.mail.xamailaccount property)": [[27, "PyXA.apps.Mail.XAMailAccount.uses_ssl"]], "uses_ssl (pyxa.apps.mail.xamailsmtpserver property)": [[27, "PyXA.apps.Mail.XAMailSMTPServer.uses_ssl"]], "uses_ssl() (pyxa.apps.mail.xamailaccountlist method)": [[27, "PyXA.apps.Mail.XAMailAccountList.uses_ssl"]], "uses_ssl() (pyxa.apps.mail.xamailsmtpserverlist method)": [[27, "PyXA.apps.Mail.XAMailSMTPServerList.uses_ssl"]], "version (pyxa.apps.mail.xamailapplication property)": [[27, "PyXA.apps.Mail.XAMailApplication.version"]], "visible (pyxa.apps.mail.xamailoutgoingmessage property)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessage.visible"]], "visible() (pyxa.apps.mail.xamailoutgoingmessagelist method)": [[27, "PyXA.apps.Mail.XAMailOutgoingMessageList.visible"]], "visible_columns (pyxa.apps.mail.xamailmessageviewer property)": [[27, "PyXA.apps.Mail.XAMailMessageViewer.visible_columns"]], "visible_columns() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.visible_columns"]], "visible_messages (pyxa.apps.mail.xamailmessageviewer property)": [[27, "PyXA.apps.Mail.XAMailMessageViewer.visible_messages"]], "visible_messages() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.visible_messages"]], "was_forward (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.was_forward"]], "was_forwarded() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.was_forwarded"]], "was_redirected (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.was_redirected"]], "was_redirected() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.was_redirected"]], "was_replied_to (pyxa.apps.mail.xamailmessage property)": [[27, "PyXA.apps.Mail.XAMailMessage.was_replied_to"]], "was_replied_to() (pyxa.apps.mail.xamailmessagelist method)": [[27, "PyXA.apps.Mail.XAMailMessageList.was_replied_to"]], "window (pyxa.apps.mail.xamailmessageviewer property)": [[27, "PyXA.apps.Mail.XAMailMessageViewer.window"]], "window() (pyxa.apps.mail.xamailmessageviewerlist method)": [[27, "PyXA.apps.Mail.XAMailMessageViewerList.window"]], "pyxa.apps.maps": [[28, "module-PyXA.apps.Maps"]], "xamapsapplication (class in pyxa.apps.maps)": [[28, "PyXA.apps.Maps.XAMapsApplication"]], "xamapsdirections (class in pyxa.apps.maps)": [[28, "PyXA.apps.Maps.XAMapsDirections"]], "xamapsdirectionslist (class in pyxa.apps.maps)": [[28, "PyXA.apps.Maps.XAMapsDirectionsList"]], "xamapssidebarlocation (class in pyxa.apps.maps)": [[28, "PyXA.apps.Maps.XAMapsSidebarLocation"]], "xamapssidebarlocationlist (class in pyxa.apps.maps)": [[28, "PyXA.apps.Maps.XAMapsSidebarLocationList"]], "xamapstab (class in pyxa.apps.maps)": [[28, "PyXA.apps.Maps.XAMapsTab"]], "xamapstablist (class in pyxa.apps.maps)": [[28, "PyXA.apps.Maps.XAMapsTabList"]], "close() (pyxa.apps.maps.xamapstab method)": [[28, "PyXA.apps.Maps.XAMapsTab.close"]], "description (pyxa.apps.maps.xamapssidebarlocation property)": [[28, "PyXA.apps.Maps.XAMapsSidebarLocation.description"]], "destination_address (pyxa.apps.maps.xamapsdirections attribute)": [[28, "PyXA.apps.Maps.XAMapsDirections.destination_address"]], "directions_to() (pyxa.apps.maps.xamapsapplication method)": [[28, "PyXA.apps.Maps.XAMapsApplication.directions_to"]], "drop_pin() (pyxa.apps.maps.xamapsapplication method)": [[28, "PyXA.apps.Maps.XAMapsApplication.drop_pin"]], "duration (pyxa.apps.maps.xamapsdirections attribute)": [[28, "PyXA.apps.Maps.XAMapsDirections.duration"]], "has_tolls (pyxa.apps.maps.xamapsdirections attribute)": [[28, "PyXA.apps.Maps.XAMapsDirections.has_tolls"]], "has_weather_warnings (pyxa.apps.maps.xamapsdirections attribute)": [[28, "PyXA.apps.Maps.XAMapsDirections.has_weather_warnings"]], "name (pyxa.apps.maps.xamapssidebarlocation property)": [[28, "PyXA.apps.Maps.XAMapsSidebarLocation.name"]], "name() (pyxa.apps.maps.xamapssidebarlocationlist method)": [[28, "PyXA.apps.Maps.XAMapsSidebarLocationList.name"]], "new_tab() (pyxa.apps.maps.xamapsapplication method)": [[28, "PyXA.apps.Maps.XAMapsApplication.new_tab"]], "orient_north() (pyxa.apps.maps.xamapsapplication method)": [[28, "PyXA.apps.Maps.XAMapsApplication.orient_north"]], "properties (pyxa.apps.maps.xamapstab property)": [[28, "PyXA.apps.Maps.XAMapsTab.properties"]], "search() (pyxa.apps.maps.xamapsapplication method)": [[28, "PyXA.apps.Maps.XAMapsApplication.search"]], "selected (pyxa.apps.maps.xamapssidebarlocation property)": [[28, "PyXA.apps.Maps.XAMapsSidebarLocation.selected"]], "selected (pyxa.apps.maps.xamapstab property)": [[28, "PyXA.apps.Maps.XAMapsTab.selected"]], "show_address() (pyxa.apps.maps.xamapsapplication method)": [[28, "PyXA.apps.Maps.XAMapsApplication.show_address"]], "show_coordinate() (pyxa.apps.maps.xamapsapplication method)": [[28, "PyXA.apps.Maps.XAMapsApplication.show_coordinate"]], "show_directions_to() (pyxa.apps.maps.xamapssidebarlocation method)": [[28, "PyXA.apps.Maps.XAMapsSidebarLocation.show_directions_to"]], "sidebar_locations() (pyxa.apps.maps.xamapsapplication method)": [[28, "PyXA.apps.Maps.XAMapsApplication.sidebar_locations"]], "sidebar_showing (pyxa.apps.maps.xamapsapplication property)": [[28, "PyXA.apps.Maps.XAMapsApplication.sidebar_showing"]], "source_address (pyxa.apps.maps.xamapsdirections attribute)": [[28, "PyXA.apps.Maps.XAMapsDirections.source_address"]], "tabs() (pyxa.apps.maps.xamapsapplication method)": [[28, "PyXA.apps.Maps.XAMapsApplication.tabs"]], "title (pyxa.apps.maps.xamapstab property)": [[28, "PyXA.apps.Maps.XAMapsTab.title"]], "toggle_sidebar() (pyxa.apps.maps.xamapsapplication method)": [[28, "PyXA.apps.Maps.XAMapsApplication.toggle_sidebar"]], "zoom_in() (pyxa.apps.maps.xamapsapplication method)": [[28, "PyXA.apps.Maps.XAMapsApplication.zoom_in"]], "zoom_out() (pyxa.apps.maps.xamapsapplication method)": [[28, "PyXA.apps.Maps.XAMapsApplication.zoom_out"]], "albums (pyxa.apps.mediaapplicationbase.xamediaapplication.searchfilter attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.SearchFilter.ALBUMS"]], "all (pyxa.apps.mediaapplicationbase.xamediaapplication.searchfilter attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.SearchFilter.ALL"]], "artists (pyxa.apps.mediaapplicationbase.xamediaapplication.searchfilter attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.SearchFilter.ARTISTS"]], "audio_cd (pyxa.apps.mediaapplicationbase.xamediaapplication.sourcekind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.SourceKind.AUDIO_CD"]], "composers (pyxa.apps.mediaapplicationbase.xamediaapplication.searchfilter attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.SearchFilter.COMPOSERS"]], "computed (pyxa.apps.mediaapplicationbase.xamediaapplication.ratingkind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.RatingKind.COMPUTED"]], "displayed (pyxa.apps.mediaapplicationbase.xamediaapplication.searchfilter attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.SearchFilter.DISPLAYED"]], "fast_forwarding (pyxa.apps.mediaapplicationbase.xamediaapplication.playerstate attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.PlayerState.FAST_FORWARDING"]], "folder (pyxa.apps.mediaapplicationbase.xamediaapplication.playlistkind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.PlaylistKind.FOLDER"]], "genius (pyxa.apps.mediaapplicationbase.xamediaapplication.playlistkind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.PlaylistKind.GENIUS"]], "itunes_store (pyxa.apps.mediaapplicationbase.xamediaapplication.sourcekind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.SourceKind.ITUNES_STORE"]], "library (pyxa.apps.mediaapplicationbase.xamediaapplication.playlistkind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.PlaylistKind.LIBRARY"]], "library (pyxa.apps.mediaapplicationbase.xamediaapplication.sourcekind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.SourceKind.LIBRARY"]], "mp3_cd (pyxa.apps.mediaapplicationbase.xamediaapplication.sourcekind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.SourceKind.MP3_CD"]], "music (pyxa.apps.mediaapplicationbase.xamediaapplication.playlistkind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.PlaylistKind.MUSIC"]], "music_video (pyxa.apps.mediaapplicationbase.xamediaapplication.mediakind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.MediaKind.MUSIC_VIDEO"]], "names (pyxa.apps.mediaapplicationbase.xamediaapplication.searchfilter attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.SearchFilter.NAMES"]], "none (pyxa.apps.mediaapplicationbase.xamediaapplication.playlistkind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.PlaylistKind.NONE"]], "paused (pyxa.apps.mediaapplicationbase.xamediaapplication.playerstate attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.PlayerState.PAUSED"]], "playing (pyxa.apps.mediaapplicationbase.xamediaapplication.playerstate attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.PlayerState.PLAYING"]], "purchased_music (pyxa.apps.mediaapplicationbase.xamediaapplication.playlistkind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.PlaylistKind.PURCHASED_MUSIC"]], "pyxa.apps.mediaapplicationbase": [[29, "module-PyXA.apps.MediaApplicationBase"]], "radio_tuner (pyxa.apps.mediaapplicationbase.xamediaapplication.sourcekind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.SourceKind.RADIO_TUNER"]], "rewinding (pyxa.apps.mediaapplicationbase.xamediaapplication.playerstate attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.PlayerState.REWINDING"]], "shared_library (pyxa.apps.mediaapplicationbase.xamediaapplication.sourcekind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.SourceKind.SHARED_LIBRARY"]], "song (pyxa.apps.mediaapplicationbase.xamediaapplication.mediakind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.MediaKind.SONG"]], "stopped (pyxa.apps.mediaapplicationbase.xamediaapplication.playerstate attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.PlayerState.STOPPED"]], "unknown (pyxa.apps.mediaapplicationbase.xamediaapplication.mediakind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.MediaKind.UNKNOWN"]], "unknown (pyxa.apps.mediaapplicationbase.xamediaapplication.sourcekind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.SourceKind.UNKNOWN"]], "user (pyxa.apps.mediaapplicationbase.xamediaapplication.playlistkind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.PlaylistKind.USER"]], "user (pyxa.apps.mediaapplicationbase.xamediaapplication.ratingkind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.RatingKind.USER"]], "user_library (pyxa.apps.mediaapplicationbase.xamediaapplication.playlistkind attribute)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.PlaylistKind.USER_LIBRARY"]], "xamediaapplication (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication"]], "xamediaapplication.mediakind (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.MediaKind"]], "xamediaapplication.playerstate (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.PlayerState"]], "xamediaapplication.playlistkind (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.PlaylistKind"]], "xamediaapplication.ratingkind (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.RatingKind"]], "xamediaapplication.searchfilter (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.SearchFilter"]], "xamediaapplication.sourcekind (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.SourceKind"]], "xamediaartwork (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtwork"]], "xamediaartworklist (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtworkList"]], "xamediabrowserwindow (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaBrowserWindow"]], "xamediabrowserwindowlist (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaBrowserWindowList"]], "xamediafiletrack (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaFileTrack"]], "xamediafiletracklist (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaFileTrackList"]], "xamediafolderplaylist (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaFolderPlaylist"]], "xamediafolderplaylistlist (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaFolderPlaylistList"]], "xamediaitem (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItem"]], "xamediaitemlist (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItemList"]], "xamedialibraryplaylist (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaLibraryPlaylist"]], "xamedialibraryplaylistlist (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaLibraryPlaylistList"]], "xamediaplaylist (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylist"]], "xamediaplaylistlist (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistList"]], "xamediaplaylistwindow (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistWindow"]], "xamediaplaylistwindowlist (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistWindowList"]], "xamediasharedtrack (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaSharedTrack"]], "xamediasharedtracklist (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaSharedTrackList"]], "xamediasource (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaSource"]], "xamediasourcelist (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaSourceList"]], "xamediatrack (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack"]], "xamediatracklist (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList"]], "xamediaurltrack (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaURLTrack"]], "xamediaurltracklist (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaURLTrackList"]], "xamediauserplaylist (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaUserPlaylist"]], "xamediauserplaylistlist (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaUserPlaylistList"]], "xamediavideowindow (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaVideoWindow"]], "xamediavideowindowlist (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaVideoWindowList"]], "xamediawindow (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindow"]], "xamediawindowlist (class in pyxa.apps.mediaapplicationbase)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList"]], "address (pyxa.apps.mediaapplicationbase.xamediaurltrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaURLTrack.address"]], "address() (pyxa.apps.mediaapplicationbase.xamediaurltracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaURLTrackList.address"]], "album (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.album"]], "album() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.album"]], "album_rating (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.album_rating"]], "album_rating() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.album_rating"]], "album_rating_kind (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.album_rating_kind"]], "album_rating_kind() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.album_rating_kind"]], "artworks() (pyxa.apps.mediaapplicationbase.xamediaplaylist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylist.artworks"]], "artworks() (pyxa.apps.mediaapplicationbase.xamediatrack method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.artworks"]], "back_track() (pyxa.apps.mediaapplicationbase.xamediaapplication method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.back_track"]], "bit_rate (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.bit_rate"]], "bit_rate() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.bit_rate"]], "bookmark (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.bookmark"]], "bookmark() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.bookmark"]], "bookmarkable (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.bookmarkable"]], "bookmarkable() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.bookmarkable"]], "bounds() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.bounds"]], "browser_windows() (pyxa.apps.mediaapplicationbase.xamediaapplication method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.browser_windows"]], "by_address() (pyxa.apps.mediaapplicationbase.xamediaurltracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaURLTrackList.by_address"]], "by_album() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_album"]], "by_album_rating() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_album_rating"]], "by_album_rating_kind() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_album_rating_kind"]], "by_bit_rate() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_bit_rate"]], "by_bookmark() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_bookmark"]], "by_bookmarkable() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_bookmarkable"]], "by_bounds() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.by_bounds"]], "by_capacity() (pyxa.apps.mediaapplicationbase.xamediasourcelist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaSourceList.by_capacity"]], "by_category() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_category"]], "by_closeable() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.by_closeable"]], "by_collapseable() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.by_collapseable"]], "by_collapsed() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.by_collapsed"]], "by_comment() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_comment"]], "by_container() (pyxa.apps.mediaapplicationbase.xamediaitemlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItemList.by_container"]], "by_data() (pyxa.apps.mediaapplicationbase.xamediaartworklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtworkList.by_data"]], "by_database_id() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_database_id"]], "by_date_added() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_date_added"]], "by_disc_count() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_disc_count"]], "by_disc_number() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_disc_number"]], "by_downloaded() (pyxa.apps.mediaapplicationbase.xamediaartworklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtworkList.by_downloaded"]], "by_downloader_apple_id() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_downloader_apple_id"]], "by_downloader_name() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_downloader_name"]], "by_duration() (pyxa.apps.mediaapplicationbase.xamediaplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistList.by_duration"]], "by_duration() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_duration"]], "by_enabled() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_enabled"]], "by_episode_id() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_episode_id"]], "by_episode_number() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_episode_number"]], "by_finish() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_finish"]], "by_format() (pyxa.apps.mediaapplicationbase.xamediaartworklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtworkList.by_format"]], "by_free_space() (pyxa.apps.mediaapplicationbase.xamediasourcelist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaSourceList.by_free_space"]], "by_full_screen() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.by_full_screen"]], "by_genre() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_genre"]], "by_grouping() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_grouping"]], "by_id() (pyxa.apps.mediaapplicationbase.xamediaitemlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItemList.by_id"]], "by_index() (pyxa.apps.mediaapplicationbase.xamediaitemlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItemList.by_index"]], "by_kind() (pyxa.apps.mediaapplicationbase.xamediaartworklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtworkList.by_kind"]], "by_kind() (pyxa.apps.mediaapplicationbase.xamediasourcelist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaSourceList.by_kind"]], "by_kind() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_kind"]], "by_location() (pyxa.apps.mediaapplicationbase.xamediafiletracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaFileTrackList.by_location"]], "by_long_description() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_long_description"]], "by_media_kind() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_media_kind"]], "by_modification_date() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_modification_date"]], "by_name() (pyxa.apps.mediaapplicationbase.xamediaitemlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItemList.by_name"]], "by_name() (pyxa.apps.mediaapplicationbase.xamediaplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistList.by_name"]], "by_object_description() (pyxa.apps.mediaapplicationbase.xamediaartworklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtworkList.by_object_description"]], "by_object_description() (pyxa.apps.mediaapplicationbase.xamediaplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistList.by_object_description"]], "by_object_description() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_object_description"]], "by_parent() (pyxa.apps.mediaapplicationbase.xamediaplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistList.by_parent"]], "by_persistent_id() (pyxa.apps.mediaapplicationbase.xamediaitemlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItemList.by_persistent_id"]], "by_played_count() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_played_count"]], "by_played_date() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_played_date"]], "by_position() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.by_position"]], "by_properties() (pyxa.apps.mediaapplicationbase.xamediaitemlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItemList.by_properties"]], "by_purchaser_apple_id() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_purchaser_apple_id"]], "by_purchaser_name() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_purchaser_name"]], "by_rating() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_rating"]], "by_rating_kind() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_rating_kind"]], "by_raw_data() (pyxa.apps.mediaapplicationbase.xamediaartworklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtworkList.by_raw_data"]], "by_release_date() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_release_date"]], "by_resizable() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.by_resizable"]], "by_sample_rate() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_sample_rate"]], "by_season_number() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_season_number"]], "by_selection() (pyxa.apps.mediaapplicationbase.xamediabrowserwindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaBrowserWindowList.by_selection"]], "by_selection() (pyxa.apps.mediaapplicationbase.xamediaplaylistwindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistWindowList.by_selection"]], "by_shared() (pyxa.apps.mediaapplicationbase.xamediauserplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaUserPlaylistList.by_shared"]], "by_show() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_show"]], "by_size() (pyxa.apps.mediaapplicationbase.xamediaplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistList.by_size"]], "by_size() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_size"]], "by_skipped_count() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_skipped_count"]], "by_skipped_date() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_skipped_date"]], "by_smart() (pyxa.apps.mediaapplicationbase.xamediauserplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaUserPlaylistList.by_smart"]], "by_sort_album() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_sort_album"]], "by_sort_name() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_sort_name"]], "by_sort_show() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_sort_show"]], "by_special_kind() (pyxa.apps.mediaapplicationbase.xamediaplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistList.by_special_kind"]], "by_start() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_start"]], "by_time() (pyxa.apps.mediaapplicationbase.xamediaplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistList.by_time"]], "by_time() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_time"]], "by_track_count() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_track_count"]], "by_track_number() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_track_number"]], "by_unplayed() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_unplayed"]], "by_view() (pyxa.apps.mediaapplicationbase.xamediabrowserwindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaBrowserWindowList.by_view"]], "by_view() (pyxa.apps.mediaapplicationbase.xamediaplaylistwindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistWindowList.by_view"]], "by_visible() (pyxa.apps.mediaapplicationbase.xamediaplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistList.by_visible"]], "by_visible() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.by_visible"]], "by_volume_adjustment() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_volume_adjustment"]], "by_year() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.by_year"]], "by_zoomable() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.by_zoomable"]], "by_zoomed() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.by_zoomed"]], "capacity (pyxa.apps.mediaapplicationbase.xamediasource property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaSource.capacity"]], "capacity() (pyxa.apps.mediaapplicationbase.xamediasourcelist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaSourceList.capacity"]], "category (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.category"]], "category() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.category"]], "closeable() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.closeable"]], "collapseable (pyxa.apps.mediaapplicationbase.xamediawindow property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindow.collapseable"]], "collapseable() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.collapseable"]], "collapsed (pyxa.apps.mediaapplicationbase.xamediawindow property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindow.collapsed"]], "collapsed() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.collapsed"]], "comment (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.comment"]], "comment() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.comment"]], "container (pyxa.apps.mediaapplicationbase.xamediaitem property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItem.container"]], "container() (pyxa.apps.mediaapplicationbase.xamediaitemlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItemList.container"]], "current_playlist (pyxa.apps.mediaapplicationbase.xamediaapplication property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.current_playlist"]], "current_stream_title (pyxa.apps.mediaapplicationbase.xamediaapplication property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.current_stream_title"]], "current_stream_url (pyxa.apps.mediaapplicationbase.xamediaapplication property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.current_stream_url"]], "current_track() (pyxa.apps.mediaapplicationbase.xamediaapplication method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.current_track"]], "data (pyxa.apps.mediaapplicationbase.xamediaartwork property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtwork.data"]], "data() (pyxa.apps.mediaapplicationbase.xamediaartworklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtworkList.data"]], "database_id (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.database_id"]], "database_id() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.database_id"]], "date_added (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.date_added"]], "date_added() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.date_added"]], "disc_count (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.disc_count"]], "disc_count() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.disc_count"]], "disc_number (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.disc_number"]], "disc_number() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.disc_number"]], "download() (pyxa.apps.mediaapplicationbase.xamediaitem method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItem.download"]], "downloaded (pyxa.apps.mediaapplicationbase.xamediaartwork property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtwork.downloaded"]], "downloaded() (pyxa.apps.mediaapplicationbase.xamediaartworklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtworkList.downloaded"]], "downloader_apple_id (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.downloader_apple_id"]], "downloader_apple_id() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.downloader_apple_id"]], "downloader_name (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.downloader_name"]], "downloader_name() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.downloader_name"]], "duration (pyxa.apps.mediaapplicationbase.xamediaplaylist property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylist.duration"]], "duration (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.duration"]], "duration() (pyxa.apps.mediaapplicationbase.xamediaplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistList.duration"]], "duration() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.duration"]], "enabled (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.enabled"]], "enabled() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.enabled"]], "episode_id (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.episode_id"]], "episode_id() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.episode_id"]], "episode_number (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.episode_number"]], "episode_number() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.episode_number"]], "fast_forward() (pyxa.apps.mediaapplicationbase.xamediaapplication method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.fast_forward"]], "file_tracks() (pyxa.apps.mediaapplicationbase.xamedialibraryplaylist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaLibraryPlaylist.file_tracks"]], "file_tracks() (pyxa.apps.mediaapplicationbase.xamediauserplaylist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaUserPlaylist.file_tracks"]], "finish (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.finish"]], "finish() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.finish"]], "fixed_indexing (pyxa.apps.mediaapplicationbase.xamediaapplication property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.fixed_indexing"]], "format (pyxa.apps.mediaapplicationbase.xamediaartwork property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtwork.format"]], "format() (pyxa.apps.mediaapplicationbase.xamediaartworklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtworkList.format"]], "free_space (pyxa.apps.mediaapplicationbase.xamediasource property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaSource.free_space"]], "free_space() (pyxa.apps.mediaapplicationbase.xamediasourcelist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaSourceList.free_space"]], "frontmost (pyxa.apps.mediaapplicationbase.xamediaapplication property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.frontmost"]], "full_screen (pyxa.apps.mediaapplicationbase.xamediaapplication property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.full_screen"]], "full_screen (pyxa.apps.mediaapplicationbase.xamediawindow property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindow.full_screen"]], "full_screen() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.full_screen"]], "genre (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.genre"]], "genre() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.genre"]], "get_clipboard_representation() (pyxa.apps.mediaapplicationbase.xamediaitem method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItem.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.mediaapplicationbase.xamediaitemlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItemList.get_clipboard_representation"]], "grouping (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.grouping"]], "grouping() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.grouping"]], "id (pyxa.apps.mediaapplicationbase.xamediaitem property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItem.id"]], "id() (pyxa.apps.mediaapplicationbase.xamediaitemlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItemList.id"]], "index (pyxa.apps.mediaapplicationbase.xamediaitem property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItem.index"]], "index() (pyxa.apps.mediaapplicationbase.xamediaitemlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItemList.index"]], "kind (pyxa.apps.mediaapplicationbase.xamediaartwork property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtwork.kind"]], "kind (pyxa.apps.mediaapplicationbase.xamediasource property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaSource.kind"]], "kind (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.kind"]], "kind() (pyxa.apps.mediaapplicationbase.xamediaartworklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtworkList.kind"]], "kind() (pyxa.apps.mediaapplicationbase.xamediasourcelist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaSourceList.kind"]], "kind() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.kind"]], "library_playlists() (pyxa.apps.mediaapplicationbase.xamediasource method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaSource.library_playlists"]], "location (pyxa.apps.mediaapplicationbase.xamediafiletrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaFileTrack.location"]], "location() (pyxa.apps.mediaapplicationbase.xamediafiletracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaFileTrackList.location"]], "long_description (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.long_description"]], "long_description() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.long_description"]], "media_kind (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.media_kind"]], "media_kind() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.media_kind"]], "modification_date (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.modification_date"]], "modification_date() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.modification_date"]], "move_to() (pyxa.apps.mediaapplicationbase.xamediaplaylist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylist.move_to"]], "mute (pyxa.apps.mediaapplicationbase.xamediaapplication property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.mute"]], "name (pyxa.apps.mediaapplicationbase.xamediaapplication property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.name"]], "name (pyxa.apps.mediaapplicationbase.xamediaitem property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItem.name"]], "name (pyxa.apps.mediaapplicationbase.xamediaplaylist property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylist.name"]], "name() (pyxa.apps.mediaapplicationbase.xamediaitemlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItemList.name"]], "name() (pyxa.apps.mediaapplicationbase.xamediaplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistList.name"]], "next_track() (pyxa.apps.mediaapplicationbase.xamediaapplication method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.next_track"]], "object_description (pyxa.apps.mediaapplicationbase.xamediaartwork property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtwork.object_description"]], "object_description (pyxa.apps.mediaapplicationbase.xamediaplaylist property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylist.object_description"]], "object_description (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.object_description"]], "object_description() (pyxa.apps.mediaapplicationbase.xamediaartworklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtworkList.object_description"]], "object_description() (pyxa.apps.mediaapplicationbase.xamediaplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistList.object_description"]], "object_description() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.object_description"]], "open_location() (pyxa.apps.mediaapplicationbase.xamediaapplication method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.open_location"]], "parent (pyxa.apps.mediaapplicationbase.xamediaplaylist property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylist.parent"]], "parent() (pyxa.apps.mediaapplicationbase.xamediaplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistList.parent"]], "pause() (pyxa.apps.mediaapplicationbase.xamediaapplication method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.pause"]], "persistent_id (pyxa.apps.mediaapplicationbase.xamediaitem property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItem.persistent_id"]], "persistent_id() (pyxa.apps.mediaapplicationbase.xamediaitemlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItemList.persistent_id"]], "play() (pyxa.apps.mediaapplicationbase.xamediaapplication method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.play"]], "play() (pyxa.apps.mediaapplicationbase.xamediatrack method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.play"]], "played_count (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.played_count"]], "played_count() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.played_count"]], "played_date (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.played_date"]], "played_date() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.played_date"]], "player_position (pyxa.apps.mediaapplicationbase.xamediaapplication property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.player_position"]], "player_state (pyxa.apps.mediaapplicationbase.xamediaapplication property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.player_state"]], "playlist_windows() (pyxa.apps.mediaapplicationbase.xamediaapplication method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.playlist_windows"]], "playlists() (pyxa.apps.mediaapplicationbase.xamediaapplication method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.playlists"]], "playlists() (pyxa.apps.mediaapplicationbase.xamediasource method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaSource.playlists"]], "playpause() (pyxa.apps.mediaapplicationbase.xamediaapplication method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.playpause"]], "position (pyxa.apps.mediaapplicationbase.xamediawindow property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindow.position"]], "position() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.position"]], "previous_track() (pyxa.apps.mediaapplicationbase.xamediaapplication method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.previous_track"]], "properties (pyxa.apps.mediaapplicationbase.xamediaitem property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItem.properties"]], "properties() (pyxa.apps.mediaapplicationbase.xamediaitemlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItemList.properties"]], "purchaser_apple_id (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.purchaser_apple_id"]], "purchaser_apple_id() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.purchaser_apple_id"]], "purchaser_name (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.purchaser_name"]], "purchaser_name() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.purchaser_name"]], "rating (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.rating"]], "rating() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.rating"]], "rating_kind (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.rating_kind"]], "rating_kind() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.rating_kind"]], "raw_data (pyxa.apps.mediaapplicationbase.xamediaartwork property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtwork.raw_data"]], "raw_data() (pyxa.apps.mediaapplicationbase.xamediaartworklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaArtworkList.raw_data"]], "release_date (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.release_date"]], "release_date() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.release_date"]], "resizable() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.resizable"]], "resume() (pyxa.apps.mediaapplicationbase.xamediaapplication method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.resume"]], "reveal() (pyxa.apps.mediaapplicationbase.xamediaitem method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaItem.reveal"]], "rewind() (pyxa.apps.mediaapplicationbase.xamediaapplication method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.rewind"]], "sample_rate (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.sample_rate"]], "sample_rate() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.sample_rate"]], "search() (pyxa.apps.mediaapplicationbase.xamediaplaylist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylist.search"]], "season_number (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.season_number"]], "season_number() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.season_number"]], "select() (pyxa.apps.mediaapplicationbase.xamediatrack method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.select"]], "selection (pyxa.apps.mediaapplicationbase.xamediaapplication property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.selection"]], "selection (pyxa.apps.mediaapplicationbase.xamediabrowserwindow property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaBrowserWindow.selection"]], "selection (pyxa.apps.mediaapplicationbase.xamediaplaylistwindow property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistWindow.selection"]], "selection() (pyxa.apps.mediaapplicationbase.xamediabrowserwindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaBrowserWindowList.selection"]], "selection() (pyxa.apps.mediaapplicationbase.xamediaplaylistwindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistWindowList.selection"]], "set_volume() (pyxa.apps.mediaapplicationbase.xamediaapplication method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.set_volume"]], "shared (pyxa.apps.mediaapplicationbase.xamediauserplaylist property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaUserPlaylist.shared"]], "shared() (pyxa.apps.mediaapplicationbase.xamediauserplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaUserPlaylistList.shared"]], "shared_tracks() (pyxa.apps.mediaapplicationbase.xamedialibraryplaylist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaLibraryPlaylist.shared_tracks"]], "shared_tracks() (pyxa.apps.mediaapplicationbase.xamediauserplaylist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaUserPlaylist.shared_tracks"]], "show (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.show"]], "show() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.show"]], "size (pyxa.apps.mediaapplicationbase.xamediaplaylist property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylist.size"]], "size (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.size"]], "size() (pyxa.apps.mediaapplicationbase.xamediaplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistList.size"]], "size() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.size"]], "skipped_count (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.skipped_count"]], "skipped_count() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.skipped_count"]], "skipped_date (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.skipped_date"]], "skipped_date() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.skipped_date"]], "smart (pyxa.apps.mediaapplicationbase.xamediauserplaylist property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaUserPlaylist.smart"]], "smart() (pyxa.apps.mediaapplicationbase.xamediauserplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaUserPlaylistList.smart"]], "sort_album (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.sort_album"]], "sort_album() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.sort_album"]], "sort_name (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.sort_name"]], "sort_name() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.sort_name"]], "sort_show (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.sort_show"]], "sort_show() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.sort_show"]], "sound_volume (pyxa.apps.mediaapplicationbase.xamediaapplication property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.sound_volume"]], "sources() (pyxa.apps.mediaapplicationbase.xamediaapplication method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.sources"]], "special_kind (pyxa.apps.mediaapplicationbase.xamediaplaylist property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylist.special_kind"]], "special_kind() (pyxa.apps.mediaapplicationbase.xamediaplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistList.special_kind"]], "start (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.start"]], "start() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.start"]], "stop() (pyxa.apps.mediaapplicationbase.xamediaapplication method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.stop"]], "time (pyxa.apps.mediaapplicationbase.xamediaplaylist property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylist.time"]], "time (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.time"]], "time() (pyxa.apps.mediaapplicationbase.xamediaplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistList.time"]], "time() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.time"]], "track_count (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.track_count"]], "track_count() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.track_count"]], "track_number (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.track_number"]], "track_number() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.track_number"]], "tracks() (pyxa.apps.mediaapplicationbase.xamediaapplication method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.tracks"]], "tracks() (pyxa.apps.mediaapplicationbase.xamediaplaylist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylist.tracks"]], "unplayed (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.unplayed"]], "unplayed() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.unplayed"]], "url_tracks() (pyxa.apps.mediaapplicationbase.xamedialibraryplaylist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaLibraryPlaylist.url_tracks"]], "url_tracks() (pyxa.apps.mediaapplicationbase.xamediauserplaylist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaUserPlaylist.url_tracks"]], "user_playlists() (pyxa.apps.mediaapplicationbase.xamediasource method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaSource.user_playlists"]], "version (pyxa.apps.mediaapplicationbase.xamediaapplication property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.version"]], "video_windows() (pyxa.apps.mediaapplicationbase.xamediaapplication method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaApplication.video_windows"]], "view (pyxa.apps.mediaapplicationbase.xamediabrowserwindow property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaBrowserWindow.view"]], "view (pyxa.apps.mediaapplicationbase.xamediaplaylistwindow property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistWindow.view"]], "view() (pyxa.apps.mediaapplicationbase.xamediabrowserwindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaBrowserWindowList.view"]], "view() (pyxa.apps.mediaapplicationbase.xamediaplaylistwindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistWindowList.view"]], "visible (pyxa.apps.mediaapplicationbase.xamediaplaylist property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylist.visible"]], "visible() (pyxa.apps.mediaapplicationbase.xamediaplaylistlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaPlaylistList.visible"]], "visible() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.visible"]], "volume_adjustment (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.volume_adjustment"]], "volume_adjustment() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.volume_adjustment"]], "year (pyxa.apps.mediaapplicationbase.xamediatrack property)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrack.year"]], "year() (pyxa.apps.mediaapplicationbase.xamediatracklist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaTrackList.year"]], "zoomable() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.zoomable"]], "zoomed() (pyxa.apps.mediaapplicationbase.xamediawindowlist method)": [[29, "PyXA.apps.MediaApplicationBase.XAMediaWindowList.zoomed"]], "connected (pyxa.apps.messages.xamessagesapplication.connectionstatus attribute)": [[30, "PyXA.apps.Messages.XAMessagesApplication.ConnectionStatus.CONNECTED"]], "connecting (pyxa.apps.messages.xamessagesapplication.connectionstatus attribute)": [[30, "PyXA.apps.Messages.XAMessagesApplication.ConnectionStatus.CONNECTING"]], "disconnected (pyxa.apps.messages.xamessagesapplication.connectionstatus attribute)": [[30, "PyXA.apps.Messages.XAMessagesApplication.ConnectionStatus.DISCONNECTED"]], "disconnecting (pyxa.apps.messages.xamessagesapplication.connectionstatus attribute)": [[30, "PyXA.apps.Messages.XAMessagesApplication.ConnectionStatus.DISCONNECTING"]], "failed (pyxa.apps.messages.xamessagesapplication.transferstatus attribute)": [[30, "PyXA.apps.Messages.XAMessagesApplication.TransferStatus.FAILED"]], "finalizing (pyxa.apps.messages.xamessagesapplication.transferstatus attribute)": [[30, "PyXA.apps.Messages.XAMessagesApplication.TransferStatus.FINALIZING"]], "finished (pyxa.apps.messages.xamessagesapplication.transferstatus attribute)": [[30, "PyXA.apps.Messages.XAMessagesApplication.TransferStatus.FINISHED"]], "imessage (pyxa.apps.messages.xamessagesapplication.servicetype attribute)": [[30, "PyXA.apps.Messages.XAMessagesApplication.ServiceType.IMESSAGE"]], "incoming (pyxa.apps.messages.xamessagesapplication.messagedirection attribute)": [[30, "PyXA.apps.Messages.XAMessagesApplication.MessageDirection.INCOMING"]], "outgoing (pyxa.apps.messages.xamessagesapplication.messagedirection attribute)": [[30, "PyXA.apps.Messages.XAMessagesApplication.MessageDirection.OUTGOING"]], "preparing (pyxa.apps.messages.xamessagesapplication.transferstatus attribute)": [[30, "PyXA.apps.Messages.XAMessagesApplication.TransferStatus.PREPARING"]], "pyxa.apps.messages": [[30, "module-PyXA.apps.Messages"]], "sms (pyxa.apps.messages.xamessagesapplication.servicetype attribute)": [[30, "PyXA.apps.Messages.XAMessagesApplication.ServiceType.SMS"]], "transferring (pyxa.apps.messages.xamessagesapplication.transferstatus attribute)": [[30, "PyXA.apps.Messages.XAMessagesApplication.TransferStatus.TRANSFERRING"]], "waiting (pyxa.apps.messages.xamessagesapplication.transferstatus attribute)": [[30, "PyXA.apps.Messages.XAMessagesApplication.TransferStatus.WAITING"]], "xamessagesaccount (class in pyxa.apps.messages)": [[30, "PyXA.apps.Messages.XAMessagesAccount"]], "xamessagesaccountlist (class in pyxa.apps.messages)": [[30, "PyXA.apps.Messages.XAMessagesAccountList"]], "xamessagesapplication (class in pyxa.apps.messages)": [[30, "PyXA.apps.Messages.XAMessagesApplication"]], "xamessagesapplication.connectionstatus (class in pyxa.apps.messages)": [[30, "PyXA.apps.Messages.XAMessagesApplication.ConnectionStatus"]], "xamessagesapplication.messagedirection (class in pyxa.apps.messages)": [[30, "PyXA.apps.Messages.XAMessagesApplication.MessageDirection"]], "xamessagesapplication.servicetype (class in pyxa.apps.messages)": [[30, "PyXA.apps.Messages.XAMessagesApplication.ServiceType"]], "xamessagesapplication.transferstatus (class in pyxa.apps.messages)": [[30, "PyXA.apps.Messages.XAMessagesApplication.TransferStatus"]], "xamessageschat (class in pyxa.apps.messages)": [[30, "PyXA.apps.Messages.XAMessagesChat"]], "xamessageschatlist (class in pyxa.apps.messages)": [[30, "PyXA.apps.Messages.XAMessagesChatList"]], "xamessagesdocument (class in pyxa.apps.messages)": [[30, "PyXA.apps.Messages.XAMessagesDocument"]], "xamessagesdocumentlist (class in pyxa.apps.messages)": [[30, "PyXA.apps.Messages.XAMessagesDocumentList"]], "xamessagesfiletransfer (class in pyxa.apps.messages)": [[30, "PyXA.apps.Messages.XAMessagesFileTransfer"]], "xamessagesfiletransferlist (class in pyxa.apps.messages)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList"]], "xamessagesparticipant (class in pyxa.apps.messages)": [[30, "PyXA.apps.Messages.XAMessagesParticipant"]], "xamessagesparticipantlist (class in pyxa.apps.messages)": [[30, "PyXA.apps.Messages.XAMessagesParticipantList"]], "xamessageswindow (class in pyxa.apps.messages)": [[30, "PyXA.apps.Messages.XAMessagesWindow"]], "account (pyxa.apps.messages.xamessageschat property)": [[30, "PyXA.apps.Messages.XAMessagesChat.account"]], "account (pyxa.apps.messages.xamessagesfiletransfer property)": [[30, "PyXA.apps.Messages.XAMessagesFileTransfer.account"]], "account (pyxa.apps.messages.xamessagesparticipant property)": [[30, "PyXA.apps.Messages.XAMessagesParticipant.account"]], "account() (pyxa.apps.messages.xamessageschatlist method)": [[30, "PyXA.apps.Messages.XAMessagesChatList.account"]], "account() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.account"]], "account() (pyxa.apps.messages.xamessagesparticipantlist method)": [[30, "PyXA.apps.Messages.XAMessagesParticipantList.account"]], "accounts() (pyxa.apps.messages.xamessagesapplication method)": [[30, "PyXA.apps.Messages.XAMessagesApplication.accounts"]], "bounds (pyxa.apps.messages.xamessageswindow property)": [[30, "PyXA.apps.Messages.XAMessagesWindow.bounds"]], "by_account() (pyxa.apps.messages.xamessageschatlist method)": [[30, "PyXA.apps.Messages.XAMessagesChatList.by_account"]], "by_account() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.by_account"]], "by_account() (pyxa.apps.messages.xamessagesparticipantlist method)": [[30, "PyXA.apps.Messages.XAMessagesParticipantList.by_account"]], "by_connection_status() (pyxa.apps.messages.xamessagesaccountlist method)": [[30, "PyXA.apps.Messages.XAMessagesAccountList.by_connection_status"]], "by_direction() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.by_direction"]], "by_enabled() (pyxa.apps.messages.xamessagesaccountlist method)": [[30, "PyXA.apps.Messages.XAMessagesAccountList.by_enabled"]], "by_file() (pyxa.apps.messages.xamessagesdocumentlist method)": [[30, "PyXA.apps.Messages.XAMessagesDocumentList.by_file"]], "by_file_path() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.by_file_path"]], "by_file_progress() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.by_file_progress"]], "by_file_size() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.by_file_size"]], "by_first_name() (pyxa.apps.messages.xamessagesparticipantlist method)": [[30, "PyXA.apps.Messages.XAMessagesParticipantList.by_first_name"]], "by_full_name() (pyxa.apps.messages.xamessagesparticipantlist method)": [[30, "PyXA.apps.Messages.XAMessagesParticipantList.by_full_name"]], "by_handle() (pyxa.apps.messages.xamessagesparticipantlist method)": [[30, "PyXA.apps.Messages.XAMessagesParticipantList.by_handle"]], "by_id() (pyxa.apps.messages.xamessagesaccountlist method)": [[30, "PyXA.apps.Messages.XAMessagesAccountList.by_id"]], "by_id() (pyxa.apps.messages.xamessageschatlist method)": [[30, "PyXA.apps.Messages.XAMessagesChatList.by_id"]], "by_id() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.by_id"]], "by_id() (pyxa.apps.messages.xamessagesparticipantlist method)": [[30, "PyXA.apps.Messages.XAMessagesParticipantList.by_id"]], "by_last_name() (pyxa.apps.messages.xamessagesparticipantlist method)": [[30, "PyXA.apps.Messages.XAMessagesParticipantList.by_last_name"]], "by_modified() (pyxa.apps.messages.xamessagesdocumentlist method)": [[30, "PyXA.apps.Messages.XAMessagesDocumentList.by_modified"]], "by_name() (pyxa.apps.messages.xamessageschatlist method)": [[30, "PyXA.apps.Messages.XAMessagesChatList.by_name"]], "by_name() (pyxa.apps.messages.xamessagesdocumentlist method)": [[30, "PyXA.apps.Messages.XAMessagesDocumentList.by_name"]], "by_name() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.by_name"]], "by_name() (pyxa.apps.messages.xamessagesparticipantlist method)": [[30, "PyXA.apps.Messages.XAMessagesParticipantList.by_name"]], "by_object_description() (pyxa.apps.messages.xamessagesaccountlist method)": [[30, "PyXA.apps.Messages.XAMessagesAccountList.by_object_description"]], "by_participant() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.by_participant"]], "by_participants() (pyxa.apps.messages.xamessageschatlist method)": [[30, "PyXA.apps.Messages.XAMessagesChatList.by_participants"]], "by_service_type() (pyxa.apps.messages.xamessagesaccountlist method)": [[30, "PyXA.apps.Messages.XAMessagesAccountList.by_service_type"]], "by_started() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.by_started"]], "by_transfer_status() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.by_transfer_status"]], "chats() (pyxa.apps.messages.xamessagesaccount method)": [[30, "PyXA.apps.Messages.XAMessagesAccount.chats"]], "chats() (pyxa.apps.messages.xamessagesapplication method)": [[30, "PyXA.apps.Messages.XAMessagesApplication.chats"]], "closeable (pyxa.apps.messages.xamessageswindow property)": [[30, "PyXA.apps.Messages.XAMessagesWindow.closeable"]], "connection_status (pyxa.apps.messages.xamessagesaccount property)": [[30, "PyXA.apps.Messages.XAMessagesAccount.connection_status"]], "connection_status() (pyxa.apps.messages.xamessagesaccountlist method)": [[30, "PyXA.apps.Messages.XAMessagesAccountList.connection_status"]], "direction (pyxa.apps.messages.xamessagesfiletransfer property)": [[30, "PyXA.apps.Messages.XAMessagesFileTransfer.direction"]], "direction() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.direction"]], "document (pyxa.apps.messages.xamessageswindow property)": [[30, "PyXA.apps.Messages.XAMessagesWindow.document"]], "documents() (pyxa.apps.messages.xamessagesapplication method)": [[30, "PyXA.apps.Messages.XAMessagesApplication.documents"]], "enabled (pyxa.apps.messages.xamessagesaccount property)": [[30, "PyXA.apps.Messages.XAMessagesAccount.enabled"]], "enabled() (pyxa.apps.messages.xamessagesaccountlist method)": [[30, "PyXA.apps.Messages.XAMessagesAccountList.enabled"]], "file (pyxa.apps.messages.xamessagesdocument property)": [[30, "PyXA.apps.Messages.XAMessagesDocument.file"]], "file() (pyxa.apps.messages.xamessagesdocumentlist method)": [[30, "PyXA.apps.Messages.XAMessagesDocumentList.file"]], "file_path (pyxa.apps.messages.xamessagesfiletransfer property)": [[30, "PyXA.apps.Messages.XAMessagesFileTransfer.file_path"]], "file_path() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.file_path"]], "file_progress (pyxa.apps.messages.xamessagesfiletransfer property)": [[30, "PyXA.apps.Messages.XAMessagesFileTransfer.file_progress"]], "file_progress() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.file_progress"]], "file_size (pyxa.apps.messages.xamessagesfiletransfer property)": [[30, "PyXA.apps.Messages.XAMessagesFileTransfer.file_size"]], "file_size() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.file_size"]], "file_transfers() (pyxa.apps.messages.xamessagesapplication method)": [[30, "PyXA.apps.Messages.XAMessagesApplication.file_transfers"]], "filter() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.filter"]], "first_name (pyxa.apps.messages.xamessagesparticipant property)": [[30, "PyXA.apps.Messages.XAMessagesParticipant.first_name"]], "first_name() (pyxa.apps.messages.xamessagesparticipantlist method)": [[30, "PyXA.apps.Messages.XAMessagesParticipantList.first_name"]], "frontmost (pyxa.apps.messages.xamessagesapplication property)": [[30, "PyXA.apps.Messages.XAMessagesApplication.frontmost"]], "full_name (pyxa.apps.messages.xamessagesparticipant property)": [[30, "PyXA.apps.Messages.XAMessagesParticipant.full_name"]], "full_name() (pyxa.apps.messages.xamessagesparticipantlist method)": [[30, "PyXA.apps.Messages.XAMessagesParticipantList.full_name"]], "get_clipboard_representation() (pyxa.apps.messages.xamessagesaccount method)": [[30, "PyXA.apps.Messages.XAMessagesAccount.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.messages.xamessagesaccountlist method)": [[30, "PyXA.apps.Messages.XAMessagesAccountList.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.messages.xamessageschat method)": [[30, "PyXA.apps.Messages.XAMessagesChat.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.messages.xamessageschatlist method)": [[30, "PyXA.apps.Messages.XAMessagesChatList.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.messages.xamessagesfiletransfer method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransfer.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.messages.xamessagesparticipant method)": [[30, "PyXA.apps.Messages.XAMessagesParticipant.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.messages.xamessagesparticipantlist method)": [[30, "PyXA.apps.Messages.XAMessagesParticipantList.get_clipboard_representation"]], "handle (pyxa.apps.messages.xamessagesparticipant property)": [[30, "PyXA.apps.Messages.XAMessagesParticipant.handle"]], "handle() (pyxa.apps.messages.xamessagesparticipantlist method)": [[30, "PyXA.apps.Messages.XAMessagesParticipantList.handle"]], "id (pyxa.apps.messages.xamessagesaccount property)": [[30, "PyXA.apps.Messages.XAMessagesAccount.id"]], "id (pyxa.apps.messages.xamessageschat property)": [[30, "PyXA.apps.Messages.XAMessagesChat.id"]], "id (pyxa.apps.messages.xamessagesfiletransfer property)": [[30, "PyXA.apps.Messages.XAMessagesFileTransfer.id"]], "id (pyxa.apps.messages.xamessagesparticipant property)": [[30, "PyXA.apps.Messages.XAMessagesParticipant.id"]], "id (pyxa.apps.messages.xamessageswindow property)": [[30, "PyXA.apps.Messages.XAMessagesWindow.id"]], "id() (pyxa.apps.messages.xamessagesaccountlist method)": [[30, "PyXA.apps.Messages.XAMessagesAccountList.id"]], "id() (pyxa.apps.messages.xamessageschatlist method)": [[30, "PyXA.apps.Messages.XAMessagesChatList.id"]], "id() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.id"]], "id() (pyxa.apps.messages.xamessagesparticipantlist method)": [[30, "PyXA.apps.Messages.XAMessagesParticipantList.id"]], "index (pyxa.apps.messages.xamessageswindow property)": [[30, "PyXA.apps.Messages.XAMessagesWindow.index"]], "last_name (pyxa.apps.messages.xamessagesparticipant property)": [[30, "PyXA.apps.Messages.XAMessagesParticipant.last_name"]], "last_name() (pyxa.apps.messages.xamessagesparticipantlist method)": [[30, "PyXA.apps.Messages.XAMessagesParticipantList.last_name"]], "miniaturizable (pyxa.apps.messages.xamessageswindow property)": [[30, "PyXA.apps.Messages.XAMessagesWindow.miniaturizable"]], "miniaturized (pyxa.apps.messages.xamessageswindow property)": [[30, "PyXA.apps.Messages.XAMessagesWindow.miniaturized"]], "modified (pyxa.apps.messages.xamessagesdocument property)": [[30, "PyXA.apps.Messages.XAMessagesDocument.modified"]], "modified() (pyxa.apps.messages.xamessagesdocumentlist method)": [[30, "PyXA.apps.Messages.XAMessagesDocumentList.modified"]], "name (pyxa.apps.messages.xamessagesapplication property)": [[30, "PyXA.apps.Messages.XAMessagesApplication.name"]], "name (pyxa.apps.messages.xamessageschat property)": [[30, "PyXA.apps.Messages.XAMessagesChat.name"]], "name (pyxa.apps.messages.xamessagesdocument property)": [[30, "PyXA.apps.Messages.XAMessagesDocument.name"]], "name (pyxa.apps.messages.xamessagesfiletransfer property)": [[30, "PyXA.apps.Messages.XAMessagesFileTransfer.name"]], "name (pyxa.apps.messages.xamessagesparticipant property)": [[30, "PyXA.apps.Messages.XAMessagesParticipant.name"]], "name (pyxa.apps.messages.xamessageswindow property)": [[30, "PyXA.apps.Messages.XAMessagesWindow.name"]], "name() (pyxa.apps.messages.xamessageschatlist method)": [[30, "PyXA.apps.Messages.XAMessagesChatList.name"]], "name() (pyxa.apps.messages.xamessagesdocumentlist method)": [[30, "PyXA.apps.Messages.XAMessagesDocumentList.name"]], "name() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.name"]], "name() (pyxa.apps.messages.xamessagesparticipantlist method)": [[30, "PyXA.apps.Messages.XAMessagesParticipantList.name"]], "object_description (pyxa.apps.messages.xamessagesaccount property)": [[30, "PyXA.apps.Messages.XAMessagesAccount.object_description"]], "object_description() (pyxa.apps.messages.xamessagesaccountlist method)": [[30, "PyXA.apps.Messages.XAMessagesAccountList.object_description"]], "participant (pyxa.apps.messages.xamessagesfiletransfer property)": [[30, "PyXA.apps.Messages.XAMessagesFileTransfer.participant"]], "participant() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.participant"]], "participants() (pyxa.apps.messages.xamessagesaccount method)": [[30, "PyXA.apps.Messages.XAMessagesAccount.participants"]], "participants() (pyxa.apps.messages.xamessagesapplication method)": [[30, "PyXA.apps.Messages.XAMessagesApplication.participants"]], "participants() (pyxa.apps.messages.xamessageschat method)": [[30, "PyXA.apps.Messages.XAMessagesChat.participants"]], "participants() (pyxa.apps.messages.xamessageschatlist method)": [[30, "PyXA.apps.Messages.XAMessagesChatList.participants"]], "print() (pyxa.apps.messages.xamessagesapplication method)": [[30, "PyXA.apps.Messages.XAMessagesApplication.print"]], "resizable (pyxa.apps.messages.xamessageswindow property)": [[30, "PyXA.apps.Messages.XAMessagesWindow.resizable"]], "send() (pyxa.apps.messages.xamessagesapplication method)": [[30, "PyXA.apps.Messages.XAMessagesApplication.send"]], "send() (pyxa.apps.messages.xamessageschat method)": [[30, "PyXA.apps.Messages.XAMessagesChat.send"]], "service_type (pyxa.apps.messages.xamessagesaccount property)": [[30, "PyXA.apps.Messages.XAMessagesAccount.service_type"]], "service_type() (pyxa.apps.messages.xamessagesaccountlist method)": [[30, "PyXA.apps.Messages.XAMessagesAccountList.service_type"]], "started (pyxa.apps.messages.xamessagesfiletransfer property)": [[30, "PyXA.apps.Messages.XAMessagesFileTransfer.started"]], "started() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.started"]], "transfer_status (pyxa.apps.messages.xamessagesfiletransfer property)": [[30, "PyXA.apps.Messages.XAMessagesFileTransfer.transfer_status"]], "transfer_status() (pyxa.apps.messages.xamessagesfiletransferlist method)": [[30, "PyXA.apps.Messages.XAMessagesFileTransferList.transfer_status"]], "version (pyxa.apps.messages.xamessagesapplication property)": [[30, "PyXA.apps.Messages.XAMessagesApplication.version"]], "visible (pyxa.apps.messages.xamessageswindow property)": [[30, "PyXA.apps.Messages.XAMessagesWindow.visible"]], "zoomable (pyxa.apps.messages.xamessageswindow property)": [[30, "PyXA.apps.Messages.XAMessagesWindow.zoomable"]], "zoomed (pyxa.apps.messages.xamessageswindow property)": [[30, "PyXA.apps.Messages.XAMessagesWindow.zoomed"]], "airplay_device (pyxa.apps.music.xamusicapplication.devicekind attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.DeviceKind.AIRPLAY_DEVICE"]], "airport_express (pyxa.apps.music.xamusicapplication.devicekind attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.DeviceKind.AIRPORT_EXPRESS"]], "albums (pyxa.apps.music.xamusicapplication.shufflemode attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.ShuffleMode.ALBUMS"]], "album_listing (pyxa.apps.music.xamusicapplication.printsetting attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.PrintSetting.ALBUM_LISTING"]], "all (pyxa.apps.music.xamusicapplication.repeatmode attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.RepeatMode.ALL"]], "apple_tv (pyxa.apps.music.xamusicapplication.devicekind attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.DeviceKind.APPLE_TV"]], "bluetooth_device (pyxa.apps.music.xamusicapplication.devicekind attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.DeviceKind.BLUETOOTH_DEVICE"]], "cd_insert (pyxa.apps.music.xamusicapplication.printsetting attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.PrintSetting.CD_INSERT"]], "computer (pyxa.apps.music.xamusicapplication.devicekind attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.DeviceKind.COMPUTER"]], "detailed_error_handling (pyxa.apps.music.xamusicapplication.printsetting attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.PrintSetting.DETAILED_ERROR_HANDLING"]], "duplicate (pyxa.apps.music.xamusicapplication.icloudstatus attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.iCloudStatus.DUPLICATE"]], "error (pyxa.apps.music.xamusicapplication.icloudstatus attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.iCloudStatus.ERROR"]], "groupings (pyxa.apps.music.xamusicapplication.shufflemode attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.ShuffleMode.GROUPINGS"]], "homepod (pyxa.apps.music.xamusicapplication.devicekind attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.DeviceKind.HOMEPOD"]], "ineligible (pyxa.apps.music.xamusicapplication.icloudstatus attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.iCloudStatus.INELIGIBLE"]], "matched (pyxa.apps.music.xamusicapplication.icloudstatus attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.iCloudStatus.MATCHED"]], "not_uploaded (pyxa.apps.music.xamusicapplication.icloudstatus attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.iCloudStatus.NOT_UPLOADED"]], "no_longer_available (pyxa.apps.music.xamusicapplication.icloudstatus attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.iCloudStatus.NO_LONGER_AVAILABLE"]], "off (pyxa.apps.music.xamusicapplication.repeatmode attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.RepeatMode.OFF"]], "one (pyxa.apps.music.xamusicapplication.repeatmode attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.RepeatMode.ONE"]], "purchased (pyxa.apps.music.xamusicapplication.icloudstatus attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.iCloudStatus.PURCHASED"]], "pyxa.apps.music": [[31, "module-PyXA.apps.Music"]], "removed (pyxa.apps.music.xamusicapplication.icloudstatus attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.iCloudStatus.REMOVED"]], "songs (pyxa.apps.music.xamusicapplication.shufflemode attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.ShuffleMode.SONGS"]], "standard_error_handling (pyxa.apps.music.xamusicapplication.printsetting attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.PrintSetting.STANDARD_ERROR_HANDLING"]], "subscription (pyxa.apps.music.xamusicapplication.icloudstatus attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.iCloudStatus.SUBSCRIPTION"]], "track_listing (pyxa.apps.music.xamusicapplication.printsetting attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.PrintSetting.TRACK_LISTING"]], "unknown (pyxa.apps.music.xamusicapplication.devicekind attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.DeviceKind.UNKNOWN"]], "unknown (pyxa.apps.music.xamusicapplication.icloudstatus attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.iCloudStatus.UNKNOWN"]], "uploaded (pyxa.apps.music.xamusicapplication.icloudstatus attribute)": [[31, "PyXA.apps.Music.XAMusicApplication.iCloudStatus.UPLOADED"]], "xamusicairplaydevice (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicAirPlayDevice"]], "xamusicairplaydevicelist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicAirPlayDeviceList"]], "xamusicapplication (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicApplication"]], "xamusicapplication.devicekind (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicApplication.DeviceKind"]], "xamusicapplication.printsetting (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicApplication.PrintSetting"]], "xamusicapplication.repeatmode (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicApplication.RepeatMode"]], "xamusicapplication.shufflemode (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicApplication.ShuffleMode"]], "xamusicapplication.icloudstatus (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicApplication.iCloudStatus"]], "xamusicaudiocdplaylist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylist"]], "xamusicaudiocdplaylistlist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylistList"]], "xamusicaudiocdtrack (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicAudioCDTrack"]], "xamusicaudiocdtracklist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicAudioCDTrackList"]], "xamusiceqpreset (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicEQPreset"]], "xamusiceqpresetlist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicEQPresetList"]], "xamusiceqwindow (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicEQWindow"]], "xamusiceqwindowlist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicEQWindowList"]], "xamusicencoder (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicEncoder"]], "xamusicencoderlist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicEncoderList"]], "xamusicminiplayerwindow (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicMiniplayerWindow"]], "xamusicminiplayerwindowlist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicMiniplayerWindowList"]], "xamusicplaylist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicPlaylist"]], "xamusicplaylistlist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicPlaylistList"]], "xamusicradiotunerplaylist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicRadioTunerPlaylist"]], "xamusicradiotunerplaylistlist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicRadioTunerPlaylistList"]], "xamusicsource (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicSource"]], "xamusicsourcelist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicSourceList"]], "xamusicsubscriptionplaylist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicSubscriptionPlaylist"]], "xamusicsubscriptionplaylistlist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicSubscriptionPlaylistList"]], "xamusictrack (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicTrack"]], "xamusictracklist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicTrackList"]], "xamusicuserplaylist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicUserPlaylist"]], "xamusicuserplaylistlist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicUserPlaylistList"]], "xamusicvisual (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicVisual"]], "xamusicvisuallist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicVisualList"]], "xamusicwindow (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicWindow"]], "xamusicwindowlist (class in pyxa.apps.music)": [[31, "PyXA.apps.Music.XAMusicWindowList"]], "active (pyxa.apps.music.xamusicairplaydevice property)": [[31, "PyXA.apps.Music.XAMusicAirPlayDevice.active"]], "active() (pyxa.apps.music.xamusicairplaydevicelist method)": [[31, "PyXA.apps.Music.XAMusicAirPlayDeviceList.active"]], "add_to_playlist() (pyxa.apps.music.xamusicapplication method)": [[31, "PyXA.apps.Music.XAMusicApplication.add_to_playlist"]], "airplay_devices() (pyxa.apps.music.xamusicapplication method)": [[31, "PyXA.apps.Music.XAMusicApplication.airplay_devices"]], "airplay_enabled (pyxa.apps.music.xamusicapplication property)": [[31, "PyXA.apps.Music.XAMusicApplication.airplay_enabled"]], "album_artist (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.album_artist"]], "album_artist() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.album_artist"]], "album_disliked (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.album_disliked"]], "album_disliked() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.album_disliked"]], "album_loved (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.album_loved"]], "album_loved() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.album_loved"]], "artist (pyxa.apps.music.xamusicaudiocdplaylist property)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylist.artist"]], "artist (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.artist"]], "artist() (pyxa.apps.music.xamusicaudiocdplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylistList.artist"]], "artist() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.artist"]], "audio_cd_playlists() (pyxa.apps.music.xamusicsource method)": [[31, "PyXA.apps.Music.XAMusicSource.audio_cd_playlists"]], "audio_cd_tracks() (pyxa.apps.music.xamusicaudiocdplaylist method)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylist.audio_cd_tracks"]], "available (pyxa.apps.music.xamusicairplaydevice property)": [[31, "PyXA.apps.Music.XAMusicAirPlayDevice.available"]], "available() (pyxa.apps.music.xamusicairplaydevicelist method)": [[31, "PyXA.apps.Music.XAMusicAirPlayDeviceList.available"]], "band1 (pyxa.apps.music.xamusiceqpreset property)": [[31, "PyXA.apps.Music.XAMusicEQPreset.band1"]], "band1() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.band1"]], "band10 (pyxa.apps.music.xamusiceqpreset property)": [[31, "PyXA.apps.Music.XAMusicEQPreset.band10"]], "band10() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.band10"]], "band2 (pyxa.apps.music.xamusiceqpreset property)": [[31, "PyXA.apps.Music.XAMusicEQPreset.band2"]], "band2() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.band2"]], "band3 (pyxa.apps.music.xamusiceqpreset property)": [[31, "PyXA.apps.Music.XAMusicEQPreset.band3"]], "band3() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.band3"]], "band4 (pyxa.apps.music.xamusiceqpreset property)": [[31, "PyXA.apps.Music.XAMusicEQPreset.band4"]], "band4() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.band4"]], "band5 (pyxa.apps.music.xamusiceqpreset property)": [[31, "PyXA.apps.Music.XAMusicEQPreset.band5"]], "band5() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.band5"]], "band6 (pyxa.apps.music.xamusiceqpreset property)": [[31, "PyXA.apps.Music.XAMusicEQPreset.band6"]], "band6() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.band6"]], "band7 (pyxa.apps.music.xamusiceqpreset property)": [[31, "PyXA.apps.Music.XAMusicEQPreset.band7"]], "band7() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.band7"]], "band8 (pyxa.apps.music.xamusiceqpreset property)": [[31, "PyXA.apps.Music.XAMusicEQPreset.band8"]], "band8() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.band8"]], "band9 (pyxa.apps.music.xamusiceqpreset property)": [[31, "PyXA.apps.Music.XAMusicEQPreset.band9"]], "band9() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.band9"]], "bpm (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.bpm"]], "bpm() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.bpm"]], "by_active() (pyxa.apps.music.xamusicairplaydevicelist method)": [[31, "PyXA.apps.Music.XAMusicAirPlayDeviceList.by_active"]], "by_album_artist() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_album_artist"]], "by_album_disliked() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_album_disliked"]], "by_album_loved() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_album_loved"]], "by_artist() (pyxa.apps.music.xamusicaudiocdplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylistList.by_artist"]], "by_artist() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_artist"]], "by_available() (pyxa.apps.music.xamusicairplaydevicelist method)": [[31, "PyXA.apps.Music.XAMusicAirPlayDeviceList.by_available"]], "by_band1() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.by_band1"]], "by_band10() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.by_band10"]], "by_band2() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.by_band2"]], "by_band3() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.by_band3"]], "by_band4() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.by_band4"]], "by_band5() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.by_band5"]], "by_band6() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.by_band6"]], "by_band7() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.by_band7"]], "by_band8() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.by_band8"]], "by_band9() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.by_band9"]], "by_bpm() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_bpm"]], "by_cloud_status() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_cloud_status"]], "by_compilation() (pyxa.apps.music.xamusicaudiocdplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylistList.by_compilation"]], "by_compilation() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_compilation"]], "by_composer() (pyxa.apps.music.xamusicaudiocdplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylistList.by_composer"]], "by_composer() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_composer"]], "by_disc_count() (pyxa.apps.music.xamusicaudiocdplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylistList.by_disc_count"]], "by_disc_number() (pyxa.apps.music.xamusicaudiocdplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylistList.by_disc_number"]], "by_disliked() (pyxa.apps.music.xamusicplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicPlaylistList.by_disliked"]], "by_disliked() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_disliked"]], "by_eq() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_eq"]], "by_format() (pyxa.apps.music.xamusicencoderlist method)": [[31, "PyXA.apps.Music.XAMusicEncoderList.by_format"]], "by_gapless() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_gapless"]], "by_genius() (pyxa.apps.music.xamusicuserplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicUserPlaylistList.by_genius"]], "by_genre() (pyxa.apps.music.xamusicaudiocdplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylistList.by_genre"]], "by_kind() (pyxa.apps.music.xamusicairplaydevicelist method)": [[31, "PyXA.apps.Music.XAMusicAirPlayDeviceList.by_kind"]], "by_location() (pyxa.apps.music.xamusicaudiocdtracklist method)": [[31, "PyXA.apps.Music.XAMusicAudioCDTrackList.by_location"]], "by_loved() (pyxa.apps.music.xamusicplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicPlaylistList.by_loved"]], "by_loved() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_loved"]], "by_lyrics() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_lyrics"]], "by_modifiable() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.by_modifiable"]], "by_modification_date() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_modification_date"]], "by_movement() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_movement"]], "by_movement_count() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_movement_count"]], "by_movement_number() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_movement_number"]], "by_network_address() (pyxa.apps.music.xamusicairplaydevicelist method)": [[31, "PyXA.apps.Music.XAMusicAirPlayDeviceList.by_network_address"]], "by_preamp() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.by_preamp"]], "by_protected() (pyxa.apps.music.xamusicairplaydevicelist method)": [[31, "PyXA.apps.Music.XAMusicAirPlayDeviceList.by_protected"]], "by_selected() (pyxa.apps.music.xamusicairplaydevicelist method)": [[31, "PyXA.apps.Music.XAMusicAirPlayDeviceList.by_selected"]], "by_shufflable() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_shufflable"]], "by_sort_album_artist() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_sort_album_artist"]], "by_sort_artist() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_sort_artist"]], "by_sort_composer() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_sort_composer"]], "by_sound_volume() (pyxa.apps.music.xamusicairplaydevicelist method)": [[31, "PyXA.apps.Music.XAMusicAirPlayDeviceList.by_sound_volume"]], "by_supports_audio() (pyxa.apps.music.xamusicairplaydevicelist method)": [[31, "PyXA.apps.Music.XAMusicAirPlayDeviceList.by_supports_audio"]], "by_supports_video() (pyxa.apps.music.xamusicairplaydevicelist method)": [[31, "PyXA.apps.Music.XAMusicAirPlayDeviceList.by_supports_video"]], "by_update_tracks() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.by_update_tracks"]], "by_work() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.by_work"]], "by_year() (pyxa.apps.music.xamusicaudiocdplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylistList.by_year"]], "cloud_status (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.cloud_status"]], "cloud_status() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.cloud_status"]], "compilation (pyxa.apps.music.xamusicaudiocdplaylist property)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylist.compilation"]], "compilation (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.compilation"]], "compilation() (pyxa.apps.music.xamusicaudiocdplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylistList.compilation"]], "compilation() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.compilation"]], "composer (pyxa.apps.music.xamusicaudiocdplaylist property)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylist.composer"]], "composer (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.composer"]], "composer() (pyxa.apps.music.xamusicaudiocdplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylistList.composer"]], "composer() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.composer"]], "converting (pyxa.apps.music.xamusicapplication property)": [[31, "PyXA.apps.Music.XAMusicApplication.converting"]], "current_airplay_devices (pyxa.apps.music.xamusicapplication property)": [[31, "PyXA.apps.Music.XAMusicApplication.current_airplay_devices"]], "current_encoder (pyxa.apps.music.xamusicapplication property)": [[31, "PyXA.apps.Music.XAMusicApplication.current_encoder"]], "current_eq_preset (pyxa.apps.music.xamusicapplication property)": [[31, "PyXA.apps.Music.XAMusicApplication.current_eq_preset"]], "current_track (pyxa.apps.music.xamusicapplication property)": [[31, "PyXA.apps.Music.XAMusicApplication.current_track"]], "current_visual (pyxa.apps.music.xamusicapplication property)": [[31, "PyXA.apps.Music.XAMusicApplication.current_visual"]], "disc_count (pyxa.apps.music.xamusicaudiocdplaylist property)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylist.disc_count"]], "disc_count() (pyxa.apps.music.xamusicaudiocdplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylistList.disc_count"]], "disc_number (pyxa.apps.music.xamusicaudiocdplaylist property)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylist.disc_number"]], "disc_number() (pyxa.apps.music.xamusicaudiocdplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylistList.disc_number"]], "disliked (pyxa.apps.music.xamusicplaylist property)": [[31, "PyXA.apps.Music.XAMusicPlaylist.disliked"]], "disliked (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.disliked"]], "disliked() (pyxa.apps.music.xamusicplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicPlaylistList.disliked"]], "disliked() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.disliked"]], "encoders() (pyxa.apps.music.xamusicapplication method)": [[31, "PyXA.apps.Music.XAMusicApplication.encoders"]], "eq (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.eq"]], "eq() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.eq"]], "eq_enabled (pyxa.apps.music.xamusicapplication property)": [[31, "PyXA.apps.Music.XAMusicApplication.eq_enabled"]], "eq_presets() (pyxa.apps.music.xamusicapplication method)": [[31, "PyXA.apps.Music.XAMusicApplication.eq_presets"]], "eq_windows() (pyxa.apps.music.xamusicapplication method)": [[31, "PyXA.apps.Music.XAMusicApplication.eq_windows"]], "file_tracks() (pyxa.apps.music.xamusicsubscriptionplaylist method)": [[31, "PyXA.apps.Music.XAMusicSubscriptionPlaylist.file_tracks"]], "format (pyxa.apps.music.xamusicencoder property)": [[31, "PyXA.apps.Music.XAMusicEncoder.format"]], "format() (pyxa.apps.music.xamusicencoderlist method)": [[31, "PyXA.apps.Music.XAMusicEncoderList.format"]], "gapless (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.gapless"]], "gapless() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.gapless"]], "genius (pyxa.apps.music.xamusicuserplaylist property)": [[31, "PyXA.apps.Music.XAMusicUserPlaylist.genius"]], "genius() (pyxa.apps.music.xamusicuserplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicUserPlaylistList.genius"]], "genre (pyxa.apps.music.xamusicaudiocdplaylist property)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylist.genre"]], "genre() (pyxa.apps.music.xamusicaudiocdplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylistList.genre"]], "kind (pyxa.apps.music.xamusicairplaydevice property)": [[31, "PyXA.apps.Music.XAMusicAirPlayDevice.kind"]], "kind() (pyxa.apps.music.xamusicairplaydevicelist method)": [[31, "PyXA.apps.Music.XAMusicAirPlayDeviceList.kind"]], "location (pyxa.apps.music.xamusicaudiocdtrack property)": [[31, "PyXA.apps.Music.XAMusicAudioCDTrack.location"]], "location() (pyxa.apps.music.xamusicaudiocdtracklist method)": [[31, "PyXA.apps.Music.XAMusicAudioCDTrackList.location"]], "loved (pyxa.apps.music.xamusicplaylist property)": [[31, "PyXA.apps.Music.XAMusicPlaylist.loved"]], "loved (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.loved"]], "loved() (pyxa.apps.music.xamusicplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicPlaylistList.loved"]], "loved() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.loved"]], "lyrics (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.lyrics"]], "lyrics() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.lyrics"]], "miniplayer_windows() (pyxa.apps.music.xamusicapplication method)": [[31, "PyXA.apps.Music.XAMusicApplication.miniplayer_windows"]], "modifiable (pyxa.apps.music.xamusiceqpreset property)": [[31, "PyXA.apps.Music.XAMusicEQPreset.modifiable"]], "modifiable() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.modifiable"]], "movement (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.movement"]], "movement() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.movement"]], "movement_count (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.movement_count"]], "movement_count() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.movement_count"]], "movement_number (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.movement_number"]], "movement_number() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.movement_number"]], "network_address (pyxa.apps.music.xamusicairplaydevice property)": [[31, "PyXA.apps.Music.XAMusicAirPlayDevice.network_address"]], "network_address() (pyxa.apps.music.xamusicairplaydevicelist method)": [[31, "PyXA.apps.Music.XAMusicAirPlayDeviceList.network_address"]], "preamp (pyxa.apps.music.xamusiceqpreset property)": [[31, "PyXA.apps.Music.XAMusicEQPreset.preamp"]], "preamp() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.preamp"]], "protected (pyxa.apps.music.xamusicairplaydevice property)": [[31, "PyXA.apps.Music.XAMusicAirPlayDevice.protected"]], "protected() (pyxa.apps.music.xamusicairplaydevicelist method)": [[31, "PyXA.apps.Music.XAMusicAirPlayDeviceList.protected"]], "radio_tuner_playlists() (pyxa.apps.music.xamusicsource method)": [[31, "PyXA.apps.Music.XAMusicSource.radio_tuner_playlists"]], "search() (pyxa.apps.music.xamusicplaylist method)": [[31, "PyXA.apps.Music.XAMusicPlaylist.search"]], "selected (pyxa.apps.music.xamusicairplaydevice property)": [[31, "PyXA.apps.Music.XAMusicAirPlayDevice.selected"]], "selected() (pyxa.apps.music.xamusicairplaydevicelist method)": [[31, "PyXA.apps.Music.XAMusicAirPlayDeviceList.selected"]], "shufflable (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.shufflable"]], "shufflable() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.shufflable"]], "shuffle_enabled (pyxa.apps.music.xamusicapplication property)": [[31, "PyXA.apps.Music.XAMusicApplication.shuffle_enabled"]], "shuffle_mode (pyxa.apps.music.xamusicapplication property)": [[31, "PyXA.apps.Music.XAMusicApplication.shuffle_mode"]], "song_repeat (pyxa.apps.music.xamusicapplication property)": [[31, "PyXA.apps.Music.XAMusicApplication.song_repeat"]], "sort_album_artist (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.sort_album_artist"]], "sort_album_artist() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.sort_album_artist"]], "sort_artist (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.sort_artist"]], "sort_artist() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.sort_artist"]], "sort_composer (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.sort_composer"]], "sort_composer() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.sort_composer"]], "sound_volume (pyxa.apps.music.xamusicairplaydevice property)": [[31, "PyXA.apps.Music.XAMusicAirPlayDevice.sound_volume"]], "sound_volume() (pyxa.apps.music.xamusicairplaydevicelist method)": [[31, "PyXA.apps.Music.XAMusicAirPlayDeviceList.sound_volume"]], "subscription_playlists() (pyxa.apps.music.xamusicsource method)": [[31, "PyXA.apps.Music.XAMusicSource.subscription_playlists"]], "supports_audio (pyxa.apps.music.xamusicairplaydevice property)": [[31, "PyXA.apps.Music.XAMusicAirPlayDevice.supports_audio"]], "supports_audio() (pyxa.apps.music.xamusicairplaydevicelist method)": [[31, "PyXA.apps.Music.XAMusicAirPlayDeviceList.supports_audio"]], "supports_video (pyxa.apps.music.xamusicairplaydevice property)": [[31, "PyXA.apps.Music.XAMusicAirPlayDevice.supports_video"]], "tracks() (pyxa.apps.music.xamusicapplication method)": [[31, "PyXA.apps.Music.XAMusicApplication.tracks"]], "tracks() (pyxa.apps.music.xamusicplaylist method)": [[31, "PyXA.apps.Music.XAMusicPlaylist.tracks"]], "update_tracks (pyxa.apps.music.xamusiceqpreset property)": [[31, "PyXA.apps.Music.XAMusicEQPreset.update_tracks"]], "update_tracks() (pyxa.apps.music.xamusiceqpresetlist method)": [[31, "PyXA.apps.Music.XAMusicEQPresetList.update_tracks"]], "url_tracks() (pyxa.apps.music.xamusicradiotunerplaylist method)": [[31, "PyXA.apps.Music.XAMusicRadioTunerPlaylist.url_tracks"]], "url_tracks() (pyxa.apps.music.xamusicsubscriptionplaylist method)": [[31, "PyXA.apps.Music.XAMusicSubscriptionPlaylist.url_tracks"]], "visuals() (pyxa.apps.music.xamusicapplication method)": [[31, "PyXA.apps.Music.XAMusicApplication.visuals"]], "visuals_enabled (pyxa.apps.music.xamusicapplication property)": [[31, "PyXA.apps.Music.XAMusicApplication.visuals_enabled"]], "work (pyxa.apps.music.xamusictrack property)": [[31, "PyXA.apps.Music.XAMusicTrack.work"]], "work() (pyxa.apps.music.xamusictracklist method)": [[31, "PyXA.apps.Music.XAMusicTrackList.work"]], "year (pyxa.apps.music.xamusicaudiocdplaylist property)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylist.year"]], "year() (pyxa.apps.music.xamusicaudiocdplaylistlist method)": [[31, "PyXA.apps.Music.XAMusicAudioCDPlaylistList.year"]], "native (pyxa.apps.notes.xanotesapplication.fileformat attribute)": [[32, "PyXA.apps.Notes.XANotesApplication.FileFormat.NATIVE"], [33, "PyXA.apps.Notes.XANotesApplication.FileFormat.NATIVE"]], "pyxa.apps.notes": [[32, "module-PyXA.apps.Notes"], [33, "module-PyXA.apps.Notes"]], "xanote (class in pyxa.apps.notes)": [[32, "PyXA.apps.Notes.XANote"], [33, "PyXA.apps.Notes.XANote"]], "xanoteattachment (class in pyxa.apps.notes)": [[32, "PyXA.apps.Notes.XANoteAttachment"], [33, "PyXA.apps.Notes.XANoteAttachment"]], "xanotelist (class in pyxa.apps.notes)": [[32, "PyXA.apps.Notes.XANoteList"], [33, "PyXA.apps.Notes.XANoteList"]], "xanotesaccount (class in pyxa.apps.notes)": [[32, "PyXA.apps.Notes.XANotesAccount"], [33, "PyXA.apps.Notes.XANotesAccount"]], "xanotesaccountlist (class in pyxa.apps.notes)": [[32, "PyXA.apps.Notes.XANotesAccountList"], [33, "PyXA.apps.Notes.XANotesAccountList"]], "xanotesapplication (class in pyxa.apps.notes)": [[32, "PyXA.apps.Notes.XANotesApplication"], [33, "PyXA.apps.Notes.XANotesApplication"]], "xanotesapplication.fileformat (class in pyxa.apps.notes)": [[32, "PyXA.apps.Notes.XANotesApplication.FileFormat"], [33, "PyXA.apps.Notes.XANotesApplication.FileFormat"]], "xanotesattachmentlist (class in pyxa.apps.notes)": [[32, "PyXA.apps.Notes.XANotesAttachmentList"], [33, "PyXA.apps.Notes.XANotesAttachmentList"]], "xanotesdocument (class in pyxa.apps.notes)": [[32, "PyXA.apps.Notes.XANotesDocument"], [33, "PyXA.apps.Notes.XANotesDocument"]], "xanotesdocumentlist (class in pyxa.apps.notes)": [[32, "PyXA.apps.Notes.XANotesDocumentList"], [33, "PyXA.apps.Notes.XANotesDocumentList"]], "xanotesfolder (class in pyxa.apps.notes)": [[32, "PyXA.apps.Notes.XANotesFolder"], [33, "PyXA.apps.Notes.XANotesFolder"]], "xanotesfolderlist (class in pyxa.apps.notes)": [[32, "PyXA.apps.Notes.XANotesFolderList"], [33, "PyXA.apps.Notes.XANotesFolderList"]], "xanoteswindow (class in pyxa.apps.notes)": [[32, "PyXA.apps.Notes.XANotesWindow"], [33, "PyXA.apps.Notes.XANotesWindow"]], "accounts() (pyxa.apps.notes.xanotesapplication method)": [[32, "PyXA.apps.Notes.XANotesApplication.accounts"], [33, "PyXA.apps.Notes.XANotesApplication.accounts"]], "attachments() (pyxa.apps.notes.xanote method)": [[32, "PyXA.apps.Notes.XANote.attachments"], [33, "PyXA.apps.Notes.XANote.attachments"]], "attachments() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.attachments"], [33, "PyXA.apps.Notes.XANoteList.attachments"]], "attachments() (pyxa.apps.notes.xanotesapplication method)": [[32, "PyXA.apps.Notes.XANotesApplication.attachments"], [33, "PyXA.apps.Notes.XANotesApplication.attachments"]], "body (pyxa.apps.notes.xanote property)": [[32, "PyXA.apps.Notes.XANote.body"], [33, "PyXA.apps.Notes.XANote.body"]], "body() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.body"], [33, "PyXA.apps.Notes.XANoteList.body"]], "by_body() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.by_body"], [33, "PyXA.apps.Notes.XANoteList.by_body"]], "by_container() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.by_container"], [33, "PyXA.apps.Notes.XANoteList.by_container"]], "by_container() (pyxa.apps.notes.xanotesattachmentlist method)": [[32, "PyXA.apps.Notes.XANotesAttachmentList.by_container"], [33, "PyXA.apps.Notes.XANotesAttachmentList.by_container"]], "by_container() (pyxa.apps.notes.xanotesfolderlist method)": [[32, "PyXA.apps.Notes.XANotesFolderList.by_container"], [33, "PyXA.apps.Notes.XANotesFolderList.by_container"]], "by_content_identifier() (pyxa.apps.notes.xanotesattachmentlist method)": [[32, "PyXA.apps.Notes.XANotesAttachmentList.by_content_identifier"], [33, "PyXA.apps.Notes.XANotesAttachmentList.by_content_identifier"]], "by_creation_date() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.by_creation_date"], [33, "PyXA.apps.Notes.XANoteList.by_creation_date"]], "by_creation_date() (pyxa.apps.notes.xanotesattachmentlist method)": [[32, "PyXA.apps.Notes.XANotesAttachmentList.by_creation_date"], [33, "PyXA.apps.Notes.XANotesAttachmentList.by_creation_date"]], "by_default_folder() (pyxa.apps.notes.xanotesaccountlist method)": [[32, "PyXA.apps.Notes.XANotesAccountList.by_default_folder"], [33, "PyXA.apps.Notes.XANotesAccountList.by_default_folder"]], "by_file() (pyxa.apps.notes.xanotesdocumentlist method)": [[32, "PyXA.apps.Notes.XANotesDocumentList.by_file"], [33, "PyXA.apps.Notes.XANotesDocumentList.by_file"]], "by_id() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.by_id"], [33, "PyXA.apps.Notes.XANoteList.by_id"]], "by_id() (pyxa.apps.notes.xanotesaccountlist method)": [[32, "PyXA.apps.Notes.XANotesAccountList.by_id"], [33, "PyXA.apps.Notes.XANotesAccountList.by_id"]], "by_id() (pyxa.apps.notes.xanotesattachmentlist method)": [[32, "PyXA.apps.Notes.XANotesAttachmentList.by_id"], [33, "PyXA.apps.Notes.XANotesAttachmentList.by_id"]], "by_id() (pyxa.apps.notes.xanotesfolderlist method)": [[32, "PyXA.apps.Notes.XANotesFolderList.by_id"], [33, "PyXA.apps.Notes.XANotesFolderList.by_id"]], "by_modification_date() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.by_modification_date"], [33, "PyXA.apps.Notes.XANoteList.by_modification_date"]], "by_modification_date() (pyxa.apps.notes.xanotesattachmentlist method)": [[32, "PyXA.apps.Notes.XANotesAttachmentList.by_modification_date"], [33, "PyXA.apps.Notes.XANotesAttachmentList.by_modification_date"]], "by_modified() (pyxa.apps.notes.xanotesdocumentlist method)": [[32, "PyXA.apps.Notes.XANotesDocumentList.by_modified"], [33, "PyXA.apps.Notes.XANotesDocumentList.by_modified"]], "by_name() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.by_name"], [33, "PyXA.apps.Notes.XANoteList.by_name"]], "by_name() (pyxa.apps.notes.xanotesaccountlist method)": [[32, "PyXA.apps.Notes.XANotesAccountList.by_name"], [33, "PyXA.apps.Notes.XANotesAccountList.by_name"]], "by_name() (pyxa.apps.notes.xanotesattachmentlist method)": [[32, "PyXA.apps.Notes.XANotesAttachmentList.by_name"], [33, "PyXA.apps.Notes.XANotesAttachmentList.by_name"]], "by_name() (pyxa.apps.notes.xanotesdocumentlist method)": [[32, "PyXA.apps.Notes.XANotesDocumentList.by_name"], [33, "PyXA.apps.Notes.XANotesDocumentList.by_name"]], "by_name() (pyxa.apps.notes.xanotesfolderlist method)": [[32, "PyXA.apps.Notes.XANotesFolderList.by_name"], [33, "PyXA.apps.Notes.XANotesFolderList.by_name"]], "by_password_protected() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.by_password_protected"], [33, "PyXA.apps.Notes.XANoteList.by_password_protected"]], "by_plaintext() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.by_plaintext"], [33, "PyXA.apps.Notes.XANoteList.by_plaintext"]], "by_shared() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.by_shared"], [33, "PyXA.apps.Notes.XANoteList.by_shared"]], "by_shared() (pyxa.apps.notes.xanotesattachmentlist method)": [[32, "PyXA.apps.Notes.XANotesAttachmentList.by_shared"], [33, "PyXA.apps.Notes.XANotesAttachmentList.by_shared"]], "by_shared() (pyxa.apps.notes.xanotesfolderlist method)": [[32, "PyXA.apps.Notes.XANotesFolderList.by_shared"], [33, "PyXA.apps.Notes.XANotesFolderList.by_shared"]], "by_upgraded() (pyxa.apps.notes.xanotesaccountlist method)": [[32, "PyXA.apps.Notes.XANotesAccountList.by_upgraded"], [33, "PyXA.apps.Notes.XANotesAccountList.by_upgraded"]], "by_url() (pyxa.apps.notes.xanotesattachmentlist method)": [[32, "PyXA.apps.Notes.XANotesAttachmentList.by_url"], [33, "PyXA.apps.Notes.XANotesAttachmentList.by_url"]], "container (pyxa.apps.notes.xanote property)": [[32, "PyXA.apps.Notes.XANote.container"], [33, "PyXA.apps.Notes.XANote.container"]], "container (pyxa.apps.notes.xanoteattachment property)": [[32, "PyXA.apps.Notes.XANoteAttachment.container"], [33, "PyXA.apps.Notes.XANoteAttachment.container"]], "container (pyxa.apps.notes.xanotesfolder property)": [[32, "PyXA.apps.Notes.XANotesFolder.container"], [33, "PyXA.apps.Notes.XANotesFolder.container"]], "container() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.container"], [33, "PyXA.apps.Notes.XANoteList.container"]], "container() (pyxa.apps.notes.xanotesattachmentlist method)": [[32, "PyXA.apps.Notes.XANotesAttachmentList.container"], [33, "PyXA.apps.Notes.XANotesAttachmentList.container"]], "container() (pyxa.apps.notes.xanotesfolderlist method)": [[32, "PyXA.apps.Notes.XANotesFolderList.container"], [33, "PyXA.apps.Notes.XANotesFolderList.container"]], "content_identifier (pyxa.apps.notes.xanoteattachment property)": [[32, "PyXA.apps.Notes.XANoteAttachment.content_identifier"], [33, "PyXA.apps.Notes.XANoteAttachment.content_identifier"]], "content_identifier() (pyxa.apps.notes.xanotesattachmentlist method)": [[32, "PyXA.apps.Notes.XANotesAttachmentList.content_identifier"], [33, "PyXA.apps.Notes.XANotesAttachmentList.content_identifier"]], "creation_date (pyxa.apps.notes.xanote property)": [[32, "PyXA.apps.Notes.XANote.creation_date"], [33, "PyXA.apps.Notes.XANote.creation_date"]], "creation_date (pyxa.apps.notes.xanoteattachment property)": [[32, "PyXA.apps.Notes.XANoteAttachment.creation_date"], [33, "PyXA.apps.Notes.XANoteAttachment.creation_date"]], "creation_date() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.creation_date"], [33, "PyXA.apps.Notes.XANoteList.creation_date"]], "creation_date() (pyxa.apps.notes.xanotesattachmentlist method)": [[32, "PyXA.apps.Notes.XANotesAttachmentList.creation_date"], [33, "PyXA.apps.Notes.XANotesAttachmentList.creation_date"]], "default_account (pyxa.apps.notes.xanotesapplication property)": [[32, "PyXA.apps.Notes.XANotesApplication.default_account"], [33, "PyXA.apps.Notes.XANotesApplication.default_account"]], "default_folder (pyxa.apps.notes.xanotesaccount property)": [[32, "PyXA.apps.Notes.XANotesAccount.default_folder"], [33, "PyXA.apps.Notes.XANotesAccount.default_folder"]], "default_folder() (pyxa.apps.notes.xanotesaccountlist method)": [[32, "PyXA.apps.Notes.XANotesAccountList.default_folder"], [33, "PyXA.apps.Notes.XANotesAccountList.default_folder"]], "delete() (pyxa.apps.notes.xanoteattachment method)": [[32, "PyXA.apps.Notes.XANoteAttachment.delete"], [33, "PyXA.apps.Notes.XANoteAttachment.delete"]], "delete() (pyxa.apps.notes.xanotesfolder method)": [[32, "PyXA.apps.Notes.XANotesFolder.delete"], [33, "PyXA.apps.Notes.XANotesFolder.delete"]], "document (pyxa.apps.notes.xanoteswindow property)": [[32, "PyXA.apps.Notes.XANotesWindow.document"], [33, "PyXA.apps.Notes.XANotesWindow.document"]], "documents() (pyxa.apps.notes.xanotesapplication method)": [[32, "PyXA.apps.Notes.XANotesApplication.documents"], [33, "PyXA.apps.Notes.XANotesApplication.documents"]], "file (pyxa.apps.notes.xanotesdocument property)": [[32, "PyXA.apps.Notes.XANotesDocument.file"], [33, "PyXA.apps.Notes.XANotesDocument.file"]], "file() (pyxa.apps.notes.xanotesdocumentlist method)": [[32, "PyXA.apps.Notes.XANotesDocumentList.file"], [33, "PyXA.apps.Notes.XANotesDocumentList.file"]], "folders() (pyxa.apps.notes.xanotesaccount method)": [[32, "PyXA.apps.Notes.XANotesAccount.folders"], [33, "PyXA.apps.Notes.XANotesAccount.folders"]], "folders() (pyxa.apps.notes.xanotesaccountlist method)": [[32, "PyXA.apps.Notes.XANotesAccountList.folders"], [33, "PyXA.apps.Notes.XANotesAccountList.folders"]], "folders() (pyxa.apps.notes.xanotesapplication method)": [[32, "PyXA.apps.Notes.XANotesApplication.folders"], [33, "PyXA.apps.Notes.XANotesApplication.folders"]], "folders() (pyxa.apps.notes.xanotesfolderlist method)": [[32, "PyXA.apps.Notes.XANotesFolderList.folders"], [33, "PyXA.apps.Notes.XANotesFolderList.folders"]], "frontmost (pyxa.apps.notes.xanotesapplication property)": [[32, "PyXA.apps.Notes.XANotesApplication.frontmost"], [33, "PyXA.apps.Notes.XANotesApplication.frontmost"]], "get_clipboard_representation() (pyxa.apps.notes.xanote method)": [[32, "PyXA.apps.Notes.XANote.get_clipboard_representation"], [33, "PyXA.apps.Notes.XANote.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.notes.xanoteattachment method)": [[32, "PyXA.apps.Notes.XANoteAttachment.get_clipboard_representation"], [33, "PyXA.apps.Notes.XANoteAttachment.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.get_clipboard_representation"], [33, "PyXA.apps.Notes.XANoteList.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.notes.xanotesaccount method)": [[32, "PyXA.apps.Notes.XANotesAccount.get_clipboard_representation"], [33, "PyXA.apps.Notes.XANotesAccount.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.notes.xanotesaccountlist method)": [[32, "PyXA.apps.Notes.XANotesAccountList.get_clipboard_representation"], [33, "PyXA.apps.Notes.XANotesAccountList.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.notes.xanotesdocument method)": [[32, "PyXA.apps.Notes.XANotesDocument.get_clipboard_representation"], [33, "PyXA.apps.Notes.XANotesDocument.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.notes.xanotesdocumentlist method)": [[32, "PyXA.apps.Notes.XANotesDocumentList.get_clipboard_representation"], [33, "PyXA.apps.Notes.XANotesDocumentList.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.notes.xanotesfolder method)": [[32, "PyXA.apps.Notes.XANotesFolder.get_clipboard_representation"], [33, "PyXA.apps.Notes.XANotesFolder.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.notes.xanotesfolderlist method)": [[32, "PyXA.apps.Notes.XANotesFolderList.get_clipboard_representation"], [33, "PyXA.apps.Notes.XANotesFolderList.get_clipboard_representation"]], "id (pyxa.apps.notes.xanote property)": [[32, "PyXA.apps.Notes.XANote.id"], [33, "PyXA.apps.Notes.XANote.id"]], "id (pyxa.apps.notes.xanoteattachment property)": [[32, "PyXA.apps.Notes.XANoteAttachment.id"], [33, "PyXA.apps.Notes.XANoteAttachment.id"]], "id (pyxa.apps.notes.xanotesaccount property)": [[32, "PyXA.apps.Notes.XANotesAccount.id"], [33, "PyXA.apps.Notes.XANotesAccount.id"]], "id (pyxa.apps.notes.xanotesfolder property)": [[32, "PyXA.apps.Notes.XANotesFolder.id"], [33, "PyXA.apps.Notes.XANotesFolder.id"]], "id() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.id"], [33, "PyXA.apps.Notes.XANoteList.id"]], "id() (pyxa.apps.notes.xanotesaccountlist method)": [[32, "PyXA.apps.Notes.XANotesAccountList.id"], [33, "PyXA.apps.Notes.XANotesAccountList.id"]], "id() (pyxa.apps.notes.xanotesattachmentlist method)": [[32, "PyXA.apps.Notes.XANotesAttachmentList.id"], [33, "PyXA.apps.Notes.XANotesAttachmentList.id"]], "id() (pyxa.apps.notes.xanotesfolderlist method)": [[32, "PyXA.apps.Notes.XANotesFolderList.id"], [33, "PyXA.apps.Notes.XANotesFolderList.id"]], "make() (pyxa.apps.notes.xanotesapplication method)": [[32, "PyXA.apps.Notes.XANotesApplication.make"], [33, "PyXA.apps.Notes.XANotesApplication.make"]], "modification_date (pyxa.apps.notes.xanote property)": [[32, "PyXA.apps.Notes.XANote.modification_date"], [33, "PyXA.apps.Notes.XANote.modification_date"]], "modification_date (pyxa.apps.notes.xanoteattachment property)": [[32, "PyXA.apps.Notes.XANoteAttachment.modification_date"], [33, "PyXA.apps.Notes.XANoteAttachment.modification_date"]], "modification_date() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.modification_date"], [33, "PyXA.apps.Notes.XANoteList.modification_date"]], "modification_date() (pyxa.apps.notes.xanotesattachmentlist method)": [[32, "PyXA.apps.Notes.XANotesAttachmentList.modification_date"], [33, "PyXA.apps.Notes.XANotesAttachmentList.modification_date"]], "modified (pyxa.apps.notes.xanotesdocument property)": [[32, "PyXA.apps.Notes.XANotesDocument.modified"], [33, "PyXA.apps.Notes.XANotesDocument.modified"]], "modified() (pyxa.apps.notes.xanotesdocumentlist method)": [[32, "PyXA.apps.Notes.XANotesDocumentList.modified"], [33, "PyXA.apps.Notes.XANotesDocumentList.modified"]], "move_to() (pyxa.apps.notes.xanote method)": [[32, "PyXA.apps.Notes.XANote.move_to"], [33, "PyXA.apps.Notes.XANote.move_to"]], "name (pyxa.apps.notes.xanote property)": [[32, "PyXA.apps.Notes.XANote.name"], [33, "PyXA.apps.Notes.XANote.name"]], "name (pyxa.apps.notes.xanoteattachment property)": [[32, "PyXA.apps.Notes.XANoteAttachment.name"], [33, "PyXA.apps.Notes.XANoteAttachment.name"]], "name (pyxa.apps.notes.xanotesaccount property)": [[32, "PyXA.apps.Notes.XANotesAccount.name"], [33, "PyXA.apps.Notes.XANotesAccount.name"]], "name (pyxa.apps.notes.xanotesapplication property)": [[32, "PyXA.apps.Notes.XANotesApplication.name"], [33, "PyXA.apps.Notes.XANotesApplication.name"]], "name (pyxa.apps.notes.xanotesdocument property)": [[32, "PyXA.apps.Notes.XANotesDocument.name"], [33, "PyXA.apps.Notes.XANotesDocument.name"]], "name (pyxa.apps.notes.xanotesfolder property)": [[32, "PyXA.apps.Notes.XANotesFolder.name"], [33, "PyXA.apps.Notes.XANotesFolder.name"]], "name() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.name"], [33, "PyXA.apps.Notes.XANoteList.name"]], "name() (pyxa.apps.notes.xanotesaccountlist method)": [[32, "PyXA.apps.Notes.XANotesAccountList.name"], [33, "PyXA.apps.Notes.XANotesAccountList.name"]], "name() (pyxa.apps.notes.xanotesattachmentlist method)": [[32, "PyXA.apps.Notes.XANotesAttachmentList.name"], [33, "PyXA.apps.Notes.XANotesAttachmentList.name"]], "name() (pyxa.apps.notes.xanotesdocumentlist method)": [[32, "PyXA.apps.Notes.XANotesDocumentList.name"], [33, "PyXA.apps.Notes.XANotesDocumentList.name"]], "name() (pyxa.apps.notes.xanotesfolderlist method)": [[32, "PyXA.apps.Notes.XANotesFolderList.name"], [33, "PyXA.apps.Notes.XANotesFolderList.name"]], "new_folder() (pyxa.apps.notes.xanotesapplication method)": [[32, "PyXA.apps.Notes.XANotesApplication.new_folder"], [33, "PyXA.apps.Notes.XANotesApplication.new_folder"]], "new_note() (pyxa.apps.notes.xanotesapplication method)": [[32, "PyXA.apps.Notes.XANotesApplication.new_note"], [33, "PyXA.apps.Notes.XANotesApplication.new_note"]], "notes() (pyxa.apps.notes.xanotesaccount method)": [[32, "PyXA.apps.Notes.XANotesAccount.notes"], [33, "PyXA.apps.Notes.XANotesAccount.notes"]], "notes() (pyxa.apps.notes.xanotesaccountlist method)": [[32, "PyXA.apps.Notes.XANotesAccountList.notes"], [33, "PyXA.apps.Notes.XANotesAccountList.notes"]], "notes() (pyxa.apps.notes.xanotesapplication method)": [[32, "PyXA.apps.Notes.XANotesApplication.notes"], [33, "PyXA.apps.Notes.XANotesApplication.notes"]], "notes() (pyxa.apps.notes.xanotesfolder method)": [[32, "PyXA.apps.Notes.XANotesFolder.notes"], [33, "PyXA.apps.Notes.XANotesFolder.notes"]], "notes() (pyxa.apps.notes.xanotesfolderlist method)": [[32, "PyXA.apps.Notes.XANotesFolderList.notes"], [33, "PyXA.apps.Notes.XANotesFolderList.notes"]], "open() (pyxa.apps.notes.xanotesapplication method)": [[32, "PyXA.apps.Notes.XANotesApplication.open"], [33, "PyXA.apps.Notes.XANotesApplication.open"]], "password_protected (pyxa.apps.notes.xanote property)": [[32, "PyXA.apps.Notes.XANote.password_protected"], [33, "PyXA.apps.Notes.XANote.password_protected"]], "password_protected() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.password_protected"], [33, "PyXA.apps.Notes.XANoteList.password_protected"]], "plaintext (pyxa.apps.notes.xanote property)": [[32, "PyXA.apps.Notes.XANote.plaintext"], [33, "PyXA.apps.Notes.XANote.plaintext"]], "plaintext() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.plaintext"], [33, "PyXA.apps.Notes.XANoteList.plaintext"]], "save() (pyxa.apps.notes.xanoteattachment method)": [[32, "PyXA.apps.Notes.XANoteAttachment.save"], [33, "PyXA.apps.Notes.XANoteAttachment.save"]], "save() (pyxa.apps.notes.xanotesattachmentlist method)": [[32, "PyXA.apps.Notes.XANotesAttachmentList.save"], [33, "PyXA.apps.Notes.XANotesAttachmentList.save"]], "selection (pyxa.apps.notes.xanotesapplication property)": [[32, "PyXA.apps.Notes.XANotesApplication.selection"], [33, "PyXA.apps.Notes.XANotesApplication.selection"]], "shared (pyxa.apps.notes.xanote property)": [[32, "PyXA.apps.Notes.XANote.shared"], [33, "PyXA.apps.Notes.XANote.shared"]], "shared (pyxa.apps.notes.xanoteattachment property)": [[32, "PyXA.apps.Notes.XANoteAttachment.shared"], [33, "PyXA.apps.Notes.XANoteAttachment.shared"]], "shared (pyxa.apps.notes.xanotesfolder property)": [[32, "PyXA.apps.Notes.XANotesFolder.shared"], [33, "PyXA.apps.Notes.XANotesFolder.shared"]], "shared() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.shared"], [33, "PyXA.apps.Notes.XANoteList.shared"]], "shared() (pyxa.apps.notes.xanotesattachmentlist method)": [[32, "PyXA.apps.Notes.XANotesAttachmentList.shared"], [33, "PyXA.apps.Notes.XANotesAttachmentList.shared"]], "shared() (pyxa.apps.notes.xanotesfolderlist method)": [[32, "PyXA.apps.Notes.XANotesFolderList.shared"], [33, "PyXA.apps.Notes.XANotesFolderList.shared"]], "show() (pyxa.apps.notes.xanote method)": [[32, "PyXA.apps.Notes.XANote.show"], [33, "PyXA.apps.Notes.XANote.show"]], "show() (pyxa.apps.notes.xanoteattachment method)": [[32, "PyXA.apps.Notes.XANoteAttachment.show"], [33, "PyXA.apps.Notes.XANoteAttachment.show"]], "show() (pyxa.apps.notes.xanotesaccount method)": [[32, "PyXA.apps.Notes.XANotesAccount.show"], [33, "PyXA.apps.Notes.XANotesAccount.show"]], "show() (pyxa.apps.notes.xanotesfolder method)": [[32, "PyXA.apps.Notes.XANotesFolder.show"], [33, "PyXA.apps.Notes.XANotesFolder.show"]], "show_separately() (pyxa.apps.notes.xanote method)": [[32, "PyXA.apps.Notes.XANote.show_separately"], [33, "PyXA.apps.Notes.XANote.show_separately"]], "show_separately() (pyxa.apps.notes.xanoteattachment method)": [[32, "PyXA.apps.Notes.XANoteAttachment.show_separately"], [33, "PyXA.apps.Notes.XANoteAttachment.show_separately"]], "show_separately() (pyxa.apps.notes.xanotelist method)": [[32, "PyXA.apps.Notes.XANoteList.show_separately"], [33, "PyXA.apps.Notes.XANoteList.show_separately"]], "upgraded (pyxa.apps.notes.xanotesaccount property)": [[32, "PyXA.apps.Notes.XANotesAccount.upgraded"], [33, "PyXA.apps.Notes.XANotesAccount.upgraded"]], "upgraded() (pyxa.apps.notes.xanotesaccountlist method)": [[32, "PyXA.apps.Notes.XANotesAccountList.upgraded"], [33, "PyXA.apps.Notes.XANotesAccountList.upgraded"]], "url (pyxa.apps.notes.xanoteattachment property)": [[32, "PyXA.apps.Notes.XANoteAttachment.url"], [33, "PyXA.apps.Notes.XANoteAttachment.url"]], "url() (pyxa.apps.notes.xanotesattachmentlist method)": [[32, "PyXA.apps.Notes.XANotesAttachmentList.url"], [33, "PyXA.apps.Notes.XANotesAttachmentList.url"]], "version (pyxa.apps.notes.xanotesapplication property)": [[32, "PyXA.apps.Notes.XANotesApplication.version"], [33, "PyXA.apps.Notes.XANotesApplication.version"]], "ascending (pyxa.apps.omnioutliner.xaomnioutlinerapplication.sortorder attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.SortOrder.ASCENDING"]], "average (pyxa.apps.omnioutliner.xaomnioutlinerapplication.columnsummarytype attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.ColumnSummaryType.AVERAGE"]], "calculated (pyxa.apps.omnioutliner.xaomnioutlinerapplication.columnsummarytype attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.ColumnSummaryType.CALCULATED"]], "center (pyxa.apps.omnioutliner.xaomnioutlinerapplication.alignment attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.Alignment.CENTER"]], "checkbox (pyxa.apps.omnioutliner.xaomnioutlinerapplication.columntype attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.ColumnType.CHECKBOX"]], "checked (pyxa.apps.omnioutliner.xaomnioutlinerapplication.checkboxstate attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.CheckboxState.CHECKED"]], "datetime (pyxa.apps.omnioutliner.xaomnioutlinerapplication.columntype attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.ColumnType.DATETIME"]], "descending (pyxa.apps.omnioutliner.xaomnioutlinerapplication.sortorder attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.SortOrder.DESCENDING"]], "duration (pyxa.apps.omnioutliner.xaomnioutlinerapplication.columntype attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.ColumnType.DURATION"]], "full (pyxa.apps.omnioutliner.xaomnioutlinerapplication.formatstyle attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.FormatStyle.FULL"]], "hidden (pyxa.apps.omnioutliner.xaomnioutlinerapplication.columnsummarytype attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.ColumnSummaryType.HIDDEN"]], "indeterminate (pyxa.apps.omnioutliner.xaomnioutlinerapplication.checkboxstate attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.CheckboxState.INDETERMINATE"]], "inline (pyxa.apps.omnioutliner.xaomnioutlinerapplication.displaytype attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.DisplayType.INLINE"]], "justified (pyxa.apps.omnioutliner.xaomnioutlinerapplication.alignment attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.Alignment.JUSTIFIED"]], "left (pyxa.apps.omnioutliner.xaomnioutlinerapplication.alignment attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.Alignment.LEFT"]], "long (pyxa.apps.omnioutliner.xaomnioutlinerapplication.formatstyle attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.FormatStyle.LONG"]], "maximum (pyxa.apps.omnioutliner.xaomnioutlinerapplication.columnsummarytype attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.ColumnSummaryType.MAXIMUM"]], "medium (pyxa.apps.omnioutliner.xaomnioutlinerapplication.formatstyle attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.FormatStyle.MEDIUM"]], "minimum (pyxa.apps.omnioutliner.xaomnioutlinerapplication.columnsummarytype attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.ColumnSummaryType.MINIMUM"]], "natural (pyxa.apps.omnioutliner.xaomnioutlinerapplication.alignment attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.Alignment.NATURAL"]], "none (pyxa.apps.omnioutliner.xaomnioutlinerapplication.checkboxstate attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.CheckboxState.NONE"]], "none (pyxa.apps.omnioutliner.xaomnioutlinerapplication.columnsummarytype attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.ColumnSummaryType.NONE"]], "none (pyxa.apps.omnioutliner.xaomnioutlinerapplication.sortorder attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.SortOrder.NONE"]], "numeric (pyxa.apps.omnioutliner.xaomnioutlinerapplication.columntype attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.ColumnType.NUMERIC"]], "out_of_line (pyxa.apps.omnioutliner.xaomnioutlinerapplication.displaytype attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.DisplayType.OUT_OF_LINE"]], "popup (pyxa.apps.omnioutliner.xaomnioutlinerapplication.columntype attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.ColumnType.POPUP"]], "pyxa.apps.omnioutliner": [[34, "module-PyXA.apps.OmniOutliner"]], "right (pyxa.apps.omnioutliner.xaomnioutlinerapplication.alignment attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.Alignment.RIGHT"]], "short (pyxa.apps.omnioutliner.xaomnioutlinerapplication.formatstyle attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.FormatStyle.SHORT"]], "styled_text (pyxa.apps.omnioutliner.xaomnioutlinerapplication.columntype attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.ColumnType.STYLED_TEXT"]], "total (pyxa.apps.omnioutliner.xaomnioutlinerapplication.columnsummarytype attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.ColumnSummaryType.TOTAL"]], "unchecked (pyxa.apps.omnioutliner.xaomnioutlinerapplication.checkboxstate attribute)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.CheckboxState.UNCHECKED"]], "xaomnioutlinerancestor (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerAncestor"]], "xaomnioutlinerancestorlist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerAncestorList"]], "xaomnioutlinerapplication (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication"]], "xaomnioutlinerapplication.alignment (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.Alignment"]], "xaomnioutlinerapplication.checkboxstate (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.CheckboxState"]], "xaomnioutlinerapplication.columnsummarytype (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.ColumnSummaryType"]], "xaomnioutlinerapplication.columntype (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.ColumnType"]], "xaomnioutlinerapplication.displaytype (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.DisplayType"]], "xaomnioutlinerapplication.formatstyle (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.FormatStyle"]], "xaomnioutlinerapplication.sortorder (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.SortOrder"]], "xaomnioutlinerarchivedata (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerArchiveData"]], "xaomnioutlinerattribute (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerAttribute"]], "xaomnioutlinerattributelist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerAttributeList"]], "xaomnioutlinercell (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerCell"]], "xaomnioutlinercelllist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerCellList"]], "xaomnioutlinerchild (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerChild"]], "xaomnioutlinerchildlist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerChildList"]], "xaomnioutlinercolumformat (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumFormat"]], "xaomnioutlinercolumn (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumn"]], "xaomnioutlinercolumnlist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumnList"]], "xaomnioutlinerconduitsettingdomain (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerConduitSettingDomain"]], "xaomnioutlinerconduitsettingdomainlist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerConduitSettingDomainList"]], "xaomnioutlinerdocument (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument"]], "xaomnioutlinerdocumentlist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList"]], "xaomnioutlinerdocumenttype (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentType"]], "xaomnioutlinerdocumenttypelist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentTypeList"]], "xaomnioutlinerenumeration (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerEnumeration"]], "xaomnioutlinerenumerationlist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerEnumerationList"]], "xaomnioutlinerfileattachment (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerFileAttachment"]], "xaomnioutlinerfileattachmentlist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerFileAttachmentList"]], "xaomnioutlinerfollowingsibling (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerFollowingSibling"]], "xaomnioutlinerfollowingsiblinglist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerFollowingSiblingList"]], "xaomnioutlinergenericcolor (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor"]], "xaomnioutlinerleaf (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerLeaf"]], "xaomnioutlinerleaflist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerLeafList"]], "xaomnioutlinerlevelstyle (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerLevelStyle"]], "xaomnioutlinerlevelstylelist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerLevelStyleList"]], "xaomnioutlinernamedstyle (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerNamedStyle"]], "xaomnioutlinernamedstylelist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerNamedStyleList"]], "xaomnioutlinerpngdata (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerPNGData"]], "xaomnioutlinerpathcomponent (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerPathComponent"]], "xaomnioutlinerpathcomponentlist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerPathComponentList"]], "xaomnioutlinerpoint (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerPoint"]], "xaomnioutlinerprecedingsibling (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerPrecedingSibling"]], "xaomnioutlinerprecedingsiblinglist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerPrecedingSiblingList"]], "xaomnioutlinerpreference (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerPreference"]], "xaomnioutlinerpreferencelist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerPreferenceList"]], "xaomnioutlinerreadabledocumenttype (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerReadableDocumentType"]], "xaomnioutlinerreadabledocumenttypelist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerReadableDocumentTypeList"]], "xaomnioutlinerrichtext (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRichText"]], "xaomnioutlinerrichtextlist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRichTextList"]], "xaomnioutlinerrow (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow"]], "xaomnioutlinerrowlist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRowList"]], "xaomnioutlinersection (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerSection"]], "xaomnioutlinersectionlist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerSectionList"]], "xaomnioutlinerselectedcolumn (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerSelectedColumn"]], "xaomnioutlinerselectedcolumnlist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerSelectedColumnList"]], "xaomnioutlinerselectedrow (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerSelectedRow"]], "xaomnioutlinerselectedrowlist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerSelectedRowList"]], "xaomnioutlinerstyle (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerStyle"]], "xaomnioutlinerstylelist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerStyleList"]], "xaomnioutlinertiffdata (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerTIFFData"]], "xaomnioutlinerwindow (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerWindow"]], "xaomnioutlinerwritabledocumenttype (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerWritableDocumentType"]], "xaomnioutlinerwritabledocumenttypelist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerWritableDocumentTypeList"]], "xaomnioutlinerxsltransform (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerXslTransform"]], "xaomnioutlinerxsltransformlist (class in pyxa.apps.omnioutliner)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerXslTransformList"]], "a (pyxa.apps.omnioutliner.xaomnioutlinergenericcolor property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor.a"]], "add() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.add"]], "add() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.add"]], "add_to() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.add_to"]], "add_to() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.add_to"]], "alignment (pyxa.apps.omnioutliner.xaomnioutlinercolumn property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumn.alignment"]], "alignment (pyxa.apps.omnioutliner.xaomnioutlinerrichtext property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRichText.alignment"]], "alternate_color (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.alternate_color"]], "alternate_color() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.alternate_color"]], "ancestors() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.ancestors"]], "archive (pyxa.apps.omnioutliner.xaomnioutlinergenericcolor property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor.archive"]], "attributes() (pyxa.apps.omnioutliner.xaomnioutlinerstyle method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerStyle.attributes"]], "b (pyxa.apps.omnioutliner.xaomnioutlinergenericcolor property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor.b"]], "background_color (pyxa.apps.omnioutliner.xaomnioutlinercolumn property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumn.background_color"]], "background_color (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.background_color"]], "background_color() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.background_color"]], "baseline_offset (pyxa.apps.omnioutliner.xaomnioutlinerrichtext property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRichText.baseline_offset"]], "bold() (pyxa.apps.omnioutliner.xaomnioutlinerrichtext method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRichText.bold"]], "build_number (pyxa.apps.omnioutliner.xaomnioutlinerapplication property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.build_number"]], "c (pyxa.apps.omnioutliner.xaomnioutlinergenericcolor property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor.c"]], "calendar (pyxa.apps.omnioutliner.xaomnioutlinercolumformat property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumFormat.calendar"]], "canredo (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.canredo"]], "canredo() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.canredo"]], "canundo (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.canundo"]], "canundo() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.canundo"]], "catalog (pyxa.apps.omnioutliner.xaomnioutlinergenericcolor property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor.catalog"]], "cells() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.cells"]], "children() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.children"]], "children() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.children"]], "children_are_sections (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.children_are_sections"]], "children_are_sections (pyxa.apps.omnioutliner.xaomnioutlinerrow property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.children_are_sections"]], "children_are_sections() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.children_are_sections"]], "clear() (pyxa.apps.omnioutliner.xaomnioutlinerattribute method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerAttribute.clear"]], "collapse_all() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.collapse_all"]], "collapse_all() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.collapse_all"]], "column (pyxa.apps.omnioutliner.xaomnioutlinercell property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerCell.column"]], "column_format (pyxa.apps.omnioutliner.xaomnioutlinercolumn property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumn.column_format"]], "column_style (pyxa.apps.omnioutliner.xaomnioutlinercolumn property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumn.column_style"]], "column_title_style (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.column_title_style"]], "column_title_style() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.column_title_style"]], "column_type (pyxa.apps.omnioutliner.xaomnioutlinercolumn property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumn.column_type"]], "columns() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.columns"]], "conduit_setting_domains() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.conduit_setting_domains"]], "container (pyxa.apps.omnioutliner.xaomnioutlinerconduitsettingdomain property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerConduitSettingDomain.container"]], "container (pyxa.apps.omnioutliner.xaomnioutlinerstyle property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerStyle.container"]], "currency (pyxa.apps.omnioutliner.xaomnioutlinercolumformat property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumFormat.currency"]], "date_style (pyxa.apps.omnioutliner.xaomnioutlinercolumformat property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumFormat.date_style"]], "default_value (pyxa.apps.omnioutliner.xaomnioutlinerattribute property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerAttribute.default_value"]], "default_value (pyxa.apps.omnioutliner.xaomnioutlinerpreference property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerPreference.default_value"]], "defining_style (pyxa.apps.omnioutliner.xaomnioutlinerattribute property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerAttribute.defining_style"]], "directory_extension (pyxa.apps.omnioutliner.xaomnioutlinerxsltransform property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerXslTransform.directory_extension"]], "directory_index_file_name (pyxa.apps.omnioutliner.xaomnioutlinerxsltransform property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerXslTransform.directory_index_file_name"]], "display_name (pyxa.apps.omnioutliner.xaomnioutlinerdocumenttype property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentType.display_name"]], "display_name (pyxa.apps.omnioutliner.xaomnioutlinerxsltransform property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerXslTransform.display_name"]], "document (pyxa.apps.omnioutliner.xaomnioutlinercolumn property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumn.document"]], "document (pyxa.apps.omnioutliner.xaomnioutlinerrow property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.document"]], "document (pyxa.apps.omnioutliner.xaomnioutlinerwindow property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerWindow.document"]], "document_types() (pyxa.apps.omnioutliner.xaomnioutlinerapplication method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.document_types"]], "documents() (pyxa.apps.omnioutliner.xaomnioutlinerapplication method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.documents"]], "editable (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.editable"]], "editable() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.editable"]], "embdedded (pyxa.apps.omnioutliner.xaomnioutlinerfileattachment property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerFileAttachment.embdedded"]], "enumerations() (pyxa.apps.omnioutliner.xaomnioutlinercolumn method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumn.enumerations"]], "expand_all() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.expand_all"]], "expand_all() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.expand_all"]], "expanded (pyxa.apps.omnioutliner.xaomnioutlinerrow property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.expanded"]], "export() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.export"]], "external_id (pyxa.apps.omnioutliner.xaomnioutlinerconduitsettingdomain property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerConduitSettingDomain.external_id"]], "file (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.file"]], "file() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.file"]], "file_attachments() (pyxa.apps.omnioutliner.xaomnioutlinerrichtext method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRichText.file_attachments"]], "file_extension (pyxa.apps.omnioutliner.xaomnioutlinerxsltransform property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerXslTransform.file_extension"]], "file_extensions (pyxa.apps.omnioutliner.xaomnioutlinerdocumenttype property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentType.file_extensions"]], "file_name (pyxa.apps.omnioutliner.xaomnioutlinerfileattachment property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerFileAttachment.file_name"]], "folded_editing_enabled (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.folded_editing_enabled"]], "folded_editing_enabled() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.folded_editing_enabled"]], "following_siblings() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.following_siblings"]], "font (pyxa.apps.omnioutliner.xaomnioutlinerstyle property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerStyle.font"]], "format (pyxa.apps.omnioutliner.xaomnioutlinercolumformat property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumFormat.format"]], "format_string (pyxa.apps.omnioutliner.xaomnioutlinercolumn property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumn.format_string"]], "frontmost (pyxa.apps.omnioutliner.xaomnioutlinerapplication property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.frontmost"]], "g (pyxa.apps.omnioutliner.xaomnioutlinergenericcolor property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor.g"]], "get_parameter() (pyxa.apps.omnioutliner.xaomnioutlinerxsltransform method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerXslTransform.get_parameter"]], "group() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.group"]], "group() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.group"]], "h (pyxa.apps.omnioutliner.xaomnioutlinergenericcolor property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor.h"]], "has_local_value (pyxa.apps.omnioutliner.xaomnioutlinerattribute property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerAttribute.has_local_value"]], "has_subtopics (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.has_subtopics"]], "has_subtopics (pyxa.apps.omnioutliner.xaomnioutlinerrow property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.has_subtopics"]], "has_subtopics() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.has_subtopics"]], "hoist() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.hoist"]], "hoist() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.hoist"]], "horizontal_grid_color (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.horizontal_grid_color"]], "horizontal_grid_color() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.horizontal_grid_color"]], "id (pyxa.apps.omnioutliner.xaomnioutlinercell property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerCell.id"]], "id (pyxa.apps.omnioutliner.xaomnioutlinercolumformat property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumFormat.id"]], "id (pyxa.apps.omnioutliner.xaomnioutlinercolumn property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumn.id"]], "id (pyxa.apps.omnioutliner.xaomnioutlinerconduitsettingdomain property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerConduitSettingDomain.id"]], "id (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.id"]], "id (pyxa.apps.omnioutliner.xaomnioutlinerenumeration property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerEnumeration.id"]], "id (pyxa.apps.omnioutliner.xaomnioutlinernamedstyle property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerNamedStyle.id"]], "id (pyxa.apps.omnioutliner.xaomnioutlinerpreference property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerPreference.id"]], "id (pyxa.apps.omnioutliner.xaomnioutlinerrow property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.id"]], "id (pyxa.apps.omnioutliner.xaomnioutlinerxsltransform property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerXslTransform.id"]], "id() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.id"]], "import_file() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.import_file"]], "imported_files_should_store_compressed (pyxa.apps.omnioutliner.xaomnioutlinerapplication property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.imported_files_should_store_compressed"]], "indent() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.indent"]], "index (pyxa.apps.omnioutliner.xaomnioutlinercolumn property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumn.index"]], "index (pyxa.apps.omnioutliner.xaomnioutlinerenumeration property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerEnumeration.index"]], "index (pyxa.apps.omnioutliner.xaomnioutlinerrow property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.index"]], "is_export (pyxa.apps.omnioutliner.xaomnioutlinerxsltransform property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerXslTransform.is_export"]], "is_import (pyxa.apps.omnioutliner.xaomnioutlinerxsltransform property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerXslTransform.is_import"]], "italicize() (pyxa.apps.omnioutliner.xaomnioutlinerrichtext method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRichText.italicize"]], "k (pyxa.apps.omnioutliner.xaomnioutlinergenericcolor property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor.k"]], "leaves() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.leaves"]], "leaves() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.leaves"]], "level (pyxa.apps.omnioutliner.xaomnioutlinerrow property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.level"]], "level_styles() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.level_styles"]], "locale (pyxa.apps.omnioutliner.xaomnioutlinercolumformat property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumFormat.locale"]], "m (pyxa.apps.omnioutliner.xaomnioutlinergenericcolor property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor.m"]], "modified (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.modified"]], "modified() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.modified"]], "move_to() (pyxa.apps.omnioutliner.xaomnioutlinercolumn method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumn.move_to"]], "move_to() (pyxa.apps.omnioutliner.xaomnioutlinerenumeration method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerEnumeration.move_to"]], "name (pyxa.apps.omnioutliner.xaomnioutlinerapplication property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.name"]], "name (pyxa.apps.omnioutliner.xaomnioutlinerattribute property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerAttribute.name"]], "name (pyxa.apps.omnioutliner.xaomnioutlinercell property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerCell.name"]], "name (pyxa.apps.omnioutliner.xaomnioutlinercolumn property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumn.name"]], "name (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.name"]], "name (pyxa.apps.omnioutliner.xaomnioutlinerenumeration property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerEnumeration.name"]], "name (pyxa.apps.omnioutliner.xaomnioutlinergenericcolor property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor.name"]], "name (pyxa.apps.omnioutliner.xaomnioutlinernamedstyle property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerNamedStyle.name"]], "name (pyxa.apps.omnioutliner.xaomnioutlinerrow property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.name"]], "name() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.name"]], "named_styles() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.named_styles"]], "named_styles() (pyxa.apps.omnioutliner.xaomnioutlinerstyle method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerStyle.named_styles"]], "note (pyxa.apps.omnioutliner.xaomnioutlinerrow property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.note"]], "note_cell (pyxa.apps.omnioutliner.xaomnioutlinerrow property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.note_cell"]], "note_column (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.note_column"]], "note_column() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.note_column"]], "note_display (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.note_display"]], "note_display() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.note_display"]], "note_expanded (pyxa.apps.omnioutliner.xaomnioutlinerrow property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.note_expanded"]], "notecolumnid() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.notecolumnid"]], "notescolumnid (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.notescolumnid"]], "outdent() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.outdent"]], "paragraphs() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.paragraphs"]], "parameter_names (pyxa.apps.omnioutliner.xaomnioutlinerxsltransform property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerXslTransform.parameter_names"]], "parent (pyxa.apps.omnioutliner.xaomnioutlinerrow property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.parent"]], "pbcopy() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.pbcopy"]], "pbcopy() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.pbcopy"]], "pbpaste() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.pbpaste"]], "pbpaste() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.pbpaste"]], "png (pyxa.apps.omnioutliner.xaomnioutlinergenericcolor property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor.png"]], "preceding_siblings() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.preceding_siblings"]], "preferences() (pyxa.apps.omnioutliner.xaomnioutlinerapplication method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.preferences"]], "prompt_on_file_format_upgrade (pyxa.apps.omnioutliner.xaomnioutlinerapplication property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.prompt_on_file_format_upgrade"]], "r (pyxa.apps.omnioutliner.xaomnioutlinergenericcolor property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor.r"]], "readable_document_types() (pyxa.apps.omnioutliner.xaomnioutlinerapplication method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.readable_document_types"]], "redo() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.redo"]], "remove() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.remove"]], "remove() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.remove"]], "remove_from() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.remove_from"]], "remove_from() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.remove_from"]], "replace() (pyxa.apps.omnioutliner.xaomnioutlinercell method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerCell.replace"]], "replace() (pyxa.apps.omnioutliner.xaomnioutlinerrichtext method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRichText.replace"]], "result_format (pyxa.apps.omnioutliner.xaomnioutlinerxsltransform property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerXslTransform.result_format"]], "row (pyxa.apps.omnioutliner.xaomnioutlinercell property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerCell.row"]], "rowpath() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.rowpath"]], "rows() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.rows"]], "rows() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.rows"]], "s (pyxa.apps.omnioutliner.xaomnioutlinergenericcolor property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor.s"]], "save_identifier (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.save_identifier"]], "save_identifier() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.save_identifier"]], "save_identifier_enabled (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.save_identifier_enabled"]], "save_identifier_enabled() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.save_identifier_enabled"]], "sections() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.sections"]], "sections() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.sections"]], "select() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.select"]], "selected (pyxa.apps.omnioutliner.xaomnioutlinerrow property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.selected"]], "selected_columns() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.selected_columns"]], "selected_rows() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.selected_rows"]], "selected_rows() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.selected_rows"]], "set_parameter() (pyxa.apps.omnioutliner.xaomnioutlinerxsltransform method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerXslTransform.set_parameter"]], "settings (pyxa.apps.omnioutliner.xaomnioutlinerconduitsettingdomain property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerConduitSettingDomain.settings"]], "sort_order (pyxa.apps.omnioutliner.xaomnioutlinercolumn property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumn.sort_order"]], "sorting_postponed (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.sorting_postponed"]], "sorting_postponed() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.sorting_postponed"]], "source_format (pyxa.apps.omnioutliner.xaomnioutlinerxsltransform property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerXslTransform.source_format"]], "state (pyxa.apps.omnioutliner.xaomnioutlinercell property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerCell.state"]], "state (pyxa.apps.omnioutliner.xaomnioutlinerrow property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.state"]], "status_sort_order (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.status_sort_order"]], "status_sort_order() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.status_sort_order"]], "status_visible (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.status_visible"]], "status_visible() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.status_visible"]], "store_compressed (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.store_compressed"]], "store_compressed() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.store_compressed"]], "style (pyxa.apps.omnioutliner.xaomnioutlinerattribute property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerAttribute.style"]], "style (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.style"]], "style (pyxa.apps.omnioutliner.xaomnioutlinerrichtext property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRichText.style"]], "style (pyxa.apps.omnioutliner.xaomnioutlinerrow property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.style"]], "style() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.style"]], "stylesheet (pyxa.apps.omnioutliner.xaomnioutlinerxsltransform property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerXslTransform.stylesheet"]], "summary_type (pyxa.apps.omnioutliner.xaomnioutlinercolumn property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumn.summary_type"]], "superscript (pyxa.apps.omnioutliner.xaomnioutlinerrichtext property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRichText.superscript"]], "test() (pyxa.apps.omnioutliner.xaomnioutlinerapplication method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.test"]], "text (pyxa.apps.omnioutliner.xaomnioutlinercell property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerCell.text"]], "tiff (pyxa.apps.omnioutliner.xaomnioutlinergenericcolor property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor.tiff"]], "time_style (pyxa.apps.omnioutliner.xaomnioutlinercolumformat property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumFormat.time_style"]], "timezone (pyxa.apps.omnioutliner.xaomnioutlinercolumformat property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumFormat.timezone"]], "title (pyxa.apps.omnioutliner.xaomnioutlinercolumn property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumn.title"]], "title (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.title"]], "title() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.title"]], "topic (pyxa.apps.omnioutliner.xaomnioutlinerrow property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.topic"]], "topic_cell (pyxa.apps.omnioutliner.xaomnioutlinerrow property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.topic_cell"]], "topic_column (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.topic_column"]], "topic_column() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.topic_column"]], "topiccolumnid (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.topiccolumnid"]], "topiccolumnid() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.topiccolumnid"]], "unbold() (pyxa.apps.omnioutliner.xaomnioutlinerrichtext method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRichText.unbold"]], "underline() (pyxa.apps.omnioutliner.xaomnioutlinerrichtext method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRichText.underline"]], "underlined (pyxa.apps.omnioutliner.xaomnioutlinerrichtext property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRichText.underlined"]], "undo() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.undo"]], "undo_enabled (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.undo_enabled"]], "undo_enabled() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.undo_enabled"]], "ungroup() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.ungroup"]], "ungroup() (pyxa.apps.omnioutliner.xaomnioutlinerrow method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.ungroup"]], "unhoist() (pyxa.apps.omnioutliner.xaomnioutlinerdocument method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.unhoist"]], "unitalicize() (pyxa.apps.omnioutliner.xaomnioutlinerrichtext method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRichText.unitalicize"]], "ununderline() (pyxa.apps.omnioutliner.xaomnioutlinerrichtext method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRichText.ununderline"]], "uti (pyxa.apps.omnioutliner.xaomnioutlinerdocumenttype property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentType.uti"]], "v (pyxa.apps.omnioutliner.xaomnioutlinergenericcolor property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor.v"]], "value (pyxa.apps.omnioutliner.xaomnioutlinerattribute property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerAttribute.value"]], "value (pyxa.apps.omnioutliner.xaomnioutlinercell property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerCell.value"]], "value (pyxa.apps.omnioutliner.xaomnioutlinerpreference property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerPreference.value"]], "version (pyxa.apps.omnioutliner.xaomnioutlinerapplication property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.version"]], "verticalgridcolor() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.verticalGridColor"]], "vertical_grid_color (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.vertical_grid_color"]], "visible (pyxa.apps.omnioutliner.xaomnioutlinercolumn property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumn.visible"]], "visible (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.visible"]], "visible (pyxa.apps.omnioutliner.xaomnioutlinerrow property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerRow.visible"]], "visible() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.visible"]], "w (pyxa.apps.omnioutliner.xaomnioutlinergenericcolor property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor.w"]], "width (pyxa.apps.omnioutliner.xaomnioutlinercolumn property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerColumn.width"]], "writable_document_types() (pyxa.apps.omnioutliner.xaomnioutlinerapplication method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.writable_document_types"]], "write_attachments (pyxa.apps.omnioutliner.xaomnioutlinerxsltransform property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerXslTransform.write_attachments"]], "writes_wrapper (pyxa.apps.omnioutliner.xaomnioutlinerdocument property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocument.writes_wrapper"]], "writes_wrapper() (pyxa.apps.omnioutliner.xaomnioutlinerdocumentlist method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerDocumentList.writes_wrapper"]], "x (pyxa.apps.omnioutliner.xaomnioutlinerpoint property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerPoint.x"]], "xsl_transforms() (pyxa.apps.omnioutliner.xaomnioutlinerapplication method)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerApplication.xsl_transforms"]], "y (pyxa.apps.omnioutliner.xaomnioutlinergenericcolor property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerGenericColor.y"]], "y (pyxa.apps.omnioutliner.xaomnioutlinerpoint property)": [[34, "PyXA.apps.OmniOutliner.XAOmniOutlinerPoint.y"]], "epub (pyxa.apps.pages.xapagesapplication.exportformat attribute)": [[35, "PyXA.apps.Pages.XAPagesApplication.ExportFormat.EPUB"]], "microsoft_word (pyxa.apps.pages.xapagesapplication.exportformat attribute)": [[35, "PyXA.apps.Pages.XAPagesApplication.ExportFormat.MICROSOFT_WORD"]], "pages_09 (pyxa.apps.pages.xapagesapplication.exportformat attribute)": [[35, "PyXA.apps.Pages.XAPagesApplication.ExportFormat.PAGES_09"]], "pdf (pyxa.apps.pages.xapagesapplication.exportformat attribute)": [[35, "PyXA.apps.Pages.XAPagesApplication.ExportFormat.PDF"]], "plaintext (pyxa.apps.pages.xapagesapplication.exportformat attribute)": [[35, "PyXA.apps.Pages.XAPagesApplication.ExportFormat.PLAINTEXT"]], "pages (pyxa.apps.pages.xapagesapplication.exportformat attribute)": [[35, "PyXA.apps.Pages.XAPagesApplication.ExportFormat.Pages"]], "pyxa.apps.pages": [[35, "module-PyXA.apps.Pages"]], "rtf (pyxa.apps.pages.xapagesapplication.exportformat attribute)": [[35, "PyXA.apps.Pages.XAPagesApplication.ExportFormat.RTF"]], "xapagesapplication (class in pyxa.apps.pages)": [[35, "PyXA.apps.Pages.XAPagesApplication"]], "xapagesapplication.exportformat (class in pyxa.apps.pages)": [[35, "PyXA.apps.Pages.XAPagesApplication.ExportFormat"]], "xapagescontainer (class in pyxa.apps.pages)": [[35, "PyXA.apps.Pages.XAPagesContainer"]], "xapagescontainerlist (class in pyxa.apps.pages)": [[35, "PyXA.apps.Pages.XAPagesContainerList"]], "xapagesdocument (class in pyxa.apps.pages)": [[35, "PyXA.apps.Pages.XAPagesDocument"]], "xapagesdocumentlist (class in pyxa.apps.pages)": [[35, "PyXA.apps.Pages.XAPagesDocumentList"]], "xapagespage (class in pyxa.apps.pages)": [[35, "PyXA.apps.Pages.XAPagesPage"]], "xapagespagelist (class in pyxa.apps.pages)": [[35, "PyXA.apps.Pages.XAPagesPageList"]], "xapagesplaceholdertext (class in pyxa.apps.pages)": [[35, "PyXA.apps.Pages.XAPagesPlaceholderText"]], "xapagesplaceholdertextlist (class in pyxa.apps.pages)": [[35, "PyXA.apps.Pages.XAPagesPlaceholderTextList"]], "xapagessection (class in pyxa.apps.pages)": [[35, "PyXA.apps.Pages.XAPagesSection"]], "xapagessectionlist (class in pyxa.apps.pages)": [[35, "PyXA.apps.Pages.XAPagesSectionList"]], "xapagestemplate (class in pyxa.apps.pages)": [[35, "PyXA.apps.Pages.XAPagesTemplate"]], "xapagestemplatelist (class in pyxa.apps.pages)": [[35, "PyXA.apps.Pages.XAPagesTemplateList"]], "xapageswindow (class in pyxa.apps.pages)": [[35, "PyXA.apps.Pages.XAPagesWindow"]], "add_image() (pyxa.apps.pages.xapagespage method)": [[35, "PyXA.apps.Pages.XAPagesPage.add_image"]], "audio_clips() (pyxa.apps.pages.xapagesdocument method)": [[35, "PyXA.apps.Pages.XAPagesDocument.audio_clips"]], "audio_clips() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.audio_clips"]], "audio_clips() (pyxa.apps.pages.xapagessection method)": [[35, "PyXA.apps.Pages.XAPagesSection.audio_clips"]], "audio_clips() (pyxa.apps.pages.xapagessectionlist method)": [[35, "PyXA.apps.Pages.XAPagesSectionList.audio_clips"]], "body_text (pyxa.apps.pages.xapagesdocument property)": [[35, "PyXA.apps.Pages.XAPagesDocument.body_text"]], "body_text (pyxa.apps.pages.xapagespage property)": [[35, "PyXA.apps.Pages.XAPagesPage.body_text"]], "body_text (pyxa.apps.pages.xapagessection property)": [[35, "PyXA.apps.Pages.XAPagesSection.body_text"]], "body_text() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.body_text"]], "body_text() (pyxa.apps.pages.xapagespagelist method)": [[35, "PyXA.apps.Pages.XAPagesPageList.body_text"]], "body_text() (pyxa.apps.pages.xapagessectionlist method)": [[35, "PyXA.apps.Pages.XAPagesSectionList.body_text"]], "by_body_text() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.by_body_text"]], "by_body_text() (pyxa.apps.pages.xapagespagelist method)": [[35, "PyXA.apps.Pages.XAPagesPageList.by_body_text"]], "by_body_text() (pyxa.apps.pages.xapagessectionlist method)": [[35, "PyXA.apps.Pages.XAPagesSectionList.by_body_text"]], "by_current_page() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.by_current_page"]], "by_document_body() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.by_document_body"]], "by_document_template() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.by_document_template"]], "by_facing_pages() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.by_facing_pages"]], "by_file() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.by_file"]], "by_id() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.by_id"]], "by_id() (pyxa.apps.pages.xapagestemplatelist method)": [[35, "PyXA.apps.Pages.XAPagesTemplateList.by_id"]], "by_modified() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.by_modified"]], "by_name() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.by_name"]], "by_name() (pyxa.apps.pages.xapagestemplatelist method)": [[35, "PyXA.apps.Pages.XAPagesTemplateList.by_name"]], "by_properties() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.by_properties"]], "by_properties() (pyxa.apps.pages.xapagespagelist method)": [[35, "PyXA.apps.Pages.XAPagesPageList.by_properties"]], "by_tag() (pyxa.apps.pages.xapagesplaceholdertextlist method)": [[35, "PyXA.apps.Pages.XAPagesPlaceholderTextList.by_tag"]], "charts() (pyxa.apps.pages.xapagesdocument method)": [[35, "PyXA.apps.Pages.XAPagesDocument.charts"]], "charts() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.charts"]], "charts() (pyxa.apps.pages.xapagessection method)": [[35, "PyXA.apps.Pages.XAPagesSection.charts"]], "charts() (pyxa.apps.pages.xapagessectionlist method)": [[35, "PyXA.apps.Pages.XAPagesSectionList.charts"]], "current_page (pyxa.apps.pages.xapagesdocument property)": [[35, "PyXA.apps.Pages.XAPagesDocument.current_page"]], "current_page() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.current_page"]], "document (pyxa.apps.pages.xapageswindow property)": [[35, "PyXA.apps.Pages.XAPagesWindow.document"]], "document_body (pyxa.apps.pages.xapagesdocument property)": [[35, "PyXA.apps.Pages.XAPagesDocument.document_body"]], "document_body() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.document_body"]], "document_template (pyxa.apps.pages.xapagesdocument property)": [[35, "PyXA.apps.Pages.XAPagesDocument.document_template"]], "document_template() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.document_template"]], "documents() (pyxa.apps.pages.xapagesapplication method)": [[35, "PyXA.apps.Pages.XAPagesApplication.documents"]], "export() (pyxa.apps.pages.xapagesdocument method)": [[35, "PyXA.apps.Pages.XAPagesDocument.export"]], "facing_pages (pyxa.apps.pages.xapagesdocument property)": [[35, "PyXA.apps.Pages.XAPagesDocument.facing_pages"]], "facing_pages() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.facing_pages"]], "file() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.file"]], "groups() (pyxa.apps.pages.xapagesdocument method)": [[35, "PyXA.apps.Pages.XAPagesDocument.groups"]], "groups() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.groups"]], "groups() (pyxa.apps.pages.xapagessection method)": [[35, "PyXA.apps.Pages.XAPagesSection.groups"]], "groups() (pyxa.apps.pages.xapagessectionlist method)": [[35, "PyXA.apps.Pages.XAPagesSectionList.groups"]], "id (pyxa.apps.pages.xapagestemplate property)": [[35, "PyXA.apps.Pages.XAPagesTemplate.id"]], "id() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.id"]], "id() (pyxa.apps.pages.xapagestemplatelist method)": [[35, "PyXA.apps.Pages.XAPagesTemplateList.id"]], "images() (pyxa.apps.pages.xapagesdocument method)": [[35, "PyXA.apps.Pages.XAPagesDocument.images"]], "images() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.images"]], "images() (pyxa.apps.pages.xapagessection method)": [[35, "PyXA.apps.Pages.XAPagesSection.images"]], "images() (pyxa.apps.pages.xapagessectionlist method)": [[35, "PyXA.apps.Pages.XAPagesSectionList.images"]], "iwork_items() (pyxa.apps.pages.xapagesdocument method)": [[35, "PyXA.apps.Pages.XAPagesDocument.iwork_items"]], "iwork_items() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.iwork_items"]], "iwork_items() (pyxa.apps.pages.xapagessection method)": [[35, "PyXA.apps.Pages.XAPagesSection.iwork_items"]], "iwork_items() (pyxa.apps.pages.xapagessectionlist method)": [[35, "PyXA.apps.Pages.XAPagesSectionList.iwork_items"]], "lines() (pyxa.apps.pages.xapagesdocument method)": [[35, "PyXA.apps.Pages.XAPagesDocument.lines"]], "lines() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.lines"]], "lines() (pyxa.apps.pages.xapagessection method)": [[35, "PyXA.apps.Pages.XAPagesSection.lines"]], "lines() (pyxa.apps.pages.xapagessectionlist method)": [[35, "PyXA.apps.Pages.XAPagesSectionList.lines"]], "make() (pyxa.apps.pages.xapagesapplication method)": [[35, "PyXA.apps.Pages.XAPagesApplication.make"]], "modified() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.modified"]], "movies() (pyxa.apps.pages.xapagesdocument method)": [[35, "PyXA.apps.Pages.XAPagesDocument.movies"]], "movies() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.movies"]], "movies() (pyxa.apps.pages.xapagessection method)": [[35, "PyXA.apps.Pages.XAPagesSection.movies"]], "movies() (pyxa.apps.pages.xapagessectionlist method)": [[35, "PyXA.apps.Pages.XAPagesSectionList.movies"]], "name (pyxa.apps.pages.xapagestemplate property)": [[35, "PyXA.apps.Pages.XAPagesTemplate.name"]], "name() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.name"]], "name() (pyxa.apps.pages.xapagestemplatelist method)": [[35, "PyXA.apps.Pages.XAPagesTemplateList.name"]], "new_document() (pyxa.apps.pages.xapagesapplication method)": [[35, "PyXA.apps.Pages.XAPagesApplication.new_document"]], "new_page() (pyxa.apps.pages.xapagesdocument method)": [[35, "PyXA.apps.Pages.XAPagesDocument.new_page"]], "pages() (pyxa.apps.pages.xapagesdocument method)": [[35, "PyXA.apps.Pages.XAPagesDocument.pages"]], "pages() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.pages"]], "pages() (pyxa.apps.pages.xapagessection method)": [[35, "PyXA.apps.Pages.XAPagesSection.pages"]], "pages() (pyxa.apps.pages.xapagessectionlist method)": [[35, "PyXA.apps.Pages.XAPagesSectionList.pages"]], "placeholder_texts() (pyxa.apps.pages.xapagesdocument method)": [[35, "PyXA.apps.Pages.XAPagesDocument.placeholder_texts"]], "placeholder_texts() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.placeholder_texts"]], "properties (pyxa.apps.pages.xapagesdocument property)": [[35, "PyXA.apps.Pages.XAPagesDocument.properties"]], "properties (pyxa.apps.pages.xapagespage property)": [[35, "PyXA.apps.Pages.XAPagesPage.properties"]], "properties() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.properties"]], "properties() (pyxa.apps.pages.xapagespagelist method)": [[35, "PyXA.apps.Pages.XAPagesPageList.properties"]], "sections() (pyxa.apps.pages.xapagesdocument method)": [[35, "PyXA.apps.Pages.XAPagesDocument.sections"]], "sections() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.sections"]], "shapes() (pyxa.apps.pages.xapagesdocument method)": [[35, "PyXA.apps.Pages.XAPagesDocument.shapes"]], "shapes() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.shapes"]], "shapes() (pyxa.apps.pages.xapagessection method)": [[35, "PyXA.apps.Pages.XAPagesSection.shapes"]], "shapes() (pyxa.apps.pages.xapagessectionlist method)": [[35, "PyXA.apps.Pages.XAPagesSectionList.shapes"]], "tables() (pyxa.apps.pages.xapagesdocument method)": [[35, "PyXA.apps.Pages.XAPagesDocument.tables"]], "tables() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.tables"]], "tables() (pyxa.apps.pages.xapagessection method)": [[35, "PyXA.apps.Pages.XAPagesSection.tables"]], "tables() (pyxa.apps.pages.xapagessectionlist method)": [[35, "PyXA.apps.Pages.XAPagesSectionList.tables"]], "tag (pyxa.apps.pages.xapagesplaceholdertext property)": [[35, "PyXA.apps.Pages.XAPagesPlaceholderText.tag"]], "tag() (pyxa.apps.pages.xapagesplaceholdertextlist method)": [[35, "PyXA.apps.Pages.XAPagesPlaceholderTextList.tag"]], "templates() (pyxa.apps.pages.xapagesapplication method)": [[35, "PyXA.apps.Pages.XAPagesApplication.templates"]], "text_items() (pyxa.apps.pages.xapagesdocument method)": [[35, "PyXA.apps.Pages.XAPagesDocument.text_items"]], "text_items() (pyxa.apps.pages.xapagesdocumentlist method)": [[35, "PyXA.apps.Pages.XAPagesDocumentList.text_items"]], "text_items() (pyxa.apps.pages.xapagessection method)": [[35, "PyXA.apps.Pages.XAPagesSection.text_items"]], "text_items() (pyxa.apps.pages.xapagessectionlist method)": [[35, "PyXA.apps.Pages.XAPagesSectionList.text_items"]], "pyxa.apps.photosapp": [[36, "module-PyXA.apps.PhotosApp"]], "xaphotosalbum (class in pyxa.apps.photosapp)": [[36, "PyXA.apps.PhotosApp.XAPhotosAlbum"]], "xaphotosalbumlist (class in pyxa.apps.photosapp)": [[36, "PyXA.apps.PhotosApp.XAPhotosAlbumList"]], "xaphotosapplication (class in pyxa.apps.photosapp)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication"]], "xaphotoscontainer (class in pyxa.apps.photosapp)": [[36, "PyXA.apps.PhotosApp.XAPhotosContainer"]], "xaphotoscontainerlist (class in pyxa.apps.photosapp)": [[36, "PyXA.apps.PhotosApp.XAPhotosContainerList"]], "xaphotosfolder (class in pyxa.apps.photosapp)": [[36, "PyXA.apps.PhotosApp.XAPhotosFolder"]], "xaphotosfolderlist (class in pyxa.apps.photosapp)": [[36, "PyXA.apps.PhotosApp.XAPhotosFolderList"]], "xaphotosmediaitem (class in pyxa.apps.photosapp)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem"]], "xaphotosmediaitemlist (class in pyxa.apps.photosapp)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList"]], "add() (pyxa.apps.photosapp.xaphotosapplication method)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.add"]], "albums() (pyxa.apps.photosapp.xaphotosapplication method)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.albums"]], "albums() (pyxa.apps.photosapp.xaphotosfolder method)": [[36, "PyXA.apps.PhotosApp.XAPhotosFolder.albums"]], "altitude (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.altitude"]], "altitude() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.altitude"]], "by_altitude() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.by_altitude"]], "by_date() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.by_date"]], "by_favorite() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.by_favorite"]], "by_filename() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.by_filename"]], "by_height() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.by_height"]], "by_id() (pyxa.apps.photosapp.xaphotoscontainerlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosContainerList.by_id"]], "by_id() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.by_id"]], "by_keywords() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.by_keywords"]], "by_location() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.by_location"]], "by_name() (pyxa.apps.photosapp.xaphotoscontainerlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosContainerList.by_name"]], "by_object_description() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.by_object_description"]], "by_parent() (pyxa.apps.photosapp.xaphotoscontainerlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosContainerList.by_parent"]], "by_properties() (pyxa.apps.photosapp.xaphotoscontainerlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosContainerList.by_properties"]], "by_properties() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.by_properties"]], "by_size() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.by_size"]], "by_title() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.by_title"]], "by_width() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.by_width"]], "containers() (pyxa.apps.photosapp.xaphotosapplication method)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.containers"]], "containers() (pyxa.apps.photosapp.xaphotosfolder method)": [[36, "PyXA.apps.PhotosApp.XAPhotosFolder.containers"]], "creation_date (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.creation_date"]], "creation_date() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.creation_date"]], "duplicate() (pyxa.apps.photosapp.xaphotosmediaitem method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.duplicate"]], "duration (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.duration"]], "duration() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.duration"]], "export() (pyxa.apps.photosapp.xaphotosapplication method)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.export"]], "favorite (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.favorite"]], "favorite() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.favorite"]], "favorites_album (pyxa.apps.photosapp.xaphotosapplication property)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.favorites_album"]], "file_path (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.file_path"]], "file_path() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.file_path"]], "filename (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.filename"]], "filename() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.filename"]], "folders() (pyxa.apps.photosapp.xaphotosapplication method)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.folders"]], "folders() (pyxa.apps.photosapp.xaphotosfolder method)": [[36, "PyXA.apps.PhotosApp.XAPhotosFolder.folders"]], "frontmost (pyxa.apps.photosapp.xaphotosapplication property)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.frontmost"]], "get_clipboard_representation() (pyxa.apps.photosapp.xaphotoscontainer method)": [[36, "PyXA.apps.PhotosApp.XAPhotosContainer.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.photosapp.xaphotoscontainerlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosContainerList.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.photosapp.xaphotosmediaitem method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.get_clipboard_representation"]], "get_image_representation() (pyxa.apps.photosapp.xaphotosmediaitem method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.get_image_representation"]], "height (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.height"]], "height() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.height"]], "id (pyxa.apps.photosapp.xaphotoscontainer property)": [[36, "PyXA.apps.PhotosApp.XAPhotosContainer.id"]], "id (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.id"]], "id() (pyxa.apps.photosapp.xaphotoscontainerlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosContainerList.id"]], "id() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.id"]], "import_files() (pyxa.apps.photosapp.xaphotosapplication method)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.import_files"]], "is_burst (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.is_burst"]], "is_burst() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.is_burst"]], "is_hidden (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.is_hidden"]], "is_hidden() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.is_hidden"]], "is_photo (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.is_photo"]], "is_photo() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.is_photo"]], "is_video (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.is_video"]], "is_video() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.is_video"]], "keywords (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.keywords"]], "keywords() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.keywords"]], "library_path (pyxa.apps.photosapp.xaphotosapplication property)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.library_path"]], "location (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.location"]], "location() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.location"]], "make() (pyxa.apps.photosapp.xaphotosapplication method)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.make"]], "media_items() (pyxa.apps.photosapp.xaphotosalbum method)": [[36, "PyXA.apps.PhotosApp.XAPhotosAlbum.media_items"]], "media_items() (pyxa.apps.photosapp.xaphotosapplication method)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.media_items"]], "modification_date (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.modification_date"]], "modification_date() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.modification_date"]], "name (pyxa.apps.photosapp.xaphotosapplication property)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.name"]], "name (pyxa.apps.photosapp.xaphotoscontainer property)": [[36, "PyXA.apps.PhotosApp.XAPhotosContainer.name"]], "name (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.name"]], "name() (pyxa.apps.photosapp.xaphotoscontainerlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosContainerList.name"]], "next_slide() (pyxa.apps.photosapp.xaphotosapplication method)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.next_slide"]], "object_description (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.object_description"]], "object_description() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.object_description"]], "open() (pyxa.apps.photosapp.xaphotosapplication method)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.open"]], "parent (pyxa.apps.photosapp.xaphotoscontainer property)": [[36, "PyXA.apps.PhotosApp.XAPhotosContainer.parent"]], "parent() (pyxa.apps.photosapp.xaphotoscontainerlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosContainerList.parent"]], "pause_slideshow() (pyxa.apps.photosapp.xaphotosapplication method)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.pause_slideshow"]], "previous_slide() (pyxa.apps.photosapp.xaphotosapplication method)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.previous_slide"]], "properties (pyxa.apps.photosapp.xaphotosapplication property)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.properties"]], "properties (pyxa.apps.photosapp.xaphotoscontainer property)": [[36, "PyXA.apps.PhotosApp.XAPhotosContainer.properties"]], "properties (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.properties"]], "properties() (pyxa.apps.photosapp.xaphotoscontainerlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosContainerList.properties"]], "properties() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.properties"]], "push() (pyxa.apps.photosapp.xaphotosalbumlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosAlbumList.push"]], "push() (pyxa.apps.photosapp.xaphotosfolderlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosFolderList.push"]], "recently_deleted_album (pyxa.apps.photosapp.xaphotosapplication property)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.recently_deleted_album"]], "resume_slideshow() (pyxa.apps.photosapp.xaphotosapplication method)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.resume_slideshow"]], "reveal_in_finder() (pyxa.apps.photosapp.xaphotosmediaitem method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.reveal_in_finder"]], "search() (pyxa.apps.photosapp.xaphotosapplication method)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.search"]], "selection (pyxa.apps.photosapp.xaphotosapplication property)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.selection"]], "show_in_preview() (pyxa.apps.photosapp.xaphotosmediaitem method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.show_in_preview"]], "size (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.size"]], "size() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.size"]], "slideshow_running (pyxa.apps.photosapp.xaphotosapplication property)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.slideshow_running"]], "spotlight() (pyxa.apps.photosapp.xaphotoscontainer method)": [[36, "PyXA.apps.PhotosApp.XAPhotosContainer.spotlight"]], "spotlight() (pyxa.apps.photosapp.xaphotosmediaitem method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.spotlight"]], "start_slideshow() (pyxa.apps.photosapp.xaphotosapplication method)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.start_slideshow"]], "stop_slideshow() (pyxa.apps.photosapp.xaphotosapplication method)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.stop_slideshow"]], "title() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.title"]], "version (pyxa.apps.photosapp.xaphotosapplication property)": [[36, "PyXA.apps.PhotosApp.XAPhotosApplication.version"]], "width (pyxa.apps.photosapp.xaphotosmediaitem property)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItem.width"]], "width() (pyxa.apps.photosapp.xaphotosmediaitemlist method)": [[36, "PyXA.apps.PhotosApp.XAPhotosMediaItemList.width"]], "pyxa.apps.preview": [[37, "module-PyXA.apps.Preview"]], "xapreviewapplication (class in pyxa.apps.preview)": [[37, "PyXA.apps.Preview.XAPreviewApplication"]], "xapreviewdocument (class in pyxa.apps.preview)": [[37, "PyXA.apps.Preview.XAPreviewDocument"]], "xapreviewdocumentlist (class in pyxa.apps.preview)": [[37, "PyXA.apps.Preview.XAPreviewDocumentList"]], "xapreviewwindow (class in pyxa.apps.preview)": [[37, "PyXA.apps.Preview.XAPreviewWindow"]], "by_modified() (pyxa.apps.preview.xapreviewdocumentlist method)": [[37, "PyXA.apps.Preview.XAPreviewDocumentList.by_modified"]], "by_name() (pyxa.apps.preview.xapreviewdocumentlist method)": [[37, "PyXA.apps.Preview.XAPreviewDocumentList.by_name"]], "by_path() (pyxa.apps.preview.xapreviewdocumentlist method)": [[37, "PyXA.apps.Preview.XAPreviewDocumentList.by_path"]], "by_properties() (pyxa.apps.preview.xapreviewdocumentlist method)": [[37, "PyXA.apps.Preview.XAPreviewDocumentList.by_properties"]], "document (pyxa.apps.preview.xapreviewwindow property)": [[37, "PyXA.apps.Preview.XAPreviewWindow.document"]], "documents() (pyxa.apps.preview.xapreviewapplication method)": [[37, "PyXA.apps.Preview.XAPreviewApplication.documents"]], "floating (pyxa.apps.preview.xapreviewwindow property)": [[37, "PyXA.apps.Preview.XAPreviewWindow.floating"]], "frontmost (pyxa.apps.preview.xapreviewapplication property)": [[37, "PyXA.apps.Preview.XAPreviewApplication.frontmost"]], "get_clipboard_representation() (pyxa.apps.preview.xapreviewdocument method)": [[37, "PyXA.apps.Preview.XAPreviewDocument.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.preview.xapreviewdocumentlist method)": [[37, "PyXA.apps.Preview.XAPreviewDocumentList.get_clipboard_representation"]], "modal (pyxa.apps.preview.xapreviewwindow property)": [[37, "PyXA.apps.Preview.XAPreviewWindow.modal"]], "modified (pyxa.apps.preview.xapreviewdocument property)": [[37, "PyXA.apps.Preview.XAPreviewDocument.modified"]], "modified() (pyxa.apps.preview.xapreviewdocumentlist method)": [[37, "PyXA.apps.Preview.XAPreviewDocumentList.modified"]], "name (pyxa.apps.preview.xapreviewapplication property)": [[37, "PyXA.apps.Preview.XAPreviewApplication.name"]], "name (pyxa.apps.preview.xapreviewdocument property)": [[37, "PyXA.apps.Preview.XAPreviewDocument.name"]], "name() (pyxa.apps.preview.xapreviewdocumentlist method)": [[37, "PyXA.apps.Preview.XAPreviewDocumentList.name"]], "path (pyxa.apps.preview.xapreviewdocument property)": [[37, "PyXA.apps.Preview.XAPreviewDocument.path"]], "path() (pyxa.apps.preview.xapreviewdocumentlist method)": [[37, "PyXA.apps.Preview.XAPreviewDocumentList.path"]], "print() (pyxa.apps.preview.xapreviewapplication method)": [[37, "PyXA.apps.Preview.XAPreviewApplication.print"]], "print() (pyxa.apps.preview.xapreviewdocument method)": [[37, "PyXA.apps.Preview.XAPreviewDocument.print"]], "properties (pyxa.apps.preview.xapreviewdocument property)": [[37, "PyXA.apps.Preview.XAPreviewDocument.properties"]], "properties (pyxa.apps.preview.xapreviewwindow property)": [[37, "PyXA.apps.Preview.XAPreviewWindow.properties"]], "properties() (pyxa.apps.preview.xapreviewdocumentlist method)": [[37, "PyXA.apps.Preview.XAPreviewDocumentList.properties"]], "save() (pyxa.apps.preview.xapreviewdocument method)": [[37, "PyXA.apps.Preview.XAPreviewDocument.save"]], "titled (pyxa.apps.preview.xapreviewwindow property)": [[37, "PyXA.apps.Preview.XAPreviewWindow.titled"]], "version (pyxa.apps.preview.xapreviewapplication property)": [[37, "PyXA.apps.Preview.XAPreviewApplication.version"]], "pyxa.apps.quicktimeplayer": [[38, "module-PyXA.apps.QuickTimePlayer"]], "xaquicktimeapplication (class in pyxa.apps.quicktimeplayer)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeApplication"]], "xaquicktimeaudiocompressionpreset (class in pyxa.apps.quicktimeplayer)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioCompressionPreset"]], "xaquicktimeaudiocompressionpresetlist (class in pyxa.apps.quicktimeplayer)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioCompressionPresetList"]], "xaquicktimeaudiorecordingdevice (class in pyxa.apps.quicktimeplayer)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioRecordingDevice"]], "xaquicktimeaudiorecordingdevicelist (class in pyxa.apps.quicktimeplayer)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioRecordingDeviceList"]], "xaquicktimedocument (class in pyxa.apps.quicktimeplayer)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument"]], "xaquicktimedocumentlist (class in pyxa.apps.quicktimeplayer)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList"]], "xaquicktimemoviecompressionpreset (class in pyxa.apps.quicktimeplayer)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeMovieCompressionPreset"]], "xaquicktimemoviecompressionpresetlist (class in pyxa.apps.quicktimeplayer)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeMovieCompressionPresetList"]], "xaquicktimescreencompressionpreset (class in pyxa.apps.quicktimeplayer)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeScreenCompressionPreset"]], "xaquicktimescreencompressionpresetlist (class in pyxa.apps.quicktimeplayer)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeScreenCompressionPresetList"]], "xaquicktimevideorecordingdevice (class in pyxa.apps.quicktimeplayer)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeVideoRecordingDevice"]], "xaquicktimevideorecordingdevicelist (class in pyxa.apps.quicktimeplayer)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeVideoRecordingDeviceList"]], "xaquicktimewindow (class in pyxa.apps.quicktimeplayer)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeWindow"]], "audio_compression_presets() (pyxa.apps.quicktimeplayer.xaquicktimeapplication method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeApplication.audio_compression_presets"]], "audio_recording_devices() (pyxa.apps.quicktimeplayer.xaquicktimeapplication method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeApplication.audio_recording_devices"]], "audio_volume (pyxa.apps.quicktimeplayer.xaquicktimedocument property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.audio_volume"]], "audio_volume() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.audio_volume"]], "by_audio_volume() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.by_audio_volume"]], "by_current_audio_compression() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.by_current_audio_compression"]], "by_current_camera() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.by_current_camera"]], "by_current_microphone() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.by_current_microphone"]], "by_current_movie_compression() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.by_current_movie_compression"]], "by_current_screen_compression() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.by_current_screen_compression"]], "by_current_time() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.by_current_time"]], "by_data_rate() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.by_data_rate"]], "by_data_size() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.by_data_size"]], "by_duration() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.by_duration"]], "by_looping() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.by_looping"]], "by_muted() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.by_muted"]], "by_natural_dimensions() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.by_natural_dimensions"]], "by_playing() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.by_playing"]], "by_presenting() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.by_presenting"]], "by_properties() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.by_properties"]], "by_rate() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.by_rate"]], "current_audio_compression (pyxa.apps.quicktimeplayer.xaquicktimedocument property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.current_audio_compression"]], "current_audio_compression() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.current_audio_compression"]], "current_camera (pyxa.apps.quicktimeplayer.xaquicktimedocument property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.current_camera"]], "current_camera() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.current_camera"]], "current_document (pyxa.apps.quicktimeplayer.xaquicktimeapplication property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeApplication.current_document"]], "current_microphone (pyxa.apps.quicktimeplayer.xaquicktimedocument property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.current_microphone"]], "current_microphone() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.current_microphone"]], "current_movie_compression (pyxa.apps.quicktimeplayer.xaquicktimedocument property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.current_movie_compression"]], "current_movie_compression() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.current_movie_compression"]], "current_screen_compression (pyxa.apps.quicktimeplayer.xaquicktimedocument property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.current_screen_compression"]], "current_screen_compression() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.current_screen_compression"]], "current_time (pyxa.apps.quicktimeplayer.xaquicktimedocument property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.current_time"]], "current_time() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.current_time"]], "data_rate (pyxa.apps.quicktimeplayer.xaquicktimedocument property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.data_rate"]], "data_rate() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.data_rate"]], "data_size (pyxa.apps.quicktimeplayer.xaquicktimedocument property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.data_size"]], "data_size() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.data_size"]], "document (pyxa.apps.quicktimeplayer.xaquicktimewindow property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeWindow.document"]], "documents() (pyxa.apps.quicktimeplayer.xaquicktimeapplication method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeApplication.documents"]], "duration (pyxa.apps.quicktimeplayer.xaquicktimedocument property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.duration"]], "duration() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.duration"]], "frontmost (pyxa.apps.quicktimeplayer.xaquicktimeapplication property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeApplication.frontmost"]], "id (pyxa.apps.quicktimeplayer.xaquicktimeaudiocompressionpreset property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioCompressionPreset.id"]], "id (pyxa.apps.quicktimeplayer.xaquicktimeaudiorecordingdevice property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioRecordingDevice.id"]], "id (pyxa.apps.quicktimeplayer.xaquicktimemoviecompressionpreset property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeMovieCompressionPreset.id"]], "id (pyxa.apps.quicktimeplayer.xaquicktimescreencompressionpreset property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeScreenCompressionPreset.id"]], "id (pyxa.apps.quicktimeplayer.xaquicktimevideorecordingdevice property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeVideoRecordingDevice.id"]], "id() (pyxa.apps.quicktimeplayer.xaquicktimeaudiocompressionpresetlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioCompressionPresetList.id"]], "id() (pyxa.apps.quicktimeplayer.xaquicktimeaudiorecordingdevicelist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioRecordingDeviceList.id"]], "id() (pyxa.apps.quicktimeplayer.xaquicktimemoviecompressionpresetlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeMovieCompressionPresetList.id"]], "id() (pyxa.apps.quicktimeplayer.xaquicktimescreencompressionpresetlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeScreenCompressionPresetList.id"]], "id() (pyxa.apps.quicktimeplayer.xaquicktimevideorecordingdevicelist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeVideoRecordingDeviceList.id"]], "looping (pyxa.apps.quicktimeplayer.xaquicktimedocument property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.looping"]], "looping() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.looping"]], "movie_compression_presets() (pyxa.apps.quicktimeplayer.xaquicktimeapplication method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeApplication.movie_compression_presets"]], "muted (pyxa.apps.quicktimeplayer.xaquicktimedocument property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.muted"]], "muted() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.muted"]], "name (pyxa.apps.quicktimeplayer.xaquicktimeapplication property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeApplication.name"]], "name (pyxa.apps.quicktimeplayer.xaquicktimeaudiocompressionpreset property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioCompressionPreset.name"]], "name (pyxa.apps.quicktimeplayer.xaquicktimeaudiorecordingdevice property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioRecordingDevice.name"]], "name (pyxa.apps.quicktimeplayer.xaquicktimemoviecompressionpreset property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeMovieCompressionPreset.name"]], "name (pyxa.apps.quicktimeplayer.xaquicktimescreencompressionpreset property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeScreenCompressionPreset.name"]], "name (pyxa.apps.quicktimeplayer.xaquicktimevideorecordingdevice property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeVideoRecordingDevice.name"]], "name() (pyxa.apps.quicktimeplayer.xaquicktimeaudiocompressionpresetlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioCompressionPresetList.name"]], "name() (pyxa.apps.quicktimeplayer.xaquicktimeaudiorecordingdevicelist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioRecordingDeviceList.name"]], "name() (pyxa.apps.quicktimeplayer.xaquicktimemoviecompressionpresetlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeMovieCompressionPresetList.name"]], "name() (pyxa.apps.quicktimeplayer.xaquicktimescreencompressionpresetlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeScreenCompressionPresetList.name"]], "name() (pyxa.apps.quicktimeplayer.xaquicktimevideorecordingdevicelist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeVideoRecordingDeviceList.name"]], "natural_dimensions (pyxa.apps.quicktimeplayer.xaquicktimedocument property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.natural_dimensions"]], "natural_dimensions() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.natural_dimensions"]], "new_audio_recording() (pyxa.apps.quicktimeplayer.xaquicktimeapplication method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeApplication.new_audio_recording"]], "new_movie_recording() (pyxa.apps.quicktimeplayer.xaquicktimeapplication method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeApplication.new_movie_recording"]], "new_screen_recording() (pyxa.apps.quicktimeplayer.xaquicktimeapplication method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeApplication.new_screen_recording"]], "open() (pyxa.apps.quicktimeplayer.xaquicktimeapplication method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeApplication.open"]], "open_url() (pyxa.apps.quicktimeplayer.xaquicktimeapplication method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeApplication.open_url"]], "pause() (pyxa.apps.quicktimeplayer.xaquicktimedocument method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.pause"]], "play() (pyxa.apps.quicktimeplayer.xaquicktimedocument method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.play"]], "playing (pyxa.apps.quicktimeplayer.xaquicktimedocument property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.playing"]], "playing() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.playing"]], "present() (pyxa.apps.quicktimeplayer.xaquicktimedocument method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.present"]], "presenting (pyxa.apps.quicktimeplayer.xaquicktimedocument property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.presenting"]], "presenting() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.presenting"]], "properties (pyxa.apps.quicktimeplayer.xaquicktimeapplication property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeApplication.properties"]], "properties (pyxa.apps.quicktimeplayer.xaquicktimeaudiocompressionpreset property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioCompressionPreset.properties"]], "properties (pyxa.apps.quicktimeplayer.xaquicktimeaudiorecordingdevice property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioRecordingDevice.properties"]], "properties (pyxa.apps.quicktimeplayer.xaquicktimedocument property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.properties"]], "properties (pyxa.apps.quicktimeplayer.xaquicktimemoviecompressionpreset property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeMovieCompressionPreset.properties"]], "properties (pyxa.apps.quicktimeplayer.xaquicktimescreencompressionpreset property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeScreenCompressionPreset.properties"]], "properties (pyxa.apps.quicktimeplayer.xaquicktimevideorecordingdevice property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeVideoRecordingDevice.properties"]], "properties (pyxa.apps.quicktimeplayer.xaquicktimewindow property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeWindow.properties"]], "properties() (pyxa.apps.quicktimeplayer.xaquicktimeaudiocompressionpresetlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioCompressionPresetList.properties"]], "properties() (pyxa.apps.quicktimeplayer.xaquicktimeaudiorecordingdevicelist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeAudioRecordingDeviceList.properties"]], "properties() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.properties"]], "properties() (pyxa.apps.quicktimeplayer.xaquicktimemoviecompressionpresetlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeMovieCompressionPresetList.properties"]], "properties() (pyxa.apps.quicktimeplayer.xaquicktimescreencompressionpresetlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeScreenCompressionPresetList.properties"]], "properties() (pyxa.apps.quicktimeplayer.xaquicktimevideorecordingdevicelist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeVideoRecordingDeviceList.properties"]], "rate (pyxa.apps.quicktimeplayer.xaquicktimedocument property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.rate"]], "rate() (pyxa.apps.quicktimeplayer.xaquicktimedocumentlist method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocumentList.rate"]], "resume() (pyxa.apps.quicktimeplayer.xaquicktimedocument method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.resume"]], "screen_compression_presets() (pyxa.apps.quicktimeplayer.xaquicktimeapplication method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeApplication.screen_compression_presets"]], "set_property() (pyxa.apps.quicktimeplayer.xaquicktimewindow method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeWindow.set_property"]], "start() (pyxa.apps.quicktimeplayer.xaquicktimedocument method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.start"]], "step_backward() (pyxa.apps.quicktimeplayer.xaquicktimedocument method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.step_backward"]], "step_forward() (pyxa.apps.quicktimeplayer.xaquicktimedocument method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.step_forward"]], "stop() (pyxa.apps.quicktimeplayer.xaquicktimedocument method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.stop"]], "trim() (pyxa.apps.quicktimeplayer.xaquicktimedocument method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeDocument.trim"]], "version (pyxa.apps.quicktimeplayer.xaquicktimeapplication property)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeApplication.version"]], "video_recording_devices() (pyxa.apps.quicktimeplayer.xaquicktimeapplication method)": [[38, "PyXA.apps.QuickTimePlayer.XAQuickTimeApplication.video_recording_devices"]], "pyxa.apps.reminders": [[39, "module-PyXA.apps.Reminders"]], "xaremindersaccount (class in pyxa.apps.reminders)": [[39, "PyXA.apps.Reminders.XARemindersAccount"]], "xaremindersaccountlist (class in pyxa.apps.reminders)": [[39, "PyXA.apps.Reminders.XARemindersAccountList"]], "xaremindersalarm (class in pyxa.apps.reminders)": [[39, "PyXA.apps.Reminders.XARemindersAlarm"]], "xaremindersalarmlist (class in pyxa.apps.reminders)": [[39, "PyXA.apps.Reminders.XARemindersAlarmList"]], "xaremindersapplication (class in pyxa.apps.reminders)": [[39, "PyXA.apps.Reminders.XARemindersApplication"]], "xaremindersdocument (class in pyxa.apps.reminders)": [[39, "PyXA.apps.Reminders.XARemindersDocument"]], "xaremindersdocumentlist (class in pyxa.apps.reminders)": [[39, "PyXA.apps.Reminders.XARemindersDocumentList"]], "xareminderslist (class in pyxa.apps.reminders)": [[39, "PyXA.apps.Reminders.XARemindersList"]], "xareminderslistlist (class in pyxa.apps.reminders)": [[39, "PyXA.apps.Reminders.XARemindersListList"]], "xaremindersrecurrencerule (class in pyxa.apps.reminders)": [[39, "PyXA.apps.Reminders.XARemindersRecurrenceRule"]], "xaremindersreminder (class in pyxa.apps.reminders)": [[39, "PyXA.apps.Reminders.XARemindersReminder"]], "xaremindersreminderlist (class in pyxa.apps.reminders)": [[39, "PyXA.apps.Reminders.XARemindersReminderList"]], "xareminderswindow (class in pyxa.apps.reminders)": [[39, "PyXA.apps.Reminders.XARemindersWindow"]], "accounts() (pyxa.apps.reminders.xaremindersapplication method)": [[39, "PyXA.apps.Reminders.XARemindersApplication.accounts"]], "alarms() (pyxa.apps.reminders.xaremindersreminder method)": [[39, "PyXA.apps.Reminders.XARemindersReminder.alarms"]], "alarms() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.alarms"]], "all_day (pyxa.apps.reminders.xaremindersreminder property)": [[39, "PyXA.apps.Reminders.XARemindersReminder.all_day"]], "allday_due_date (pyxa.apps.reminders.xaremindersreminder property)": [[39, "PyXA.apps.Reminders.XARemindersReminder.allday_due_date"]], "allday_due_date() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.allday_due_date"]], "body (pyxa.apps.reminders.xaremindersreminder property)": [[39, "PyXA.apps.Reminders.XARemindersReminder.body"]], "body() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.body"]], "by_allday_due_date() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.by_allday_due_date"]], "by_body() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.by_body"]], "by_color() (pyxa.apps.reminders.xareminderslistlist method)": [[39, "PyXA.apps.Reminders.XARemindersListList.by_color"]], "by_completed() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.by_completed"]], "by_completion_date() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.by_completion_date"]], "by_container() (pyxa.apps.reminders.xareminderslistlist method)": [[39, "PyXA.apps.Reminders.XARemindersListList.by_container"]], "by_container() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.by_container"]], "by_creation_date() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.by_creation_date"]], "by_date() (pyxa.apps.reminders.xaremindersalarmlist method)": [[39, "PyXA.apps.Reminders.XARemindersAlarmList.by_date"]], "by_due_date() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.by_due_date"]], "by_emblem() (pyxa.apps.reminders.xareminderslistlist method)": [[39, "PyXA.apps.Reminders.XARemindersListList.by_emblem"]], "by_file() (pyxa.apps.reminders.xaremindersdocumentlist method)": [[39, "PyXA.apps.Reminders.XARemindersDocumentList.by_file"]], "by_flagged() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.by_flagged"]], "by_id() (pyxa.apps.reminders.xaremindersaccountlist method)": [[39, "PyXA.apps.Reminders.XARemindersAccountList.by_id"]], "by_id() (pyxa.apps.reminders.xaremindersalarmlist method)": [[39, "PyXA.apps.Reminders.XARemindersAlarmList.by_id"]], "by_id() (pyxa.apps.reminders.xareminderslistlist method)": [[39, "PyXA.apps.Reminders.XARemindersListList.by_id"]], "by_id() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.by_id"]], "by_location() (pyxa.apps.reminders.xaremindersalarmlist method)": [[39, "PyXA.apps.Reminders.XARemindersAlarmList.by_location"]], "by_modification_date() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.by_modification_date"]], "by_modified() (pyxa.apps.reminders.xaremindersdocumentlist method)": [[39, "PyXA.apps.Reminders.XARemindersDocumentList.by_modified"]], "by_name() (pyxa.apps.reminders.xaremindersaccountlist method)": [[39, "PyXA.apps.Reminders.XARemindersAccountList.by_name"]], "by_name() (pyxa.apps.reminders.xaremindersdocumentlist method)": [[39, "PyXA.apps.Reminders.XARemindersDocumentList.by_name"]], "by_name() (pyxa.apps.reminders.xareminderslistlist method)": [[39, "PyXA.apps.Reminders.XARemindersListList.by_name"]], "by_name() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.by_name"]], "by_priority() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.by_priority"]], "by_properties() (pyxa.apps.reminders.xaremindersaccountlist method)": [[39, "PyXA.apps.Reminders.XARemindersAccountList.by_properties"]], "by_properties() (pyxa.apps.reminders.xaremindersdocumentlist method)": [[39, "PyXA.apps.Reminders.XARemindersDocumentList.by_properties"]], "by_properties() (pyxa.apps.reminders.xareminderslistlist method)": [[39, "PyXA.apps.Reminders.XARemindersListList.by_properties"]], "by_properties() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.by_properties"]], "by_proximity_direction() (pyxa.apps.reminders.xaremindersalarmlist method)": [[39, "PyXA.apps.Reminders.XARemindersAlarmList.by_proximity_direction"]], "by_remind_me_date() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.by_remind_me_date"]], "by_snoozed() (pyxa.apps.reminders.xaremindersalarmlist method)": [[39, "PyXA.apps.Reminders.XARemindersAlarmList.by_snoozed"]], "close() (pyxa.apps.reminders.xaremindersdocument method)": [[39, "PyXA.apps.Reminders.XARemindersDocument.close"]], "close() (pyxa.apps.reminders.xareminderswindow method)": [[39, "PyXA.apps.Reminders.XARemindersWindow.close"]], "color (pyxa.apps.reminders.xareminderslist property)": [[39, "PyXA.apps.Reminders.XARemindersList.color"]], "color() (pyxa.apps.reminders.xareminderslistlist method)": [[39, "PyXA.apps.Reminders.XARemindersListList.color"]], "completed (pyxa.apps.reminders.xaremindersreminder property)": [[39, "PyXA.apps.Reminders.XARemindersReminder.completed"]], "completed() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.completed"]], "completion_date (pyxa.apps.reminders.xaremindersreminder property)": [[39, "PyXA.apps.Reminders.XARemindersReminder.completion_date"]], "completion_date() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.completion_date"]], "container (pyxa.apps.reminders.xareminderslist property)": [[39, "PyXA.apps.Reminders.XARemindersList.container"]], "container (pyxa.apps.reminders.xaremindersreminder property)": [[39, "PyXA.apps.Reminders.XARemindersReminder.container"]], "container() (pyxa.apps.reminders.xareminderslistlist method)": [[39, "PyXA.apps.Reminders.XARemindersListList.container"]], "container() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.container"]], "creation_date (pyxa.apps.reminders.xaremindersreminder property)": [[39, "PyXA.apps.Reminders.XARemindersReminder.creation_date"]], "creation_date() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.creation_date"]], "date (pyxa.apps.reminders.xaremindersalarm property)": [[39, "PyXA.apps.Reminders.XARemindersAlarm.date"]], "date() (pyxa.apps.reminders.xaremindersalarmlist method)": [[39, "PyXA.apps.Reminders.XARemindersAlarmList.date"]], "default_account (pyxa.apps.reminders.xaremindersapplication property)": [[39, "PyXA.apps.Reminders.XARemindersApplication.default_account"]], "default_list (pyxa.apps.reminders.xaremindersapplication property)": [[39, "PyXA.apps.Reminders.XARemindersApplication.default_list"]], "delete() (pyxa.apps.reminders.xaremindersdocument method)": [[39, "PyXA.apps.Reminders.XARemindersDocument.delete"]], "delete() (pyxa.apps.reminders.xareminderslist method)": [[39, "PyXA.apps.Reminders.XARemindersList.delete"]], "delete() (pyxa.apps.reminders.xareminderslistlist method)": [[39, "PyXA.apps.Reminders.XARemindersListList.delete"]], "delete() (pyxa.apps.reminders.xaremindersreminder method)": [[39, "PyXA.apps.Reminders.XARemindersReminder.delete"]], "delete() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.delete"]], "document (pyxa.apps.reminders.xareminderswindow property)": [[39, "PyXA.apps.Reminders.XARemindersWindow.document"]], "documents() (pyxa.apps.reminders.xaremindersapplication method)": [[39, "PyXA.apps.Reminders.XARemindersApplication.documents"]], "due_date (pyxa.apps.reminders.xaremindersreminder property)": [[39, "PyXA.apps.Reminders.XARemindersReminder.due_date"]], "due_date() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.due_date"]], "duplicate() (pyxa.apps.reminders.xaremindersdocument method)": [[39, "PyXA.apps.Reminders.XARemindersDocument.duplicate"]], "emblem (pyxa.apps.reminders.xareminderslist property)": [[39, "PyXA.apps.Reminders.XARemindersList.emblem"]], "emblem() (pyxa.apps.reminders.xareminderslistlist method)": [[39, "PyXA.apps.Reminders.XARemindersListList.emblem"]], "end_date (pyxa.apps.reminders.xaremindersrecurrencerule property)": [[39, "PyXA.apps.Reminders.XARemindersRecurrenceRule.end_date"]], "file (pyxa.apps.reminders.xaremindersdocument property)": [[39, "PyXA.apps.Reminders.XARemindersDocument.file"]], "file() (pyxa.apps.reminders.xaremindersdocumentlist method)": [[39, "PyXA.apps.Reminders.XARemindersDocumentList.file"]], "flagged (pyxa.apps.reminders.xaremindersreminder property)": [[39, "PyXA.apps.Reminders.XARemindersReminder.flagged"]], "flagged() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.flagged"]], "frequency (pyxa.apps.reminders.xaremindersrecurrencerule property)": [[39, "PyXA.apps.Reminders.XARemindersRecurrenceRule.frequency"]], "frontmost (pyxa.apps.reminders.xaremindersapplication property)": [[39, "PyXA.apps.Reminders.XARemindersApplication.frontmost"]], "id (pyxa.apps.reminders.xaremindersaccount property)": [[39, "PyXA.apps.Reminders.XARemindersAccount.id"]], "id (pyxa.apps.reminders.xaremindersalarm property)": [[39, "PyXA.apps.Reminders.XARemindersAlarm.id"]], "id (pyxa.apps.reminders.xareminderslist property)": [[39, "PyXA.apps.Reminders.XARemindersList.id"]], "id (pyxa.apps.reminders.xaremindersreminder property)": [[39, "PyXA.apps.Reminders.XARemindersReminder.id"]], "id() (pyxa.apps.reminders.xaremindersaccountlist method)": [[39, "PyXA.apps.Reminders.XARemindersAccountList.id"]], "id() (pyxa.apps.reminders.xaremindersalarmlist method)": [[39, "PyXA.apps.Reminders.XARemindersAlarmList.id"]], "id() (pyxa.apps.reminders.xareminderslistlist method)": [[39, "PyXA.apps.Reminders.XARemindersListList.id"]], "id() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.id"]], "interval (pyxa.apps.reminders.xaremindersrecurrencerule property)": [[39, "PyXA.apps.Reminders.XARemindersRecurrenceRule.interval"]], "lists() (pyxa.apps.reminders.xaremindersapplication method)": [[39, "PyXA.apps.Reminders.XARemindersApplication.lists"]], "lists() (pyxa.apps.reminders.xareminderswindow method)": [[39, "PyXA.apps.Reminders.XARemindersWindow.lists"]], "location (pyxa.apps.reminders.xaremindersalarm property)": [[39, "PyXA.apps.Reminders.XARemindersAlarm.location"]], "location() (pyxa.apps.reminders.xaremindersalarmlist method)": [[39, "PyXA.apps.Reminders.XARemindersAlarmList.location"]], "make() (pyxa.apps.reminders.xaremindersapplication method)": [[39, "PyXA.apps.Reminders.XARemindersApplication.make"]], "modification_date (pyxa.apps.reminders.xaremindersreminder property)": [[39, "PyXA.apps.Reminders.XARemindersReminder.modification_date"]], "modification_date() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.modification_date"]], "modified (pyxa.apps.reminders.xaremindersdocument property)": [[39, "PyXA.apps.Reminders.XARemindersDocument.modified"]], "modified() (pyxa.apps.reminders.xaremindersdocumentlist method)": [[39, "PyXA.apps.Reminders.XARemindersDocumentList.modified"]], "move_to() (pyxa.apps.reminders.xaremindersdocument method)": [[39, "PyXA.apps.Reminders.XARemindersDocument.move_to"]], "move_to() (pyxa.apps.reminders.xaremindersreminder method)": [[39, "PyXA.apps.Reminders.XARemindersReminder.move_to"]], "move_to() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.move_to"]], "name (pyxa.apps.reminders.xaremindersaccount property)": [[39, "PyXA.apps.Reminders.XARemindersAccount.name"]], "name (pyxa.apps.reminders.xaremindersapplication property)": [[39, "PyXA.apps.Reminders.XARemindersApplication.name"]], "name (pyxa.apps.reminders.xaremindersdocument property)": [[39, "PyXA.apps.Reminders.XARemindersDocument.name"]], "name (pyxa.apps.reminders.xareminderslist property)": [[39, "PyXA.apps.Reminders.XARemindersList.name"]], "name (pyxa.apps.reminders.xaremindersreminder property)": [[39, "PyXA.apps.Reminders.XARemindersReminder.name"]], "name() (pyxa.apps.reminders.xaremindersaccountlist method)": [[39, "PyXA.apps.Reminders.XARemindersAccountList.name"]], "name() (pyxa.apps.reminders.xaremindersdocumentlist method)": [[39, "PyXA.apps.Reminders.XARemindersDocumentList.name"]], "name() (pyxa.apps.reminders.xareminderslistlist method)": [[39, "PyXA.apps.Reminders.XARemindersListList.name"]], "name() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.name"]], "new_list() (pyxa.apps.reminders.xaremindersapplication method)": [[39, "PyXA.apps.Reminders.XARemindersApplication.new_list"]], "new_reminder() (pyxa.apps.reminders.xaremindersapplication method)": [[39, "PyXA.apps.Reminders.XARemindersApplication.new_reminder"]], "notes (pyxa.apps.reminders.xaremindersreminder property)": [[39, "PyXA.apps.Reminders.XARemindersReminder.notes"]], "print() (pyxa.apps.reminders.xaremindersdocument method)": [[39, "PyXA.apps.Reminders.XARemindersDocument.print"]], "print() (pyxa.apps.reminders.xareminderswindow method)": [[39, "PyXA.apps.Reminders.XARemindersWindow.print"]], "priority (pyxa.apps.reminders.xaremindersreminder property)": [[39, "PyXA.apps.Reminders.XARemindersReminder.priority"]], "priority() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.priority"]], "properties (pyxa.apps.reminders.xaremindersaccount property)": [[39, "PyXA.apps.Reminders.XARemindersAccount.properties"]], "properties (pyxa.apps.reminders.xaremindersdocument property)": [[39, "PyXA.apps.Reminders.XARemindersDocument.properties"]], "properties (pyxa.apps.reminders.xareminderslist property)": [[39, "PyXA.apps.Reminders.XARemindersList.properties"]], "properties (pyxa.apps.reminders.xaremindersreminder property)": [[39, "PyXA.apps.Reminders.XARemindersReminder.properties"]], "properties() (pyxa.apps.reminders.xaremindersaccountlist method)": [[39, "PyXA.apps.Reminders.XARemindersAccountList.properties"]], "properties() (pyxa.apps.reminders.xaremindersdocumentlist method)": [[39, "PyXA.apps.Reminders.XARemindersDocumentList.properties"]], "properties() (pyxa.apps.reminders.xareminderslistlist method)": [[39, "PyXA.apps.Reminders.XARemindersListList.properties"]], "properties() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.properties"]], "proximity_direction (pyxa.apps.reminders.xaremindersalarm property)": [[39, "PyXA.apps.Reminders.XARemindersAlarm.proximity_direction"]], "proximity_direction() (pyxa.apps.reminders.xaremindersalarmlist method)": [[39, "PyXA.apps.Reminders.XARemindersAlarmList.proximity_direction"]], "recurrence_rule (pyxa.apps.reminders.xaremindersreminder property)": [[39, "PyXA.apps.Reminders.XARemindersReminder.recurrence_rule"]], "remind_me_date (pyxa.apps.reminders.xaremindersreminder property)": [[39, "PyXA.apps.Reminders.XARemindersReminder.remind_me_date"]], "remind_me_date() (pyxa.apps.reminders.xaremindersreminderlist method)": [[39, "PyXA.apps.Reminders.XARemindersReminderList.remind_me_date"]], "reminders() (pyxa.apps.reminders.xaremindersapplication method)": [[39, "PyXA.apps.Reminders.XARemindersApplication.reminders"]], "reminders() (pyxa.apps.reminders.xareminderslist method)": [[39, "PyXA.apps.Reminders.XARemindersList.reminders"]], "reminders() (pyxa.apps.reminders.xareminderslistlist method)": [[39, "PyXA.apps.Reminders.XARemindersListList.reminders"]], "reminders() (pyxa.apps.reminders.xareminderswindow method)": [[39, "PyXA.apps.Reminders.XARemindersWindow.reminders"]], "save() (pyxa.apps.reminders.xaremindersdocument method)": [[39, "PyXA.apps.Reminders.XARemindersDocument.save"]], "save() (pyxa.apps.reminders.xareminderswindow method)": [[39, "PyXA.apps.Reminders.XARemindersWindow.save"]], "set_date() (pyxa.apps.reminders.xaremindersalarm method)": [[39, "PyXA.apps.Reminders.XARemindersAlarm.set_date"]], "set_end_date() (pyxa.apps.reminders.xaremindersrecurrencerule method)": [[39, "PyXA.apps.Reminders.XARemindersRecurrenceRule.set_end_date"]], "set_frequency() (pyxa.apps.reminders.xaremindersrecurrencerule method)": [[39, "PyXA.apps.Reminders.XARemindersRecurrenceRule.set_frequency"]], "set_interval() (pyxa.apps.reminders.xaremindersrecurrencerule method)": [[39, "PyXA.apps.Reminders.XARemindersRecurrenceRule.set_interval"]], "set_location() (pyxa.apps.reminders.xaremindersalarm method)": [[39, "PyXA.apps.Reminders.XARemindersAlarm.set_location"]], "sharees (pyxa.apps.reminders.xareminderslist attribute)": [[39, "PyXA.apps.Reminders.XARemindersList.sharees"]], "sharing_status (pyxa.apps.reminders.xareminderslist attribute)": [[39, "PyXA.apps.Reminders.XARemindersList.sharing_status"]], "show() (pyxa.apps.reminders.xaremindersaccount method)": [[39, "PyXA.apps.Reminders.XARemindersAccount.show"]], "show() (pyxa.apps.reminders.xareminderslist method)": [[39, "PyXA.apps.Reminders.XARemindersList.show"]], "show() (pyxa.apps.reminders.xaremindersreminder method)": [[39, "PyXA.apps.Reminders.XARemindersReminder.show"]], "snoozed (pyxa.apps.reminders.xaremindersalarm property)": [[39, "PyXA.apps.Reminders.XARemindersAlarm.snoozed"]], "snoozed() (pyxa.apps.reminders.xaremindersalarmlist method)": [[39, "PyXA.apps.Reminders.XARemindersAlarmList.snoozed"]], "subscription_url (pyxa.apps.reminders.xareminderslist attribute)": [[39, "PyXA.apps.Reminders.XARemindersList.subscription_url"]], "summary (pyxa.apps.reminders.xareminderslist attribute)": [[39, "PyXA.apps.Reminders.XARemindersList.summary"]], "url (pyxa.apps.reminders.xaremindersreminder property)": [[39, "PyXA.apps.Reminders.XARemindersReminder.url"]], "version (pyxa.apps.reminders.xaremindersapplication property)": [[39, "PyXA.apps.Reminders.XARemindersApplication.version"]], "pyxa.apps.rstudio": [[40, "module-PyXA.apps.RStudio"]], "xarstudioapplication (class in pyxa.apps.rstudio)": [[40, "PyXA.apps.RStudio.XARStudioApplication"]], "cmd() (pyxa.apps.rstudio.xarstudioapplication method)": [[40, "PyXA.apps.RStudio.XARStudioApplication.cmd"]], "pyxa.apps.safari": [[41, "module-PyXA.apps.Safari"]], "xasafariapplication (class in pyxa.apps.safari)": [[41, "PyXA.apps.Safari.XASafariApplication"]], "xasafaridocument (class in pyxa.apps.safari)": [[41, "PyXA.apps.Safari.XASafariDocument"]], "xasafaridocumentlist (class in pyxa.apps.safari)": [[41, "PyXA.apps.Safari.XASafariDocumentList"]], "xasafarigeneric (class in pyxa.apps.safari)": [[41, "PyXA.apps.Safari.XASafariGeneric"]], "xasafaritab (class in pyxa.apps.safari)": [[41, "PyXA.apps.Safari.XASafariTab"]], "xasafaritablist (class in pyxa.apps.safari)": [[41, "PyXA.apps.Safari.XASafariTabList"]], "xasafariwindow (class in pyxa.apps.safari)": [[41, "PyXA.apps.Safari.XASafariWindow"]], "add_to_reading_list() (pyxa.apps.safari.xasafariapplication method)": [[41, "PyXA.apps.Safari.XASafariApplication.add_to_reading_list"]], "add_to_reading_list() (pyxa.apps.safari.xasafaridocumentlist method)": [[41, "PyXA.apps.Safari.XASafariDocumentList.add_to_reading_list"]], "add_to_reading_list() (pyxa.apps.safari.xasafarigeneric method)": [[41, "PyXA.apps.Safari.XASafariGeneric.add_to_reading_list"]], "add_to_reading_list() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.add_to_reading_list"]], "by_file() (pyxa.apps.safari.xasafaridocumentlist method)": [[41, "PyXA.apps.Safari.XASafariDocumentList.by_file"]], "by_index() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.by_index"]], "by_modified() (pyxa.apps.safari.xasafaridocumentlist method)": [[41, "PyXA.apps.Safari.XASafariDocumentList.by_modified"]], "by_name() (pyxa.apps.safari.xasafaridocumentlist method)": [[41, "PyXA.apps.Safari.XASafariDocumentList.by_name"]], "by_name() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.by_name"]], "by_source() (pyxa.apps.safari.xasafaridocumentlist method)": [[41, "PyXA.apps.Safari.XASafariDocumentList.by_source"]], "by_source() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.by_source"]], "by_text() (pyxa.apps.safari.xasafaridocumentlist method)": [[41, "PyXA.apps.Safari.XASafariDocumentList.by_text"]], "by_text() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.by_text"]], "by_url() (pyxa.apps.safari.xasafaridocumentlist method)": [[41, "PyXA.apps.Safari.XASafariDocumentList.by_url"]], "by_url() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.by_url"]], "by_visible() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.by_visible"]], "close() (pyxa.apps.safari.xasafaridocumentlist method)": [[41, "PyXA.apps.Safari.XASafariDocumentList.close"]], "close() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.close"]], "current_document (pyxa.apps.safari.xasafariapplication property)": [[41, "PyXA.apps.Safari.XASafariApplication.current_document"]], "current_tab (pyxa.apps.safari.xasafariapplication property)": [[41, "PyXA.apps.Safari.XASafariApplication.current_tab"]], "current_tab (pyxa.apps.safari.xasafariwindow property)": [[41, "PyXA.apps.Safari.XASafariWindow.current_tab"]], "do_javascript() (pyxa.apps.safari.xasafariapplication method)": [[41, "PyXA.apps.Safari.XASafariApplication.do_javascript"]], "do_javascript() (pyxa.apps.safari.xasafaridocumentlist method)": [[41, "PyXA.apps.Safari.XASafariDocumentList.do_javascript"]], "do_javascript() (pyxa.apps.safari.xasafarigeneric method)": [[41, "PyXA.apps.Safari.XASafariGeneric.do_javascript"]], "do_javascript() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.do_javascript"]], "document (pyxa.apps.safari.xasafariwindow property)": [[41, "PyXA.apps.Safari.XASafariWindow.document"]], "documents() (pyxa.apps.safari.xasafariapplication method)": [[41, "PyXA.apps.Safari.XASafariApplication.documents"]], "duplicate_to() (pyxa.apps.safari.xasafaritab method)": [[41, "PyXA.apps.Safari.XASafariTab.duplicate_to"]], "duplicate_to() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.duplicate_to"]], "email() (pyxa.apps.safari.xasafariapplication method)": [[41, "PyXA.apps.Safari.XASafariApplication.email"]], "email() (pyxa.apps.safari.xasafaridocumentlist method)": [[41, "PyXA.apps.Safari.XASafariDocumentList.email"]], "email() (pyxa.apps.safari.xasafarigeneric method)": [[41, "PyXA.apps.Safari.XASafariGeneric.email"]], "email() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.email"]], "file (pyxa.apps.safari.xasafaridocument property)": [[41, "PyXA.apps.Safari.XASafariDocument.file"]], "file() (pyxa.apps.safari.xasafaridocumentlist method)": [[41, "PyXA.apps.Safari.XASafariDocumentList.file"]], "frontmost (pyxa.apps.safari.xasafariapplication property)": [[41, "PyXA.apps.Safari.XASafariApplication.frontmost"]], "get_clipboard_representation() (pyxa.apps.safari.xasafaridocument method)": [[41, "PyXA.apps.Safari.XASafariDocument.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.safari.xasafaridocumentlist method)": [[41, "PyXA.apps.Safari.XASafariDocumentList.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.safari.xasafaritab method)": [[41, "PyXA.apps.Safari.XASafariTab.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.get_clipboard_representation"]], "index (pyxa.apps.safari.xasafaritab property)": [[41, "PyXA.apps.Safari.XASafariTab.index"]], "index() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.index"]], "make() (pyxa.apps.safari.xasafariapplication method)": [[41, "PyXA.apps.Safari.XASafariApplication.make"]], "modified (pyxa.apps.safari.xasafaridocument property)": [[41, "PyXA.apps.Safari.XASafariDocument.modified"]], "modified() (pyxa.apps.safari.xasafaridocumentlist method)": [[41, "PyXA.apps.Safari.XASafariDocumentList.modified"]], "move_to() (pyxa.apps.safari.xasafaritab method)": [[41, "PyXA.apps.Safari.XASafariTab.move_to"]], "move_to() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.move_to"]], "name (pyxa.apps.safari.xasafariapplication property)": [[41, "PyXA.apps.Safari.XASafariApplication.name"]], "name (pyxa.apps.safari.xasafaridocument property)": [[41, "PyXA.apps.Safari.XASafariDocument.name"]], "name (pyxa.apps.safari.xasafaritab property)": [[41, "PyXA.apps.Safari.XASafariTab.name"]], "name() (pyxa.apps.safari.xasafaridocumentlist method)": [[41, "PyXA.apps.Safari.XASafariDocumentList.name"]], "name() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.name"]], "new_tab() (pyxa.apps.safari.xasafariapplication method)": [[41, "PyXA.apps.Safari.XASafariApplication.new_tab"]], "open() (pyxa.apps.safari.xasafariapplication method)": [[41, "PyXA.apps.Safari.XASafariApplication.open"]], "print() (pyxa.apps.safari.xasafaridocument method)": [[41, "PyXA.apps.Safari.XASafariDocument.print"]], "reload() (pyxa.apps.safari.xasafaridocumentlist method)": [[41, "PyXA.apps.Safari.XASafariDocumentList.reload"]], "reload() (pyxa.apps.safari.xasafarigeneric method)": [[41, "PyXA.apps.Safari.XASafariGeneric.reload"]], "reload() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.reload"]], "save() (pyxa.apps.safari.xasafariapplication method)": [[41, "PyXA.apps.Safari.XASafariApplication.save"]], "search() (pyxa.apps.safari.xasafariapplication method)": [[41, "PyXA.apps.Safari.XASafariApplication.search"]], "search() (pyxa.apps.safari.xasafaridocumentlist method)": [[41, "PyXA.apps.Safari.XASafariDocumentList.search"]], "search() (pyxa.apps.safari.xasafarigeneric method)": [[41, "PyXA.apps.Safari.XASafariGeneric.search"]], "search() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.search"]], "search_in_tab() (pyxa.apps.safari.xasafariapplication method)": [[41, "PyXA.apps.Safari.XASafariApplication.search_in_tab"]], "show_bookmarks() (pyxa.apps.safari.xasafariapplication method)": [[41, "PyXA.apps.Safari.XASafariApplication.show_bookmarks"]], "source (pyxa.apps.safari.xasafaridocument property)": [[41, "PyXA.apps.Safari.XASafariDocument.source"]], "source (pyxa.apps.safari.xasafaritab property)": [[41, "PyXA.apps.Safari.XASafariTab.source"]], "source() (pyxa.apps.safari.xasafaridocumentlist method)": [[41, "PyXA.apps.Safari.XASafariDocumentList.source"]], "source() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.source"]], "tabs() (pyxa.apps.safari.xasafariwindow method)": [[41, "PyXA.apps.Safari.XASafariWindow.tabs"]], "text (pyxa.apps.safari.xasafaridocument property)": [[41, "PyXA.apps.Safari.XASafariDocument.text"]], "text (pyxa.apps.safari.xasafaritab property)": [[41, "PyXA.apps.Safari.XASafariTab.text"]], "text() (pyxa.apps.safari.xasafaridocumentlist method)": [[41, "PyXA.apps.Safari.XASafariDocumentList.text"]], "text() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.text"]], "url (pyxa.apps.safari.xasafaridocument property)": [[41, "PyXA.apps.Safari.XASafariDocument.url"]], "url (pyxa.apps.safari.xasafaritab property)": [[41, "PyXA.apps.Safari.XASafariTab.url"]], "url() (pyxa.apps.safari.xasafaridocumentlist method)": [[41, "PyXA.apps.Safari.XASafariDocumentList.url"]], "url() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.url"]], "version (pyxa.apps.safari.xasafariapplication property)": [[41, "PyXA.apps.Safari.XASafariApplication.version"]], "visible (pyxa.apps.safari.xasafaritab property)": [[41, "PyXA.apps.Safari.XASafariTab.visible"]], "visible() (pyxa.apps.safari.xasafaritablist method)": [[41, "PyXA.apps.Safari.XASafariTabList.visible"]], "pyxa.apps.shortcuts": [[42, "module-PyXA.apps.Shortcuts"]], "xashortcut (class in pyxa.apps.shortcuts)": [[42, "PyXA.apps.Shortcuts.XAShortcut"]], "xashortcutfolder (class in pyxa.apps.shortcuts)": [[42, "PyXA.apps.Shortcuts.XAShortcutFolder"]], "xashortcutfolderlist (class in pyxa.apps.shortcuts)": [[42, "PyXA.apps.Shortcuts.XAShortcutFolderList"]], "xashortcutlist (class in pyxa.apps.shortcuts)": [[42, "PyXA.apps.Shortcuts.XAShortcutList"]], "xashortcutsapplication (class in pyxa.apps.shortcuts)": [[42, "PyXA.apps.Shortcuts.XAShortcutsApplication"]], "accepts_input (pyxa.apps.shortcuts.xashortcut property)": [[42, "PyXA.apps.Shortcuts.XAShortcut.accepts_input"]], "accepts_input() (pyxa.apps.shortcuts.xashortcutlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutList.accepts_input"]], "action_count (pyxa.apps.shortcuts.xashortcut property)": [[42, "PyXA.apps.Shortcuts.XAShortcut.action_count"]], "action_count() (pyxa.apps.shortcuts.xashortcutlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutList.action_count"]], "by_accepts_input() (pyxa.apps.shortcuts.xashortcutlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutList.by_accepts_input"]], "by_action_count() (pyxa.apps.shortcuts.xashortcutlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutList.by_action_count"]], "by_color() (pyxa.apps.shortcuts.xashortcutlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutList.by_color"]], "by_folder() (pyxa.apps.shortcuts.xashortcutlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutList.by_folder"]], "by_icon() (pyxa.apps.shortcuts.xashortcutlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutList.by_icon"]], "by_id() (pyxa.apps.shortcuts.xashortcutfolderlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutFolderList.by_id"]], "by_id() (pyxa.apps.shortcuts.xashortcutlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutList.by_id"]], "by_name() (pyxa.apps.shortcuts.xashortcutfolderlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutFolderList.by_name"]], "by_name() (pyxa.apps.shortcuts.xashortcutlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutList.by_name"]], "by_subtitle() (pyxa.apps.shortcuts.xashortcutlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutList.by_subtitle"]], "color (pyxa.apps.shortcuts.xashortcut property)": [[42, "PyXA.apps.Shortcuts.XAShortcut.color"]], "color() (pyxa.apps.shortcuts.xashortcutlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutList.color"]], "folder (pyxa.apps.shortcuts.xashortcut property)": [[42, "PyXA.apps.Shortcuts.XAShortcut.folder"]], "folder() (pyxa.apps.shortcuts.xashortcutlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutList.folder"]], "folders() (pyxa.apps.shortcuts.xashortcutsapplication method)": [[42, "PyXA.apps.Shortcuts.XAShortcutsApplication.folders"]], "frontmost (pyxa.apps.shortcuts.xashortcutsapplication property)": [[42, "PyXA.apps.Shortcuts.XAShortcutsApplication.frontmost"]], "get_clipboard_representation() (pyxa.apps.shortcuts.xashortcut method)": [[42, "PyXA.apps.Shortcuts.XAShortcut.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.shortcuts.xashortcutfolder method)": [[42, "PyXA.apps.Shortcuts.XAShortcutFolder.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.shortcuts.xashortcutfolderlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutFolderList.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.shortcuts.xashortcutlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutList.get_clipboard_representation"]], "icon (pyxa.apps.shortcuts.xashortcut property)": [[42, "PyXA.apps.Shortcuts.XAShortcut.icon"]], "icon() (pyxa.apps.shortcuts.xashortcutlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutList.icon"]], "id (pyxa.apps.shortcuts.xashortcut property)": [[42, "PyXA.apps.Shortcuts.XAShortcut.id"]], "id (pyxa.apps.shortcuts.xashortcutfolder property)": [[42, "PyXA.apps.Shortcuts.XAShortcutFolder.id"]], "id() (pyxa.apps.shortcuts.xashortcutfolderlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutFolderList.id"]], "id() (pyxa.apps.shortcuts.xashortcutlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutList.id"]], "name (pyxa.apps.shortcuts.xashortcut property)": [[42, "PyXA.apps.Shortcuts.XAShortcut.name"]], "name (pyxa.apps.shortcuts.xashortcutfolder property)": [[42, "PyXA.apps.Shortcuts.XAShortcutFolder.name"]], "name (pyxa.apps.shortcuts.xashortcutsapplication property)": [[42, "PyXA.apps.Shortcuts.XAShortcutsApplication.name"]], "name() (pyxa.apps.shortcuts.xashortcutfolderlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutFolderList.name"]], "name() (pyxa.apps.shortcuts.xashortcutlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutList.name"]], "run() (pyxa.apps.shortcuts.xashortcut method)": [[42, "PyXA.apps.Shortcuts.XAShortcut.run"]], "run() (pyxa.apps.shortcuts.xashortcutsapplication method)": [[42, "PyXA.apps.Shortcuts.XAShortcutsApplication.run"]], "shortcuts() (pyxa.apps.shortcuts.xashortcutfolder method)": [[42, "PyXA.apps.Shortcuts.XAShortcutFolder.shortcuts"]], "shortcuts() (pyxa.apps.shortcuts.xashortcutfolderlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutFolderList.shortcuts"]], "shortcuts() (pyxa.apps.shortcuts.xashortcutsapplication method)": [[42, "PyXA.apps.Shortcuts.XAShortcutsApplication.shortcuts"]], "subtitle (pyxa.apps.shortcuts.xashortcut property)": [[42, "PyXA.apps.Shortcuts.XAShortcut.subtitle"]], "subtitle() (pyxa.apps.shortcuts.xashortcutlist method)": [[42, "PyXA.apps.Shortcuts.XAShortcutList.subtitle"]], "version (pyxa.apps.shortcuts.xashortcutsapplication property)": [[42, "PyXA.apps.Shortcuts.XAShortcutsApplication.version"]], "paused (pyxa.apps.spotify.xaspotifyapplication.playerstate attribute)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.PlayerState.PAUSED"]], "playing (pyxa.apps.spotify.xaspotifyapplication.playerstate attribute)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.PlayerState.PLAYING"]], "pyxa.apps.spotify": [[43, "module-PyXA.apps.Spotify"]], "stopped (pyxa.apps.spotify.xaspotifyapplication.playerstate attribute)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.PlayerState.STOPPED"]], "xaspotifyapplication (class in pyxa.apps.spotify)": [[43, "PyXA.apps.Spotify.XASpotifyApplication"]], "xaspotifyapplication.playerstate (class in pyxa.apps.spotify)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.PlayerState"]], "xaspotifytrack (class in pyxa.apps.spotify)": [[43, "PyXA.apps.Spotify.XASpotifyTrack"]], "album (pyxa.apps.spotify.xaspotifytrack property)": [[43, "PyXA.apps.Spotify.XASpotifyTrack.album"]], "album_artist (pyxa.apps.spotify.xaspotifytrack property)": [[43, "PyXA.apps.Spotify.XASpotifyTrack.album_artist"]], "artist (pyxa.apps.spotify.xaspotifytrack property)": [[43, "PyXA.apps.Spotify.XASpotifyTrack.artist"]], "artwork (pyxa.apps.spotify.xaspotifytrack property)": [[43, "PyXA.apps.Spotify.XASpotifyTrack.artwork"]], "artwork_url (pyxa.apps.spotify.xaspotifytrack property)": [[43, "PyXA.apps.Spotify.XASpotifyTrack.artwork_url"]], "current_track (pyxa.apps.spotify.xaspotifyapplication property)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.current_track"]], "disc_number (pyxa.apps.spotify.xaspotifytrack property)": [[43, "PyXA.apps.Spotify.XASpotifyTrack.disc_number"]], "duration (pyxa.apps.spotify.xaspotifytrack property)": [[43, "PyXA.apps.Spotify.XASpotifyTrack.duration"]], "frontmost (pyxa.apps.spotify.xaspotifyapplication property)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.frontmost"]], "id (pyxa.apps.spotify.xaspotifytrack property)": [[43, "PyXA.apps.Spotify.XASpotifyTrack.id"]], "name (pyxa.apps.spotify.xaspotifyapplication property)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.name"]], "name (pyxa.apps.spotify.xaspotifytrack property)": [[43, "PyXA.apps.Spotify.XASpotifyTrack.name"]], "next_track() (pyxa.apps.spotify.xaspotifyapplication method)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.next_track"]], "pause() (pyxa.apps.spotify.xaspotifyapplication method)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.pause"]], "play() (pyxa.apps.spotify.xaspotifyapplication method)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.play"]], "play_track() (pyxa.apps.spotify.xaspotifyapplication method)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.play_track"]], "played_count (pyxa.apps.spotify.xaspotifytrack property)": [[43, "PyXA.apps.Spotify.XASpotifyTrack.played_count"]], "player_position (pyxa.apps.spotify.xaspotifyapplication property)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.player_position"]], "player_state (pyxa.apps.spotify.xaspotifyapplication property)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.player_state"]], "playpause() (pyxa.apps.spotify.xaspotifyapplication method)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.playpause"]], "popularity (pyxa.apps.spotify.xaspotifytrack property)": [[43, "PyXA.apps.Spotify.XASpotifyTrack.popularity"]], "previous_track() (pyxa.apps.spotify.xaspotifyapplication method)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.previous_track"]], "repeating (pyxa.apps.spotify.xaspotifyapplication property)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.repeating"]], "repeating_enabled (pyxa.apps.spotify.xaspotifyapplication property)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.repeating_enabled"]], "search() (pyxa.apps.spotify.xaspotifyapplication method)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.search"]], "shuffling (pyxa.apps.spotify.xaspotifyapplication property)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.shuffling"]], "shuffling_enabled (pyxa.apps.spotify.xaspotifyapplication property)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.shuffling_enabled"]], "sound_volume (pyxa.apps.spotify.xaspotifyapplication property)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.sound_volume"]], "spotify_url (pyxa.apps.spotify.xaspotifytrack property)": [[43, "PyXA.apps.Spotify.XASpotifyTrack.spotify_url"]], "starred (pyxa.apps.spotify.xaspotifytrack property)": [[43, "PyXA.apps.Spotify.XASpotifyTrack.starred"]], "track_number (pyxa.apps.spotify.xaspotifytrack property)": [[43, "PyXA.apps.Spotify.XASpotifyTrack.track_number"]], "version (pyxa.apps.spotify.xaspotifyapplication property)": [[43, "PyXA.apps.Spotify.XASpotifyApplication.version"]], "pyxa.apps.stocks": [[44, "module-PyXA.apps.Stocks"]], "xastocksapplication (class in pyxa.apps.stocks)": [[44, "PyXA.apps.Stocks.XAStocksApplication"]], "xastockssavedstock (class in pyxa.apps.stocks)": [[44, "PyXA.apps.Stocks.XAStocksSavedStock"]], "xastockssavedstocklist (class in pyxa.apps.stocks)": [[44, "PyXA.apps.Stocks.XAStocksSavedStockList"]], "change (pyxa.apps.stocks.xastockssavedstock property)": [[44, "PyXA.apps.Stocks.XAStocksSavedStock.change"]], "change() (pyxa.apps.stocks.xastockssavedstocklist method)": [[44, "PyXA.apps.Stocks.XAStocksSavedStockList.change"]], "get_clipboard_representation() (pyxa.apps.stocks.xastockssavedstock method)": [[44, "PyXA.apps.Stocks.XAStocksSavedStock.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.stocks.xastockssavedstocklist method)": [[44, "PyXA.apps.Stocks.XAStocksSavedStockList.get_clipboard_representation"]], "go_back() (pyxa.apps.stocks.xastocksapplication method)": [[44, "PyXA.apps.Stocks.XAStocksApplication.go_back"]], "name (pyxa.apps.stocks.xastockssavedstock property)": [[44, "PyXA.apps.Stocks.XAStocksSavedStock.name"]], "name() (pyxa.apps.stocks.xastockssavedstocklist method)": [[44, "PyXA.apps.Stocks.XAStocksSavedStockList.name"]], "new_tab() (pyxa.apps.stocks.xastocksapplication method)": [[44, "PyXA.apps.Stocks.XAStocksApplication.new_tab"]], "price (pyxa.apps.stocks.xastockssavedstock property)": [[44, "PyXA.apps.Stocks.XAStocksSavedStock.price"]], "price() (pyxa.apps.stocks.xastockssavedstocklist method)": [[44, "PyXA.apps.Stocks.XAStocksSavedStockList.price"]], "properties (pyxa.apps.stocks.xastockssavedstock property)": [[44, "PyXA.apps.Stocks.XAStocksSavedStock.properties"]], "properties() (pyxa.apps.stocks.xastockssavedstocklist method)": [[44, "PyXA.apps.Stocks.XAStocksSavedStockList.properties"]], "saved_stocks() (pyxa.apps.stocks.xastocksapplication method)": [[44, "PyXA.apps.Stocks.XAStocksApplication.saved_stocks"]], "selected (pyxa.apps.stocks.xastockssavedstock property)": [[44, "PyXA.apps.Stocks.XAStocksSavedStock.selected"]], "selected() (pyxa.apps.stocks.xastockssavedstocklist method)": [[44, "PyXA.apps.Stocks.XAStocksSavedStockList.selected"]], "show() (pyxa.apps.stocks.xastockssavedstock method)": [[44, "PyXA.apps.Stocks.XAStocksSavedStock.show"]], "show_business_news() (pyxa.apps.stocks.xastocksapplication method)": [[44, "PyXA.apps.Stocks.XAStocksApplication.show_business_news"]], "show_symbol() (pyxa.apps.stocks.xastocksapplication method)": [[44, "PyXA.apps.Stocks.XAStocksApplication.show_symbol"]], "sidebar_showing (pyxa.apps.stocks.xastocksapplication property)": [[44, "PyXA.apps.Stocks.XAStocksApplication.sidebar_showing"]], "symbol (pyxa.apps.stocks.xastockssavedstock property)": [[44, "PyXA.apps.Stocks.XAStocksSavedStock.symbol"]], "symbol() (pyxa.apps.stocks.xastockssavedstocklist method)": [[44, "PyXA.apps.Stocks.XAStocksSavedStockList.symbol"]], "after_sleep (pyxa.apps.systemevents.xasystemeventsapplication.picturerotation attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.PictureRotation.AFTER_SLEEP"]], "ask_what_to_do (pyxa.apps.systemevents.xasystemeventsapplication.mediainsertionaction attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.MediaInsertionAction.ASK_WHAT_TO_DO"]], "auto (pyxa.apps.systemevents.xasystemeventsapplication.dynamicstyle attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.DynamicStyle.AUTO"]], "automatic (pyxa.apps.systemevents.xasystemeventsapplication.fontsmoothingstyle attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.FontSmoothingStyle.AUTOMATIC"]], "blue (pyxa.apps.systemevents.xasystemeventsapplication.appearance attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.Appearance.BLUE"]], "blue (pyxa.apps.systemevents.xasystemeventsapplication.highlightcolor attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.HighlightColor.BLUE"]], "bottom (pyxa.apps.systemevents.xasystemeventsapplication.screenlocation attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.ScreenLocation.BOTTOM"]], "caps_lock (pyxa.apps.systemevents.xasystemeventsapplication.key attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.Key.CAPS_LOCK"]], "command (pyxa.apps.systemevents.xasystemeventsapplication.key attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.Key.COMMAND"]], "control (pyxa.apps.systemevents.xasystemeventsapplication.key attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.Key.CONTROL"]], "dark (pyxa.apps.systemevents.xasystemeventsapplication.dynamicstyle attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.DynamicStyle.DARK"]], "dynamic (pyxa.apps.systemevents.xasystemeventsapplication.dynamicstyle attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.DynamicStyle.DYNAMIC"]], "function (pyxa.apps.systemevents.xasystemeventsapplication.key attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.Key.FUNCTION"]], "genie (pyxa.apps.systemevents.xasystemeventsapplication.minimizeeffect attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.MinimizeEffect.GENIE"]], "gold (pyxa.apps.systemevents.xasystemeventsapplication.highlightcolor attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.HighlightColor.GOLD"]], "graphite (pyxa.apps.systemevents.xasystemeventsapplication.appearance attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.Appearance.GRAPHITE"]], "graphite (pyxa.apps.systemevents.xasystemeventsapplication.highlightcolor attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.HighlightColor.GRAPHITE"]], "green (pyxa.apps.systemevents.xasystemeventsapplication.highlightcolor attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.HighlightColor.GREEN"]], "ignore (pyxa.apps.systemevents.xasystemeventsapplication.mediainsertionaction attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.MediaInsertionAction.IGNORE"]], "jump_to_here (pyxa.apps.systemevents.xasystemeventsapplication.scrollpagebehavior attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.ScrollPageBehavior.JUMP_TO_HERE"]], "jump_to_next_page (pyxa.apps.systemevents.xasystemeventsapplication.scrollpagebehavior attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.ScrollPageBehavior.JUMP_TO_NEXT_PAGE"]], "left (pyxa.apps.systemevents.xasystemeventsapplication.screenlocation attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.ScreenLocation.LEFT"]], "light (pyxa.apps.systemevents.xasystemeventsapplication.dynamicstyle attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.DynamicStyle.LIGHT"]], "light (pyxa.apps.systemevents.xasystemeventsapplication.fontsmoothingstyle attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.FontSmoothingStyle.LIGHT"]], "medium (pyxa.apps.systemevents.xasystemeventsapplication.fontsmoothingstyle attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.FontSmoothingStyle.MEDIUM"]], "minimize (pyxa.apps.systemevents.xasystemeventsapplication.doubleclickbehavior attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.DoubleClickBehavior.MINIMIZE"]], "never (pyxa.apps.systemevents.xasystemeventsapplication.picturerotation attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.PictureRotation.NEVER"]], "none (pyxa.apps.systemevents.xasystemeventsapplication.accessright attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.AccessRight.NONE"]], "off (pyxa.apps.systemevents.xasystemeventsapplication.doubleclickbehavior attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.DoubleClickBehavior.OFF"]], "open_application (pyxa.apps.systemevents.xasystemeventsapplication.mediainsertionaction attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.MediaInsertionAction.OPEN_APPLICATION"]], "option (pyxa.apps.systemevents.xasystemeventsapplication.key attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.Key.OPTION"]], "orange (pyxa.apps.systemevents.xasystemeventsapplication.highlightcolor attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.HighlightColor.ORANGE"]], "purple (pyxa.apps.systemevents.xasystemeventsapplication.highlightcolor attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.HighlightColor.PURPLE"]], "pyxa.apps.systemevents": [[45, "module-PyXA.apps.SystemEvents"]], "read (pyxa.apps.systemevents.xasystemeventsapplication.accessright attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.AccessRight.READ"]], "read_write (pyxa.apps.systemevents.xasystemeventsapplication.accessright attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.AccessRight.READ_WRITE"]], "red (pyxa.apps.systemevents.xasystemeventsapplication.highlightcolor attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.HighlightColor.RED"]], "right (pyxa.apps.systemevents.xasystemeventsapplication.screenlocation attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.ScreenLocation.RIGHT"]], "run_a_script (pyxa.apps.systemevents.xasystemeventsapplication.mediainsertionaction attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.MediaInsertionAction.RUN_A_SCRIPT"]], "scale (pyxa.apps.systemevents.xasystemeventsapplication.minimizeeffect attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.MinimizeEffect.SCALE"]], "shift (pyxa.apps.systemevents.xasystemeventsapplication.key attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.Key.SHIFT"]], "silver (pyxa.apps.systemevents.xasystemeventsapplication.highlightcolor attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.HighlightColor.SILVER"]], "standard (pyxa.apps.systemevents.xasystemeventsapplication.fontsmoothingstyle attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.FontSmoothingStyle.STANDARD"]], "strong (pyxa.apps.systemevents.xasystemeventsapplication.fontsmoothingstyle attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.FontSmoothingStyle.STRONG"]], "unknown (pyxa.apps.systemevents.xasystemeventsapplication.dynamicstyle attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.DynamicStyle.UNKNOWN"]], "using_interval (pyxa.apps.systemevents.xasystemeventsapplication.picturerotation attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.PictureRotation.USING_INTERVAL"]], "using_login (pyxa.apps.systemevents.xasystemeventsapplication.picturerotation attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.PictureRotation.USING_LOGIN"]], "write (pyxa.apps.systemevents.xasystemeventsapplication.accessright attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.AccessRight.WRITE"]], "xasystemeventsaction (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAction"]], "xasystemeventsactionlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsActionList"]], "xasystemeventsappearancepreferencesobject (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAppearancePreferencesObject"]], "xasystemeventsapplication (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication"]], "xasystemeventsapplication.accessright (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.AccessRight"]], "xasystemeventsapplication.appearance (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.Appearance"]], "xasystemeventsapplication.doubleclickbehavior (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.DoubleClickBehavior"]], "xasystemeventsapplication.dynamicstyle (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.DynamicStyle"]], "xasystemeventsapplication.fontsmoothingstyle (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.FontSmoothingStyle"]], "xasystemeventsapplication.highlightcolor (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.HighlightColor"]], "xasystemeventsapplication.key (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.Key"]], "xasystemeventsapplication.mediainsertionaction (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.MediaInsertionAction"]], "xasystemeventsapplication.minimizeeffect (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.MinimizeEffect"]], "xasystemeventsapplication.picturerotation (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.PictureRotation"]], "xasystemeventsapplication.screenlocation (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.ScreenLocation"]], "xasystemeventsapplication.scrollpagebehavior (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.ScrollPageBehavior"]], "xasystemeventsapplicationprocess (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplicationProcess"]], "xasystemeventsapplicationprocesslist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplicationProcessList"]], "xasystemeventsattribute (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAttribute"]], "xasystemeventsattributelist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAttributeList"]], "xasystemeventsbrowser (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsBrowser"]], "xasystemeventsbrowserlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsBrowserList"]], "xasystemeventsbusyindicator (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsBusyIndicator"]], "xasystemeventsbusyindicatorlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsBusyIndicatorList"]], "xasystemeventsbutton (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsButton"]], "xasystemeventsbuttonlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsButtonList"]], "xasystemeventscdanddvdpreferencesobject (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsCDAndDVDPreferencesObject"]], "xasystemeventscheckbox (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsCheckbox"]], "xasystemeventscheckboxlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsCheckboxList"]], "xasystemeventscolorwell (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsColorWell"]], "xasystemeventscolorwelllist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsColorWellList"]], "xasystemeventscolumn (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsColumn"]], "xasystemeventscolumnlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsColumnList"]], "xasystemeventscombobox (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsComboBox"]], "xasystemeventscomboboxlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsComboBoxList"]], "xasystemeventsconfiguration (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsConfiguration"]], "xasystemeventsconfigurationlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsConfigurationList"]], "xasystemeventsdeskaccessoryprocess (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDeskAccessoryProcess"]], "xasystemeventsdeskaccessoryprocesslist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDeskAccessoryProcessList"]], "xasystemeventsdesktop (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktop"]], "xasystemeventsdesktoplist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList"]], "xasystemeventsdockpreferencesobject (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDockPreferencesObject"]], "xasystemeventsdocument (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDocument"]], "xasystemeventsdocumentlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDocumentList"]], "xasystemeventsdrawer (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDrawer"]], "xasystemeventsdrawerlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDrawerList"]], "xasystemeventsfolderaction (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsFolderAction"]], "xasystemeventsfolderactionlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsFolderActionList"]], "xasystemeventsgroup (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsGroup"]], "xasystemeventsgrouplist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsGroupList"]], "xasystemeventsgrowarea (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsGrowArea"]], "xasystemeventsgrowarealist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsGrowAreaList"]], "xasystemeventsimage (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsImage"]], "xasystemeventsimagelist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsImageList"]], "xasystemeventsincrementor (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsIncrementor"]], "xasystemeventsincrementorlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsIncrementorList"]], "xasystemeventsinsertionpreference (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInsertionPreference"]], "xasystemeventsinterface (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterface"]], "xasystemeventsinterfacelist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterfaceList"]], "xasystemeventslist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsList"]], "xasystemeventslistlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsListList"]], "xasystemeventslocation (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLocation"]], "xasystemeventslocationlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLocationList"]], "xasystemeventsloginitem (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLoginItem"]], "xasystemeventsloginitemlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLoginItemList"]], "xasystemeventsmenu (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsMenu"]], "xasystemeventsmenubar (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsMenuBar"]], "xasystemeventsmenubaritem (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsMenuBarItem"]], "xasystemeventsmenubaritemlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsMenuBarItemList"]], "xasystemeventsmenubarlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsMenuBarList"]], "xasystemeventsmenubutton (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsMenuButton"]], "xasystemeventsmenubuttonlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsMenuButtonList"]], "xasystemeventsmenuitem (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsMenuItem"]], "xasystemeventsmenuitemlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsMenuItemList"]], "xasystemeventsmenulist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsMenuList"]], "xasystemeventsnetworkpreferencesobject (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsNetworkPreferencesObject"]], "xasystemeventsoutline (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsOutline"]], "xasystemeventsoutlinelist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsOutlineList"]], "xasystemeventspopover (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPopOver"]], "xasystemeventspopoverlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPopOverList"]], "xasystemeventspopupbutton (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPopUpButton"]], "xasystemeventspopupbuttonlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPopUpButtonList"]], "xasystemeventsprintsettings (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPrintSettings"]], "xasystemeventsprocess (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess"]], "xasystemeventsprocesslist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList"]], "xasystemeventsprogressindicator (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProgressIndicator"]], "xasystemeventsprogressindicatorlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProgressIndicatorList"]], "xasystemeventspropertylistfile (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListFile"]], "xasystemeventspropertylistfilelist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListFileList"]], "xasystemeventspropertylistitem (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListItem"]], "xasystemeventspropertylistitemlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListItemList"]], "xasystemeventsradiobutton (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsRadioButton"]], "xasystemeventsradiobuttonlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsRadioButtonList"]], "xasystemeventsradiogroup (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsRadioGroup"]], "xasystemeventsradiogrouplist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsRadioGroupList"]], "xasystemeventsrelevanceindicator (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsRelevanceIndicator"]], "xasystemeventsrelevanceindicatorlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsRelevanceIndicatorList"]], "xasystemeventsrow (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsRow"]], "xasystemeventsrowlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsRowList"]], "xasystemeventsscreensaver (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaver"]], "xasystemeventsscreensaverlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaverList"]], "xasystemeventsscreensaverpreferencesobject (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaverPreferencesObject"]], "xasystemeventsscript (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScript"]], "xasystemeventsscriptlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptList"]], "xasystemeventsscriptingclass (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClass"]], "xasystemeventsscriptingclasslist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClassList"]], "xasystemeventsscriptingcommand (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommand"]], "xasystemeventsscriptingcommandlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommandList"]], "xasystemeventsscriptingdefinitionobject (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingDefinitionObject"]], "xasystemeventsscriptingelement (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingElement"]], "xasystemeventsscriptingelementlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingElementList"]], "xasystemeventsscriptingenumeration (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumeration"]], "xasystemeventsscriptingenumerationlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumerationList"]], "xasystemeventsscriptingenumerator (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumerator"]], "xasystemeventsscriptingenumeratorlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumeratorList"]], "xasystemeventsscriptingparameter (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameter"]], "xasystemeventsscriptingparameterlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameterList"]], "xasystemeventsscriptingproperty (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingProperty"]], "xasystemeventsscriptingpropertylist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingPropertyList"]], "xasystemeventsscriptingresultobject (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingResultObject"]], "xasystemeventsscriptingresultobjectlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingResultObjectList"]], "xasystemeventsscriptingsuite (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingSuite"]], "xasystemeventsscriptingsuitelist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingSuiteList"]], "xasystemeventsscrollarea (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScrollArea"]], "xasystemeventsscrollarealist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScrollAreaList"]], "xasystemeventsscrollbar (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScrollBar"]], "xasystemeventsscrollbarlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScrollBarList"]], "xasystemeventssecuritypreferencesobject (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsSecurityPreferencesObject"]], "xasystemeventsservice (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsService"]], "xasystemeventsservicelist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsServiceList"]], "xasystemeventssheet (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsSheet"]], "xasystemeventssheetlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsSheetList"]], "xasystemeventsslider (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsSlider"]], "xasystemeventssliderlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsSliderList"]], "xasystemeventssplitter (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsSplitter"]], "xasystemeventssplittergroup (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsSplitterGroup"]], "xasystemeventssplittergrouplist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsSplitterGroupList"]], "xasystemeventssplitterlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsSplitterList"]], "xasystemeventsstatictext (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsStaticText"]], "xasystemeventsstatictextlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsStaticTextList"]], "xasystemeventstabgroup (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsTabGroup"]], "xasystemeventstabgrouplist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsTabGroupList"]], "xasystemeventstable (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsTable"]], "xasystemeventstablelist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsTableList"]], "xasystemeventstextarea (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsTextArea"]], "xasystemeventstextarealist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsTextAreaList"]], "xasystemeventstextfield (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsTextField"]], "xasystemeventstextfieldlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsTextFieldList"]], "xasystemeventstoolbar (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsToolbar"]], "xasystemeventstoolbarlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsToolbarList"]], "xasystemeventsuielement (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement"]], "xasystemeventsuielementlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList"]], "xasystemeventsuser (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUser"]], "xasystemeventsuserlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUserList"]], "xasystemeventsvalueindicator (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsValueIndicator"]], "xasystemeventsvalueindicatorlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsValueIndicatorList"]], "xasystemeventswindow (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow"]], "xasystemeventswindowlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindowList"]], "xasystemeventsxmlattribute (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLAttribute"]], "xasystemeventsxmlattributelist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLAttributeList"]], "xasystemeventsxmldata (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLData"]], "xasystemeventsxmldatalist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLDataList"]], "xasystemeventsxmlelement (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLElement"]], "xasystemeventsxmlelementlist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLElementList"]], "xasystemeventsxmlfile (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLFile"]], "xasystemeventsxmlfilelist (class in pyxa.apps.systemevents)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLFileList"]], "zoom (pyxa.apps.systemevents.xasystemeventsapplication.doubleclickbehavior attribute)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.DoubleClickBehavior.ZOOM"]], "abort_transaction() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.abort_transaction"]], "accepts_high_level_events (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.accepts_high_level_events"]], "accepts_high_level_events() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.accepts_high_level_events"]], "accepts_remote_events (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.accepts_remote_events"]], "accepts_remote_events() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.accepts_remote_events"]], "access (pyxa.apps.systemevents.xasystemeventsscriptingproperty property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingProperty.access"]], "access() (pyxa.apps.systemevents.xasystemeventsscriptingpropertylist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingPropertyList.access"]], "accessibility_description (pyxa.apps.systemevents.xasystemeventsuielement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.accessibility_description"]], "accessibility_description (pyxa.apps.systemevents.xasystemeventswindow property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.accessibility_description"]], "accessibility_description() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.accessibility_description"]], "account_name (pyxa.apps.systemevents.xasystemeventsconfiguration property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsConfiguration.account_name"]], "account_name() (pyxa.apps.systemevents.xasystemeventsconfigurationlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsConfigurationList.account_name"]], "actions() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.actions"]], "actions() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.actions"]], "actions() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.actions"]], "active (pyxa.apps.systemevents.xasystemeventsservice property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsService.active"]], "active() (pyxa.apps.systemevents.xasystemeventsservicelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsServiceList.active"]], "aliases() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.aliases"]], "animate (pyxa.apps.systemevents.xasystemeventsdockpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDockPreferencesObject.animate"]], "appearance (pyxa.apps.systemevents.xasystemeventsappearancepreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAppearancePreferencesObject.appearance"]], "appearance_preferences (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.appearance_preferences"]], "application_file (pyxa.apps.systemevents.xasystemeventsapplicationprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplicationProcess.application_file"]], "application_file() (pyxa.apps.systemevents.xasystemeventsapplicationprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplicationProcessList.application_file"]], "application_processes() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.application_processes"]], "application_support_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.application_support_folder"]], "applications_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.applications_folder"]], "architecture (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.architecture"]], "architecture() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.architecture"]], "attributes() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.attributes"]], "attributes() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.attributes"]], "autohide (pyxa.apps.systemevents.xasystemeventsdockpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDockPreferencesObject.autohide"]], "autohide_menu_bar (pyxa.apps.systemevents.xasystemeventsdockpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDockPreferencesObject.autohide_menu_bar"]], "automatic (pyxa.apps.systemevents.xasystemeventsinterface property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterface.automatic"]], "automatic() (pyxa.apps.systemevents.xasystemeventsinterfacelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterfaceList.automatic"]], "automatic_login (pyxa.apps.systemevents.xasystemeventssecuritypreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsSecurityPreferencesObject.automatic_login"]], "background_only (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.background_only"]], "background_only() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.background_only"]], "begin_transaction() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.begin_transaction"]], "blank_bd (pyxa.apps.systemevents.xasystemeventscdanddvdpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsCDAndDVDPreferencesObject.blank_bd"]], "blank_cd (pyxa.apps.systemevents.xasystemeventscdanddvdpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsCDAndDVDPreferencesObject.blank_cd"]], "blank_dvd (pyxa.apps.systemevents.xasystemeventscdanddvdpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsCDAndDVDPreferencesObject.blank_dvd"]], "browsers() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.browsers"]], "browsers() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.browsers"]], "bundle_identifier (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.bundle_identifier"]], "bundle_identifier() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.bundle_identifier"]], "busy_indicators() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.busy_indicators"]], "busy_indicators() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.busy_indicators"]], "buttons() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.buttons"]], "buttons() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.buttons"]], "by_accepts_high_level_events() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.by_accepts_high_level_events"]], "by_accepts_remote_events() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.by_accepts_remote_events"]], "by_access() (pyxa.apps.systemevents.xasystemeventsscriptingpropertylist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingPropertyList.by_access"]], "by_accessibility_description() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.by_accessibility_description"]], "by_account_name() (pyxa.apps.systemevents.xasystemeventsconfigurationlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsConfigurationList.by_account_name"]], "by_active() (pyxa.apps.systemevents.xasystemeventsservicelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsServiceList.by_active"]], "by_application_file() (pyxa.apps.systemevents.xasystemeventsapplicationprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplicationProcessList.by_application_file"]], "by_architecture() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.by_architecture"]], "by_automatic() (pyxa.apps.systemevents.xasystemeventsinterfacelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterfaceList.by_automatic"]], "by_background_only() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.by_background_only"]], "by_bundle_identifier() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.by_bundle_identifier"]], "by_change_interval() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.by_change_interval"]], "by_classic() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.by_classic"]], "by_connected() (pyxa.apps.systemevents.xasystemeventsconfigurationlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsConfigurationList.by_connected"]], "by_content() (pyxa.apps.systemevents.xasystemeventspropertylistfilelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListFileList.by_content"]], "by_contents() (pyxa.apps.systemevents.xasystemeventsxmlfilelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLFileList.by_contents"]], "by_creator_type() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.by_creator_type"]], "by_current_configuration() (pyxa.apps.systemevents.xasystemeventsservicelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsServiceList.by_current_configuration"]], "by_desk_accessory_file() (pyxa.apps.systemevents.xasystemeventsdeskaccessoryprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDeskAccessoryProcessList.by_desk_accessory_file"]], "by_direct_parameter() (pyxa.apps.systemevents.xasystemeventsscriptingcommandlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommandList.by_direct_parameter"]], "by_display_name() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.by_display_name"]], "by_displayed_name() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.by_displayed_name"]], "by_displayed_name() (pyxa.apps.systemevents.xasystemeventsscreensaverlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaverList.by_displayed_name"]], "by_duplex() (pyxa.apps.systemevents.xasystemeventsinterfacelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterfaceList.by_duplex"]], "by_dynamic_style() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.by_dynamic_style"]], "by_enabled() (pyxa.apps.systemevents.xasystemeventsfolderactionlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsFolderActionList.by_enabled"]], "by_enabled() (pyxa.apps.systemevents.xasystemeventsscriptlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptList.by_enabled"]], "by_enabled() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.by_enabled"]], "by_entire_contents() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.by_entire_contents"]], "by_enumerated() (pyxa.apps.systemevents.xasystemeventsscriptingpropertylist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingPropertyList.by_enumerated"]], "by_enumerated() (pyxa.apps.systemevents.xasystemeventsscriptingresultobjectlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingResultObjectList.by_enumerated"]], "by_file() (pyxa.apps.systemevents.xasystemeventsdocumentlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDocumentList.by_file"]], "by_file() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.by_file"]], "by_file_type() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.by_file_type"]], "by_focused() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.by_focused"]], "by_frontmost() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.by_frontmost"]], "by_full_name() (pyxa.apps.systemevents.xasystemeventsuserlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUserList.by_full_name"]], "by_has_scripting_terminology() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.by_has_scripting_terminology"]], "by_help() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.by_help"]], "by_hidden() (pyxa.apps.systemevents.xasystemeventsloginitemlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLoginItemList.by_hidden"]], "by_hidden() (pyxa.apps.systemevents.xasystemeventsscriptingclasslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClassList.by_hidden"]], "by_hidden() (pyxa.apps.systemevents.xasystemeventsscriptingcommandlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommandList.by_hidden"]], "by_hidden() (pyxa.apps.systemevents.xasystemeventsscriptingenumerationlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumerationList.by_hidden"]], "by_hidden() (pyxa.apps.systemevents.xasystemeventsscriptingenumeratorlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumeratorList.by_hidden"]], "by_hidden() (pyxa.apps.systemevents.xasystemeventsscriptingparameterlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameterList.by_hidden"]], "by_hidden() (pyxa.apps.systemevents.xasystemeventsscriptingpropertylist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingPropertyList.by_hidden"]], "by_hidden() (pyxa.apps.systemevents.xasystemeventsscriptingsuitelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingSuiteList.by_hidden"]], "by_home_directory() (pyxa.apps.systemevents.xasystemeventsuserlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUserList.by_home_directory"]], "by_id() (pyxa.apps.systemevents.xasystemeventsconfigurationlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsConfigurationList.by_id"]], "by_id() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.by_id"]], "by_id() (pyxa.apps.systemevents.xasystemeventsinterfacelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterfaceList.by_id"]], "by_id() (pyxa.apps.systemevents.xasystemeventslocationlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLocationList.by_id"]], "by_id() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.by_id"]], "by_id() (pyxa.apps.systemevents.xasystemeventsscriptingclasslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClassList.by_id"]], "by_id() (pyxa.apps.systemevents.xasystemeventsscriptingcommandlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommandList.by_id"]], "by_id() (pyxa.apps.systemevents.xasystemeventsscriptingenumerationlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumerationList.by_id"]], "by_id() (pyxa.apps.systemevents.xasystemeventsscriptingenumeratorlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumeratorList.by_id"]], "by_id() (pyxa.apps.systemevents.xasystemeventsscriptingparameterlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameterList.by_id"]], "by_id() (pyxa.apps.systemevents.xasystemeventsscriptingpropertylist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingPropertyList.by_id"]], "by_id() (pyxa.apps.systemevents.xasystemeventsscriptingsuitelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingSuiteList.by_id"]], "by_id() (pyxa.apps.systemevents.xasystemeventsservicelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsServiceList.by_id"]], "by_id() (pyxa.apps.systemevents.xasystemeventsxmldatalist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLDataList.by_id"]], "by_id() (pyxa.apps.systemevents.xasystemeventsxmlelementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLElementList.by_id"]], "by_interface() (pyxa.apps.systemevents.xasystemeventsservicelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsServiceList.by_interface"]], "by_kind() (pyxa.apps.systemevents.xasystemeventsinterfacelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterfaceList.by_kind"]], "by_kind() (pyxa.apps.systemevents.xasystemeventsloginitemlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLoginItemList.by_kind"]], "by_kind() (pyxa.apps.systemevents.xasystemeventspropertylistitemlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListItemList.by_kind"]], "by_kind() (pyxa.apps.systemevents.xasystemeventsscriptingparameterlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameterList.by_kind"]], "by_kind() (pyxa.apps.systemevents.xasystemeventsscriptingpropertylist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingPropertyList.by_kind"]], "by_kind() (pyxa.apps.systemevents.xasystemeventsscriptingresultobjectlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingResultObjectList.by_kind"]], "by_kind() (pyxa.apps.systemevents.xasystemeventsservicelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsServiceList.by_kind"]], "by_listed() (pyxa.apps.systemevents.xasystemeventsscriptingpropertylist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingPropertyList.by_listed"]], "by_listed() (pyxa.apps.systemevents.xasystemeventsscriptingresultobjectlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingResultObjectList.by_listed"]], "by_mac_address() (pyxa.apps.systemevents.xasystemeventsinterfacelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterfaceList.by_mac_address"]], "by_maximum_value() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.by_maximum_value"]], "by_minimum_value() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.by_minimum_value"]], "by_modified() (pyxa.apps.systemevents.xasystemeventsdocumentlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDocumentList.by_modified"]], "by_mtu() (pyxa.apps.systemevents.xasystemeventsinterfacelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterfaceList.by_mtu"]], "by_name() (pyxa.apps.systemevents.xasystemeventsactionlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsActionList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsattributelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAttributeList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsconfigurationlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsConfigurationList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsdocumentlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDocumentList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsfolderactionlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsFolderActionList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsinterfacelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterfaceList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventslocationlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLocationList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsloginitemlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLoginItemList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventspropertylistitemlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListItemList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsscreensaverlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaverList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsscriptlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsscriptingclasslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClassList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsscriptingcommandlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommandList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsscriptingenumerationlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumerationList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsscriptingenumeratorlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumeratorList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsscriptingparameterlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameterList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsscriptingpropertylist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingPropertyList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsscriptingsuitelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingSuiteList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsservicelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsServiceList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsuserlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUserList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsxmlattributelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLAttributeList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsxmldatalist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLDataList.by_name"]], "by_name() (pyxa.apps.systemevents.xasystemeventsxmlelementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLElementList.by_name"]], "by_object_description() (pyxa.apps.systemevents.xasystemeventsactionlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsActionList.by_object_description"]], "by_object_description() (pyxa.apps.systemevents.xasystemeventsscriptingclasslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClassList.by_object_description"]], "by_object_description() (pyxa.apps.systemevents.xasystemeventsscriptingcommandlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommandList.by_object_description"]], "by_object_description() (pyxa.apps.systemevents.xasystemeventsscriptingenumeratorlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumeratorList.by_object_description"]], "by_object_description() (pyxa.apps.systemevents.xasystemeventsscriptingparameterlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameterList.by_object_description"]], "by_object_description() (pyxa.apps.systemevents.xasystemeventsscriptingpropertylist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingPropertyList.by_object_description"]], "by_object_description() (pyxa.apps.systemevents.xasystemeventsscriptingresultobjectlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingResultObjectList.by_object_description"]], "by_object_description() (pyxa.apps.systemevents.xasystemeventsscriptingsuitelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingSuiteList.by_object_description"]], "by_object_description() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.by_object_description"]], "by_optional() (pyxa.apps.systemevents.xasystemeventsscriptingparameterlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameterList.by_optional"]], "by_orientation() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.by_orientation"]], "by_partition_space_used() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.by_partition_space_used"]], "by_path() (pyxa.apps.systemevents.xasystemeventsfolderactionlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsFolderActionList.by_path"]], "by_path() (pyxa.apps.systemevents.xasystemeventsloginitemlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLoginItemList.by_path"]], "by_path() (pyxa.apps.systemevents.xasystemeventsscreensaverlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaverList.by_path"]], "by_path() (pyxa.apps.systemevents.xasystemeventsscriptlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptList.by_path"]], "by_picture() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.by_picture"]], "by_picture_display_style() (pyxa.apps.systemevents.xasystemeventsscreensaverlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaverList.by_picture_display_style"]], "by_picture_path() (pyxa.apps.systemevents.xasystemeventsuserlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUserList.by_picture_path"]], "by_picture_rotation() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.by_picture_rotation"]], "by_pictures_folder() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.by_pictures_folder"]], "by_plural_name() (pyxa.apps.systemevents.xasystemeventsscriptingclasslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClassList.by_plural_name"]], "by_position() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.by_position"]], "by_posix_path() (pyxa.apps.systemevents.xasystemeventsscriptlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptList.by_posix_path"]], "by_random_order() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.by_random_order"]], "by_role() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.by_role"]], "by_role_description() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.by_role_description"]], "by_scripting_result() (pyxa.apps.systemevents.xasystemeventsscriptingcommandlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommandList.by_scripting_result"]], "by_selected() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.by_selected"]], "by_settable() (pyxa.apps.systemevents.xasystemeventsattributelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAttributeList.by_settable"]], "by_short_name() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.by_short_name"]], "by_size() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.by_size"]], "by_speed() (pyxa.apps.systemevents.xasystemeventsinterfacelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterfaceList.by_speed"]], "by_subrole() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.by_subrole"]], "by_suite_name() (pyxa.apps.systemevents.xasystemeventsscriptingclasslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClassList.by_suite_name"]], "by_suite_name() (pyxa.apps.systemevents.xasystemeventsscriptingcommandlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommandList.by_suite_name"]], "by_superclass() (pyxa.apps.systemevents.xasystemeventsscriptingclasslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClassList.by_superclass"]], "by_text() (pyxa.apps.systemevents.xasystemeventspropertylistitemlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListItemList.by_text"]], "by_text() (pyxa.apps.systemevents.xasystemeventsxmldatalist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLDataList.by_text"]], "by_title() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.by_title"]], "by_total_partition_size() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.by_total_partition_size"]], "by_translucent_menu_bar() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.by_translucent_menu_bar"]], "by_unix_id() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.by_unix_id"]], "by_value() (pyxa.apps.systemevents.xasystemeventsattributelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAttributeList.by_value"]], "by_value() (pyxa.apps.systemevents.xasystemeventspropertylistitemlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListItemList.by_value"]], "by_value() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.by_value"]], "by_value() (pyxa.apps.systemevents.xasystemeventsxmlattributelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLAttributeList.by_value"]], "by_value() (pyxa.apps.systemevents.xasystemeventsxmlelementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLElementList.by_value"]], "by_visible() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.by_visible"]], "by_volume() (pyxa.apps.systemevents.xasystemeventsfolderactionlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsFolderActionList.by_volume"]], "cancel() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.cancel"]], "cancel() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.cancel"]], "cd_and_dvd_preferences (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.cd_and_dvd_preferences"]], "change_interval (pyxa.apps.systemevents.xasystemeventsdesktop property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktop.change_interval"]], "change_interval() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.change_interval"]], "checkboxes() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.checkboxes"]], "checkboxes() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.checkboxes"]], "classic (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.classic"]], "classic() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.classic"]], "classic_domain (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.classic_domain"]], "click() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.click"]], "click() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.click"]], "click() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.click"]], "close() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.close"]], "close() (pyxa.apps.systemevents.xasystemeventswindowlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindowList.close"]], "collapse() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.collapse"]], "collapse() (pyxa.apps.systemevents.xasystemeventswindowlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindowList.collapse"]], "collating (pyxa.apps.systemevents.xasystemeventsprintsettings property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPrintSettings.collating"]], "color_wells() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.color_wells"]], "color_wells() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.color_wells"]], "columns() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.columns"]], "combo_boxes() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.combo_boxes"]], "combo_boxes() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.combo_boxes"]], "confirm() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.confirm"]], "confirm() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.confirm"]], "connect() (pyxa.apps.systemevents.xasystemeventsconfiguration method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsConfiguration.connect"]], "connect() (pyxa.apps.systemevents.xasystemeventsservice method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsService.connect"]], "connected (pyxa.apps.systemevents.xasystemeventsconfiguration property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsConfiguration.connected"]], "connected() (pyxa.apps.systemevents.xasystemeventsconfigurationlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsConfigurationList.connected"]], "contents (pyxa.apps.systemevents.xasystemeventspropertylistfile property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListFile.contents"]], "contents (pyxa.apps.systemevents.xasystemeventsxmlfile property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLFile.contents"]], "contents() (pyxa.apps.systemevents.xasystemeventspropertylistfilelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListFileList.contents"]], "contents() (pyxa.apps.systemevents.xasystemeventsxmlfilelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLFileList.contents"]], "copies (pyxa.apps.systemevents.xasystemeventsprintsettings property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPrintSettings.copies"]], "creator_type (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.creator_type"]], "creator_type() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.creator_type"]], "current_configuration (pyxa.apps.systemevents.xasystemeventsservice property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsService.current_configuration"]], "current_configuration() (pyxa.apps.systemevents.xasystemeventsservicelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsServiceList.current_configuration"]], "current_desktop (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.current_desktop"]], "current_location (pyxa.apps.systemevents.xasystemeventsnetworkpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsNetworkPreferencesObject.current_location"]], "current_screen_saver (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.current_screen_saver"]], "current_user (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.current_user"]], "custom_application (pyxa.apps.systemevents.xasystemeventsinsertionpreference property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInsertionPreference.custom_application"]], "custom_script (pyxa.apps.systemevents.xasystemeventsinsertionpreference property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInsertionPreference.custom_script"]], "dark_mode (pyxa.apps.systemevents.xasystemeventsappearancepreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAppearancePreferencesObject.dark_mode"]], "decrement() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.decrement"]], "decrement() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.decrement"]], "delay_interval (pyxa.apps.systemevents.xasystemeventsscreensaverpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaverPreferencesObject.delay_interval"]], "delete() (pyxa.apps.systemevents.xasystemeventsloginitem method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLoginItem.delete"]], "desk_accessory_file (pyxa.apps.systemevents.xasystemeventsdeskaccessoryprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDeskAccessoryProcess.desk_accessory_file"]], "desk_accessory_file() (pyxa.apps.systemevents.xasystemeventsdeskaccessoryprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDeskAccessoryProcessList.desk_accessory_file"]], "desk_accessory_processes() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.desk_accessory_processes"]], "desktop_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.desktop_folder"]], "desktop_pictures_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.desktop_pictures_folder"]], "desktops() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.desktops"]], "direct_parameter (pyxa.apps.systemevents.xasystemeventsscriptingcommand property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommand.direct_parameter"]], "direct_parameter() (pyxa.apps.systemevents.xasystemeventsscriptingcommandlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommandList.direct_parameter"]], "disconnect() (pyxa.apps.systemevents.xasystemeventsconfiguration method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsConfiguration.disconnect"]], "disconnect() (pyxa.apps.systemevents.xasystemeventsservice method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsService.disconnect"]], "disk_items() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.disk_items"]], "disks() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.disks"]], "display_name (pyxa.apps.systemevents.xasystemeventsdesktop property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktop.display_name"]], "display_name() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.display_name"]], "displayedname (pyxa.apps.systemevents.xasystemeventsscreensaver property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaver.displayedName"]], "displayed_name (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.displayed_name"]], "displayed_name() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.displayed_name"]], "displayed_name() (pyxa.apps.systemevents.xasystemeventsscreensaverlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaverList.displayed_name"]], "dock_preferences (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.dock_preferences"]], "dock_size (pyxa.apps.systemevents.xasystemeventsdockpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDockPreferencesObject.dock_size"]], "document (pyxa.apps.systemevents.xasystemeventswindow property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.document"]], "documents() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.documents"]], "documents_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.documents_folder"]], "domains() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.domains"]], "double_click_behavior (pyxa.apps.systemevents.xasystemeventsdockpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDockPreferencesObject.double_click_behavior"]], "downloads_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.downloads_folder"]], "drawers() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.drawers"]], "drawers() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.drawers"]], "duplex (pyxa.apps.systemevents.xasystemeventsinterface property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterface.duplex"]], "duplex() (pyxa.apps.systemevents.xasystemeventsinterfacelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterfaceList.duplex"]], "dynamic_style (pyxa.apps.systemevents.xasystemeventsdesktop property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktop.dynamic_style"]], "dynamic_style() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.dynamic_style"]], "enable() (pyxa.apps.systemevents.xasystemeventsfolderaction method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsFolderAction.enable"]], "enabled (pyxa.apps.systemevents.xasystemeventsfolderaction property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsFolderAction.enabled"]], "enabled (pyxa.apps.systemevents.xasystemeventsscript property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScript.enabled"]], "enabled (pyxa.apps.systemevents.xasystemeventsuielement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.enabled"]], "enabled (pyxa.apps.systemevents.xasystemeventswindow property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.enabled"]], "enabled() (pyxa.apps.systemevents.xasystemeventsfolderactionlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsFolderActionList.enabled"]], "enabled() (pyxa.apps.systemevents.xasystemeventsscriptlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptList.enabled"]], "enabled() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.enabled"]], "end_transaction() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.end_transaction"]], "ending_page (pyxa.apps.systemevents.xasystemeventsprintsettings property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPrintSettings.ending_page"]], "entire_contents (pyxa.apps.systemevents.xasystemeventsuielement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.entire_contents"]], "entire_contents (pyxa.apps.systemevents.xasystemeventswindow property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.entire_contents"]], "entire_contents() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.entire_contents"]], "enumerated (pyxa.apps.systemevents.xasystemeventsscriptingproperty property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingProperty.enumerated"]], "enumerated (pyxa.apps.systemevents.xasystemeventsscriptingresultobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingResultObject.enumerated"]], "enumerated() (pyxa.apps.systemevents.xasystemeventsscriptingpropertylist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingPropertyList.enumerated"]], "enumerated() (pyxa.apps.systemevents.xasystemeventsscriptingresultobjectlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingResultObjectList.enumerated"]], "error_handling (pyxa.apps.systemevents.xasystemeventsprintsettings property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPrintSettings.error_handling"]], "favorites_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.favorites_folder"]], "fax_number (pyxa.apps.systemevents.xasystemeventsprintsettings property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPrintSettings.fax_number"]], "file (pyxa.apps.systemevents.xasystemeventsdocument property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDocument.file"]], "file (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.file"]], "file() (pyxa.apps.systemevents.xasystemeventsdocumentlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDocumentList.file"]], "file() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.file"]], "file_packages() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.file_packages"]], "file_type (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.file_type"]], "file_type() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.file_type"]], "files() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.files"]], "focused (pyxa.apps.systemevents.xasystemeventsuielement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.focused"]], "focused (pyxa.apps.systemevents.xasystemeventswindow property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.focused"]], "focused() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.focused"]], "folder_action_scripts_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.folder_action_scripts_folder"]], "folder_actions() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.folder_actions"]], "folder_actions_enabled (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.folder_actions_enabled"]], "folders() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.folders"]], "font_smoothing (pyxa.apps.systemevents.xasystemeventsappearancepreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAppearancePreferencesObject.font_smoothing"]], "font_smoothing_style (pyxa.apps.systemevents.xasystemeventsappearancepreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAppearancePreferencesObject.font_smoothing_style"]], "fonts_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.fonts_folder"]], "front_window (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.front_window"]], "frontmost (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.frontmost"]], "frontmost (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.frontmost"]], "full_name (pyxa.apps.systemevents.xasystemeventsuser property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUser.full_name"]], "full_name() (pyxa.apps.systemevents.xasystemeventsuserlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUserList.full_name"]], "groups() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.groups"]], "groups() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.groups"]], "grow_areas() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.grow_areas"]], "grow_areas() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.grow_areas"]], "has_scripting_terminology (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.has_scripting_terminology"]], "has_scripting_terminology() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.has_scripting_terminology"]], "help (pyxa.apps.systemevents.xasystemeventsuielement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.help"]], "help (pyxa.apps.systemevents.xasystemeventswindow property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.help"]], "help() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.help"]], "hidden (pyxa.apps.systemevents.xasystemeventsloginitem property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLoginItem.hidden"]], "hidden (pyxa.apps.systemevents.xasystemeventsscriptingclass property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClass.hidden"]], "hidden (pyxa.apps.systemevents.xasystemeventsscriptingcommand property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommand.hidden"]], "hidden (pyxa.apps.systemevents.xasystemeventsscriptingenumeration property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumeration.hidden"]], "hidden (pyxa.apps.systemevents.xasystemeventsscriptingenumerator property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumerator.hidden"]], "hidden (pyxa.apps.systemevents.xasystemeventsscriptingparameter property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameter.hidden"]], "hidden (pyxa.apps.systemevents.xasystemeventsscriptingproperty property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingProperty.hidden"]], "hidden (pyxa.apps.systemevents.xasystemeventsscriptingsuite property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingSuite.hidden"]], "hidden() (pyxa.apps.systemevents.xasystemeventsloginitemlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLoginItemList.hidden"]], "hidden() (pyxa.apps.systemevents.xasystemeventsscriptingclasslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClassList.hidden"]], "hidden() (pyxa.apps.systemevents.xasystemeventsscriptingcommandlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommandList.hidden"]], "hidden() (pyxa.apps.systemevents.xasystemeventsscriptingenumerationlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumerationList.hidden"]], "hidden() (pyxa.apps.systemevents.xasystemeventsscriptingenumeratorlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumeratorList.hidden"]], "hidden() (pyxa.apps.systemevents.xasystemeventsscriptingparameterlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameterList.hidden"]], "hidden() (pyxa.apps.systemevents.xasystemeventsscriptingpropertylist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingPropertyList.hidden"]], "hidden() (pyxa.apps.systemevents.xasystemeventsscriptingsuitelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingSuiteList.hidden"]], "highlight_color (pyxa.apps.systemevents.xasystemeventsappearancepreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAppearancePreferencesObject.highlight_color"]], "home_directory (pyxa.apps.systemevents.xasystemeventsuser property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUser.home_directory"]], "home_directory() (pyxa.apps.systemevents.xasystemeventsuserlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUserList.home_directory"]], "home_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.home_folder"]], "id (pyxa.apps.systemevents.xasystemeventsconfiguration property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsConfiguration.id"]], "id (pyxa.apps.systemevents.xasystemeventsdesktop property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktop.id"]], "id (pyxa.apps.systemevents.xasystemeventsinterface property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterface.id"]], "id (pyxa.apps.systemevents.xasystemeventslocation property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLocation.id"]], "id (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.id"]], "id (pyxa.apps.systemevents.xasystemeventsscriptingclass property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClass.id"]], "id (pyxa.apps.systemevents.xasystemeventsscriptingcommand property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommand.id"]], "id (pyxa.apps.systemevents.xasystemeventsscriptingenumeration property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumeration.id"]], "id (pyxa.apps.systemevents.xasystemeventsscriptingenumerator property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumerator.id"]], "id (pyxa.apps.systemevents.xasystemeventsscriptingparameter property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameter.id"]], "id (pyxa.apps.systemevents.xasystemeventsscriptingproperty property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingProperty.id"]], "id (pyxa.apps.systemevents.xasystemeventsscriptingsuite property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingSuite.id"]], "id (pyxa.apps.systemevents.xasystemeventsservice property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsService.id"]], "id (pyxa.apps.systemevents.xasystemeventsxmldata property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLData.id"]], "id (pyxa.apps.systemevents.xasystemeventsxmlelement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLElement.id"]], "id() (pyxa.apps.systemevents.xasystemeventsconfigurationlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsConfigurationList.id"]], "id() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.id"]], "id() (pyxa.apps.systemevents.xasystemeventsinterfacelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterfaceList.id"]], "id() (pyxa.apps.systemevents.xasystemeventslocationlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLocationList.id"]], "id() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.id"]], "id() (pyxa.apps.systemevents.xasystemeventsscriptingclasslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClassList.id"]], "id() (pyxa.apps.systemevents.xasystemeventsscriptingcommandlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommandList.id"]], "id() (pyxa.apps.systemevents.xasystemeventsscriptingenumerationlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumerationList.id"]], "id() (pyxa.apps.systemevents.xasystemeventsscriptingenumeratorlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumeratorList.id"]], "id() (pyxa.apps.systemevents.xasystemeventsscriptingparameterlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameterList.id"]], "id() (pyxa.apps.systemevents.xasystemeventsscriptingpropertylist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingPropertyList.id"]], "id() (pyxa.apps.systemevents.xasystemeventsscriptingsuitelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingSuiteList.id"]], "id() (pyxa.apps.systemevents.xasystemeventsservicelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsServiceList.id"]], "id() (pyxa.apps.systemevents.xasystemeventsxmldatalist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLDataList.id"]], "id() (pyxa.apps.systemevents.xasystemeventsxmlelementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLElementList.id"]], "images() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.images"]], "images() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.images"]], "increment() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.increment"]], "increment() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.increment"]], "incrementors() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.incrementors"]], "incrementors() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.incrementors"]], "insertion_action (pyxa.apps.systemevents.xasystemeventsinsertionpreference property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInsertionPreference.insertion_action"]], "interface (pyxa.apps.systemevents.xasystemeventsservice property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsService.interface"]], "interface() (pyxa.apps.systemevents.xasystemeventsservicelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsServiceList.interface"]], "interfaces() (pyxa.apps.systemevents.xasystemeventsnetworkpreferencesobject method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsNetworkPreferencesObject.interfaces"]], "key_code() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.key_code"]], "key_stroke() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.key_stroke"]], "kind (pyxa.apps.systemevents.xasystemeventsinterface property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterface.kind"]], "kind (pyxa.apps.systemevents.xasystemeventsloginitem property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLoginItem.kind"]], "kind (pyxa.apps.systemevents.xasystemeventspropertylistitem property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListItem.kind"]], "kind (pyxa.apps.systemevents.xasystemeventsscriptingparameter property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameter.kind"]], "kind (pyxa.apps.systemevents.xasystemeventsscriptingproperty property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingProperty.kind"]], "kind (pyxa.apps.systemevents.xasystemeventsscriptingresultobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingResultObject.kind"]], "kind (pyxa.apps.systemevents.xasystemeventsservice property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsService.kind"]], "kind() (pyxa.apps.systemevents.xasystemeventsinterfacelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterfaceList.kind"]], "kind() (pyxa.apps.systemevents.xasystemeventsloginitemlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLoginItemList.kind"]], "kind() (pyxa.apps.systemevents.xasystemeventspropertylistitemlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListItemList.kind"]], "kind() (pyxa.apps.systemevents.xasystemeventsscriptingparameterlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameterList.kind"]], "kind() (pyxa.apps.systemevents.xasystemeventsscriptingpropertylist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingPropertyList.kind"]], "kind() (pyxa.apps.systemevents.xasystemeventsscriptingresultobjectlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingResultObjectList.kind"]], "kind() (pyxa.apps.systemevents.xasystemeventsservicelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsServiceList.kind"]], "library_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.library_folder"]], "listed (pyxa.apps.systemevents.xasystemeventsscriptingproperty property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingProperty.listed"]], "listed (pyxa.apps.systemevents.xasystemeventsscriptingresultobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingResultObject.listed"]], "listed() (pyxa.apps.systemevents.xasystemeventsscriptingpropertylist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingPropertyList.listed"]], "listed() (pyxa.apps.systemevents.xasystemeventsscriptingresultobjectlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingResultObjectList.listed"]], "lists() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.lists"]], "lists() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.lists"]], "local_domain (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.local_domain"]], "locations() (pyxa.apps.systemevents.xasystemeventsnetworkpreferencesobject method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsNetworkPreferencesObject.locations"]], "log_out() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.log_out"]], "log_out_when_inactive (pyxa.apps.systemevents.xasystemeventssecuritypreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsSecurityPreferencesObject.log_out_when_inactive"]], "log_out_when_inactive_interval (pyxa.apps.systemevents.xasystemeventssecuritypreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsSecurityPreferencesObject.log_out_when_inactive_interval"]], "login_items() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.login_items"]], "mac_address (pyxa.apps.systemevents.xasystemeventsinterface property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterface.mac_address"]], "mac_address() (pyxa.apps.systemevents.xasystemeventsinterfacelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterfaceList.mac_address"]], "magnification (pyxa.apps.systemevents.xasystemeventsdockpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDockPreferencesObject.magnification"]], "magnification_size (pyxa.apps.systemevents.xasystemeventsdockpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDockPreferencesObject.magnification_size"]], "main_screen_only (pyxa.apps.systemevents.xasystemeventsscreensaverpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaverPreferencesObject.main_screen_only"]], "make() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.make"]], "maximum_value (pyxa.apps.systemevents.xasystemeventsuielement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.maximum_value"]], "maximum_value (pyxa.apps.systemevents.xasystemeventswindow property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.maximum_value"]], "maximum_value() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.maximum_value"]], "menu_bar_items() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.menu_bar_items"]], "menu_bars() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.menu_bars"]], "menu_buttons() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.menu_buttons"]], "menu_buttons() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.menu_buttons"]], "menu_items() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.menu_items"]], "menus() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.menus"]], "minimize_effect (pyxa.apps.systemevents.xasystemeventsdockpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDockPreferencesObject.minimize_effect"]], "minimize_into_application (pyxa.apps.systemevents.xasystemeventsdockpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDockPreferencesObject.minimize_into_application"]], "minimum_value (pyxa.apps.systemevents.xasystemeventsuielement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.minimum_value"]], "minimum_value (pyxa.apps.systemevents.xasystemeventswindow property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.minimum_value"]], "minimum_value() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.minimum_value"]], "modified (pyxa.apps.systemevents.xasystemeventsdocument property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDocument.modified"]], "modified() (pyxa.apps.systemevents.xasystemeventsdocumentlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDocumentList.modified"]], "movies_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.movies_folder"]], "mtu (pyxa.apps.systemevents.xasystemeventsinterface property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterface.mtu"]], "mtu() (pyxa.apps.systemevents.xasystemeventsinterfacelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterfaceList.mtu"]], "music_cd (pyxa.apps.systemevents.xasystemeventscdanddvdpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsCDAndDVDPreferencesObject.music_cd"]], "music_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.music_folder"]], "name (pyxa.apps.systemevents.xasystemeventsaction property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAction.name"]], "name (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.name"]], "name (pyxa.apps.systemevents.xasystemeventsattribute property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAttribute.name"]], "name (pyxa.apps.systemevents.xasystemeventsconfiguration property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsConfiguration.name"]], "name (pyxa.apps.systemevents.xasystemeventsdesktop property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktop.name"]], "name (pyxa.apps.systemevents.xasystemeventsdocument property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDocument.name"]], "name (pyxa.apps.systemevents.xasystemeventsfolderaction property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsFolderAction.name"]], "name (pyxa.apps.systemevents.xasystemeventsinterface property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterface.name"]], "name (pyxa.apps.systemevents.xasystemeventslocation property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLocation.name"]], "name (pyxa.apps.systemevents.xasystemeventsloginitem property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLoginItem.name"]], "name (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.name"]], "name (pyxa.apps.systemevents.xasystemeventspropertylistitem property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListItem.name"]], "name (pyxa.apps.systemevents.xasystemeventsscreensaver property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaver.name"]], "name (pyxa.apps.systemevents.xasystemeventsscript property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScript.name"]], "name (pyxa.apps.systemevents.xasystemeventsscriptingclass property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClass.name"]], "name (pyxa.apps.systemevents.xasystemeventsscriptingcommand property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommand.name"]], "name (pyxa.apps.systemevents.xasystemeventsscriptingenumeration property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumeration.name"]], "name (pyxa.apps.systemevents.xasystemeventsscriptingenumerator property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumerator.name"]], "name (pyxa.apps.systemevents.xasystemeventsscriptingparameter property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameter.name"]], "name (pyxa.apps.systemevents.xasystemeventsscriptingproperty property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingProperty.name"]], "name (pyxa.apps.systemevents.xasystemeventsscriptingsuite property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingSuite.name"]], "name (pyxa.apps.systemevents.xasystemeventsservice property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsService.name"]], "name (pyxa.apps.systemevents.xasystemeventsuielement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.name"]], "name (pyxa.apps.systemevents.xasystemeventsuser property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUser.name"]], "name (pyxa.apps.systemevents.xasystemeventswindow property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.name"]], "name (pyxa.apps.systemevents.xasystemeventsxmlattribute property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLAttribute.name"]], "name (pyxa.apps.systemevents.xasystemeventsxmldata property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLData.name"]], "name (pyxa.apps.systemevents.xasystemeventsxmlelement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLElement.name"]], "name() (pyxa.apps.systemevents.xasystemeventsactionlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsActionList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsattributelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAttributeList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsconfigurationlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsConfigurationList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsdocumentlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDocumentList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsfolderactionlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsFolderActionList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsinterfacelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterfaceList.name"]], "name() (pyxa.apps.systemevents.xasystemeventslocationlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLocationList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsloginitemlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLoginItemList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.name"]], "name() (pyxa.apps.systemevents.xasystemeventspropertylistitemlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListItemList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsscreensaverlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaverList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsscriptlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsscriptingclasslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClassList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsscriptingcommandlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommandList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsscriptingenumerationlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumerationList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsscriptingenumeratorlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumeratorList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsscriptingparameterlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameterList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsscriptingpropertylist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingPropertyList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsscriptingsuitelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingSuiteList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsservicelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsServiceList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsuserlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUserList.name"]], "name() (pyxa.apps.systemevents.xasystemeventswindowlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindowList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsxmlattributelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLAttributeList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsxmldatalist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLDataList.name"]], "name() (pyxa.apps.systemevents.xasystemeventsxmlelementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLElementList.name"]], "network_domain (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.network_domain"]], "network_preferences (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.network_preferences"]], "object_description (pyxa.apps.systemevents.xasystemeventsaction property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAction.object_description"]], "object_description (pyxa.apps.systemevents.xasystemeventsscriptingclass property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClass.object_description"]], "object_description (pyxa.apps.systemevents.xasystemeventsscriptingcommand property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommand.object_description"]], "object_description (pyxa.apps.systemevents.xasystemeventsscriptingenumerator property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumerator.object_description"]], "object_description (pyxa.apps.systemevents.xasystemeventsscriptingparameter property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameter.object_description"]], "object_description (pyxa.apps.systemevents.xasystemeventsscriptingproperty property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingProperty.object_description"]], "object_description (pyxa.apps.systemevents.xasystemeventsscriptingresultobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingResultObject.object_description"]], "object_description (pyxa.apps.systemevents.xasystemeventsscriptingsuite property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingSuite.object_description"]], "object_description (pyxa.apps.systemevents.xasystemeventsuielement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.object_description"]], "object_description (pyxa.apps.systemevents.xasystemeventswindow property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.object_description"]], "object_description() (pyxa.apps.systemevents.xasystemeventsactionlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsActionList.object_description"]], "object_description() (pyxa.apps.systemevents.xasystemeventsscriptingclasslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClassList.object_description"]], "object_description() (pyxa.apps.systemevents.xasystemeventsscriptingcommandlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommandList.object_description"]], "object_description() (pyxa.apps.systemevents.xasystemeventsscriptingenumeratorlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumeratorList.object_description"]], "object_description() (pyxa.apps.systemevents.xasystemeventsscriptingparameterlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameterList.object_description"]], "object_description() (pyxa.apps.systemevents.xasystemeventsscriptingpropertylist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingPropertyList.object_description"]], "object_description() (pyxa.apps.systemevents.xasystemeventsscriptingresultobjectlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingResultObjectList.object_description"]], "object_description() (pyxa.apps.systemevents.xasystemeventsscriptingsuitelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingSuiteList.object_description"]], "object_description() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.object_description"]], "optional (pyxa.apps.systemevents.xasystemeventsscriptingparameter property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameter.optional"]], "optional() (pyxa.apps.systemevents.xasystemeventsscriptingparameterlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingParameterList.optional"]], "orientation (pyxa.apps.systemevents.xasystemeventsuielement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.orientation"]], "orientation (pyxa.apps.systemevents.xasystemeventswindow property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.orientation"]], "orientation() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.orientation"]], "outlines() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.outlines"]], "outlines() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.outlines"]], "pages_across (pyxa.apps.systemevents.xasystemeventsprintsettings property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPrintSettings.pages_across"]], "pages_down (pyxa.apps.systemevents.xasystemeventsprintsettings property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPrintSettings.pages_down"]], "partition_space_used (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.partition_space_used"]], "partition_space_used() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.partition_space_used"]], "path (pyxa.apps.systemevents.xasystemeventsfolderaction property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsFolderAction.path"]], "path (pyxa.apps.systemevents.xasystemeventsloginitem property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLoginItem.path"]], "path (pyxa.apps.systemevents.xasystemeventsscreensaver property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaver.path"]], "path (pyxa.apps.systemevents.xasystemeventsscript property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScript.path"]], "path() (pyxa.apps.systemevents.xasystemeventsfolderactionlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsFolderActionList.path"]], "path() (pyxa.apps.systemevents.xasystemeventsloginitemlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsLoginItemList.path"]], "path() (pyxa.apps.systemevents.xasystemeventsscreensaverlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaverList.path"]], "path() (pyxa.apps.systemevents.xasystemeventsscriptlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptList.path"]], "perform() (pyxa.apps.systemevents.xasystemeventsaction method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAction.perform"]], "pick() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.pick"]], "pick() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.pick"]], "picture (pyxa.apps.systemevents.xasystemeventsdesktop property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktop.picture"]], "picture() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.picture"]], "picture_cd (pyxa.apps.systemevents.xasystemeventscdanddvdpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsCDAndDVDPreferencesObject.picture_cd"]], "picture_display_style (pyxa.apps.systemevents.xasystemeventsscreensaver property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaver.picture_display_style"]], "picture_display_style() (pyxa.apps.systemevents.xasystemeventsscreensaverlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaverList.picture_display_style"]], "picture_path (pyxa.apps.systemevents.xasystemeventsuser property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUser.picture_path"]], "picture_path() (pyxa.apps.systemevents.xasystemeventsuserlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUserList.picture_path"]], "picture_rotation (pyxa.apps.systemevents.xasystemeventsdesktop property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktop.picture_rotation"]], "picture_rotation() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.picture_rotation"]], "pictures_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.pictures_folder"]], "pictures_folder (pyxa.apps.systemevents.xasystemeventsdesktop property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktop.pictures_folder"]], "pictures_folder() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.pictures_folder"]], "plural_name (pyxa.apps.systemevents.xasystemeventsscriptingclass property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClass.plural_name"]], "plural_name() (pyxa.apps.systemevents.xasystemeventsscriptingclasslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClassList.plural_name"]], "pop_overs() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.pop_overs"]], "pop_overs() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.pop_overs"]], "pop_up_buttons() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.pop_up_buttons"]], "pop_up_buttons() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.pop_up_buttons"]], "position (pyxa.apps.systemevents.xasystemeventsuielement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.position"]], "position (pyxa.apps.systemevents.xasystemeventswindow property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.position"]], "position() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.position"]], "posix_path (pyxa.apps.systemevents.xasystemeventsscript property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScript.posix_path"]], "posix_path() (pyxa.apps.systemevents.xasystemeventsscriptlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptList.posix_path"]], "preferences_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.preferences_folder"]], "processes() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.processes"]], "progress_indicators() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.progress_indicators"]], "progress_indicators() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.progress_indicators"]], "property_list_files() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.property_list_files"]], "property_list_items() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.property_list_items"]], "property_list_items() (pyxa.apps.systemevents.xasystemeventspropertylistitem method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListItem.property_list_items"]], "public_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.public_folder"]], "quit_delay (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.quit_delay"]], "radio_buttons() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.radio_buttons"]], "radio_buttons() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.radio_buttons"]], "radio_groups() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.radio_groups"]], "radio_groups() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.radio_groups"]], "random_folder() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.random_folder"]], "random_order (pyxa.apps.systemevents.xasystemeventsdesktop property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktop.random_order"]], "recent_applications_limit (pyxa.apps.systemevents.xasystemeventsappearancepreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAppearancePreferencesObject.recent_applications_limit"]], "recent_documents_limit (pyxa.apps.systemevents.xasystemeventsappearancepreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAppearancePreferencesObject.recent_documents_limit"]], "recent_servers_limit (pyxa.apps.systemevents.xasystemeventsappearancepreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAppearancePreferencesObject.recent_servers_limit"]], "relevance_indicators() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.relevance_indicators"]], "relevance_indicators() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.relevance_indicators"]], "requested_print_time (pyxa.apps.systemevents.xasystemeventsprintsettings property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPrintSettings.requested_print_time"]], "require_password_to_unlock (pyxa.apps.systemevents.xasystemeventssecuritypreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsSecurityPreferencesObject.require_password_to_unlock"]], "require_password_to_wake (pyxa.apps.systemevents.xasystemeventssecuritypreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsSecurityPreferencesObject.require_password_to_wake"]], "restart() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.restart"]], "role (pyxa.apps.systemevents.xasystemeventsuielement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.role"]], "role (pyxa.apps.systemevents.xasystemeventswindow property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.role"]], "role() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.role"]], "role_description (pyxa.apps.systemevents.xasystemeventsuielement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.role_description"]], "role_description (pyxa.apps.systemevents.xasystemeventswindow property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.role_description"]], "role_description() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.role_description"]], "rows() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.rows"]], "running (pyxa.apps.systemevents.xasystemeventsscreensaverpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaverPreferencesObject.running"]], "save() (pyxa.apps.systemevents.xasystemeventsdocument method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDocument.save"]], "screen_edge (pyxa.apps.systemevents.xasystemeventsdockpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDockPreferencesObject.screen_edge"]], "screen_saver_preferences (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.screen_saver_preferences"]], "screen_savers() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.screen_savers"]], "script_menu_enabled (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.script_menu_enabled"]], "scripting_additions_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.scripting_additions_folder"]], "scripting_classes() (pyxa.apps.systemevents.xasystemeventsscriptingsuite method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingSuite.scripting_classes"]], "scripting_commands() (pyxa.apps.systemevents.xasystemeventsscriptingsuite method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingSuite.scripting_commands"]], "scripting_definition (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.scripting_definition"]], "scripting_elements() (pyxa.apps.systemevents.xasystemeventsscriptingclass method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClass.scripting_elements"]], "scripting_enumerations() (pyxa.apps.systemevents.xasystemeventsscriptingsuite method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingSuite.scripting_enumerations"]], "scripting_enumerators() (pyxa.apps.systemevents.xasystemeventsscriptingenumeration method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingEnumeration.scripting_enumerators"]], "scripting_parameters() (pyxa.apps.systemevents.xasystemeventsscriptingcommand method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommand.scripting_parameters"]], "scripting_properties() (pyxa.apps.systemevents.xasystemeventsscriptingclass method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClass.scripting_properties"]], "scripting_result (pyxa.apps.systemevents.xasystemeventsscriptingcommand property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommand.scripting_result"]], "scripting_result() (pyxa.apps.systemevents.xasystemeventsscriptingcommandlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommandList.scripting_result"]], "scripting_suites() (pyxa.apps.systemevents.xasystemeventsscriptingdefinitionobject method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingDefinitionObject.scripting_suites"]], "scripts() (pyxa.apps.systemevents.xasystemeventsfolderaction method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsFolderAction.scripts"]], "scripts_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.scripts_folder"]], "scroll_areas() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.scroll_areas"]], "scroll_areas() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.scroll_areas"]], "scroll_bar_action (pyxa.apps.systemevents.xasystemeventsappearancepreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAppearancePreferencesObject.scroll_bar_action"]], "scroll_bars() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.scroll_bars"]], "scroll_bars() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.scroll_bars"]], "secure_virtual_memory (pyxa.apps.systemevents.xasystemeventssecuritypreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsSecurityPreferencesObject.secure_virtual_memory"]], "security_preferences (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.security_preferences"]], "selected (pyxa.apps.systemevents.xasystemeventsuielement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.selected"]], "selected (pyxa.apps.systemevents.xasystemeventswindow property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.selected"]], "selected() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.selected"]], "services() (pyxa.apps.systemevents.xasystemeventsnetworkpreferencesobject method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsNetworkPreferencesObject.services"]], "settable (pyxa.apps.systemevents.xasystemeventsattribute property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAttribute.settable"]], "settable() (pyxa.apps.systemevents.xasystemeventsattributelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAttributeList.settable"]], "shared_documents_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.shared_documents_folder"]], "sheets() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.sheets"]], "sheets() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.sheets"]], "short_name (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.short_name"]], "short_name() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.short_name"]], "show_clock (pyxa.apps.systemevents.xasystemeventsscreensaverpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaverPreferencesObject.show_clock"]], "show_indicators (pyxa.apps.systemevents.xasystemeventsdockpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDockPreferencesObject.show_indicators"]], "show_recents (pyxa.apps.systemevents.xasystemeventsdockpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDockPreferencesObject.show_recents"]], "shut_down() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.shut_down"]], "sites_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.sites_folder"]], "size (pyxa.apps.systemevents.xasystemeventsuielement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.size"]], "size (pyxa.apps.systemevents.xasystemeventswindow property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.size"]], "size() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.size"]], "sleep() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.sleep"]], "sliders() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.sliders"]], "sliders() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.sliders"]], "smooth_scrolling (pyxa.apps.systemevents.xasystemeventsappearancepreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAppearancePreferencesObject.smooth_scrolling"]], "speakable_items_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.speakable_items_folder"]], "speed (pyxa.apps.systemevents.xasystemeventsinterface property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterface.speed"]], "speed() (pyxa.apps.systemevents.xasystemeventsinterfacelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsInterfaceList.speed"]], "splitter_groups() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.splitter_groups"]], "splitter_groups() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.splitter_groups"]], "splitters() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.splitters"]], "splitters() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.splitters"]], "start() (pyxa.apps.systemevents.xasystemeventsscreensaver method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaver.start"]], "start() (pyxa.apps.systemevents.xasystemeventsscreensaverpreferencesobject method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaverPreferencesObject.start"]], "starting_page (pyxa.apps.systemevents.xasystemeventsprintsettings property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPrintSettings.starting_page"]], "startup_disk (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.startup_disk"]], "static_texts() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.static_texts"]], "static_texts() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.static_texts"]], "stop() (pyxa.apps.systemevents.xasystemeventsscreensaver method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaver.stop"]], "stop() (pyxa.apps.systemevents.xasystemeventsscreensaverpreferencesobject method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScreenSaverPreferencesObject.stop"]], "subrole (pyxa.apps.systemevents.xasystemeventsuielement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.subrole"]], "subrole (pyxa.apps.systemevents.xasystemeventswindow property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.subrole"]], "subrole() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.subrole"]], "suite_name (pyxa.apps.systemevents.xasystemeventsscriptingclass property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClass.suite_name"]], "suite_name (pyxa.apps.systemevents.xasystemeventsscriptingcommand property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommand.suite_name"]], "suite_name() (pyxa.apps.systemevents.xasystemeventsscriptingclasslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClassList.suite_name"]], "suite_name() (pyxa.apps.systemevents.xasystemeventsscriptingcommandlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingCommandList.suite_name"]], "superclass (pyxa.apps.systemevents.xasystemeventsscriptingclass property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClass.superclass"]], "superclass() (pyxa.apps.systemevents.xasystemeventsscriptingclasslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsScriptingClassList.superclass"]], "system_domain (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.system_domain"]], "tab_groups() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.tab_groups"]], "tab_groups() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.tab_groups"]], "tables() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.tables"]], "tables() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.tables"]], "target_printer (pyxa.apps.systemevents.xasystemeventsprintsettings property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPrintSettings.target_printer"]], "temporary_items_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.temporary_items_folder"]], "text (pyxa.apps.systemevents.xasystemeventspropertylistitem property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListItem.text"]], "text (pyxa.apps.systemevents.xasystemeventsxmldata property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLData.text"]], "text() (pyxa.apps.systemevents.xasystemeventspropertylistitemlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListItemList.text"]], "text() (pyxa.apps.systemevents.xasystemeventsxmldatalist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLDataList.text"]], "text_areas() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.text_areas"]], "text_areas() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.text_areas"]], "text_fields() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.text_fields"]], "text_fields() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.text_fields"]], "title (pyxa.apps.systemevents.xasystemeventsuielement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.title"]], "title (pyxa.apps.systemevents.xasystemeventswindow property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.title"]], "title() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.title"]], "toolbars() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.toolbars"]], "toolbars() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.toolbars"]], "total_partition_size (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.total_partition_size"]], "total_partition_size() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.total_partition_size"]], "translucent_menu_bar (pyxa.apps.systemevents.xasystemeventsdesktop property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktop.translucent_menu_bar"]], "translucent_menu_bar() (pyxa.apps.systemevents.xasystemeventsdesktoplist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktopList.translucent_menu_bar"]], "transluscent_menu_bar (pyxa.apps.systemevents.xasystemeventsdesktop property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsDesktop.transluscent_menu_bar"]], "trash (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.trash"]], "ui_elements() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.ui_elements"]], "ui_elements() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.ui_elements"]], "ui_elements() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.ui_elements"]], "ui_elements_enabled (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.ui_elements_enabled"]], "uncollapse() (pyxa.apps.systemevents.xasystemeventswindow method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.uncollapse"]], "uncollapse() (pyxa.apps.systemevents.xasystemeventswindowlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindowList.uncollapse"]], "unix_id (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.unix_id"]], "unix_id() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.unix_id"]], "user_domain (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.user_domain"]], "users() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.users"]], "utilities_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.utilities_folder"]], "value (pyxa.apps.systemevents.xasystemeventsattribute property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAttribute.value"]], "value (pyxa.apps.systemevents.xasystemeventspropertylistitem property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListItem.value"]], "value (pyxa.apps.systemevents.xasystemeventsuielement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.value"]], "value (pyxa.apps.systemevents.xasystemeventswindow property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsWindow.value"]], "value (pyxa.apps.systemevents.xasystemeventsxmlattribute property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLAttribute.value"]], "value (pyxa.apps.systemevents.xasystemeventsxmlelement property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLElement.value"]], "value() (pyxa.apps.systemevents.xasystemeventsattributelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsAttributeList.value"]], "value() (pyxa.apps.systemevents.xasystemeventspropertylistitemlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsPropertyListItemList.value"]], "value() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.value"]], "value() (pyxa.apps.systemevents.xasystemeventsxmlattributelist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLAttributeList.value"]], "value() (pyxa.apps.systemevents.xasystemeventsxmlelementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLElementList.value"]], "value_indicators() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.value_indicators"]], "version (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.version"]], "video_bd (pyxa.apps.systemevents.xasystemeventscdanddvdpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsCDAndDVDPreferencesObject.video_bd"]], "video_dvd (pyxa.apps.systemevents.xasystemeventscdanddvdpreferencesobject property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsCDAndDVDPreferencesObject.video_dvd"]], "visible (pyxa.apps.systemevents.xasystemeventsprocess property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcess.visible"]], "visible() (pyxa.apps.systemevents.xasystemeventsprocesslist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsProcessList.visible"]], "volume (pyxa.apps.systemevents.xasystemeventsfolderaction property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsFolderAction.volume"]], "volume() (pyxa.apps.systemevents.xasystemeventsfolderactionlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsFolderActionList.volume"]], "windows() (pyxa.apps.systemevents.xasystemeventsuielement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElement.windows"]], "windows() (pyxa.apps.systemevents.xasystemeventsuielementlist method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsUIElementList.windows"]], "workflows_folder (pyxa.apps.systemevents.xasystemeventsapplication property)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.workflows_folder"]], "xml_attributes() (pyxa.apps.systemevents.xasystemeventsxmlelement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLElement.xml_attributes"]], "xml_datas() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.xml_datas"]], "xml_elements() (pyxa.apps.systemevents.xasystemeventsxmldata method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLData.xml_elements"]], "xml_elements() (pyxa.apps.systemevents.xasystemeventsxmlelement method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsXMLElement.xml_elements"]], "xml_files() (pyxa.apps.systemevents.xasystemeventsapplication method)": [[45, "PyXA.apps.SystemEvents.XASystemEventsApplication.xml_files"]], "pyxa.apps.systempreferences": [[46, "module-PyXA.apps.SystemPreferences"]], "xapreferenceanchor (class in pyxa.apps.systempreferences)": [[46, "PyXA.apps.SystemPreferences.XAPreferenceAnchor"]], "xapreferenceanchorlist (class in pyxa.apps.systempreferences)": [[46, "PyXA.apps.SystemPreferences.XAPreferenceAnchorList"]], "xapreferencepane (class in pyxa.apps.systempreferences)": [[46, "PyXA.apps.SystemPreferences.XAPreferencePane"]], "xapreferencepanelist (class in pyxa.apps.systempreferences)": [[46, "PyXA.apps.SystemPreferences.XAPreferencePaneList"]], "xasystempreferencesapplication (class in pyxa.apps.systempreferences)": [[46, "PyXA.apps.SystemPreferences.XASystemPreferencesApplication"]], "anchors() (pyxa.apps.systempreferences.xapreferencepane method)": [[46, "PyXA.apps.SystemPreferences.XAPreferencePane.anchors"]], "authorize() (pyxa.apps.systempreferences.xapreferencepane method)": [[46, "PyXA.apps.SystemPreferences.XAPreferencePane.authorize"]], "by_id() (pyxa.apps.systempreferences.xapreferencepanelist method)": [[46, "PyXA.apps.SystemPreferences.XAPreferencePaneList.by_id"]], "by_localized_name() (pyxa.apps.systempreferences.xapreferencepanelist method)": [[46, "PyXA.apps.SystemPreferences.XAPreferencePaneList.by_localized_name"]], "by_name() (pyxa.apps.systempreferences.xapreferenceanchorlist method)": [[46, "PyXA.apps.SystemPreferences.XAPreferenceAnchorList.by_name"]], "by_name() (pyxa.apps.systempreferences.xapreferencepanelist method)": [[46, "PyXA.apps.SystemPreferences.XAPreferencePaneList.by_name"]], "current_pane (pyxa.apps.systempreferences.xasystempreferencesapplication property)": [[46, "PyXA.apps.SystemPreferences.XASystemPreferencesApplication.current_pane"]], "frontmost (pyxa.apps.systempreferences.xasystempreferencesapplication property)": [[46, "PyXA.apps.SystemPreferences.XASystemPreferencesApplication.frontmost"]], "id (pyxa.apps.systempreferences.xapreferencepane property)": [[46, "PyXA.apps.SystemPreferences.XAPreferencePane.id"]], "id() (pyxa.apps.systempreferences.xapreferencepanelist method)": [[46, "PyXA.apps.SystemPreferences.XAPreferencePaneList.id"]], "localized_name (pyxa.apps.systempreferences.xapreferencepane property)": [[46, "PyXA.apps.SystemPreferences.XAPreferencePane.localized_name"]], "localized_name() (pyxa.apps.systempreferences.xapreferencepanelist method)": [[46, "PyXA.apps.SystemPreferences.XAPreferencePaneList.localized_name"]], "name (pyxa.apps.systempreferences.xapreferenceanchor property)": [[46, "PyXA.apps.SystemPreferences.XAPreferenceAnchor.name"]], "name (pyxa.apps.systempreferences.xapreferencepane property)": [[46, "PyXA.apps.SystemPreferences.XAPreferencePane.name"]], "name (pyxa.apps.systempreferences.xasystempreferencesapplication property)": [[46, "PyXA.apps.SystemPreferences.XASystemPreferencesApplication.name"]], "name() (pyxa.apps.systempreferences.xapreferenceanchorlist method)": [[46, "PyXA.apps.SystemPreferences.XAPreferenceAnchorList.name"]], "name() (pyxa.apps.systempreferences.xapreferencepanelist method)": [[46, "PyXA.apps.SystemPreferences.XAPreferencePaneList.name"]], "panes() (pyxa.apps.systempreferences.xasystempreferencesapplication method)": [[46, "PyXA.apps.SystemPreferences.XASystemPreferencesApplication.panes"]], "preferences_window (pyxa.apps.systempreferences.xasystempreferencesapplication property)": [[46, "PyXA.apps.SystemPreferences.XASystemPreferencesApplication.preferences_window"]], "reveal() (pyxa.apps.systempreferences.xapreferenceanchor method)": [[46, "PyXA.apps.SystemPreferences.XAPreferenceAnchor.reveal"]], "reveal() (pyxa.apps.systempreferences.xapreferencepane method)": [[46, "PyXA.apps.SystemPreferences.XAPreferencePane.reveal"]], "show_all (pyxa.apps.systempreferences.xasystempreferencesapplication property)": [[46, "PyXA.apps.SystemPreferences.XASystemPreferencesApplication.show_all"]], "version (pyxa.apps.systempreferences.xasystempreferencesapplication property)": [[46, "PyXA.apps.SystemPreferences.XASystemPreferencesApplication.version"]], "pyxa.apps.terminal": [[47, "module-PyXA.apps.Terminal"]], "xaterminalapplication (class in pyxa.apps.terminal)": [[47, "PyXA.apps.Terminal.XATerminalApplication"]], "xaterminalsettingsset (class in pyxa.apps.terminal)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet"]], "xaterminalsettingssetlist (class in pyxa.apps.terminal)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList"]], "xaterminaltab (class in pyxa.apps.terminal)": [[47, "PyXA.apps.Terminal.XATerminalTab"]], "xaterminaltablist (class in pyxa.apps.terminal)": [[47, "PyXA.apps.Terminal.XATerminalTabList"]], "xaterminalwindow (class in pyxa.apps.terminal)": [[47, "PyXA.apps.Terminal.XATerminalWindow"]], "background_color (pyxa.apps.terminal.xaterminalsettingsset property)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet.background_color"]], "background_color() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.background_color"]], "bold_text_color (pyxa.apps.terminal.xaterminalsettingsset property)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet.bold_text_color"]], "bold_text_color() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.bold_text_color"]], "busy (pyxa.apps.terminal.xaterminaltab property)": [[47, "PyXA.apps.Terminal.XATerminalTab.busy"]], "busy() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.busy"]], "by_background_color() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.by_background_color"]], "by_bold_text_color() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.by_bold_text_color"]], "by_busy() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.by_busy"]], "by_clean_commands() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.by_clean_commands"]], "by_contents() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.by_contents"]], "by_current_settings() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.by_current_settings"]], "by_cursor_color() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.by_cursor_color"]], "by_custom_title() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.by_custom_title"]], "by_custom_title() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.by_custom_title"]], "by_font_antialiasing() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.by_font_antialiasing"]], "by_font_name() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.by_font_name"]], "by_font_size() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.by_font_size"]], "by_history() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.by_history"]], "by_id() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.by_id"]], "by_name() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.by_name"]], "by_normal_text_color() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.by_normal_text_color"]], "by_number_of_columns() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.by_number_of_columns"]], "by_number_of_columns() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.by_number_of_columns"]], "by_number_of_rows() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.by_number_of_rows"]], "by_number_of_rows() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.by_number_of_rows"]], "by_processes() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.by_processes"]], "by_selected() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.by_selected"]], "by_title_displays_custom_title() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.by_title_displays_custom_title"]], "by_title_displays_custom_title() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.by_title_displays_custom_title"]], "by_title_displays_device_name() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.by_title_displays_device_name"]], "by_title_displays_settings_name() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.by_title_displays_settings_name"]], "by_title_displays_shell_path() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.by_title_displays_shell_path"]], "by_title_displays_windows_size() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.by_title_displays_windows_size"]], "by_tty() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.by_tty"]], "clean_commands (pyxa.apps.terminal.xaterminalsettingsset property)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet.clean_commands"]], "clean_commands() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.clean_commands"]], "contents (pyxa.apps.terminal.xaterminaltab property)": [[47, "PyXA.apps.Terminal.XATerminalTab.contents"]], "contents() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.contents"]], "current_settings (pyxa.apps.terminal.xaterminaltab property)": [[47, "PyXA.apps.Terminal.XATerminalTab.current_settings"]], "current_settings() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.current_settings"]], "current_tab (pyxa.apps.terminal.xaterminalapplication property)": [[47, "PyXA.apps.Terminal.XATerminalApplication.current_tab"]], "cursor_color (pyxa.apps.terminal.xaterminalsettingsset property)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet.cursor_color"]], "cursor_color() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.cursor_color"]], "custom_title (pyxa.apps.terminal.xaterminalsettingsset property)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet.custom_title"]], "custom_title (pyxa.apps.terminal.xaterminaltab property)": [[47, "PyXA.apps.Terminal.XATerminalTab.custom_title"]], "custom_title() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.custom_title"]], "custom_title() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.custom_title"]], "default_settings (pyxa.apps.terminal.xaterminalapplication property)": [[47, "PyXA.apps.Terminal.XATerminalApplication.default_settings"]], "do_script() (pyxa.apps.terminal.xaterminalapplication method)": [[47, "PyXA.apps.Terminal.XATerminalApplication.do_script"]], "font_antialiasing (pyxa.apps.terminal.xaterminalsettingsset property)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet.font_antialiasing"]], "font_antialiasing() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.font_antialiasing"]], "font_name (pyxa.apps.terminal.xaterminalsettingsset property)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet.font_name"]], "font_name() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.font_name"]], "font_size (pyxa.apps.terminal.xaterminalsettingsset property)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet.font_size"]], "font_size() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.font_size"]], "frontmost (pyxa.apps.terminal.xaterminalapplication property)": [[47, "PyXA.apps.Terminal.XATerminalApplication.frontmost"]], "frontmost (pyxa.apps.terminal.xaterminalwindow property)": [[47, "PyXA.apps.Terminal.XATerminalWindow.frontmost"]], "get_clipboard_representation() (pyxa.apps.terminal.xaterminalsettingsset method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.terminal.xaterminaltab method)": [[47, "PyXA.apps.Terminal.XATerminalTab.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.get_clipboard_representation"]], "history (pyxa.apps.terminal.xaterminaltab property)": [[47, "PyXA.apps.Terminal.XATerminalTab.history"]], "history() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.history"]], "id (pyxa.apps.terminal.xaterminalsettingsset property)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet.id"]], "id() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.id"]], "name (pyxa.apps.terminal.xaterminalapplication property)": [[47, "PyXA.apps.Terminal.XATerminalApplication.name"]], "name (pyxa.apps.terminal.xaterminalsettingsset property)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet.name"]], "name() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.name"]], "normal_text_color (pyxa.apps.terminal.xaterminalsettingsset property)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet.normal_text_color"]], "normal_text_color() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.normal_text_color"]], "number_of_columns (pyxa.apps.terminal.xaterminalsettingsset property)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet.number_of_columns"]], "number_of_columns (pyxa.apps.terminal.xaterminaltab property)": [[47, "PyXA.apps.Terminal.XATerminalTab.number_of_columns"]], "number_of_columns() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.number_of_columns"]], "number_of_columns() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.number_of_columns"]], "number_of_rows (pyxa.apps.terminal.xaterminalsettingsset property)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet.number_of_rows"]], "number_of_rows (pyxa.apps.terminal.xaterminaltab property)": [[47, "PyXA.apps.Terminal.XATerminalTab.number_of_rows"]], "number_of_rows() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.number_of_rows"]], "number_of_rows() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.number_of_rows"]], "position (pyxa.apps.terminal.xaterminalwindow property)": [[47, "PyXA.apps.Terminal.XATerminalWindow.position"]], "processes (pyxa.apps.terminal.xaterminaltab property)": [[47, "PyXA.apps.Terminal.XATerminalTab.processes"]], "processes() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.processes"]], "selected (pyxa.apps.terminal.xaterminaltab property)": [[47, "PyXA.apps.Terminal.XATerminalTab.selected"]], "selected() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.selected"]], "selected_tab (pyxa.apps.terminal.xaterminalwindow property)": [[47, "PyXA.apps.Terminal.XATerminalWindow.selected_tab"]], "settings_sets() (pyxa.apps.terminal.xaterminalapplication method)": [[47, "PyXA.apps.Terminal.XATerminalApplication.settings_sets"]], "startup_settings (pyxa.apps.terminal.xaterminalapplication property)": [[47, "PyXA.apps.Terminal.XATerminalApplication.startup_settings"]], "tabs() (pyxa.apps.terminal.xaterminalwindow method)": [[47, "PyXA.apps.Terminal.XATerminalWindow.tabs"]], "title_displays_custom_title (pyxa.apps.terminal.xaterminalsettingsset property)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet.title_displays_custom_title"]], "title_displays_custom_title (pyxa.apps.terminal.xaterminaltab property)": [[47, "PyXA.apps.Terminal.XATerminalTab.title_displays_custom_title"]], "title_displays_custom_title() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.title_displays_custom_title"]], "title_displays_custom_title() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.title_displays_custom_title"]], "title_displays_device_name (pyxa.apps.terminal.xaterminalsettingsset property)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet.title_displays_device_name"]], "title_displays_device_name() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.title_displays_device_name"]], "title_displays_settings_name (pyxa.apps.terminal.xaterminalsettingsset property)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet.title_displays_settings_name"]], "title_displays_settings_name() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.title_displays_settings_name"]], "title_displays_shell_path (pyxa.apps.terminal.xaterminalsettingsset property)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet.title_displays_shell_path"]], "title_displays_shell_path() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.title_displays_shell_path"]], "title_displays_window_size (pyxa.apps.terminal.xaterminalsettingsset property)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSet.title_displays_window_size"]], "title_displays_window_size() (pyxa.apps.terminal.xaterminalsettingssetlist method)": [[47, "PyXA.apps.Terminal.XATerminalSettingsSetList.title_displays_window_size"]], "tty (pyxa.apps.terminal.xaterminaltab property)": [[47, "PyXA.apps.Terminal.XATerminalTab.tty"]], "tty() (pyxa.apps.terminal.xaterminaltablist method)": [[47, "PyXA.apps.Terminal.XATerminalTabList.tty"]], "version (pyxa.apps.terminal.xaterminalapplication property)": [[47, "PyXA.apps.Terminal.XATerminalApplication.version"]], "pyxa.apps.textedit": [[48, "module-PyXA.apps.TextEdit"]], "xatexteditapplication (class in pyxa.apps.textedit)": [[48, "PyXA.apps.TextEdit.XATextEditApplication"]], "xatexteditdocument (class in pyxa.apps.textedit)": [[48, "PyXA.apps.TextEdit.XATextEditDocument"]], "xatexteditdocumentlist (class in pyxa.apps.textedit)": [[48, "PyXA.apps.TextEdit.XATextEditDocumentList"]], "xatexteditwindow (class in pyxa.apps.textedit)": [[48, "PyXA.apps.TextEdit.XATextEditWindow"]], "append() (pyxa.apps.textedit.xatexteditdocumentlist method)": [[48, "PyXA.apps.TextEdit.XATextEditDocumentList.append"]], "by_modified() (pyxa.apps.textedit.xatexteditdocumentlist method)": [[48, "PyXA.apps.TextEdit.XATextEditDocumentList.by_modified"]], "by_name() (pyxa.apps.textedit.xatexteditdocumentlist method)": [[48, "PyXA.apps.TextEdit.XATextEditDocumentList.by_name"]], "by_path() (pyxa.apps.textedit.xatexteditdocumentlist method)": [[48, "PyXA.apps.TextEdit.XATextEditDocumentList.by_path"]], "by_properties() (pyxa.apps.textedit.xatexteditdocumentlist method)": [[48, "PyXA.apps.TextEdit.XATextEditDocumentList.by_properties"]], "document (pyxa.apps.textedit.xatexteditwindow property)": [[48, "PyXA.apps.TextEdit.XATextEditWindow.document"]], "documents() (pyxa.apps.textedit.xatexteditapplication method)": [[48, "PyXA.apps.TextEdit.XATextEditApplication.documents"]], "floating (pyxa.apps.textedit.xatexteditwindow property)": [[48, "PyXA.apps.TextEdit.XATextEditWindow.floating"]], "frontmost (pyxa.apps.textedit.xatexteditapplication property)": [[48, "PyXA.apps.TextEdit.XATextEditApplication.frontmost"]], "get_clipboard_representation() (pyxa.apps.textedit.xatexteditdocument method)": [[48, "PyXA.apps.TextEdit.XATextEditDocument.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.apps.textedit.xatexteditdocumentlist method)": [[48, "PyXA.apps.TextEdit.XATextEditDocumentList.get_clipboard_representation"]], "make() (pyxa.apps.textedit.xatexteditapplication method)": [[48, "PyXA.apps.TextEdit.XATextEditApplication.make"]], "modal (pyxa.apps.textedit.xatexteditwindow property)": [[48, "PyXA.apps.TextEdit.XATextEditWindow.modal"]], "modified (pyxa.apps.textedit.xatexteditdocument property)": [[48, "PyXA.apps.TextEdit.XATextEditDocument.modified"]], "modified() (pyxa.apps.textedit.xatexteditdocumentlist method)": [[48, "PyXA.apps.TextEdit.XATextEditDocumentList.modified"]], "name (pyxa.apps.textedit.xatexteditapplication property)": [[48, "PyXA.apps.TextEdit.XATextEditApplication.name"]], "name (pyxa.apps.textedit.xatexteditdocument property)": [[48, "PyXA.apps.TextEdit.XATextEditDocument.name"]], "name() (pyxa.apps.textedit.xatexteditdocumentlist method)": [[48, "PyXA.apps.TextEdit.XATextEditDocumentList.name"]], "new_document() (pyxa.apps.textedit.xatexteditapplication method)": [[48, "PyXA.apps.TextEdit.XATextEditApplication.new_document"]], "open() (pyxa.apps.textedit.xatexteditapplication method)": [[48, "PyXA.apps.TextEdit.XATextEditApplication.open"]], "path (pyxa.apps.textedit.xatexteditdocument property)": [[48, "PyXA.apps.TextEdit.XATextEditDocument.path"]], "path() (pyxa.apps.textedit.xatexteditdocumentlist method)": [[48, "PyXA.apps.TextEdit.XATextEditDocumentList.path"]], "prepend() (pyxa.apps.textedit.xatexteditdocumentlist method)": [[48, "PyXA.apps.TextEdit.XATextEditDocumentList.prepend"]], "print() (pyxa.apps.textedit.xatexteditapplication method)": [[48, "PyXA.apps.TextEdit.XATextEditApplication.print"]], "print() (pyxa.apps.textedit.xatexteditdocument method)": [[48, "PyXA.apps.TextEdit.XATextEditDocument.print"]], "properties (pyxa.apps.textedit.xatexteditdocument property)": [[48, "PyXA.apps.TextEdit.XATextEditDocument.properties"]], "properties() (pyxa.apps.textedit.xatexteditdocumentlist method)": [[48, "PyXA.apps.TextEdit.XATextEditDocumentList.properties"]], "push() (pyxa.apps.textedit.xatexteditdocumentlist method)": [[48, "PyXA.apps.TextEdit.XATextEditDocumentList.push"]], "reverse() (pyxa.apps.textedit.xatexteditdocumentlist method)": [[48, "PyXA.apps.TextEdit.XATextEditDocumentList.reverse"]], "save() (pyxa.apps.textedit.xatexteditdocument method)": [[48, "PyXA.apps.TextEdit.XATextEditDocument.save"]], "titled (pyxa.apps.textedit.xatexteditwindow property)": [[48, "PyXA.apps.TextEdit.XATextEditWindow.titled"]], "version (pyxa.apps.textedit.xatexteditapplication property)": [[48, "PyXA.apps.TextEdit.XATextEditApplication.version"]], "pyxa.apps.tv": [[49, "module-PyXA.apps.TV"]], "xatvapplication (class in pyxa.apps.tv)": [[49, "PyXA.apps.TV.XATVApplication"]], "xatvtrack (class in pyxa.apps.tv)": [[49, "PyXA.apps.TV.XATVTrack"]], "xatvtracklist (class in pyxa.apps.tv)": [[49, "PyXA.apps.TV.XATVTrackList"]], "xatvwindow (class in pyxa.apps.tv)": [[49, "PyXA.apps.TV.XATVWindow"]], "by_sort_director() (pyxa.apps.tv.xatvtracklist method)": [[49, "PyXA.apps.TV.XATVTrackList.by_sort_director"]], "sort_director (pyxa.apps.tv.xatvtrack property)": [[49, "PyXA.apps.TV.XATVTrack.sort_director"]], "sort_director() (pyxa.apps.tv.xatvtracklist method)": [[49, "PyXA.apps.TV.XATVTrackList.sort_director"]], "pyxa.apps.vlc": [[50, "module-PyXA.apps.VLC"]], "xavlcapplication (class in pyxa.apps.vlc)": [[50, "PyXA.apps.VLC.XAVLCApplication"]], "xavlcdocument (class in pyxa.apps.vlc)": [[50, "PyXA.apps.VLC.XAVLCDocument"]], "xavlcdocumentlist (class in pyxa.apps.vlc)": [[50, "PyXA.apps.VLC.XAVLCDocumentList"]], "xavlcwindow (class in pyxa.apps.vlc)": [[50, "PyXA.apps.VLC.XAVLCWindow"]], "activate_menu_item() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.activate_menu_item"]], "audio_desync (pyxa.apps.vlc.xavlcapplication property)": [[50, "PyXA.apps.VLC.XAVLCApplication.audio_desync"]], "audio_volume (pyxa.apps.vlc.xavlcapplication property)": [[50, "PyXA.apps.VLC.XAVLCApplication.audio_volume"]], "by_modified() (pyxa.apps.vlc.xavlcdocumentlist method)": [[50, "PyXA.apps.VLC.XAVLCDocumentList.by_modified"]], "by_name() (pyxa.apps.vlc.xavlcdocumentlist method)": [[50, "PyXA.apps.VLC.XAVLCDocumentList.by_name"]], "by_path() (pyxa.apps.vlc.xavlcdocumentlist method)": [[50, "PyXA.apps.VLC.XAVLCDocumentList.by_path"]], "current_time (pyxa.apps.vlc.xavlcapplication property)": [[50, "PyXA.apps.VLC.XAVLCApplication.current_time"]], "document (pyxa.apps.vlc.xavlcwindow property)": [[50, "PyXA.apps.VLC.XAVLCWindow.document"]], "documents() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.documents"]], "duration_of_current_item (pyxa.apps.vlc.xavlcapplication property)": [[50, "PyXA.apps.VLC.XAVLCApplication.duration_of_current_item"]], "floating (pyxa.apps.vlc.xavlcwindow property)": [[50, "PyXA.apps.VLC.XAVLCWindow.floating"]], "frontmost (pyxa.apps.vlc.xavlcapplication property)": [[50, "PyXA.apps.VLC.XAVLCApplication.frontmost"]], "fullscreen() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.fullscreen"]], "fullscreen_mode (pyxa.apps.vlc.xavlcapplication property)": [[50, "PyXA.apps.VLC.XAVLCApplication.fullscreen_mode"]], "get_clipboard_representation() (pyxa.apps.vlc.xavlcdocumentlist method)": [[50, "PyXA.apps.VLC.XAVLCDocumentList.get_clipboard_representation"]], "get_url() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.get_url"]], "make() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.make"]], "modal (pyxa.apps.vlc.xavlcwindow property)": [[50, "PyXA.apps.VLC.XAVLCWindow.modal"]], "modified (pyxa.apps.vlc.xavlcdocument property)": [[50, "PyXA.apps.VLC.XAVLCDocument.modified"]], "modified() (pyxa.apps.vlc.xavlcdocumentlist method)": [[50, "PyXA.apps.VLC.XAVLCDocumentList.modified"]], "move_menu_focus_down() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.move_menu_focus_down"]], "move_menu_focus_left() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.move_menu_focus_left"]], "move_menu_focus_right() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.move_menu_focus_right"]], "move_menu_focus_up() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.move_menu_focus_up"]], "mute() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.mute"]], "muted (pyxa.apps.vlc.xavlcapplication property)": [[50, "PyXA.apps.VLC.XAVLCApplication.muted"]], "name (pyxa.apps.vlc.xavlcapplication property)": [[50, "PyXA.apps.VLC.XAVLCApplication.name"]], "name (pyxa.apps.vlc.xavlcdocument property)": [[50, "PyXA.apps.VLC.XAVLCDocument.name"]], "name() (pyxa.apps.vlc.xavlcdocumentlist method)": [[50, "PyXA.apps.VLC.XAVLCDocumentList.name"]], "name_of_current_item (pyxa.apps.vlc.xavlcapplication property)": [[50, "PyXA.apps.VLC.XAVLCApplication.name_of_current_item"]], "next() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.next"]], "open() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.open"]], "open_url() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.open_url"]], "path (pyxa.apps.vlc.xavlcdocument property)": [[50, "PyXA.apps.VLC.XAVLCDocument.path"]], "path() (pyxa.apps.vlc.xavlcdocumentlist method)": [[50, "PyXA.apps.VLC.XAVLCDocumentList.path"]], "path_of_current_item (pyxa.apps.vlc.xavlcapplication property)": [[50, "PyXA.apps.VLC.XAVLCApplication.path_of_current_item"]], "play() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.play"]], "playback_shows_menu (pyxa.apps.vlc.xavlcapplication property)": [[50, "PyXA.apps.VLC.XAVLCApplication.playback_shows_menu"]], "playing (pyxa.apps.vlc.xavlcapplication property)": [[50, "PyXA.apps.VLC.XAVLCApplication.playing"]], "previous() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.previous"]], "properties (pyxa.apps.vlc.xavlcapplication property)": [[50, "PyXA.apps.VLC.XAVLCApplication.properties"]], "properties (pyxa.apps.vlc.xavlcdocument property)": [[50, "PyXA.apps.VLC.XAVLCDocument.properties"]], "step_backward() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.step_backward"]], "step_forward() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.step_forward"]], "stop() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.stop"]], "titled (pyxa.apps.vlc.xavlcwindow property)": [[50, "PyXA.apps.VLC.XAVLCWindow.titled"]], "version (pyxa.apps.vlc.xavlcapplication property)": [[50, "PyXA.apps.VLC.XAVLCApplication.version"]], "volume_down() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.volume_down"]], "volume_up() (pyxa.apps.vlc.xavlcapplication method)": [[50, "PyXA.apps.VLC.XAVLCApplication.volume_up"]], "application (class in pyxa.pyxa)": [[52, "PyXA.PyXA.Application"]], "cgwindowlistcopywindowinfo() (in module pyxa.pyxa)": [[52, "PyXA.PyXA.CGWindowListCopyWindowInfo"]], "pyxa.pyxa": [[52, "module-PyXA.PyXA"]], "xaapplicationlist (class in pyxa.pyxa)": [[52, "PyXA.PyXA.XAApplicationList"]], "xacombinedwindowlist (class in pyxa.pyxa)": [[52, "PyXA.PyXA.XACombinedWindowList"]], "app_paths (pyxa.pyxa.application attribute)": [[52, "PyXA.PyXA.Application.app_paths"]], "application() (in module pyxa.pyxa)": [[52, "PyXA.PyXA.application"]], "bundle_identifier() (pyxa.pyxa.xaapplicationlist method)": [[52, "PyXA.PyXA.XAApplicationList.bundle_identifier"]], "bundle_url() (pyxa.pyxa.xaapplicationlist method)": [[52, "PyXA.PyXA.XAApplicationList.bundle_url"]], "collapse() (pyxa.pyxa.xacombinedwindowlist method)": [[52, "PyXA.PyXA.XACombinedWindowList.collapse"]], "current_application() (in module pyxa.pyxa)": [[52, "PyXA.PyXA.current_application"]], "executable_url() (pyxa.pyxa.xaapplicationlist method)": [[52, "PyXA.PyXA.XAApplicationList.executable_url"]], "first() (pyxa.pyxa.xaapplicationlist method)": [[52, "PyXA.PyXA.XAApplicationList.first"]], "hide() (pyxa.pyxa.xaapplicationlist method)": [[52, "PyXA.PyXA.XAApplicationList.hide"]], "last() (pyxa.pyxa.xaapplicationlist method)": [[52, "PyXA.PyXA.XAApplicationList.last"]], "launch_date() (pyxa.pyxa.xaapplicationlist method)": [[52, "PyXA.PyXA.XAApplicationList.launch_date"]], "localized_name() (pyxa.pyxa.xaapplicationlist method)": [[52, "PyXA.PyXA.XAApplicationList.localized_name"]], "pop() (pyxa.pyxa.xaapplicationlist method)": [[52, "PyXA.PyXA.XAApplicationList.pop"]], "process_identifier() (pyxa.pyxa.xaapplicationlist method)": [[52, "PyXA.PyXA.XAApplicationList.process_identifier"]], "quit() (pyxa.pyxa.xaapplicationlist method)": [[52, "PyXA.PyXA.XAApplicationList.quit"]], "running_applications() (in module pyxa.pyxa)": [[52, "PyXA.PyXA.running_applications"]], "shared_app (pyxa.pyxa.application property)": [[52, "PyXA.PyXA.Application.shared_app"]], "supported_applications (in module pyxa.pyxa)": [[52, "PyXA.PyXA.supported_applications"]], "terminate() (pyxa.pyxa.xaapplicationlist method)": [[52, "PyXA.PyXA.XAApplicationList.terminate"]], "uncollapse() (pyxa.pyxa.xacombinedwindowlist method)": [[52, "PyXA.PyXA.XACombinedWindowList.uncollapse"]], "unhide() (pyxa.pyxa.xaapplicationlist method)": [[52, "PyXA.PyXA.XAApplicationList.unhide"]], "windows() (pyxa.pyxa.xaapplicationlist method)": [[52, "PyXA.PyXA.XAApplicationList.windows"]], "workspace (pyxa.pyxa.application property)": [[52, "PyXA.PyXA.Application.workspace"]], "appleshare (pyxa.xabase.xaeventsapplication.format attribute)": [[53, "PyXA.XABase.XAEventsApplication.Format.APPLESHARE"]], "apple_photo (pyxa.xabase.xaeventsapplication.format attribute)": [[53, "PyXA.XABase.XAEventsApplication.Format.APPLE_PHOTO"]], "audio (pyxa.xabase.xaeventsapplication.format attribute)": [[53, "PyXA.XABase.XAEventsApplication.Format.AUDIO"]], "applescript (class in pyxa.xabase)": [[53, "PyXA.XABase.AppleScript"]], "application (class in pyxa.xabase)": [[53, "PyXA.XABase.Application"]], "cmyk_sliders (pyxa.xabase.xacolorpickerstyle attribute)": [[53, "PyXA.XABase.XAColorPickerStyle.CMYK_SLIDERS"]], "color_list (pyxa.xabase.xacolorpickerstyle attribute)": [[53, "PyXA.XABase.XAColorPickerStyle.COLOR_LIST"]], "color_wheel (pyxa.xabase.xacolorpickerstyle attribute)": [[53, "PyXA.XABase.XAColorPickerStyle.COLOR_WHEEL"]], "crayons (pyxa.xabase.xacolorpickerstyle attribute)": [[53, "PyXA.XABase.XAColorPickerStyle.CRAYONS"]], "grayscale (pyxa.xabase.xacolorpickerstyle attribute)": [[53, "PyXA.XABase.XAColorPickerStyle.GRAYSCALE"]], "high_sierra (pyxa.xabase.xaeventsapplication.format attribute)": [[53, "PyXA.XABase.XAEventsApplication.Format.HIGH_SIERRA"]], "hsb_sliders (pyxa.xabase.xacolorpickerstyle attribute)": [[53, "PyXA.XABase.XAColorPickerStyle.HSB_SLIDERS"]], "image_palette (pyxa.xabase.xacolorpickerstyle attribute)": [[53, "PyXA.XABase.XAColorPickerStyle.IMAGE_PALETTE"]], "iso_9660 (pyxa.xabase.xaeventsapplication.format attribute)": [[53, "PyXA.XABase.XAEventsApplication.Format.ISO_9660"]], "macos (pyxa.xabase.xaeventsapplication.format attribute)": [[53, "PyXA.XABase.XAEventsApplication.Format.MACOS"]], "macos_extended (pyxa.xabase.xaeventsapplication.format attribute)": [[53, "PyXA.XABase.XAEventsApplication.Format.MACOS_EXTENDED"]], "msdos (pyxa.xabase.xaeventsapplication.format attribute)": [[53, "PyXA.XABase.XAEventsApplication.Format.MSDOS"]], "nfs (pyxa.xabase.xaeventsapplication.format attribute)": [[53, "PyXA.XABase.XAEventsApplication.Format.NFS"]], "ostype() (in module pyxa.xabase)": [[53, "PyXA.XABase.OSType"]], "prodos (pyxa.xabase.xaeventsapplication.format attribute)": [[53, "PyXA.XABase.XAEventsApplication.Format.PRODOS"]], "pyxa.xabase": [[53, "module-PyXA.XABase"]], "quicktake (pyxa.xabase.xaeventsapplication.format attribute)": [[53, "PyXA.XABase.XAEventsApplication.Format.QUICKTAKE"]], "rgb_sliders (pyxa.xabase.xacolorpickerstyle attribute)": [[53, "PyXA.XABase.XAColorPickerStyle.RGB_SLIDERS"]], "udf (pyxa.xabase.xaeventsapplication.format attribute)": [[53, "PyXA.XABase.XAEventsApplication.Format.UDF"]], "ufs (pyxa.xabase.xaeventsapplication.format attribute)": [[53, "PyXA.XABase.XAEventsApplication.Format.UFS"]], "unknown (pyxa.xabase.xaeventsapplication.format attribute)": [[53, "PyXA.XABase.XAEventsApplication.Format.UNKNOWN"]], "version (in module pyxa.xabase)": [[53, "PyXA.XABase.VERSION"]], "webdav (pyxa.xabase.xaeventsapplication.format attribute)": [[53, "PyXA.XABase.XAEventsApplication.Format.WEBDAV"]], "xaalias (class in pyxa.xabase)": [[53, "PyXA.XABase.XAAlias"]], "xaaliaslist (class in pyxa.xabase)": [[53, "PyXA.XABase.XAAliasList"]], "xaapplication (class in pyxa.xabase)": [[53, "PyXA.XABase.XAApplication"]], "xaapplicationlist (class in pyxa.xabase)": [[53, "PyXA.XABase.XAApplicationList"]], "xaapplicationpicker (class in pyxa.xabase)": [[53, "PyXA.XABase.XAApplicationPicker"]], "xaattachment (class in pyxa.xabase)": [[53, "PyXA.XABase.XAAttachment"]], "xaattachmentlist (class in pyxa.xabase)": [[53, "PyXA.XABase.XAAttachmentList"]], "xaattributerun (class in pyxa.xabase)": [[53, "PyXA.XABase.XAAttributeRun"]], "xaattributerunlist (class in pyxa.xabase)": [[53, "PyXA.XABase.XAAttributeRunList"]], "xacharacter (class in pyxa.xabase)": [[53, "PyXA.XABase.XACharacter"]], "xacharacterlist (class in pyxa.xabase)": [[53, "PyXA.XABase.XACharacterList"]], "xaclassicdomainobject (class in pyxa.xabase)": [[53, "PyXA.XABase.XAClassicDomainObject"]], "xaclipboard (class in pyxa.xabase)": [[53, "PyXA.XABase.XAClipboard"]], "xacolor (class in pyxa.xabase)": [[53, "PyXA.XABase.XAColor"]], "xacolorlist (class in pyxa.xabase)": [[53, "PyXA.XABase.XAColorList"]], "xacolorpicker (class in pyxa.xabase)": [[53, "PyXA.XABase.XAColorPicker"]], "xacolorpickerstyle (class in pyxa.xabase)": [[53, "PyXA.XABase.XAColorPickerStyle"]], "xadialog (class in pyxa.xabase)": [[53, "PyXA.XABase.XADialog"]], "xadisk (class in pyxa.xabase)": [[53, "PyXA.XABase.XADisk"]], "xadiskitem (class in pyxa.xabase)": [[53, "PyXA.XABase.XADiskItem"]], "xadiskitemlist (class in pyxa.xabase)": [[53, "PyXA.XABase.XADiskItemList"]], "xadisklist (class in pyxa.xabase)": [[53, "PyXA.XABase.XADiskList"]], "xadomain (class in pyxa.xabase)": [[53, "PyXA.XABase.XADomain"]], "xadomainlist (class in pyxa.xabase)": [[53, "PyXA.XABase.XADomainList"]], "xaeventsapplication (class in pyxa.xabase)": [[53, "PyXA.XABase.XAEventsApplication"]], "xaeventsapplication.format (class in pyxa.xabase)": [[53, "PyXA.XABase.XAEventsApplication.Format"]], "xafile (class in pyxa.xabase)": [[53, "PyXA.XABase.XAFile"]], "xafilelist (class in pyxa.xabase)": [[53, "PyXA.XABase.XAFileList"]], "xafilenamedialog (class in pyxa.xabase)": [[53, "PyXA.XABase.XAFileNameDialog"]], "xafilepackage (class in pyxa.xabase)": [[53, "PyXA.XABase.XAFilePackage"]], "xafilepackagelist (class in pyxa.xabase)": [[53, "PyXA.XABase.XAFilePackageList"]], "xafilepicker (class in pyxa.xabase)": [[53, "PyXA.XABase.XAFilePicker"]], "xafolder (class in pyxa.xabase)": [[53, "PyXA.XABase.XAFolder"]], "xafolderlist (class in pyxa.xabase)": [[53, "PyXA.XABase.XAFolderList"]], "xafolderpicker (class in pyxa.xabase)": [[53, "PyXA.XABase.XAFolderPicker"]], "xaimage (class in pyxa.xabase)": [[53, "PyXA.XABase.XAImage"]], "xaimagelist (class in pyxa.xabase)": [[53, "PyXA.XABase.XAImageList"]], "xalist (class in pyxa.xabase)": [[53, "PyXA.XABase.XAList"]], "xalocaldomainobject (class in pyxa.xabase)": [[53, "PyXA.XABase.XALocalDomainObject"]], "xalocation (class in pyxa.xabase)": [[53, "PyXA.XABase.XALocation"]], "xamenu (class in pyxa.xabase)": [[53, "PyXA.XABase.XAMenu"]], "xanetworkdomainobject (class in pyxa.xabase)": [[53, "PyXA.XABase.XANetworkDomainObject"]], "xaobject (class in pyxa.xabase)": [[53, "PyXA.XABase.XAObject"]], "xaparagraph (class in pyxa.xabase)": [[53, "PyXA.XABase.XAParagraph"]], "xaparagraphlist (class in pyxa.xabase)": [[53, "PyXA.XABase.XAParagraphList"]], "xapath (class in pyxa.xabase)": [[53, "PyXA.XABase.XAPath"]], "xapredicate (class in pyxa.xabase)": [[53, "PyXA.XABase.XAPredicate"]], "xasentence (class in pyxa.xabase)": [[53, "PyXA.XABase.XASentence"]], "xasentencelist (class in pyxa.xabase)": [[53, "PyXA.XABase.XASentenceList"]], "xasound (class in pyxa.xabase)": [[53, "PyXA.XABase.XASound"]], "xasoundlist (class in pyxa.xabase)": [[53, "PyXA.XABase.XASoundList"]], "xaspotlight (class in pyxa.xabase)": [[53, "PyXA.XABase.XASpotlight"]], "xasystemdomainobject (class in pyxa.xabase)": [[53, "PyXA.XABase.XASystemDomainObject"]], "xatext (class in pyxa.xabase)": [[53, "PyXA.XABase.XAText"]], "xatextdocument (class in pyxa.xabase)": [[53, "PyXA.XABase.XATextDocument"]], "xatextdocumentlist (class in pyxa.xabase)": [[53, "PyXA.XABase.XATextDocumentList"]], "xatextlist (class in pyxa.xabase)": [[53, "PyXA.XABase.XATextList"]], "xaurl (class in pyxa.xabase)": [[53, "PyXA.XABase.XAURL"]], "xaurllist (class in pyxa.xabase)": [[53, "PyXA.XABase.XAURLList"]], "xauserdomainobject (class in pyxa.xabase)": [[53, "PyXA.XABase.XAUserDomainObject"]], "xavideo (class in pyxa.xabase)": [[53, "PyXA.XABase.XAVideo"]], "xaword (class in pyxa.xabase)": [[53, "PyXA.XABase.XAWord"]], "xawordlist (class in pyxa.xabase)": [[53, "PyXA.XABase.XAWordList"]], "__annotations__ (pyxa.xabase.applescript attribute)": [[53, "PyXA.XABase.AppleScript.__annotations__"]], "__annotations__ (pyxa.xabase.application attribute)": [[53, "PyXA.XABase.Application.__annotations__"]], "__annotations__ (pyxa.xabase.xaalias attribute)": [[53, "PyXA.XABase.XAAlias.__annotations__"]], "__annotations__ (pyxa.xabase.xaaliaslist attribute)": [[53, "PyXA.XABase.XAAliasList.__annotations__"]], "__annotations__ (pyxa.xabase.xaapplication attribute)": [[53, "PyXA.XABase.XAApplication.__annotations__"]], "__annotations__ (pyxa.xabase.xaapplicationlist attribute)": [[53, "PyXA.XABase.XAApplicationList.__annotations__"]], "__annotations__ (pyxa.xabase.xaapplicationpicker attribute)": [[53, "PyXA.XABase.XAApplicationPicker.__annotations__"]], "__annotations__ (pyxa.xabase.xaattachment attribute)": [[53, "PyXA.XABase.XAAttachment.__annotations__"]], "__annotations__ (pyxa.xabase.xaattachmentlist attribute)": [[53, "PyXA.XABase.XAAttachmentList.__annotations__"]], "__annotations__ (pyxa.xabase.xaattributerun attribute)": [[53, "PyXA.XABase.XAAttributeRun.__annotations__"]], "__annotations__ (pyxa.xabase.xaattributerunlist attribute)": [[53, "PyXA.XABase.XAAttributeRunList.__annotations__"]], "__annotations__ (pyxa.xabase.xacharacter attribute)": [[53, "PyXA.XABase.XACharacter.__annotations__"]], "__annotations__ (pyxa.xabase.xacharacterlist attribute)": [[53, "PyXA.XABase.XACharacterList.__annotations__"]], "__annotations__ (pyxa.xabase.xaclassicdomainobject attribute)": [[53, "PyXA.XABase.XAClassicDomainObject.__annotations__"]], "__annotations__ (pyxa.xabase.xaclipboard attribute)": [[53, "PyXA.XABase.XAClipboard.__annotations__"]], "__annotations__ (pyxa.xabase.xacolor attribute)": [[53, "PyXA.XABase.XAColor.__annotations__"]], "__annotations__ (pyxa.xabase.xacolorlist attribute)": [[53, "PyXA.XABase.XAColorList.__annotations__"]], "__annotations__ (pyxa.xabase.xacolorpicker attribute)": [[53, "PyXA.XABase.XAColorPicker.__annotations__"]], "__annotations__ (pyxa.xabase.xadialog attribute)": [[53, "PyXA.XABase.XADialog.__annotations__"]], "__annotations__ (pyxa.xabase.xadisk attribute)": [[53, "PyXA.XABase.XADisk.__annotations__"]], "__annotations__ (pyxa.xabase.xadiskitem attribute)": [[53, "PyXA.XABase.XADiskItem.__annotations__"]], "__annotations__ (pyxa.xabase.xadiskitemlist attribute)": [[53, "PyXA.XABase.XADiskItemList.__annotations__"]], "__annotations__ (pyxa.xabase.xadisklist attribute)": [[53, "PyXA.XABase.XADiskList.__annotations__"]], "__annotations__ (pyxa.xabase.xadomain attribute)": [[53, "PyXA.XABase.XADomain.__annotations__"]], "__annotations__ (pyxa.xabase.xadomainlist attribute)": [[53, "PyXA.XABase.XADomainList.__annotations__"]], "__annotations__ (pyxa.xabase.xaeventsapplication attribute)": [[53, "PyXA.XABase.XAEventsApplication.__annotations__"]], "__annotations__ (pyxa.xabase.xafile attribute)": [[53, "PyXA.XABase.XAFile.__annotations__"]], "__annotations__ (pyxa.xabase.xafilelist attribute)": [[53, "PyXA.XABase.XAFileList.__annotations__"]], "__annotations__ (pyxa.xabase.xafilenamedialog attribute)": [[53, "PyXA.XABase.XAFileNameDialog.__annotations__"]], "__annotations__ (pyxa.xabase.xafilepackage attribute)": [[53, "PyXA.XABase.XAFilePackage.__annotations__"]], "__annotations__ (pyxa.xabase.xafilepackagelist attribute)": [[53, "PyXA.XABase.XAFilePackageList.__annotations__"]], "__annotations__ (pyxa.xabase.xafilepicker attribute)": [[53, "PyXA.XABase.XAFilePicker.__annotations__"]], "__annotations__ (pyxa.xabase.xafolder attribute)": [[53, "PyXA.XABase.XAFolder.__annotations__"]], "__annotations__ (pyxa.xabase.xafolderlist attribute)": [[53, "PyXA.XABase.XAFolderList.__annotations__"]], "__annotations__ (pyxa.xabase.xafolderpicker attribute)": [[53, "PyXA.XABase.XAFolderPicker.__annotations__"]], "__annotations__ (pyxa.xabase.xaimage attribute)": [[53, "PyXA.XABase.XAImage.__annotations__"]], "__annotations__ (pyxa.xabase.xaimagelist attribute)": [[53, "PyXA.XABase.XAImageList.__annotations__"]], "__annotations__ (pyxa.xabase.xalist attribute)": [[53, "PyXA.XABase.XAList.__annotations__"]], "__annotations__ (pyxa.xabase.xalocaldomainobject attribute)": [[53, "PyXA.XABase.XALocalDomainObject.__annotations__"]], "__annotations__ (pyxa.xabase.xalocation attribute)": [[53, "PyXA.XABase.XALocation.__annotations__"]], "__annotations__ (pyxa.xabase.xamenu attribute)": [[53, "PyXA.XABase.XAMenu.__annotations__"]], "__annotations__ (pyxa.xabase.xanetworkdomainobject attribute)": [[53, "PyXA.XABase.XANetworkDomainObject.__annotations__"]], "__annotations__ (pyxa.xabase.xaobject attribute)": [[53, "PyXA.XABase.XAObject.__annotations__"]], "__annotations__ (pyxa.xabase.xaparagraph attribute)": [[53, "PyXA.XABase.XAParagraph.__annotations__"]], "__annotations__ (pyxa.xabase.xaparagraphlist attribute)": [[53, "PyXA.XABase.XAParagraphList.__annotations__"]], "__annotations__ (pyxa.xabase.xapath attribute)": [[53, "PyXA.XABase.XAPath.__annotations__"]], "__annotations__ (pyxa.xabase.xapredicate attribute)": [[53, "PyXA.XABase.XAPredicate.__annotations__"]], "__annotations__ (pyxa.xabase.xasentence attribute)": [[53, "PyXA.XABase.XASentence.__annotations__"]], "__annotations__ (pyxa.xabase.xasentencelist attribute)": [[53, "PyXA.XABase.XASentenceList.__annotations__"]], "__annotations__ (pyxa.xabase.xasound attribute)": [[53, "PyXA.XABase.XASound.__annotations__"]], "__annotations__ (pyxa.xabase.xasoundlist attribute)": [[53, "PyXA.XABase.XASoundList.__annotations__"]], "__annotations__ (pyxa.xabase.xaspotlight attribute)": [[53, "PyXA.XABase.XASpotlight.__annotations__"]], "__annotations__ (pyxa.xabase.xasystemdomainobject attribute)": [[53, "PyXA.XABase.XASystemDomainObject.__annotations__"]], "__annotations__ (pyxa.xabase.xatext attribute)": [[53, "PyXA.XABase.XAText.__annotations__"]], "__annotations__ (pyxa.xabase.xatextdocument attribute)": [[53, "PyXA.XABase.XATextDocument.__annotations__"]], "__annotations__ (pyxa.xabase.xatextdocumentlist attribute)": [[53, "PyXA.XABase.XATextDocumentList.__annotations__"]], "__annotations__ (pyxa.xabase.xatextlist attribute)": [[53, "PyXA.XABase.XATextList.__annotations__"]], "__annotations__ (pyxa.xabase.xaurl attribute)": [[53, "PyXA.XABase.XAURL.__annotations__"]], "__annotations__ (pyxa.xabase.xaurllist attribute)": [[53, "PyXA.XABase.XAURLList.__annotations__"]], "__annotations__ (pyxa.xabase.xauserdomainobject attribute)": [[53, "PyXA.XABase.XAUserDomainObject.__annotations__"]], "__annotations__ (pyxa.xabase.xavideo attribute)": [[53, "PyXA.XABase.XAVideo.__annotations__"]], "__annotations__ (pyxa.xabase.xaword attribute)": [[53, "PyXA.XABase.XAWord.__annotations__"]], "__annotations__ (pyxa.xabase.xawordlist attribute)": [[53, "PyXA.XABase.XAWordList.__annotations__"]], "__contains__() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.__contains__"]], "__contains__() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.__contains__"]], "__dict__ (pyxa.xabase.applescript attribute)": [[53, "PyXA.XABase.AppleScript.__dict__"]], "__dict__ (pyxa.xabase.xaobject attribute)": [[53, "PyXA.XABase.XAObject.__dict__"]], "__eq__() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.__eq__"]], "__eq__() (pyxa.xabase.xaobject method)": [[53, "PyXA.XABase.XAObject.__eq__"]], "__eq__() (pyxa.xabase.xapath method)": [[53, "PyXA.XABase.XAPath.__eq__"]], "__eq__() (pyxa.xabase.xaurl method)": [[53, "PyXA.XABase.XAURL.__eq__"]], "__getattr__() (pyxa.xabase.xaapplication method)": [[53, "PyXA.XABase.XAApplication.__getattr__"]], "__getitem__() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.__getitem__"]], "__getitem__() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.__getitem__"]], "__hash__ (pyxa.xabase.xaimage attribute)": [[53, "PyXA.XABase.XAImage.__hash__"]], "__hash__ (pyxa.xabase.xaobject attribute)": [[53, "PyXA.XABase.XAObject.__hash__"]], "__hash__ (pyxa.xabase.xapath attribute)": [[53, "PyXA.XABase.XAPath.__hash__"]], "__hash__ (pyxa.xabase.xaurl attribute)": [[53, "PyXA.XABase.XAURL.__hash__"]], "__init__() (pyxa.xabase.applescript method)": [[53, "PyXA.XABase.AppleScript.__init__"]], "__init__() (pyxa.xabase.application method)": [[53, "PyXA.XABase.Application.__init__"]], "__init__() (pyxa.xabase.xaalias method)": [[53, "PyXA.XABase.XAAlias.__init__"]], "__init__() (pyxa.xabase.xaaliaslist method)": [[53, "PyXA.XABase.XAAliasList.__init__"]], "__init__() (pyxa.xabase.xaapplication method)": [[53, "PyXA.XABase.XAApplication.__init__"]], "__init__() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.__init__"]], "__init__() (pyxa.xabase.xaapplicationpicker method)": [[53, "PyXA.XABase.XAApplicationPicker.__init__"]], "__init__() (pyxa.xabase.xaattachment method)": [[53, "PyXA.XABase.XAAttachment.__init__"]], "__init__() (pyxa.xabase.xaattachmentlist method)": [[53, "PyXA.XABase.XAAttachmentList.__init__"]], "__init__() (pyxa.xabase.xaattributerun method)": [[53, "PyXA.XABase.XAAttributeRun.__init__"]], "__init__() (pyxa.xabase.xaattributerunlist method)": [[53, "PyXA.XABase.XAAttributeRunList.__init__"]], "__init__() (pyxa.xabase.xacharacter method)": [[53, "PyXA.XABase.XACharacter.__init__"]], "__init__() (pyxa.xabase.xacharacterlist method)": [[53, "PyXA.XABase.XACharacterList.__init__"]], "__init__() (pyxa.xabase.xaclassicdomainobject method)": [[53, "PyXA.XABase.XAClassicDomainObject.__init__"]], "__init__() (pyxa.xabase.xaclipboard method)": [[53, "PyXA.XABase.XAClipboard.__init__"]], "__init__() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.__init__"]], "__init__() (pyxa.xabase.xacolorlist method)": [[53, "PyXA.XABase.XAColorList.__init__"]], "__init__() (pyxa.xabase.xacolorpicker method)": [[53, "PyXA.XABase.XAColorPicker.__init__"]], "__init__() (pyxa.xabase.xadialog method)": [[53, "PyXA.XABase.XADialog.__init__"]], "__init__() (pyxa.xabase.xadisk method)": [[53, "PyXA.XABase.XADisk.__init__"]], "__init__() (pyxa.xabase.xadiskitem method)": [[53, "PyXA.XABase.XADiskItem.__init__"]], "__init__() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.__init__"]], "__init__() (pyxa.xabase.xadisklist method)": [[53, "PyXA.XABase.XADiskList.__init__"]], "__init__() (pyxa.xabase.xadomain method)": [[53, "PyXA.XABase.XADomain.__init__"]], "__init__() (pyxa.xabase.xadomainlist method)": [[53, "PyXA.XABase.XADomainList.__init__"]], "__init__() (pyxa.xabase.xafile method)": [[53, "PyXA.XABase.XAFile.__init__"]], "__init__() (pyxa.xabase.xafilelist method)": [[53, "PyXA.XABase.XAFileList.__init__"]], "__init__() (pyxa.xabase.xafilenamedialog method)": [[53, "PyXA.XABase.XAFileNameDialog.__init__"]], "__init__() (pyxa.xabase.xafilepackage method)": [[53, "PyXA.XABase.XAFilePackage.__init__"]], "__init__() (pyxa.xabase.xafilepackagelist method)": [[53, "PyXA.XABase.XAFilePackageList.__init__"]], "__init__() (pyxa.xabase.xafilepicker method)": [[53, "PyXA.XABase.XAFilePicker.__init__"]], "__init__() (pyxa.xabase.xafolder method)": [[53, "PyXA.XABase.XAFolder.__init__"]], "__init__() (pyxa.xabase.xafolderlist method)": [[53, "PyXA.XABase.XAFolderList.__init__"]], "__init__() (pyxa.xabase.xafolderpicker method)": [[53, "PyXA.XABase.XAFolderPicker.__init__"]], "__init__() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.__init__"]], "__init__() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.__init__"]], "__init__() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.__init__"]], "__init__() (pyxa.xabase.xalocaldomainobject method)": [[53, "PyXA.XABase.XALocalDomainObject.__init__"]], "__init__() (pyxa.xabase.xalocation method)": [[53, "PyXA.XABase.XALocation.__init__"]], "__init__() (pyxa.xabase.xamenu method)": [[53, "PyXA.XABase.XAMenu.__init__"]], "__init__() (pyxa.xabase.xanetworkdomainobject method)": [[53, "PyXA.XABase.XANetworkDomainObject.__init__"]], "__init__() (pyxa.xabase.xaobject method)": [[53, "PyXA.XABase.XAObject.__init__"]], "__init__() (pyxa.xabase.xaparagraph method)": [[53, "PyXA.XABase.XAParagraph.__init__"]], "__init__() (pyxa.xabase.xaparagraphlist method)": [[53, "PyXA.XABase.XAParagraphList.__init__"]], "__init__() (pyxa.xabase.xapath method)": [[53, "PyXA.XABase.XAPath.__init__"]], "__init__() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.__init__"]], "__init__() (pyxa.xabase.xasentence method)": [[53, "PyXA.XABase.XASentence.__init__"]], "__init__() (pyxa.xabase.xasentencelist method)": [[53, "PyXA.XABase.XASentenceList.__init__"]], "__init__() (pyxa.xabase.xasound method)": [[53, "PyXA.XABase.XASound.__init__"]], "__init__() (pyxa.xabase.xasoundlist method)": [[53, "PyXA.XABase.XASoundList.__init__"]], "__init__() (pyxa.xabase.xaspotlight method)": [[53, "PyXA.XABase.XASpotlight.__init__"]], "__init__() (pyxa.xabase.xasystemdomainobject method)": [[53, "PyXA.XABase.XASystemDomainObject.__init__"]], "__init__() (pyxa.xabase.xatext method)": [[53, "PyXA.XABase.XAText.__init__"]], "__init__() (pyxa.xabase.xatextdocument method)": [[53, "PyXA.XABase.XATextDocument.__init__"]], "__init__() (pyxa.xabase.xatextdocumentlist method)": [[53, "PyXA.XABase.XATextDocumentList.__init__"]], "__init__() (pyxa.xabase.xatextlist method)": [[53, "PyXA.XABase.XATextList.__init__"]], "__init__() (pyxa.xabase.xaurl method)": [[53, "PyXA.XABase.XAURL.__init__"]], "__init__() (pyxa.xabase.xaurllist method)": [[53, "PyXA.XABase.XAURLList.__init__"]], "__init__() (pyxa.xabase.xauserdomainobject method)": [[53, "PyXA.XABase.XAUserDomainObject.__init__"]], "__init__() (pyxa.xabase.xavideo method)": [[53, "PyXA.XABase.XAVideo.__init__"]], "__init__() (pyxa.xabase.xaword method)": [[53, "PyXA.XABase.XAWord.__init__"]], "__init__() (pyxa.xabase.xawordlist method)": [[53, "PyXA.XABase.XAWordList.__init__"]], "__iter__() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.__iter__"]], "__iter__() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.__iter__"]], "__len__() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.__len__"]], "__len__() (pyxa.xabase.xatext method)": [[53, "PyXA.XABase.XAText.__len__"]], "__module__ (pyxa.xabase.applescript attribute)": [[53, "PyXA.XABase.AppleScript.__module__"]], "__module__ (pyxa.xabase.application attribute)": [[53, "PyXA.XABase.Application.__module__"]], "__module__ (pyxa.xabase.xaalias attribute)": [[53, "PyXA.XABase.XAAlias.__module__"]], "__module__ (pyxa.xabase.xaaliaslist attribute)": [[53, "PyXA.XABase.XAAliasList.__module__"]], "__module__ (pyxa.xabase.xaapplication attribute)": [[53, "PyXA.XABase.XAApplication.__module__"]], "__module__ (pyxa.xabase.xaapplicationlist attribute)": [[53, "PyXA.XABase.XAApplicationList.__module__"]], "__module__ (pyxa.xabase.xaapplicationpicker attribute)": [[53, "PyXA.XABase.XAApplicationPicker.__module__"]], "__module__ (pyxa.xabase.xaattachment attribute)": [[53, "PyXA.XABase.XAAttachment.__module__"]], "__module__ (pyxa.xabase.xaattachmentlist attribute)": [[53, "PyXA.XABase.XAAttachmentList.__module__"]], "__module__ (pyxa.xabase.xaattributerun attribute)": [[53, "PyXA.XABase.XAAttributeRun.__module__"]], "__module__ (pyxa.xabase.xaattributerunlist attribute)": [[53, "PyXA.XABase.XAAttributeRunList.__module__"]], "__module__ (pyxa.xabase.xacharacter attribute)": [[53, "PyXA.XABase.XACharacter.__module__"]], "__module__ (pyxa.xabase.xacharacterlist attribute)": [[53, "PyXA.XABase.XACharacterList.__module__"]], "__module__ (pyxa.xabase.xaclassicdomainobject attribute)": [[53, "PyXA.XABase.XAClassicDomainObject.__module__"]], "__module__ (pyxa.xabase.xaclipboard attribute)": [[53, "PyXA.XABase.XAClipboard.__module__"]], "__module__ (pyxa.xabase.xacolor attribute)": [[53, "PyXA.XABase.XAColor.__module__"]], "__module__ (pyxa.xabase.xacolorlist attribute)": [[53, "PyXA.XABase.XAColorList.__module__"]], "__module__ (pyxa.xabase.xacolorpicker attribute)": [[53, "PyXA.XABase.XAColorPicker.__module__"]], "__module__ (pyxa.xabase.xacolorpickerstyle attribute)": [[53, "PyXA.XABase.XAColorPickerStyle.__module__"]], "__module__ (pyxa.xabase.xadialog attribute)": [[53, "PyXA.XABase.XADialog.__module__"]], "__module__ (pyxa.xabase.xadisk attribute)": [[53, "PyXA.XABase.XADisk.__module__"]], "__module__ (pyxa.xabase.xadiskitem attribute)": [[53, "PyXA.XABase.XADiskItem.__module__"]], "__module__ (pyxa.xabase.xadiskitemlist attribute)": [[53, "PyXA.XABase.XADiskItemList.__module__"]], "__module__ (pyxa.xabase.xadisklist attribute)": [[53, "PyXA.XABase.XADiskList.__module__"]], "__module__ (pyxa.xabase.xadomain attribute)": [[53, "PyXA.XABase.XADomain.__module__"]], "__module__ (pyxa.xabase.xadomainlist attribute)": [[53, "PyXA.XABase.XADomainList.__module__"]], "__module__ (pyxa.xabase.xaeventsapplication attribute)": [[53, "PyXA.XABase.XAEventsApplication.__module__"]], "__module__ (pyxa.xabase.xaeventsapplication.format attribute)": [[53, "PyXA.XABase.XAEventsApplication.Format.__module__"]], "__module__ (pyxa.xabase.xafile attribute)": [[53, "PyXA.XABase.XAFile.__module__"]], "__module__ (pyxa.xabase.xafilelist attribute)": [[53, "PyXA.XABase.XAFileList.__module__"]], "__module__ (pyxa.xabase.xafilenamedialog attribute)": [[53, "PyXA.XABase.XAFileNameDialog.__module__"]], "__module__ (pyxa.xabase.xafilepackage attribute)": [[53, "PyXA.XABase.XAFilePackage.__module__"]], "__module__ (pyxa.xabase.xafilepackagelist attribute)": [[53, "PyXA.XABase.XAFilePackageList.__module__"]], "__module__ (pyxa.xabase.xafilepicker attribute)": [[53, "PyXA.XABase.XAFilePicker.__module__"]], "__module__ (pyxa.xabase.xafolder attribute)": [[53, "PyXA.XABase.XAFolder.__module__"]], "__module__ (pyxa.xabase.xafolderlist attribute)": [[53, "PyXA.XABase.XAFolderList.__module__"]], "__module__ (pyxa.xabase.xafolderpicker attribute)": [[53, "PyXA.XABase.XAFolderPicker.__module__"]], "__module__ (pyxa.xabase.xaimage attribute)": [[53, "PyXA.XABase.XAImage.__module__"]], "__module__ (pyxa.xabase.xaimagelist attribute)": [[53, "PyXA.XABase.XAImageList.__module__"]], "__module__ (pyxa.xabase.xalist attribute)": [[53, "PyXA.XABase.XAList.__module__"]], "__module__ (pyxa.xabase.xalocaldomainobject attribute)": [[53, "PyXA.XABase.XALocalDomainObject.__module__"]], "__module__ (pyxa.xabase.xalocation attribute)": [[53, "PyXA.XABase.XALocation.__module__"]], "__module__ (pyxa.xabase.xamenu attribute)": [[53, "PyXA.XABase.XAMenu.__module__"]], "__module__ (pyxa.xabase.xanetworkdomainobject attribute)": [[53, "PyXA.XABase.XANetworkDomainObject.__module__"]], "__module__ (pyxa.xabase.xaobject attribute)": [[53, "PyXA.XABase.XAObject.__module__"]], "__module__ (pyxa.xabase.xaparagraph attribute)": [[53, "PyXA.XABase.XAParagraph.__module__"]], "__module__ (pyxa.xabase.xaparagraphlist attribute)": [[53, "PyXA.XABase.XAParagraphList.__module__"]], "__module__ (pyxa.xabase.xapath attribute)": [[53, "PyXA.XABase.XAPath.__module__"]], "__module__ (pyxa.xabase.xapredicate attribute)": [[53, "PyXA.XABase.XAPredicate.__module__"]], "__module__ (pyxa.xabase.xasentence attribute)": [[53, "PyXA.XABase.XASentence.__module__"]], "__module__ (pyxa.xabase.xasentencelist attribute)": [[53, "PyXA.XABase.XASentenceList.__module__"]], "__module__ (pyxa.xabase.xasound attribute)": [[53, "PyXA.XABase.XASound.__module__"]], "__module__ (pyxa.xabase.xasoundlist attribute)": [[53, "PyXA.XABase.XASoundList.__module__"]], "__module__ (pyxa.xabase.xaspotlight attribute)": [[53, "PyXA.XABase.XASpotlight.__module__"]], "__module__ (pyxa.xabase.xasystemdomainobject attribute)": [[53, "PyXA.XABase.XASystemDomainObject.__module__"]], "__module__ (pyxa.xabase.xatext attribute)": [[53, "PyXA.XABase.XAText.__module__"]], "__module__ (pyxa.xabase.xatextdocument attribute)": [[53, "PyXA.XABase.XATextDocument.__module__"]], "__module__ (pyxa.xabase.xatextdocumentlist attribute)": [[53, "PyXA.XABase.XATextDocumentList.__module__"]], "__module__ (pyxa.xabase.xatextlist attribute)": [[53, "PyXA.XABase.XATextList.__module__"]], "__module__ (pyxa.xabase.xaurl attribute)": [[53, "PyXA.XABase.XAURL.__module__"]], "__module__ (pyxa.xabase.xaurllist attribute)": [[53, "PyXA.XABase.XAURLList.__module__"]], "__module__ (pyxa.xabase.xauserdomainobject attribute)": [[53, "PyXA.XABase.XAUserDomainObject.__module__"]], "__module__ (pyxa.xabase.xavideo attribute)": [[53, "PyXA.XABase.XAVideo.__module__"]], "__module__ (pyxa.xabase.xaword attribute)": [[53, "PyXA.XABase.XAWord.__module__"]], "__module__ (pyxa.xabase.xawordlist attribute)": [[53, "PyXA.XABase.XAWordList.__module__"]], "__repr__() (pyxa.xabase.applescript method)": [[53, "PyXA.XABase.AppleScript.__repr__"]], "__repr__() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.__repr__"]], "__repr__() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.__repr__"]], "__repr__() (pyxa.xabase.xadiskitem method)": [[53, "PyXA.XABase.XADiskItem.__repr__"]], "__repr__() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.__repr__"]], "__repr__() (pyxa.xabase.xadomain method)": [[53, "PyXA.XABase.XADomain.__repr__"]], "__repr__() (pyxa.xabase.xadomainlist method)": [[53, "PyXA.XABase.XADomainList.__repr__"]], "__repr__() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.__repr__"]], "__repr__() (pyxa.xabase.xalocation method)": [[53, "PyXA.XABase.XALocation.__repr__"]], "__repr__() (pyxa.xabase.xapath method)": [[53, "PyXA.XABase.XAPath.__repr__"]], "__repr__() (pyxa.xabase.xatext method)": [[53, "PyXA.XABase.XAText.__repr__"]], "__repr__() (pyxa.xabase.xatextdocumentlist method)": [[53, "PyXA.XABase.XATextDocumentList.__repr__"]], "__repr__() (pyxa.xabase.xatextlist method)": [[53, "PyXA.XABase.XATextList.__repr__"]], "__repr__() (pyxa.xabase.xaurl method)": [[53, "PyXA.XABase.XAURL.__repr__"]], "__reversed__() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.__reversed__"]], "__str__() (pyxa.xabase.xatext method)": [[53, "PyXA.XABase.XAText.__str__"]], "__str__() (pyxa.xabase.xaurl method)": [[53, "PyXA.XABase.XAURL.__str__"]], "__weakref__ (pyxa.xabase.applescript attribute)": [[53, "PyXA.XABase.AppleScript.__weakref__"]], "__weakref__ (pyxa.xabase.xaobject attribute)": [[53, "PyXA.XABase.XAObject.__weakref__"]], "activate() (pyxa.xabase.xaapplication method)": [[53, "PyXA.XABase.XAApplication.activate"]], "add() (pyxa.xabase.applescript method)": [[53, "PyXA.XABase.AppleScript.add"]], "add_begins_with_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.add_begins_with_condition"]], "add_between_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.add_between_condition"]], "add_contains_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.add_contains_condition"]], "add_ends_with_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.add_ends_with_condition"]], "add_eq_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.add_eq_condition"]], "add_geq_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.add_geq_condition"]], "add_gt_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.add_gt_condition"]], "add_leq_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.add_leq_condition"]], "add_lt_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.add_lt_condition"]], "add_match_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.add_match_condition"]], "add_neq_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.add_neq_condition"]], "additive_composition() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.additive_composition"]], "address (pyxa.xabase.xalocation attribute)": [[53, "PyXA.XABase.XALocation.address"]], "aliases() (pyxa.xabase.xaalias method)": [[53, "PyXA.XABase.XAAlias.aliases"]], "aliases() (pyxa.xabase.xadisk method)": [[53, "PyXA.XABase.XADisk.aliases"]], "aliases() (pyxa.xabase.xafilepackage method)": [[53, "PyXA.XABase.XAFilePackage.aliases"]], "aliases() (pyxa.xabase.xafolder method)": [[53, "PyXA.XABase.XAFolder.aliases"]], "alpha_value (pyxa.xabase.xacolor property)": [[53, "PyXA.XABase.XAColor.alpha_value"]], "altitude (pyxa.xabase.xalocation attribute)": [[53, "PyXA.XABase.XALocation.altitude"]], "app_paths (pyxa.xabase.application attribute)": [[53, "PyXA.XABase.Application.app_paths"]], "append() (pyxa.xabase.xatextdocument method)": [[53, "PyXA.XABase.XATextDocument.append"]], "apple_menu_folder (pyxa.xabase.xaclassicdomainobject property)": [[53, "PyXA.XABase.XAClassicDomainObject.apple_menu_folder"]], "application_support_folder (pyxa.xabase.xadomain property)": [[53, "PyXA.XABase.XADomain.application_support_folder"]], "applications_folder (pyxa.xabase.xadomain property)": [[53, "PyXA.XABase.XADomain.applications_folder"]], "at() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.at"]], "attachments() (pyxa.xabase.xatext method)": [[53, "PyXA.XABase.XAText.attachments"]], "attachments() (pyxa.xabase.xatextdocument method)": [[53, "PyXA.XABase.XATextDocument.attachments"]], "attachments() (pyxa.xabase.xatextdocumentlist method)": [[53, "PyXA.XABase.XATextDocumentList.attachments"]], "attachments() (pyxa.xabase.xatextlist method)": [[53, "PyXA.XABase.XATextList.attachments"]], "attribute_runs() (pyxa.xabase.xatext method)": [[53, "PyXA.XABase.XAText.attribute_runs"]], "attribute_runs() (pyxa.xabase.xatextdocument method)": [[53, "PyXA.XABase.XATextDocument.attribute_runs"]], "attribute_runs() (pyxa.xabase.xatextdocumentlist method)": [[53, "PyXA.XABase.XATextDocumentList.attribute_runs"]], "attribute_runs() (pyxa.xabase.xatextlist method)": [[53, "PyXA.XABase.XATextList.attribute_runs"]], "auto_enhance() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.auto_enhance"]], "auto_enhance() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.auto_enhance"]], "base_url (pyxa.xabase.xaurl property)": [[53, "PyXA.XABase.XAURL.base_url"]], "base_url() (pyxa.xabase.xaurllist method)": [[53, "PyXA.XABase.XAURLList.base_url"]], "beep() (pyxa.xabase.xasound method)": [[53, "PyXA.XABase.XASound.beep"]], "beginning_with() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.beginning_with"]], "between() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.between"]], "black() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.black"]], "bloom() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.bloom"]], "bloom() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.bloom"]], "blue() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.blue"]], "blue_value (pyxa.xabase.xacolor property)": [[53, "PyXA.XABase.XAColor.blue_value"]], "brighten() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.brighten"]], "brightness_value (pyxa.xabase.xacolor property)": [[53, "PyXA.XABase.XAColor.brightness_value"]], "brown() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.brown"]], "bump() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.bump"]], "bump() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.bump"]], "bundle_identifier (pyxa.xabase.xaapplication property)": [[53, "PyXA.XABase.XAApplication.bundle_identifier"]], "bundle_identifier() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.bundle_identifier"]], "bundle_url (pyxa.xabase.xaapplication property)": [[53, "PyXA.XABase.XAApplication.bundle_url"]], "bundle_url() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.bundle_url"]], "busy_status (pyxa.xabase.xadiskitem property)": [[53, "PyXA.XABase.XADiskItem.busy_status"]], "busy_status() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.busy_status"]], "buttons (pyxa.xabase.xadialog attribute)": [[53, "PyXA.XABase.XADialog.buttons"]], "by_bundle_identifier() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.by_bundle_identifier"]], "by_bundle_url() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.by_bundle_url"]], "by_busy_status() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.by_busy_status"]], "by_capacity() (pyxa.xabase.xadisklist method)": [[53, "PyXA.XABase.XADiskList.by_capacity"]], "by_container() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.by_container"]], "by_creation_date() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.by_creation_date"]], "by_creator_type() (pyxa.xabase.xaaliaslist method)": [[53, "PyXA.XABase.XAAliasList.by_creator_type"]], "by_creator_type() (pyxa.xabase.xafilelist method)": [[53, "PyXA.XABase.XAFileList.by_creator_type"]], "by_default_application() (pyxa.xabase.xaaliaslist method)": [[53, "PyXA.XABase.XAAliasList.by_default_application"]], "by_default_application() (pyxa.xabase.xafilelist method)": [[53, "PyXA.XABase.XAFileList.by_default_application"]], "by_displayed_name() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.by_displayed_name"]], "by_ejectable() (pyxa.xabase.xadisklist method)": [[53, "PyXA.XABase.XADiskList.by_ejectable"]], "by_executable_url() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.by_executable_url"]], "by_file_type() (pyxa.xabase.xaaliaslist method)": [[53, "PyXA.XABase.XAAliasList.by_file_type"]], "by_file_type() (pyxa.xabase.xafilelist method)": [[53, "PyXA.XABase.XAFileList.by_file_type"]], "by_format() (pyxa.xabase.xadisklist method)": [[53, "PyXA.XABase.XADiskList.by_format"]], "by_free_space() (pyxa.xabase.xadisklist method)": [[53, "PyXA.XABase.XADiskList.by_free_space"]], "by_id() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.by_id"]], "by_id() (pyxa.xabase.xadomainlist method)": [[53, "PyXA.XABase.XADomainList.by_id"]], "by_ignore_privileges() (pyxa.xabase.xadisklist method)": [[53, "PyXA.XABase.XADiskList.by_ignore_privileges"]], "by_kind() (pyxa.xabase.xaaliaslist method)": [[53, "PyXA.XABase.XAAliasList.by_kind"]], "by_kind() (pyxa.xabase.xafilelist method)": [[53, "PyXA.XABase.XAFileList.by_kind"]], "by_launch_date() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.by_launch_date"]], "by_local_volume() (pyxa.xabase.xadisklist method)": [[53, "PyXA.XABase.XADiskList.by_local_volume"]], "by_localized_name() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.by_localized_name"]], "by_modification_date() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.by_modification_date"]], "by_name() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.by_name"]], "by_name() (pyxa.xabase.xadomainlist method)": [[53, "PyXA.XABase.XADomainList.by_name"]], "by_name_extension() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.by_name_extension"]], "by_package_folder() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.by_package_folder"]], "by_path() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.by_path"]], "by_physical_size() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.by_physical_size"]], "by_posix_path() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.by_posix_path"]], "by_process_identifier() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.by_process_identifier"]], "by_product_version() (pyxa.xabase.xaaliaslist method)": [[53, "PyXA.XABase.XAAliasList.by_product_version"]], "by_product_version() (pyxa.xabase.xafilelist method)": [[53, "PyXA.XABase.XAFileList.by_product_version"]], "by_properties() (pyxa.xabase.xatextdocumentlist method)": [[53, "PyXA.XABase.XATextDocumentList.by_properties"]], "by_property() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.by_property"]], "by_server() (pyxa.xabase.xadisklist method)": [[53, "PyXA.XABase.XADiskList.by_server"]], "by_short_version() (pyxa.xabase.xaaliaslist method)": [[53, "PyXA.XABase.XAAliasList.by_short_version"]], "by_short_version() (pyxa.xabase.xafilelist method)": [[53, "PyXA.XABase.XAFileList.by_short_version"]], "by_size() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.by_size"]], "by_startup() (pyxa.xabase.xadisklist method)": [[53, "PyXA.XABase.XADiskList.by_startup"]], "by_stationery() (pyxa.xabase.xaaliaslist method)": [[53, "PyXA.XABase.XAAliasList.by_stationery"]], "by_stationery() (pyxa.xabase.xafilelist method)": [[53, "PyXA.XABase.XAFileList.by_stationery"]], "by_text() (pyxa.xabase.xatextdocumentlist method)": [[53, "PyXA.XABase.XATextDocumentList.by_text"]], "by_type_identifier() (pyxa.xabase.xaaliaslist method)": [[53, "PyXA.XABase.XAAliasList.by_type_identifier"]], "by_type_identifier() (pyxa.xabase.xafilelist method)": [[53, "PyXA.XABase.XAFileList.by_type_identifier"]], "by_url() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.by_url"]], "by_version() (pyxa.xabase.xaaliaslist method)": [[53, "PyXA.XABase.XAAliasList.by_version"]], "by_version() (pyxa.xabase.xafilelist method)": [[53, "PyXA.XABase.XAFileList.by_version"]], "by_visible() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.by_visible"]], "by_volume() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.by_volume"]], "by_zone() (pyxa.xabase.xadisklist method)": [[53, "PyXA.XABase.XADiskList.by_zone"]], "cancel_button (pyxa.xabase.xadialog attribute)": [[53, "PyXA.XABase.XADialog.cancel_button"]], "cancel_button_name (pyxa.xabase.xamenu attribute)": [[53, "PyXA.XABase.XAMenu.cancel_button_name"]], "capacity (pyxa.xabase.xadisk property)": [[53, "PyXA.XABase.XADisk.capacity"]], "capacity() (pyxa.xabase.xadisklist method)": [[53, "PyXA.XABase.XADiskList.capacity"]], "characters() (pyxa.xabase.xatext method)": [[53, "PyXA.XABase.XAText.characters"]], "characters() (pyxa.xabase.xatextdocument method)": [[53, "PyXA.XABase.XATextDocument.characters"]], "characters() (pyxa.xabase.xatextdocumentlist method)": [[53, "PyXA.XABase.XATextDocumentList.characters"]], "characters() (pyxa.xabase.xatextlist method)": [[53, "PyXA.XABase.XATextList.characters"]], "clear() (pyxa.xabase.xaclipboard method)": [[53, "PyXA.XABase.XAClipboard.clear"]], "clear() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.clear"]], "color (pyxa.xabase.xatext property)": [[53, "PyXA.XABase.XAText.color"]], "color_space_name (pyxa.xabase.xaimage property)": [[53, "PyXA.XABase.XAImage.color_space_name"]], "comic() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.comic"]], "comic() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.comic"]], "container (pyxa.xabase.xadiskitem property)": [[53, "PyXA.XABase.XADiskItem.container"]], "container() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.container"]], "containing() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.containing"]], "content (pyxa.xabase.xaclipboard property)": [[53, "PyXA.XABase.XAClipboard.content"]], "control_panels_folder (pyxa.xabase.xaclassicdomainobject property)": [[53, "PyXA.XABase.XAClassicDomainObject.control_panels_folder"]], "control_strip_modules_folder (pyxa.xabase.xaclassicdomainobject property)": [[53, "PyXA.XABase.XAClassicDomainObject.control_strip_modules_folder"]], "copy_color() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.copy_color"]], "count() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.count"]], "creation_date (pyxa.xabase.xadiskitem property)": [[53, "PyXA.XABase.XADiskItem.creation_date"]], "creation_date() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.creation_date"]], "creator_type (pyxa.xabase.xaalias property)": [[53, "PyXA.XABase.XAAlias.creator_type"]], "creator_type (pyxa.xabase.xafile property)": [[53, "PyXA.XABase.XAFile.creator_type"]], "creator_type() (pyxa.xabase.xaaliaslist method)": [[53, "PyXA.XABase.XAAliasList.creator_type"]], "creator_type() (pyxa.xabase.xafilelist method)": [[53, "PyXA.XABase.XAFileList.creator_type"]], "crop() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.crop"]], "crop() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.crop"]], "crystallize() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.crystallize"]], "crystallize() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.crystallize"]], "current_application() (in module pyxa.xabase)": [[53, "PyXA.XABase.current_application"]], "current_location (pyxa.xabase.xalocation property)": [[53, "PyXA.XABase.XALocation.current_location"]], "cyan() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.cyan"]], "darken() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.darken"]], "data (pyxa.xabase.xaimage property)": [[53, "PyXA.XABase.XAImage.data"]], "default_answer (pyxa.xabase.xadialog attribute)": [[53, "PyXA.XABase.XADialog.default_answer"]], "default_application (pyxa.xabase.xaalias property)": [[53, "PyXA.XABase.XAAlias.default_application"]], "default_application (pyxa.xabase.xafile property)": [[53, "PyXA.XABase.XAFile.default_application"]], "default_application() (pyxa.xabase.xaaliaslist method)": [[53, "PyXA.XABase.XAAliasList.default_application"]], "default_application() (pyxa.xabase.xafilelist method)": [[53, "PyXA.XABase.XAFileList.default_application"]], "default_button (pyxa.xabase.xadialog attribute)": [[53, "PyXA.XABase.XADialog.default_button"]], "default_items (pyxa.xabase.xamenu attribute)": [[53, "PyXA.XABase.XAMenu.default_items"]], "default_location (pyxa.xabase.xafilenamedialog attribute)": [[53, "PyXA.XABase.XAFileNameDialog.default_location"]], "default_location (pyxa.xabase.xafilepicker attribute)": [[53, "PyXA.XABase.XAFilePicker.default_location"]], "default_location (pyxa.xabase.xafolderpicker attribute)": [[53, "PyXA.XABase.XAFolderPicker.default_location"]], "default_name (pyxa.xabase.xafilenamedialog attribute)": [[53, "PyXA.XABase.XAFileNameDialog.default_name"]], "depth_of_field() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.depth_of_field"]], "depth_of_field() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.depth_of_field"]], "desktop_folder (pyxa.xabase.xaclassicdomainobject property)": [[53, "PyXA.XABase.XAClassicDomainObject.desktop_folder"]], "desktop_folder (pyxa.xabase.xauserdomainobject property)": [[53, "PyXA.XABase.XAUserDomainObject.desktop_folder"]], "desktop_pictures_folder (pyxa.xabase.xadomain property)": [[53, "PyXA.XABase.XADomain.desktop_pictures_folder"]], "disk_items() (pyxa.xabase.xaalias method)": [[53, "PyXA.XABase.XAAlias.disk_items"]], "disk_items() (pyxa.xabase.xadisk method)": [[53, "PyXA.XABase.XADisk.disk_items"]], "disk_items() (pyxa.xabase.xafilepackage method)": [[53, "PyXA.XABase.XAFilePackage.disk_items"]], "disk_items() (pyxa.xabase.xafolder method)": [[53, "PyXA.XABase.XAFolder.disk_items"]], "display() (pyxa.xabase.xaapplicationpicker method)": [[53, "PyXA.XABase.XAApplicationPicker.display"]], "display() (pyxa.xabase.xacolorpicker method)": [[53, "PyXA.XABase.XAColorPicker.display"]], "display() (pyxa.xabase.xadialog method)": [[53, "PyXA.XABase.XADialog.display"]], "display() (pyxa.xabase.xafilenamedialog method)": [[53, "PyXA.XABase.XAFileNameDialog.display"]], "display() (pyxa.xabase.xafilepicker method)": [[53, "PyXA.XABase.XAFilePicker.display"]], "display() (pyxa.xabase.xafolderpicker method)": [[53, "PyXA.XABase.XAFolderPicker.display"]], "display() (pyxa.xabase.xamenu method)": [[53, "PyXA.XABase.XAMenu.display"]], "displayed_name (pyxa.xabase.xadiskitem property)": [[53, "PyXA.XABase.XADiskItem.displayed_name"]], "displayed_name() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.displayed_name"]], "documents_folder (pyxa.xabase.xauserdomainobject property)": [[53, "PyXA.XABase.XAUserDomainObject.documents_folder"]], "downloads_folder (pyxa.xabase.xauserdomainobject property)": [[53, "PyXA.XABase.XAUserDomainObject.downloads_folder"]], "duration (pyxa.xabase.xasound property)": [[53, "PyXA.XABase.XASound.duration"]], "duration() (pyxa.xabase.xasoundlist method)": [[53, "PyXA.XABase.XASoundList.duration"]], "edges() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.edges"]], "edges() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.edges"]], "ejectable (pyxa.xabase.xadisk property)": [[53, "PyXA.XABase.XADisk.ejectable"]], "ejectable() (pyxa.xabase.xadisklist method)": [[53, "PyXA.XABase.XADiskList.ejectable"]], "empty_selection_allowed (pyxa.xabase.xamenu attribute)": [[53, "PyXA.XABase.XAMenu.empty_selection_allowed"]], "ending_with() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.ending_with"]], "equalling() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.equalling"]], "evaluate() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.evaluate"]], "evaluate_with_dict() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.evaluate_with_dict"]], "evaluate_with_format() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.evaluate_with_format"]], "executable_url (pyxa.xabase.xaapplication property)": [[53, "PyXA.XABase.XAApplication.executable_url"]], "executable_url() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.executable_url"]], "extend() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.extend"]], "extensions_folder (pyxa.xabase.xaclassicdomainobject property)": [[53, "PyXA.XABase.XAClassicDomainObject.extensions_folder"]], "extract_images() (pyxa.xabase.xaurl method)": [[53, "PyXA.XABase.XAURL.extract_images"]], "extract_images() (pyxa.xabase.xaurllist method)": [[53, "PyXA.XABase.XAURLList.extract_images"]], "extract_text() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.extract_text"]], "extract_text() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.extract_text"]], "extract_text() (pyxa.xabase.xaurl method)": [[53, "PyXA.XABase.XAURL.extract_text"]], "extract_text() (pyxa.xabase.xaurllist method)": [[53, "PyXA.XABase.XAURLList.extract_text"]], "favorites_folder (pyxa.xabase.xauserdomainobject property)": [[53, "PyXA.XABase.XAUserDomainObject.favorites_folder"]], "file (pyxa.xabase.xaimage attribute)": [[53, "PyXA.XABase.XAImage.file"]], "file() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.file"]], "file() (pyxa.xabase.xasoundlist method)": [[53, "PyXA.XABase.XASoundList.file"]], "file_packages() (pyxa.xabase.xaalias method)": [[53, "PyXA.XABase.XAAlias.file_packages"]], "file_packages() (pyxa.xabase.xadisk method)": [[53, "PyXA.XABase.XADisk.file_packages"]], "file_packages() (pyxa.xabase.xafilepackage method)": [[53, "PyXA.XABase.XAFilePackage.file_packages"]], "file_packages() (pyxa.xabase.xafolder method)": [[53, "PyXA.XABase.XAFolder.file_packages"]], "file_path (pyxa.xabase.applescript property)": [[53, "PyXA.XABase.AppleScript.file_path"]], "file_type (pyxa.xabase.xaalias property)": [[53, "PyXA.XABase.XAAlias.file_type"]], "file_type (pyxa.xabase.xafile property)": [[53, "PyXA.XABase.XAFile.file_type"]], "file_type() (pyxa.xabase.xaaliaslist method)": [[53, "PyXA.XABase.XAAliasList.file_type"]], "file_type() (pyxa.xabase.xafilelist method)": [[53, "PyXA.XABase.XAFileList.file_type"]], "files() (pyxa.xabase.xaalias method)": [[53, "PyXA.XABase.XAAlias.files"]], "files() (pyxa.xabase.xadisk method)": [[53, "PyXA.XABase.XADisk.files"]], "files() (pyxa.xabase.xafilepackage method)": [[53, "PyXA.XABase.XAFilePackage.files"]], "files() (pyxa.xabase.xafolder method)": [[53, "PyXA.XABase.XAFolder.files"]], "filter() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.filter"]], "first (pyxa.xabase.xalist property)": [[53, "PyXA.XABase.XAList.first"]], "first() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.first"]], "flip_horizontally() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.flip_horizontally"]], "flip_horizontally() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.flip_horizontally"]], "flip_vertically() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.flip_vertically"]], "flip_vertically() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.flip_vertically"]], "focus() (pyxa.xabase.xaapplication method)": [[53, "PyXA.XABase.XAApplication.focus"]], "folder_action_scripts_folder (pyxa.xabase.xadomain property)": [[53, "PyXA.XABase.XADomain.folder_action_scripts_folder"]], "folders() (pyxa.xabase.xaalias method)": [[53, "PyXA.XABase.XAAlias.folders"]], "folders() (pyxa.xabase.xaclassicdomainobject method)": [[53, "PyXA.XABase.XAClassicDomainObject.folders"]], "folders() (pyxa.xabase.xadisk method)": [[53, "PyXA.XABase.XADisk.folders"]], "folders() (pyxa.xabase.xadomain method)": [[53, "PyXA.XABase.XADomain.folders"]], "folders() (pyxa.xabase.xafilepackage method)": [[53, "PyXA.XABase.XAFilePackage.folders"]], "folders() (pyxa.xabase.xafolder method)": [[53, "PyXA.XABase.XAFolder.folders"]], "font (pyxa.xabase.xatext property)": [[53, "PyXA.XABase.XAText.font"]], "fonts_folder (pyxa.xabase.xaclassicdomainobject property)": [[53, "PyXA.XABase.XAClassicDomainObject.fonts_folder"]], "fonts_folder (pyxa.xabase.xadomain property)": [[53, "PyXA.XABase.XADomain.fonts_folder"]], "format (pyxa.xabase.xadisk property)": [[53, "PyXA.XABase.XADisk.format"]], "format() (pyxa.xabase.xadisklist method)": [[53, "PyXA.XABase.XADiskList.format"]], "fragment (pyxa.xabase.xaurl property)": [[53, "PyXA.XABase.XAURL.fragment"]], "fragment() (pyxa.xabase.xaurllist method)": [[53, "PyXA.XABase.XAURLList.fragment"]], "free_space (pyxa.xabase.xadisk property)": [[53, "PyXA.XABase.XADisk.free_space"]], "free_space() (pyxa.xabase.xadisklist method)": [[53, "PyXA.XABase.XADiskList.free_space"]], "from_args() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.from_args"]], "from_dict() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.from_dict"]], "front_window (pyxa.xabase.xaapplication property)": [[53, "PyXA.XABase.XAApplication.front_window"]], "frontmost (pyxa.xabase.xaapplication property)": [[53, "PyXA.XABase.XAApplication.frontmost"]], "gamma (pyxa.xabase.xaimage property)": [[53, "PyXA.XABase.XAImage.gamma"]], "gaussian_blur() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.gaussian_blur"]], "gaussian_blur() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.gaussian_blur"]], "get_clipboard_representation() (pyxa.xabase.xaapplication method)": [[53, "PyXA.XABase.XAApplication.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.xabase.xapath method)": [[53, "PyXA.XABase.XAPath.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.xabase.xasound method)": [[53, "PyXA.XABase.XASound.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.xabase.xasoundlist method)": [[53, "PyXA.XABase.XASoundList.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.xabase.xatextdocumentlist method)": [[53, "PyXA.XABase.XATextDocumentList.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.xabase.xaurl method)": [[53, "PyXA.XABase.XAURL.get_clipboard_representation"]], "get_images() (pyxa.xabase.xaclipboard method)": [[53, "PyXA.XABase.XAClipboard.get_images"]], "get_path_representation() (pyxa.xabase.xadiskitem method)": [[53, "PyXA.XABase.XADiskItem.get_path_representation"]], "get_strings() (pyxa.xabase.xaclipboard method)": [[53, "PyXA.XABase.XAClipboard.get_strings"]], "get_urls() (pyxa.xabase.xaclipboard method)": [[53, "PyXA.XABase.XAClipboard.get_urls"]], "gray() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.gray"]], "greater_than() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.greater_than"]], "green() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.green"]], "green_value (pyxa.xabase.xacolor property)": [[53, "PyXA.XABase.XAColor.green_value"]], "has_alpha_channel (pyxa.xabase.xaimage property)": [[53, "PyXA.XABase.XAImage.has_alpha_channel"]], "has_element() (pyxa.xabase.xaobject method)": [[53, "PyXA.XABase.XAObject.has_element"]], "has_element_properties() (pyxa.xabase.xaobject method)": [[53, "PyXA.XABase.XAObject.has_element_properties"]], "hex_value (pyxa.xabase.xacolor property)": [[53, "PyXA.XABase.XAColor.hex_value"]], "hidden_answer (pyxa.xabase.xadialog attribute)": [[53, "PyXA.XABase.XADialog.hidden_answer"]], "hide() (pyxa.xabase.xaapplication method)": [[53, "PyXA.XABase.XAApplication.hide"]], "hide() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.hide"]], "highlight (pyxa.xabase.xaimage property)": [[53, "PyXA.XABase.XAImage.highlight"]], "home_folder (pyxa.xabase.xauserdomainobject property)": [[53, "PyXA.XABase.XAUserDomainObject.home_folder"]], "horizontal_stitch() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.horizontal_stitch"]], "horizontal_stitch() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.horizontal_stitch"]], "html (pyxa.xabase.xaurl property)": [[53, "PyXA.XABase.XAURL.html"]], "html() (pyxa.xabase.xaurllist method)": [[53, "PyXA.XABase.XAURLList.html"]], "hue_value (pyxa.xabase.xacolor property)": [[53, "PyXA.XABase.XAColor.hue_value"]], "icon (pyxa.xabase.xaapplication property)": [[53, "PyXA.XABase.XAApplication.icon"]], "icon (pyxa.xabase.xadialog attribute)": [[53, "PyXA.XABase.XADialog.icon"]], "id (pyxa.xabase.xadiskitem property)": [[53, "PyXA.XABase.XADiskItem.id"]], "id (pyxa.xabase.xadomain property)": [[53, "PyXA.XABase.XADomain.id"]], "id() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.id"]], "id() (pyxa.xabase.xadomainlist method)": [[53, "PyXA.XABase.XADomainList.id"]], "ignore_privileges (pyxa.xabase.xadisk property)": [[53, "PyXA.XABase.XADisk.ignore_privileges"]], "ignore_privileges() (pyxa.xabase.xadisklist method)": [[53, "PyXA.XABase.XADiskList.ignore_privileges"]], "image_from_text() (pyxa.xabase.xaimage static method)": [[53, "PyXA.XABase.XAImage.image_from_text"]], "index() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.index"]], "insert() (pyxa.xabase.applescript method)": [[53, "PyXA.XABase.AppleScript.insert"]], "insert() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.insert"]], "insert_begins_with_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.insert_begins_with_condition"]], "insert_between_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.insert_between_condition"]], "insert_contains_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.insert_contains_condition"]], "insert_ends_with_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.insert_ends_with_condition"]], "insert_eq_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.insert_eq_condition"]], "insert_geq_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.insert_geq_condition"]], "insert_gt_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.insert_gt_condition"]], "insert_leq_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.insert_leq_condition"]], "insert_lt_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.insert_lt_condition"]], "insert_match_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.insert_match_condition"]], "insert_neq_condition() (pyxa.xabase.xapredicate method)": [[53, "PyXA.XABase.XAPredicate.insert_neq_condition"]], "invert() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.invert"]], "invert() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.invert"]], "is_opaque (pyxa.xabase.xaimage property)": [[53, "PyXA.XABase.XAImage.is_opaque"]], "keys (pyxa.xabase.xapredicate attribute)": [[53, "PyXA.XABase.XAPredicate.keys"]], "kind (pyxa.xabase.xaalias property)": [[53, "PyXA.XABase.XAAlias.kind"]], "kind (pyxa.xabase.xafile property)": [[53, "PyXA.XABase.XAFile.kind"]], "kind() (pyxa.xabase.xaaliaslist method)": [[53, "PyXA.XABase.XAAliasList.kind"]], "kind() (pyxa.xabase.xafilelist method)": [[53, "PyXA.XABase.XAFileList.kind"]], "last (pyxa.xabase.xalist property)": [[53, "PyXA.XABase.XAList.last"]], "last() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.last"]], "last_result (pyxa.xabase.applescript property)": [[53, "PyXA.XABase.AppleScript.last_result"]], "latitude (pyxa.xabase.xalocation attribute)": [[53, "PyXA.XABase.XALocation.latitude"]], "launch() (pyxa.xabase.xaapplication method)": [[53, "PyXA.XABase.XAApplication.launch"]], "launch_date (pyxa.xabase.xaapplication property)": [[53, "PyXA.XABase.XAApplication.launch_date"]], "launch_date() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.launch_date"]], "launcher_items_folder (pyxa.xabase.xaclassicdomainobject property)": [[53, "PyXA.XABase.XAClassicDomainObject.launcher_items_folder"]], "less_than() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.less_than"]], "library_folder (pyxa.xabase.xadomain property)": [[53, "PyXA.XABase.XADomain.library_folder"]], "load() (pyxa.xabase.applescript method)": [[53, "PyXA.XABase.AppleScript.load"]], "local_volume (pyxa.xabase.xadisk property)": [[53, "PyXA.XABase.XADisk.local_volume"]], "local_volume() (pyxa.xabase.xadisklist method)": [[53, "PyXA.XABase.XADiskList.local_volume"]], "localized_name (pyxa.xabase.xaapplication property)": [[53, "PyXA.XABase.XAApplication.localized_name"]], "localized_name() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.localized_name"]], "longitude (pyxa.xabase.xalocation attribute)": [[53, "PyXA.XABase.XALocation.longitude"]], "loop() (pyxa.xabase.xasound method)": [[53, "PyXA.XABase.XASound.loop"]], "magenta() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.magenta"]], "make_swatch() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.make_swatch"]], "menu_bars() (pyxa.xabase.xaapplication method)": [[53, "PyXA.XABase.XAApplication.menu_bars"]], "menu_items (pyxa.xabase.xamenu attribute)": [[53, "PyXA.XABase.XAMenu.menu_items"]], "mix_with() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.mix_with"]], "modification_date (pyxa.xabase.xadiskitem property)": [[53, "PyXA.XABase.XADiskItem.modification_date"]], "modification_date() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.modification_date"]], "modified (pyxa.xabase.xaimage attribute)": [[53, "PyXA.XABase.XAImage.modified"]], "modified (pyxa.xabase.xaimagelist attribute)": [[53, "PyXA.XABase.XAImageList.modified"]], "monochrome() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.monochrome"]], "monochrome() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.monochrome"]], "movies_folder (pyxa.xabase.xauserdomainobject property)": [[53, "PyXA.XABase.XAUserDomainObject.movies_folder"]], "multiple_selections_allowed (pyxa.xabase.xaapplicationpicker attribute)": [[53, "PyXA.XABase.XAApplicationPicker.multiple_selections_allowed"]], "multiple_selections_allowed (pyxa.xabase.xafilepicker attribute)": [[53, "PyXA.XABase.XAFilePicker.multiple_selections_allowed"]], "multiple_selections_allowed (pyxa.xabase.xafolderpicker attribute)": [[53, "PyXA.XABase.XAFolderPicker.multiple_selections_allowed"]], "multiple_selections_allowed (pyxa.xabase.xamenu attribute)": [[53, "PyXA.XABase.XAMenu.multiple_selections_allowed"]], "music_folder (pyxa.xabase.xauserdomainobject property)": [[53, "PyXA.XABase.XAUserDomainObject.music_folder"]], "name (pyxa.xabase.xadiskitem property)": [[53, "PyXA.XABase.XADiskItem.name"]], "name (pyxa.xabase.xadomain property)": [[53, "PyXA.XABase.XADomain.name"]], "name() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.name"]], "name() (pyxa.xabase.xadomainlist method)": [[53, "PyXA.XABase.XADomainList.name"]], "name_extension (pyxa.xabase.xadiskitem property)": [[53, "PyXA.XABase.XADiskItem.name_extension"]], "name_extension() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.name_extension"]], "not_containing() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.not_containing"]], "not_equalling() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.not_equalling"]], "num_sample_frames (pyxa.xabase.xasound property)": [[53, "PyXA.XABase.XASound.num_sample_frames"]], "num_sample_frames() (pyxa.xabase.xasoundlist method)": [[53, "PyXA.XABase.XASoundList.num_sample_frames"]], "ok_button_name (pyxa.xabase.xamenu attribute)": [[53, "PyXA.XABase.XAMenu.ok_button_name"]], "open() (pyxa.xabase.xadiskitem method)": [[53, "PyXA.XABase.XADiskItem.open"]], "open() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.open"]], "open() (pyxa.xabase.xapath method)": [[53, "PyXA.XABase.XAPath.open"]], "open() (pyxa.xabase.xasound method)": [[53, "PyXA.XABase.XASound.open"]], "open() (pyxa.xabase.xaurl method)": [[53, "PyXA.XABase.XAURL.open"]], "open() (pyxa.xabase.xaurllist method)": [[53, "PyXA.XABase.XAURLList.open"]], "operators (pyxa.xabase.xapredicate attribute)": [[53, "PyXA.XABase.XAPredicate.operators"]], "orange() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.orange"]], "outline() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.outline"]], "outline() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.outline"]], "overlay_image() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.overlay_image"]], "overlay_image() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.overlay_image"]], "overlay_text() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.overlay_text"]], "overlay_text() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.overlay_text"]], "owns_menu_bar (pyxa.xabase.xaapplication property)": [[53, "PyXA.XABase.XAApplication.owns_menu_bar"]], "package_folder (pyxa.xabase.xadiskitem property)": [[53, "PyXA.XABase.XADiskItem.package_folder"]], "package_folder() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.package_folder"]], "pad() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.pad"]], "pad() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.pad"]], "paragraphs() (pyxa.xabase.xatext method)": [[53, "PyXA.XABase.XAText.paragraphs"]], "paragraphs() (pyxa.xabase.xatextdocument method)": [[53, "PyXA.XABase.XATextDocument.paragraphs"]], "paragraphs() (pyxa.xabase.xatextdocumentlist method)": [[53, "PyXA.XABase.XATextDocumentList.paragraphs"]], "paragraphs() (pyxa.xabase.xatextlist method)": [[53, "PyXA.XABase.XATextList.paragraphs"]], "parameters (pyxa.xabase.xaurl property)": [[53, "PyXA.XABase.XAURL.parameters"]], "parameters() (pyxa.xabase.xaurllist method)": [[53, "PyXA.XABase.XAURLList.parameters"]], "parse_result_data() (pyxa.xabase.applescript method)": [[53, "PyXA.XABase.AppleScript.parse_result_data"]], "path (pyxa.xabase.xadiskitem property)": [[53, "PyXA.XABase.XADiskItem.path"]], "path (pyxa.xabase.xapath attribute)": [[53, "PyXA.XABase.XAPath.path"]], "path() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.path"]], "pause() (pyxa.xabase.xasound method)": [[53, "PyXA.XABase.XASound.pause"]], "pause() (pyxa.xabase.xasoundlist method)": [[53, "PyXA.XABase.XASoundList.pause"]], "physical_size (pyxa.xabase.xadiskitem property)": [[53, "PyXA.XABase.XADiskItem.physical_size"]], "physical_size() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.physical_size"]], "pictures_folder (pyxa.xabase.xauserdomainobject property)": [[53, "PyXA.XABase.XAUserDomainObject.pictures_folder"]], "pinch() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.pinch"]], "pinch() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.pinch"]], "pixellate() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.pixellate"]], "pixellate() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.pixellate"]], "play() (pyxa.xabase.xasound method)": [[53, "PyXA.XABase.XASound.play"]], "play() (pyxa.xabase.xasoundlist method)": [[53, "PyXA.XABase.XASoundList.play"]], "pointillize() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.pointillize"]], "pointillize() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.pointillize"]], "pop() (pyxa.xabase.applescript method)": [[53, "PyXA.XABase.AppleScript.pop"]], "pop() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.pop"]], "pop() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.pop"]], "port (pyxa.xabase.xaurl property)": [[53, "PyXA.XABase.XAURL.port"]], "port() (pyxa.xabase.xaurllist method)": [[53, "PyXA.XABase.XAURLList.port"]], "posix_path (pyxa.xabase.xadiskitem property)": [[53, "PyXA.XABase.XADiskItem.posix_path"]], "posix_path() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.posix_path"]], "predicate (pyxa.xabase.xaspotlight attribute)": [[53, "PyXA.XABase.XASpotlight.predicate"]], "preferences_folder (pyxa.xabase.xaclassicdomainobject property)": [[53, "PyXA.XABase.XAClassicDomainObject.preferences_folder"]], "preferences_folder (pyxa.xabase.xadomain property)": [[53, "PyXA.XABase.XADomain.preferences_folder"]], "prepend() (pyxa.xabase.xatextdocument method)": [[53, "PyXA.XABase.XATextDocument.prepend"]], "process_identifier (pyxa.xabase.xaapplication property)": [[53, "PyXA.XABase.XAApplication.process_identifier"]], "process_identifier() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.process_identifier"]], "product_version (pyxa.xabase.xaalias property)": [[53, "PyXA.XABase.XAAlias.product_version"]], "product_version (pyxa.xabase.xafile property)": [[53, "PyXA.XABase.XAFile.product_version"]], "product_version() (pyxa.xabase.xaaliaslist method)": [[53, "PyXA.XABase.XAAliasList.product_version"]], "product_version() (pyxa.xabase.xafilelist method)": [[53, "PyXA.XABase.XAFileList.product_version"]], "prompt (pyxa.xabase.xaapplicationpicker attribute)": [[53, "PyXA.XABase.XAApplicationPicker.prompt"]], "prompt (pyxa.xabase.xafilenamedialog attribute)": [[53, "PyXA.XABase.XAFileNameDialog.prompt"]], "prompt (pyxa.xabase.xafilepicker attribute)": [[53, "PyXA.XABase.XAFilePicker.prompt"]], "prompt (pyxa.xabase.xafolderpicker attribute)": [[53, "PyXA.XABase.XAFolderPicker.prompt"]], "prompt (pyxa.xabase.xamenu attribute)": [[53, "PyXA.XABase.XAMenu.prompt"]], "properties() (pyxa.xabase.xatextdocumentlist method)": [[53, "PyXA.XABase.XATextDocumentList.properties"]], "public_folder (pyxa.xabase.xauserdomainobject property)": [[53, "PyXA.XABase.XAUserDomainObject.public_folder"]], "purple() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.purple"]], "push() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.push"]], "query (pyxa.xabase.xaspotlight attribute)": [[53, "PyXA.XABase.XASpotlight.query"]], "quit() (pyxa.xabase.xaapplication method)": [[53, "PyXA.XABase.XAApplication.quit"]], "quit() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.quit"]], "radius (pyxa.xabase.xalocation attribute)": [[53, "PyXA.XABase.XALocation.radius"]], "raw_value (pyxa.xabase.xalocation property)": [[53, "PyXA.XABase.XALocation.raw_value"]], "red() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.red"]], "red_value (pyxa.xabase.xacolor property)": [[53, "PyXA.XABase.XAColor.red_value"]], "reduce_noise() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.reduce_noise"]], "reduce_noise() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.reduce_noise"]], "resize() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.resize"]], "resize() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.resize"]], "results (pyxa.xabase.xaspotlight property)": [[53, "PyXA.XABase.XASpotlight.results"]], "resume() (pyxa.xabase.xasound method)": [[53, "PyXA.XABase.XASound.resume"]], "resume() (pyxa.xabase.xasoundlist method)": [[53, "PyXA.XABase.XASoundList.resume"]], "reverse() (pyxa.xabase.xatextdocument method)": [[53, "PyXA.XABase.XATextDocument.reverse"]], "reverse() (pyxa.xabase.xavideo method)": [[53, "PyXA.XABase.XAVideo.reverse"]], "reverse_geocode() (pyxa.xabase.xalocation method)": [[53, "PyXA.XABase.XALocation.reverse_geocode"]], "rotate() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.rotate"]], "rotate() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.rotate"]], "run() (pyxa.xabase.applescript method)": [[53, "PyXA.XABase.AppleScript.run"]], "run() (pyxa.xabase.xaspotlight method)": [[53, "PyXA.XABase.XASpotlight.run"]], "running_applications() (in module pyxa.xabase)": [[53, "PyXA.XABase.running_applications"]], "sample_rate (pyxa.xabase.xasound property)": [[53, "PyXA.XABase.XASound.sample_rate"]], "sample_rate() (pyxa.xabase.xasoundlist method)": [[53, "PyXA.XABase.XASoundList.sample_rate"]], "saturation_value (pyxa.xabase.xacolor property)": [[53, "PyXA.XABase.XAColor.saturation_value"]], "save() (pyxa.xabase.applescript method)": [[53, "PyXA.XABase.AppleScript.save"]], "save() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.save"]], "save() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.save"]], "save() (pyxa.xabase.xasound method)": [[53, "PyXA.XABase.XASound.save"]], "save() (pyxa.xabase.xavideo method)": [[53, "PyXA.XABase.XAVideo.save"]], "scale() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.scale"]], "scale() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.scale"]], "scheme (pyxa.xabase.xaurl property)": [[53, "PyXA.XABase.XAURL.scheme"]], "scheme() (pyxa.xabase.xaurllist method)": [[53, "PyXA.XABase.XAURLList.scheme"]], "script (pyxa.xabase.applescript attribute)": [[53, "PyXA.XABase.AppleScript.script"]], "scripting_additions_folder (pyxa.xabase.xadomain property)": [[53, "PyXA.XABase.XADomain.scripting_additions_folder"]], "scripts_folder (pyxa.xabase.xadomain property)": [[53, "PyXA.XABase.XADomain.scripts_folder"]], "select() (pyxa.xabase.xapath method)": [[53, "PyXA.XABase.XAPath.select"]], "sentences() (pyxa.xabase.xatext method)": [[53, "PyXA.XABase.XAText.sentences"]], "sentences() (pyxa.xabase.xatextdocument method)": [[53, "PyXA.XABase.XATextDocument.sentences"]], "sentences() (pyxa.xabase.xatextlist method)": [[53, "PyXA.XABase.XATextList.sentences"]], "sepia() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.sepia"]], "sepia() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.sepia"]], "server (pyxa.xabase.xadisk property)": [[53, "PyXA.XABase.XADisk.server"]], "server() (pyxa.xabase.xadisklist method)": [[53, "PyXA.XABase.XADiskList.server"]], "set_contents() (pyxa.xabase.xaclipboard method)": [[53, "PyXA.XABase.XAClipboard.set_contents"]], "set_element() (pyxa.xabase.xaobject method)": [[53, "PyXA.XABase.XAObject.set_element"]], "set_hsla() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.set_hsla"]], "set_properties() (pyxa.xabase.xaobject method)": [[53, "PyXA.XABase.XAObject.set_properties"]], "set_property() (pyxa.xabase.xaobject method)": [[53, "PyXA.XABase.XAObject.set_property"]], "set_rgba() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.set_rgba"]], "set_volume() (pyxa.xabase.xasound method)": [[53, "PyXA.XABase.XASound.set_volume"]], "shadow (pyxa.xabase.xaimage property)": [[53, "PyXA.XABase.XAImage.shadow"]], "shared_documents_folder (pyxa.xabase.xadomain property)": [[53, "PyXA.XABase.XADomain.shared_documents_folder"]], "short_version (pyxa.xabase.xaalias property)": [[53, "PyXA.XABase.XAAlias.short_version"]], "short_version (pyxa.xabase.xafile property)": [[53, "PyXA.XABase.XAFile.short_version"]], "short_version() (pyxa.xabase.xaaliaslist method)": [[53, "PyXA.XABase.XAAliasList.short_version"]], "short_version() (pyxa.xabase.xafilelist method)": [[53, "PyXA.XABase.XAFileList.short_version"]], "show_in_finder() (pyxa.xabase.xapath method)": [[53, "PyXA.XABase.XAPath.show_in_finder"]], "show_in_finder() (pyxa.xabase.xaspotlight method)": [[53, "PyXA.XABase.XASpotlight.show_in_finder"]], "show_in_maps() (pyxa.xabase.xalocation method)": [[53, "PyXA.XABase.XALocation.show_in_maps"]], "show_in_preview() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.show_in_preview"]], "show_in_preview() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.show_in_preview"]], "show_in_quicktime() (pyxa.xabase.xavideo method)": [[53, "PyXA.XABase.XAVideo.show_in_quicktime"]], "show_invisibles (pyxa.xabase.xafilepicker attribute)": [[53, "PyXA.XABase.XAFilePicker.show_invisibles"]], "show_invisibles (pyxa.xabase.xafolderpicker attribute)": [[53, "PyXA.XABase.XAFolderPicker.show_invisibles"]], "show_package_contents (pyxa.xabase.xafilepicker attribute)": [[53, "PyXA.XABase.XAFilePicker.show_package_contents"]], "show_package_contents (pyxa.xabase.xafolderpicker attribute)": [[53, "PyXA.XABase.XAFolderPicker.show_package_contents"]], "shuffle() (pyxa.xabase.xalist method)": [[53, "PyXA.XABase.XAList.shuffle"]], "shutdown_folder (pyxa.xabase.xaclassicdomainobject property)": [[53, "PyXA.XABase.XAClassicDomainObject.shutdown_folder"]], "sites_folder (pyxa.xabase.xauserdomainobject property)": [[53, "PyXA.XABase.XAUserDomainObject.sites_folder"]], "size (pyxa.xabase.xadiskitem property)": [[53, "PyXA.XABase.XADiskItem.size"]], "size (pyxa.xabase.xaimage property)": [[53, "PyXA.XABase.XAImage.size"]], "size (pyxa.xabase.xatext property)": [[53, "PyXA.XABase.XAText.size"]], "size() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.size"]], "soup (pyxa.xabase.xaurl attribute)": [[53, "PyXA.XABase.XAURL.soup"]], "speakable_items_folder (pyxa.xabase.xadomain property)": [[53, "PyXA.XABase.XADomain.speakable_items_folder"]], "startup (pyxa.xabase.xadisk property)": [[53, "PyXA.XABase.XADisk.startup"]], "startup() (pyxa.xabase.xadisklist method)": [[53, "PyXA.XABase.XADiskList.startup"]], "startup_items_folder (pyxa.xabase.xaclassicdomainobject property)": [[53, "PyXA.XABase.XAClassicDomainObject.startup_items_folder"]], "stationery (pyxa.xabase.xaalias property)": [[53, "PyXA.XABase.XAAlias.stationery"]], "stationery (pyxa.xabase.xafile property)": [[53, "PyXA.XABase.XAFile.stationery"]], "stationery() (pyxa.xabase.xaaliaslist method)": [[53, "PyXA.XABase.XAAliasList.stationery"]], "stationery() (pyxa.xabase.xafilelist method)": [[53, "PyXA.XABase.XAFileList.stationery"]], "stop() (pyxa.xabase.xasound method)": [[53, "PyXA.XABase.XASound.stop"]], "stop() (pyxa.xabase.xasoundlist method)": [[53, "PyXA.XABase.XASoundList.stop"]], "subtractive_composition() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.subtractive_composition"]], "supported_applications (in module pyxa.xabase)": [[53, "PyXA.XABase.supported_applications"]], "symbol() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.symbol"]], "system_folder (pyxa.xabase.xaclassicdomainobject property)": [[53, "PyXA.XABase.XAClassicDomainObject.system_folder"]], "tag_entities() (pyxa.xabase.xatext method)": [[53, "PyXA.XABase.XAText.tag_entities"]], "tag_languages() (pyxa.xabase.xatext method)": [[53, "PyXA.XABase.XAText.tag_languages"]], "tag_lemmas() (pyxa.xabase.xatext method)": [[53, "PyXA.XABase.XAText.tag_lemmas"]], "tag_parts_of_speech() (pyxa.xabase.xatext method)": [[53, "PyXA.XABase.XAText.tag_parts_of_speech"]], "tag_sentiments() (pyxa.xabase.xatext method)": [[53, "PyXA.XABase.XAText.tag_sentiments"]], "temperature (pyxa.xabase.xaimage property)": [[53, "PyXA.XABase.XAImage.temperature"]], "temporary_items_folder (pyxa.xabase.xauserdomainobject property)": [[53, "PyXA.XABase.XAUserDomainObject.temporary_items_folder"]], "terminate() (pyxa.xabase.xaapplication method)": [[53, "PyXA.XABase.XAApplication.terminate"]], "terminate() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.terminate"]], "text (pyxa.xabase.xadialog attribute)": [[53, "PyXA.XABase.XADialog.text"]], "text (pyxa.xabase.xatext property)": [[53, "PyXA.XABase.XAText.text"]], "text (pyxa.xabase.xatextdocument property)": [[53, "PyXA.XABase.XATextDocument.text"]], "text() (pyxa.xabase.xatextdocumentlist method)": [[53, "PyXA.XABase.XATextDocumentList.text"]], "timeout (pyxa.xabase.xaspotlight attribute)": [[53, "PyXA.XABase.XASpotlight.timeout"]], "tint (pyxa.xabase.xaimage property)": [[53, "PyXA.XABase.XAImage.tint"]], "title (pyxa.xabase.xaapplicationpicker attribute)": [[53, "PyXA.XABase.XAApplicationPicker.title"]], "title (pyxa.xabase.xadialog attribute)": [[53, "PyXA.XABase.XADialog.title"]], "title (pyxa.xabase.xalocation attribute)": [[53, "PyXA.XABase.XALocation.title"]], "title (pyxa.xabase.xamenu attribute)": [[53, "PyXA.XABase.XAMenu.title"]], "title (pyxa.xabase.xaurl property)": [[53, "PyXA.XABase.XAURL.title"]], "title() (pyxa.xabase.xaurllist method)": [[53, "PyXA.XABase.XAURLList.title"]], "trim() (pyxa.xabase.xasound method)": [[53, "PyXA.XABase.XASound.trim"]], "trim() (pyxa.xabase.xasoundlist method)": [[53, "PyXA.XABase.XASoundList.trim"]], "twirl() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.twirl"]], "twirl() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.twirl"]], "type_identifier (pyxa.xabase.xaalias property)": [[53, "PyXA.XABase.XAAlias.type_identifier"]], "type_identifier (pyxa.xabase.xafile property)": [[53, "PyXA.XABase.XAFile.type_identifier"]], "type_identifier() (pyxa.xabase.xaaliaslist method)": [[53, "PyXA.XABase.XAAliasList.type_identifier"]], "type_identifier() (pyxa.xabase.xafilelist method)": [[53, "PyXA.XABase.XAFileList.type_identifier"]], "types (pyxa.xabase.xafilepicker attribute)": [[53, "PyXA.XABase.XAFilePicker.types"]], "unostype() (in module pyxa.xabase)": [[53, "PyXA.XABase.unOSType"]], "unfocus() (pyxa.xabase.xaapplication method)": [[53, "PyXA.XABase.XAApplication.unfocus"]], "unhide() (pyxa.xabase.xaapplication method)": [[53, "PyXA.XABase.XAApplication.unhide"]], "unhide() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.unhide"]], "url (pyxa.xabase.xadiskitem property)": [[53, "PyXA.XABase.XADiskItem.url"]], "url (pyxa.xabase.xapath attribute)": [[53, "PyXA.XABase.XAPath.url"]], "url (pyxa.xabase.xaurl attribute)": [[53, "PyXA.XABase.XAURL.url"]], "url() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.url"]], "utilities_folder (pyxa.xabase.xadomain property)": [[53, "PyXA.XABase.XADomain.utilities_folder"]], "values (pyxa.xabase.xapredicate attribute)": [[53, "PyXA.XABase.XAPredicate.values"]], "version (pyxa.xabase.xaalias property)": [[53, "PyXA.XABase.XAAlias.version"]], "version (pyxa.xabase.xafile property)": [[53, "PyXA.XABase.XAFile.version"]], "version() (pyxa.xabase.xaaliaslist method)": [[53, "PyXA.XABase.XAAliasList.version"]], "version() (pyxa.xabase.xafilelist method)": [[53, "PyXA.XABase.XAFileList.version"]], "vertical_stitch() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.vertical_stitch"]], "vertical_stitch() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.vertical_stitch"]], "vibrance (pyxa.xabase.xaimage property)": [[53, "PyXA.XABase.XAImage.vibrance"]], "vignette() (pyxa.xabase.xaimage method)": [[53, "PyXA.XABase.XAImage.vignette"]], "vignette() (pyxa.xabase.xaimagelist method)": [[53, "PyXA.XABase.XAImageList.vignette"]], "visible (pyxa.xabase.xadiskitem property)": [[53, "PyXA.XABase.XADiskItem.visible"]], "visible() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.visible"]], "volume (pyxa.xabase.xadiskitem property)": [[53, "PyXA.XABase.XADiskItem.volume"]], "volume() (pyxa.xabase.xadiskitemlist method)": [[53, "PyXA.XABase.XADiskItemList.volume"]], "volume() (pyxa.xabase.xasound method)": [[53, "PyXA.XABase.XASound.volume"]], "white() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.white"]], "white_point (pyxa.xabase.xaimage property)": [[53, "PyXA.XABase.XAImage.white_point"]], "windows() (pyxa.xabase.xaapplication method)": [[53, "PyXA.XABase.XAApplication.windows"]], "windows() (pyxa.xabase.xaapplicationlist method)": [[53, "PyXA.XABase.XAApplicationList.windows"]], "words() (pyxa.xabase.xatext method)": [[53, "PyXA.XABase.XAText.words"]], "words() (pyxa.xabase.xatextdocument method)": [[53, "PyXA.XABase.XATextDocument.words"]], "words() (pyxa.xabase.xatextdocumentlist method)": [[53, "PyXA.XABase.XATextDocumentList.words"]], "words() (pyxa.xabase.xatextlist method)": [[53, "PyXA.XABase.XATextList.words"]], "workflows_folder (pyxa.xabase.xadomain property)": [[53, "PyXA.XABase.XADomain.workflows_folder"]], "xa_apsc (pyxa.xabase.xaapplication property)": [[53, "PyXA.XABase.XAApplication.xa_apsc"]], "xa_estr (pyxa.xabase.xaobject property)": [[53, "PyXA.XABase.XAObject.xa_estr"]], "xa_prcs (pyxa.xabase.xaapplication property)": [[53, "PyXA.XABase.XAApplication.xa_prcs"]], "xa_sevt (pyxa.xabase.xaobject property)": [[53, "PyXA.XABase.XAObject.xa_sevt"]], "xa_wksp (pyxa.xabase.xaobject property)": [[53, "PyXA.XABase.XAObject.xa_wksp"]], "yellow() (pyxa.xabase.xacolor method)": [[53, "PyXA.XABase.XAColor.yellow"]], "zone (pyxa.xabase.xadisk property)": [[53, "PyXA.XABase.XADisk.zone"]], "zone() (pyxa.xabase.xadisklist method)": [[53, "PyXA.XABase.XADiskList.zone"]], "ask (pyxa.xabasescriptable.xasbapplication.saveoption attribute)": [[54, "PyXA.XABaseScriptable.XASBApplication.SaveOption.ASK"]], "detailed (pyxa.xabasescriptable.xasbapplication.printerrorhandling attribute)": [[54, "PyXA.XABaseScriptable.XASBApplication.PrintErrorHandling.DETAILED"]], "no (pyxa.xabasescriptable.xasbapplication.saveoption attribute)": [[54, "PyXA.XABaseScriptable.XASBApplication.SaveOption.NO"]], "pyxa.xabasescriptable": [[54, "module-PyXA.XABaseScriptable"]], "standard (pyxa.xabasescriptable.xasbapplication.printerrorhandling attribute)": [[54, "PyXA.XABaseScriptable.XASBApplication.PrintErrorHandling.STANDARD"]], "xasbapplication (class in pyxa.xabasescriptable)": [[54, "PyXA.XABaseScriptable.XASBApplication"]], "xasbapplication.printerrorhandling (class in pyxa.xabasescriptable)": [[54, "PyXA.XABaseScriptable.XASBApplication.PrintErrorHandling"]], "xasbapplication.saveoption (class in pyxa.xabasescriptable)": [[54, "PyXA.XABaseScriptable.XASBApplication.SaveOption"]], "xasbprintable (class in pyxa.xabasescriptable)": [[54, "PyXA.XABaseScriptable.XASBPrintable"]], "xasbwindow (class in pyxa.xabasescriptable)": [[54, "PyXA.XABaseScriptable.XASBWindow"]], "xasbwindowlist (class in pyxa.xabasescriptable)": [[54, "PyXA.XABaseScriptable.XASBWindowList"]], "yes (pyxa.xabasescriptable.xasbapplication.saveoption attribute)": [[54, "PyXA.XABaseScriptable.XASBApplication.SaveOption.YES"]], "activate() (pyxa.xabasescriptable.xasbapplication method)": [[54, "PyXA.XABaseScriptable.XASBApplication.activate"]], "bounds (pyxa.xabasescriptable.xasbwindow property)": [[54, "PyXA.XABaseScriptable.XASBWindow.bounds"]], "bounds() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.bounds"]], "by_bounds() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.by_bounds"]], "by_closeable() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.by_closeable"]], "by_id() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.by_id"]], "by_index() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.by_index"]], "by_miniaturizable() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.by_miniaturizable"]], "by_miniaturized() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.by_miniaturized"]], "by_name() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.by_name"]], "by_resizable() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.by_resizable"]], "by_visible() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.by_visible"]], "by_zoomable() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.by_zoomable"]], "by_zoomed() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.by_zoomed"]], "closeable (pyxa.xabasescriptable.xasbwindow property)": [[54, "PyXA.XABaseScriptable.XASBWindow.closeable"]], "closeable() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.closeable"]], "collapse() (pyxa.xabasescriptable.xasbwindow method)": [[54, "PyXA.XABaseScriptable.XASBWindow.collapse"]], "collapse() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.collapse"]], "front_window (pyxa.xabasescriptable.xasbapplication property)": [[54, "PyXA.XABaseScriptable.XASBApplication.front_window"]], "get_clipboard_representation() (pyxa.xabasescriptable.xasbwindow method)": [[54, "PyXA.XABaseScriptable.XASBWindow.get_clipboard_representation"]], "get_clipboard_representation() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.get_clipboard_representation"]], "id (pyxa.xabasescriptable.xasbwindow property)": [[54, "PyXA.XABaseScriptable.XASBWindow.id"]], "id() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.id"]], "index (pyxa.xabasescriptable.xasbwindow property)": [[54, "PyXA.XABaseScriptable.XASBWindow.index"]], "index() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.index"]], "miniaturizable (pyxa.xabasescriptable.xasbwindow property)": [[54, "PyXA.XABaseScriptable.XASBWindow.miniaturizable"]], "miniaturizable() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.miniaturizable"]], "miniaturized (pyxa.xabasescriptable.xasbwindow property)": [[54, "PyXA.XABaseScriptable.XASBWindow.miniaturized"]], "miniaturized() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.miniaturized"]], "name (pyxa.xabasescriptable.xasbwindow property)": [[54, "PyXA.XABaseScriptable.XASBWindow.name"]], "name() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.name"]], "print() (pyxa.xabasescriptable.xasbprintable method)": [[54, "PyXA.XABaseScriptable.XASBPrintable.print"]], "resizable (pyxa.xabasescriptable.xasbwindow property)": [[54, "PyXA.XABaseScriptable.XASBWindow.resizable"]], "resizable() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.resizable"]], "set_property() (pyxa.xabasescriptable.xasbapplication method)": [[54, "PyXA.XABaseScriptable.XASBApplication.set_property"]], "toggle_zoom() (pyxa.xabasescriptable.xasbwindow method)": [[54, "PyXA.XABaseScriptable.XASBWindow.toggle_zoom"]], "uncollapse() (pyxa.xabasescriptable.xasbwindow method)": [[54, "PyXA.XABaseScriptable.XASBWindow.uncollapse"]], "uncollapse() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.uncollapse"]], "visible (pyxa.xabasescriptable.xasbwindow property)": [[54, "PyXA.XABaseScriptable.XASBWindow.visible"]], "visible() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.visible"]], "windows() (pyxa.xabasescriptable.xasbapplication method)": [[54, "PyXA.XABaseScriptable.XASBApplication.windows"]], "xa_scel (pyxa.xabasescriptable.xasbapplication property)": [[54, "PyXA.XABaseScriptable.XASBApplication.xa_scel"]], "zoomable (pyxa.xabasescriptable.xasbwindow property)": [[54, "PyXA.XABaseScriptable.XASBWindow.zoomable"]], "zoomable() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.zoomable"]], "zoomed (pyxa.xabasescriptable.xasbwindow property)": [[54, "PyXA.XABaseScriptable.XASBWindow.zoomed"]], "zoomed() (pyxa.xabasescriptable.xasbwindowlist method)": [[54, "PyXA.XABaseScriptable.XASBWindowList.zoomed"]], "applicationnotfounderror": [[55, "PyXA.XAErrors.ApplicationNotFoundError"]], "authenticationerror": [[55, "PyXA.XAErrors.AuthenticationError"]], "invalidpredicateerror": [[55, "PyXA.XAErrors.InvalidPredicateError"]], "pyxa.xaerrors": [[55, "module-PyXA.XAErrors"]], "unconstructableclasserror": [[55, "PyXA.XAErrors.UnconstructableClassError"]], "pyxa.xaprotocols": [[56, "module-PyXA.XAProtocols"]], "xacanopenpath (class in pyxa.xaprotocols)": [[56, "PyXA.XAProtocols.XACanOpenPath"]], "xacanprintpath (class in pyxa.xaprotocols)": [[56, "PyXA.XAProtocols.XACanPrintPath"]], "xaclipboardcodable (class in pyxa.xaprotocols)": [[56, "PyXA.XAProtocols.XAClipboardCodable"]], "xacloseable (class in pyxa.xaprotocols)": [[56, "PyXA.XAProtocols.XACloseable"]], "xadeletable (class in pyxa.xaprotocols)": [[56, "PyXA.XAProtocols.XADeletable"]], "xaimagelike (class in pyxa.xaprotocols)": [[56, "PyXA.XAProtocols.XAImageLike"]], "xapathlike (class in pyxa.xaprotocols)": [[56, "PyXA.XAProtocols.XAPathLike"]], "xaprintable (class in pyxa.xaprotocols)": [[56, "PyXA.XAProtocols.XAPrintable"]], "xaprotocol (class in pyxa.xaprotocols)": [[56, "PyXA.XAProtocols.XAProtocol"]], "xaselectable (class in pyxa.xaprotocols)": [[56, "PyXA.XAProtocols.XASelectable"]], "xashowable (class in pyxa.xaprotocols)": [[56, "PyXA.XAProtocols.XAShowable"]], "close() (pyxa.xaprotocols.xacloseable method)": [[56, "PyXA.XAProtocols.XACloseable.close"]], "delete() (pyxa.xaprotocols.xadeletable method)": [[56, "PyXA.XAProtocols.XADeletable.delete"]], "get_clipboard_representation() (pyxa.xaprotocols.xaclipboardcodable method)": [[56, "PyXA.XAProtocols.XAClipboardCodable.get_clipboard_representation"]], "get_image_representation() (pyxa.xaprotocols.xaimagelike method)": [[56, "PyXA.XAProtocols.XAImageLike.get_image_representation"]], "get_path_representation() (pyxa.xaprotocols.xapathlike method)": [[56, "PyXA.XAProtocols.XAPathLike.get_path_representation"]], "open() (pyxa.xaprotocols.xacanopenpath method)": [[56, "PyXA.XAProtocols.XACanOpenPath.open"]], "print() (pyxa.xaprotocols.xacanprintpath method)": [[56, "PyXA.XAProtocols.XACanPrintPath.print"]], "print() (pyxa.xaprotocols.xaprintable method)": [[56, "PyXA.XAProtocols.XAPrintable.print"]], "select() (pyxa.xaprotocols.xaselectable method)": [[56, "PyXA.XAProtocols.XASelectable.select"]], "show() (pyxa.xaprotocols.xashowable method)": [[56, "PyXA.XAProtocols.XAShowable.show"]], "pyxa.xatypes": [[57, "module-PyXA.XATypes"]], "xapoint (class in pyxa.xatypes)": [[57, "PyXA.XATypes.XAPoint"]], "xarectangle (class in pyxa.xatypes)": [[57, "PyXA.XATypes.XARectangle"]], "height (pyxa.xatypes.xarectangle attribute)": [[57, "PyXA.XATypes.XARectangle.height"]], "width (pyxa.xatypes.xarectangle attribute)": [[57, "PyXA.XATypes.XARectangle.width"]], "x (pyxa.xatypes.xapoint attribute)": [[57, "PyXA.XATypes.XAPoint.x"]], "x (pyxa.xatypes.xarectangle attribute)": [[57, "PyXA.XATypes.XARectangle.x"]], "y (pyxa.xatypes.xapoint attribute)": [[57, "PyXA.XATypes.XAPoint.y"]], "y (pyxa.xatypes.xarectangle attribute)": [[57, "PyXA.XATypes.XARectangle.y"]]}}) \ No newline at end of file diff --git a/docs/tutorial/applescript.html b/docs/tutorial/applescript.html new file mode 100644 index 0000000..649c438 --- /dev/null +++ b/docs/tutorial/applescript.html @@ -0,0 +1,282 @@ + + + + + + + Running AppleScripts — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Running AppleScripts

+

PyXA has a dedicated AppleScript class which supports several useful features for working with AppleScript scripts. This allows you to run any AppleScript you desire, thereby opening up the entirety of AppleScript’s capabilities to Python.

+
+

Creating and Running AppleScript Code

+

The easiest way to run AppleScript code on-the-fly is to instantiate an AppleScript object with the text of the script as an argument. You can run the script using the run() method, as seen in the code below. The script won’t run until you tell it to, allowing you to modify the script after instantiation but before execution.

+
import PyXA
+PyXA.AppleScript("tell application \"Safari\" to activate").run()
+
+
+

Note that if your script includes quoted text, you need to properly escape the quotation marks if using the above format. You can also use triple quotes to preserve the string’s formatting, which allows you to use unescaped quotes and has the added benefit of preserving line breaks. As seen in the example below, this provides an easy way to create and run multiline AppleScripts.

+
import PyXA
+script = PyXA.AppleScript("""tell application "Pages"
+    set the miniaturized of window 1 to true
+end tell
+""")
+script.run()
+
+
+

You can also modify AppleScript objects after instantiation using the add(), insert(), and pop() methods. These provide the ability to dynamically add and remove lines from the script. You can then use Python’s control blocks (such as if/elif/else) to create powerful combinations of Python and AppleScript that utilize the capabilities of both languages. The script below shows a basic implementation of this. The code creates an PyXA.apps.Notes.XANotesApplication application object to interact with the Notes app and sets up and empty AppleScript object. We then use combinations of the add(), insert(), and pop() methods to construct an AppleScript script. Note how we dynamically construct the AppleScript code based on whether a note with a specific name exists, which we check from within Python. While this particular script is not very useful, you could use this capability to generate lengthy AppleScripts that are specialized to a user’s system, for example.

+
import PyXA
+app = PyXA.application("Notes")
+script = PyXA.AppleScript()
+script.add("tell application \"Notes\"")
+script.add("end tell")
+script.add("error")
+script.pop()
+
+if "PyXA Ideas" in app.notes().name():
+   script.insert(1, "set note1 to the note \"PyXA Ideas\"")
+   script.add("show note1")
+else:
+   script.add("error \"Could not find the note!\"")
+
+script.run()
+print(script)
+# <<class 'PyXA.XABase.AppleScript'>['tell application "Notes"', 'set note1 to the note "PyXA Ideas"', 'show note1', 'end tell']>
+
+
+
+
+

Reading Execution Results

+

The script contained within an AppleScript object will execute upon calling the run() method, returning a dictionary containing the execution return value of the script. This allows you to further intertwine Python logic with AppleScript. The returned dictionary is structured as follows:

+
{
+   'string': 'Example.txt',
+   'int': 0,
+   'bool': True,
+   'float': 0.0,
+   'date': None,
+   'file_url': file:///Users/exampleUser/Documents/Example.txt,
+   'type_code': 6881357,
+   'data': {length = 108, bytes = 0x4d006900 6e006500 63007200 61006600 ... 54007500 62006500 },
+   'event': <NSAppleEventDescriptor: 'utxt'("Example.txt")>
+}
+
+
+

This structure provides a convenient way to access the information contained in an execution return value, especially when that data has a well-defined type (such as a string, integer, boolean, float, or date). When the return value is a single string, for example, you can access it by getting the “string” key of the result dictionary, as shown in the example below:

+
import PyXA
+script = PyXA.AppleScript("""tell application "Safari" to get the name of window 1""")
+result = script.run()
+print(result["string"])
+# Running AppleScripts — PyXA 0.0.9 documentation
+
+
+

When dealing with other forms of data, such as a list of Safari tab names or the list of IDs of all chats in Messages, you can use the parse_result_data() function to extract the text and numbers from the raw Apple Event data. This function takes the results dictionary, isolated the NSAppleEventDescriptor, loops through each sub-descriptor, gets the string value of the descriptor or creates a tuple of the sub-descriptor’s values, then returns a list containing the value or tuple associated with each entry. The first code snippet below shows how to get the names of all Safari tabs, the second shows how to list the ID property of all chats in Messages, and the third shows how to create PyXA objects from the returned data.

+
import PyXA
+script = PyXA.AppleScript("""tell application "Safari"
+   set tabNames to {}
+   repeat with t in tabs of window 1
+      set end of tabNames to (name of t)
+   end repeat
+   return tabNames
+end tell
+""")
+result = script.run()
+print(PyXA.AppleScript.parse_result_data(result))
+# ['Google', 'Bing', 'Apple']
+
+
+
import PyXA
+script = PyXA.AppleScript("""tell application "Messages"
+   get chats
+end tell
+""")
+result = script.run()
+print(PyXA.AppleScript.parse_result_data(result))
+# [('ID', 'iMessage;-;+11234567890'), ('ID', 'iMessage;-;+11234567891'), ...]
+
+
+
import PyXA
+app = PyXA.application("Messages")
+script = PyXA.AppleScript("""tell application "Messages"
+   get chats
+end tell
+""")
+result = script.run()
+entries = PyXA.AppleScript.parse_result_data(result)
+chats = [app.chats().by_id(entry[1]) for entry in entries]
+print(chats)
+# [<<class 'PyXA.apps.Messages.XAMessagesChat'><<class 'PyXA.apps.Messages.XAMessagesParticipantList'>['Example Person']>>, ...]
+
+
+

The example above are not particularly useful, as PyXA already provides faster and more straightforward ways to accomplish these tasks. For example, the third example, re-written in PyXA code, is:

+
import PyXA
+app = PyXA.application("Messages")
+print([x for x in app.chats()])
+
+
+

Still, the ability to convert between AppleScript return values and PyXA object types may be useful in some situations.

+
+
+

Loading External Scripts

+

PyXA provides a way to load existing AppleScript .scpt files using the load() method. Once loaded, the script can be treated like any other AppleScript object.

+
import PyXA
+script = PyXA.AppleScript.load("/Users/exampleUser/Downloads/Test.scpt")
+print(script.run())
+
+
+

You can even modify the script in the same ways as before:

+
import PyXA
+script = PyXA.AppleScript.load("/Users/exampleUser/Downloads/Test.scpt")
+script.add(3, "set note1 to the note \"PyXA Ideas\"")
+script.insert(4, "show note1")
+print(script.run())
+
+
+

This allows you to run your existing AppleScripts from Python. In combination with the ability to read execution results (see Reading Execution Results), the ability to load scripts makes PyXA a powerful yet convenient way to interface between Python and AppleScript, without losing access to your existing library of AppleScript automations.

+
+
+

Saving Scripts

+

Once you’ve created and/or modified a script, you can save it to a .scpt file using the save() method. If the script was initially loaded from a file, you can call save() without any arguments – the script will be saved to the existing .scpt file. You can also provide a file path as an argument to instruct PyXA to save the script to a particular destination. Note that the script is compiled before it is saved, so specifying a path to anything other than a .scpt file will result in an unreadable document.

+
import PyXA
+script = PyXA.AppleScript.load("/Users/steven/Downloads/Example.scpt")
+script.insert(2, "delay 2")
+script.insert(3, "set the miniaturized of window 1 to true")
+script.save()
+
+
+
import PyXA
+script = PyXA.AppleScript("""
+   tell application "Safari"
+      activate
+   end tell
+""")
+>>> script.save("/Users/exampleUser/Downloads/Example.scpt")
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/automator/index.html b/docs/tutorial/apps/automator/index.html new file mode 100644 index 0000000..2722456 --- /dev/null +++ b/docs/tutorial/apps/automator/index.html @@ -0,0 +1,219 @@ + + + + + + + Automator Module — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Automator Module

+ +
+

Overview

+

PyXA supports all of Automator’s OSA features, including but not limited to creating and executing workflows, managing Automator actions and their settings, and interacting with execution return values. PyXA can create workflows and variables, assign and arrange actions, and modify the attributes thereof. PyXA can also observe the execution of workflow files, allowing you to use existing automation workflows aongside PyXA and Python in general.

+
+
+

Automator Tutorials

+

There is currently one tutorial for the Automator module:

+ +
+
+

Automator Examples

+

The examples below provide an overview of the capabilities of the Automator module.

+
+

Example 1 - Creating workflows from scratch

+

The example below creates a workflow that displays a notification, waits five seconds, then starts the screen saver. The process for creating workflows begins with making a new workflow object, adding it to the list of workflows, and saving it to the disk. Without saving here, you may encounter errors as some methods and actions require access to the workflow file. With an empty workflow created, the next step is to add actions, which is most easily done by name. Next, you must retrieve a mutable form of the actions; you can think of the original ones as a template that you’ve now made a copy of. From there, you can change the value of settings however you desire.

+
 1import PyXA
+ 2app = PyXA.application("Automator")
+ 3
+ 4# Create and save a new workflow
+ 5new_workflow = app.make("workflow", {"name": "New Workflow"})
+ 6app.workflows().push(new_workflow)
+ 7new_workflow.save()
+ 8
+ 9# Add actions to the workflow
+10action1 = app.automator_actions().by_name("Display Notification")
+11action2 = app.automator_actions().by_name("Pause")
+12action3 = app.automator_actions().by_name("Start Screen Saver")
+13app.add(action1, new_workflow)
+14app.add(action2, new_workflow)
+15app.add(action3, new_workflow)
+16
+17# Obtain actions in mutable form and change their settings
+18actions = new_workflow.automator_actions()
+19notification_text = actions[0].settings().by_name("title")
+20notification_text.set_property("value", "PyXA Notification")
+21
+22pause_duration = actions[1].settings().by_name("pauseDuration")
+23pause_duration.set_property("value", 5)
+24
+25# Run the workflow
+26new_workflow.execute()
+
+
+
+
+

Example 2 - Running existing workflows

+

In the short example below, we open an existing workflow file, run it, and display the execution’s results.

+
1import PyXA
+2app = PyXA.application("Automator")
+3
+4app.open("/Users/exampleuser/Downloads/Example.workflow")
+5workflow = app.workflows().by_name("Example.workflow")
+6workflow.execute()
+7
+8print(workflow.execution_result)
+
+
+
+
+
+

Automator Resources

+ +

For all classes, methods, and inherited members of the Automator module, see the Automator Module Reference.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/automator/tutorial1.html b/docs/tutorial/apps/automator/tutorial1.html new file mode 100644 index 0000000..e9f66b9 --- /dev/null +++ b/docs/tutorial/apps/automator/tutorial1.html @@ -0,0 +1,232 @@ + + + + + + + Making a Combined Workflow for Creating Image Mosaic — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Making a Combined Workflow for Creating Image Mosaic

+
+

Overview

+

Automation scripts can ask users for many different kinds of input, and different automation technologies are particularly suited to handling some types of inputs over others. Moreover, prompting users for different kinds of input may be easier using one automation technology over another. For example, Python has specialized tools for working with command-line arguments, so you might use PyXA over other automation technologies when looking to create a command-line automation script. Comparatively, Shortcuts and Automator provide highly intuitive ways to get non-text input from users, so you might opt to use one of them instead when looking to handle image, video, and other media data. When working on automation scripts, you can combine all of these technologies and use them in tandem, enabling you to always utilize the best tool for the task. In this tutorial, we combine the abilities of PyXA and Automator, producing a combined workflow to create a mosaic of selected images using the Pillow library for Python.

+
+
+

Part 1 - Getting User Input

+

To create our combined automation workflow, let’s first think about its component parts. We know that Automator has actions for user input, so you might be able to guess that there is a dedicated “Ask For Photos” action. It’s unlikely that Apple would expose the direct NSImage objects via that action, so we can assume that the action outputs either image file paths or image IDs. This is something that we’ll need to check in a moment. The Python Image Library (Pillow) primarily operates on images loaded from files, and Python is slower than Automator at retrieving UI element property values, so ideally we’ll have the PyXA side of the automation script working with file paths. Let’s create a workflow in Automator that prompts the user to select photos as input and outputs image file paths.

+

This can be accomplished with a single action: “Ask For Photos”. This action already outputs file paths, so there is no need for an additional action to extract that data. You can confirm this by adding the action (dragging it from the left-side sidebar into the main work area, then dropping it), then pressing the “run” button in the top right corner. The workflow will prompt you to select images. After clicking “Choose”, click the “Results” button on the action and open the tab labelled “{}” for “Raw Data”. You should see an image file path – hooray! When this workflow is run from PyXA, the execution return value will be in the same format as the raw data displayed.

+

Save the workflow as “Ask For Photos.workflow” in a location of your choosing. This tutorial assumes that the workflow was saved in the Automator folder of iCloud, but this does not need to be the case – just make sure to change the path in the PyXA code.

+

With the workflow saved, we can move on to the PyXA script. Since we’re working with Automator, we need to initialize the Automator application object. Next, we instruct Automator to open a workflow from a specified file path. This provides a reference to the now-open workflow element, which we can execute. As test, let’s print the output of the execution. Our code is thus:

+
1import PyXA
+2automator = PyXA.application("Automator")
+3workflow = automator.open("/Users/exampleuser/Library/Mobile Documents/com~apple~Automator/Documents/Ask For Photos.workflow")
+4print(workflow.execute())
+
+
+

If you run the PyXA script now, you should again be prompted to select photos, and you should see that the paths to each image you selected, if any, were printed by the PyXA script.

+
+
+

Part 2 - Creating A Mosaic

+

The goal of this tutorial is to highlight the ability to intertwine PyXA and Automator – believe it or not, we’re done with that! The rest of this part looks at how to using the Pillow library to create a mosaic of images; it has nothing to do with PyXA, apart from that we used PyXA to execute an Automator workflow. To run the rest of this tutorial, you’ll need to adjust your imports to the following:

+
import PyXA, math
+from PIL import Image
+
+
+

We start by setting a base width and height for each image within the mosaic. We choose 400x200 for simplicity, but you can choose any size. Each image in the mosaic will have those dimensions or smaller.

+
base_width = 400
+base_height = 200
+
+
+

Next, we calculate the root of the number of image paths we have. For simplicity, we are creating an NxN mosaic, where N is the integer root of the total number of images. This tutorial forgoes error checking and other niceties that you might wish to include in your remake of this automation.

+
root = int(math.sqrt(len(image_paths)))
+
+
+

With the root and base dimensions set, we can create the canvas for our mosaic. The canvas is initially an empty image with the size of the final image we intend to create.

+
dim = (root * base_width, root * base_width)
+mosaic = Image.new("RGB", dim)
+
+
+

To populate the image, we place scaled down versions of the images we selected at calculated locations. This is done by looping over each row and column of the mosaic and pasting the scaled down image at the appropriate location. Since we are making a square mosaic, the number of rows and columns both goes from 0 to the root defined previously. The path of each image then sits at index row + col * root. We load the image at that path, then resize it while maintaining proportions. We then paste the resized image at the slot defined by the row, column, and base dimensions.

+
for row in range(0, root):
+    for col in range(0, root):
+        path = image_paths[row + col * root]
+        img = Image.open(path)
+
+        width = int(max(base_width, base_width/img.size[0] * img.size[1]))
+        img = img.resize((base_width, width), Image.ANTIALIAS)
+        mosaic.paste(img, (base_width * col, base_width * row))
+
+
+

Finally, we use the show method to show the mosaic in Preview.

+
mosaic.show()
+
+
+
+
+

Conclusion

+

The full code for this tutorial:

+
 1import PyXA, math
+ 2from PIL import Image
+ 3
+ 4# Execute Automator workflow and receive list of image paths
+ 5automator = PyXA.application("Automator")
+ 6workflow = automator.open("/Users/steven/Library/Mobile Documents/com~apple~Automator/Documents/Ask For Photos.workflow")
+ 7image_paths = workflow.execute()
+ 8
+ 9# Set base dimensions of mosaic images
+10base_width = 400
+11base_height = 200
+12
+13# Get number of rows and columns
+14root = int(math.sqrt(len(image_paths)))
+15
+16# Create empty canvas
+17dim = (root * base_width, root * base_width)
+18mosaic = Image.new("RGB", dim)
+19
+20# Populate the canvas
+21for row in range(0, root):
+22    for col in range(0, root):
+23        # Load image from path
+24        path = image_paths[row + col * root]
+25        img = Image.open(path)
+26
+27        # Resize proportionally
+28        width = int(max(base_width, base_width/img.size[0] * img.size[1]))
+29        img = img.resize((base_width, width), Image.ANTIALIAS)
+30        mosaic.paste(img, (base_width * col, base_width * row))
+31
+32mosaic.show()
+
+
+
+
+

See Also

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/bike/index.html b/docs/tutorial/apps/bike/index.html new file mode 100644 index 0000000..03fa88e --- /dev/null +++ b/docs/tutorial/apps/bike/index.html @@ -0,0 +1,144 @@ + + + + + + + Bike Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/tutorial/apps/calculator/index.html b/docs/tutorial/apps/calculator/index.html new file mode 100644 index 0000000..603abc2 --- /dev/null +++ b/docs/tutorial/apps/calculator/index.html @@ -0,0 +1,185 @@ + + + + + + + Calculator Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Calculator Module Overview

+ +

PyXA enables limited scripting functionalities in Calculator.app, despite no official scripting support for it. Currently, the calculator’s scripting functionalities are entirely supported by UI scripting, however additional features are planned for future development work.

+

Using XACalculatorApplication.input(), you can command the Calculator to execute a sequence of button clicks. The sequence must be a continuous string (no spaces). The valid characters are numbers 0-9, +, -, *, /, %, ~, =, and c. Their meanings are as follows:

+
+
    +
  • +, -, *, and / correspond to their usual operation buttons.

  • +
  • % designates the percentage button.

  • +
  • ~ corresponds to the negation button.

  • +
  • = represents the equals button.

  • +
  • c denotes the clear button.

  • +
+
+
+

Calculator Tutorials

+

There are currently no tutorials for working with the Calculator application.

+
+
+

Calculator Examples

+

The examples below provide an overview of the capabilities of the Calculator module. They do not provide any output. +.. For more in-depth examples that show output and provide more detailed explanations, refer to the previous section (Tutorials).

+
+

Example 1 - Performing Operations in Calculator.app

+

This example uses XACalculatorApplication.input() to calculate the result of an expression, then retrieves the result using XACalculatorApplication.current_value().

+
1import PyXA
+2app = PyXA.application("Calculator")
+3app.input("3.14159265*2*3*5*5*5=")
+4x = app.current_value()
+5print(x)
+
+
+
+
+
+

Calculator Resources

+ +

For all classes, methods, and inherited members of the Calculator module, see the Calculator Module Reference.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/calendar/index.html b/docs/tutorial/apps/calendar/index.html new file mode 100644 index 0000000..164a43b --- /dev/null +++ b/docs/tutorial/apps/calendar/index.html @@ -0,0 +1,271 @@ + + + + + + + Calendar Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Calendar Module Overview

+ +

PyXA supports nearly all AppleScript/JXA commands for the Calendar application while adding some additional quality-of-life methods that AppleScript is missing. Alarms are not currently supported, but they will be by the time of PyXA’s full release. New methods, such as PyXA.apps.Calendar.XACalendarEvent.add_attachment(), attempt to follow the style of JXA and make use of Apple’s EventKit Framework.

+
+

Calendar Tutorials

+

There are two (planned) tutorials for working with the Calendar application:

+
    +
  • Create a Daily Event Summary Script

  • +
  • How To: Add a Zoom link to all events with a given tag

  • +
+
+
+

Calendar Examples

+

The examples below provide an overview of the capabilities of the Calendar module. They do not provide any output. For more in-depth examples that show output and provide more detailed explanations, refer to the previous section (Tutorials).

+
+

Example 1 - Listing Calendars and Events

+

One of the most common tasks when working with the Calendar application is that of listing events. PyXA offers several ways to obtain such lists, all of which may be useful in different contexts. In order to list events, you must first obtain a reference to one or more calendars, which can be done in a few ways as well. Lines 5-10 show the primary ways of obtain a calendar reference, while lines 12-18 show ways to obtain lists of events from the selected calendar.

+

A general rule of thumb when using PyXA to list events is that the more specific you can make your query, the better. While listing all events is necessary in some situations, a more specific query will always perform better. Filters, such as {“title”: “Learn PyXA”}, can be used to decrease the number of queried events and, likewise, decrease the time of the listing operation. Filters can contain multiple parameters to further narrow the selection of events. The Calendar module provides some helper methods to assist in the creation and application of filters. For example, PyXA.apps.Calendar.XACalendar.events_in_range() can (and should) be used to find events occurring between two dates.

+

In addition to listing events, you can obtain references to specific events using the methods shown in lines 20-25. These methods always select the first event that matches their respective filter, if applicable, so there are no performance concerns there. However, there is no guarantee that the list of events will maintain a consistent order. A filter that directly identifies an event using its unique properties is therefore preferred over a general filter that matches with multiple events.

+
 1from datetime import datetime, timedelta
+ 2import PyXA
+ 3app = PyXA.application("Calendar")
+ 4
+ 5# Getting calendars
+ 6all_calendars = app.calendars()
+ 7calendar = app.default_calendar()
+ 8calendar0 = app.calendar(0)
+ 9calendar1 = app.calendar(1)
+10named_calendar = app.calendar({"title": "Calendar"})
+11
+12# Getting lists of events
+13all_events = calendar.events()
+14events_at_location = calendar.events({"location": "1 Main Street\\nPortland ME 04101\\nUnited States"})
+15named_events = calendar.events({"title": "Learn PyXA"})
+16events_between_dates = calendar.events_in_range(datetime.now(), datetime.now() + timedelta(days = 7))
+17events_today = calendar.events_today()
+18events_this_week = calendar.week_events()
+19
+20# Getting specific events
+21event0 = calendar.event(0)
+22first_event = calendar.first_event()
+23last_event = calendar.last_event()
+24named_event = calendar.events({"title": "Learn PyXA"})[0]
+25event_by_id = calendar.event({"uid": "A54CF13A-36D2-5DE1-9980-BE19C4C102A4"})
+26
+27# Get today's event from each calendar
+28events = []
+29for calendar in all_calendars:
+30   events.extend(calendar.events_today())
+
+
+
+
+

Example 2 - Creating Calendars and Events

+
 1from datetime import datetime, timedelta
+ 2import PyXA
+ 3app = PyXA.application("Calendar")
+ 4
+ 5# Create a new calendar
+ 6new_calendar = app.new_calendar("PyXA Development")
+ 7
+ 8# Create new events
+ 9start_date = datetime.now()
+10end_date = start_date + timedelta(hours = 1)
+11app.new_event("Test 1", start_date, end_date) # Created in default/currently selected calendar
+12app.new_event("Test 2", start_date, end_date, new_calendar) # Created in the new calendar
+13new_calendar.new_event("Test 3", start_date, end_date) # Same as Test 2
+
+
+
+
+

Example 3 - Modifying and Manipulating Events

+
 1from datetime import date
+ 2import PyXA
+ 3app = PyXA.application("Calendar")
+ 4
+ 5calendar = app.default_calendar()
+ 6calendar1 = app.calendar(1)
+ 7event = calendar.events_today()[0]
+ 8
+ 9# Modify event properties
+10event.rename("Title changed")
+11
+12new_start_date = date(2022, 6, 6)
+13new_end_date = date(2022, 6, 7)
+14event.set_property("startDate", new_start_date)
+15event.set_property("endDate", new_end_date)
+16
+17# Execute event actions
+18event.duplicate()
+19event.copy_to(calendar1)
+20event.move_to(calendar1)
+21event.delete()
+
+
+
+
+

Example 5 - Displaying Events in Calendar.app

+
 1from datetime import date
+ 2import PyXA
+ 3app = PyXA.application("Calendar")
+ 4
+ 5calendar = app.default_calendar()
+ 6calendar1 = app.calendar(1)
+ 7event = calendar.events_today()[0]
+ 8
+ 9event.show()
+10app.switch_view_to("day")
+11app.switch_view_to("week")
+12app.switch_view_to("month")
+13app.view_calendar_at(date(2022, 6, 5))
+14app.view_calendar_at(event.end_date)
+
+
+
+
+
+

Calendar Resources

+ +

For all classes, methods, and inherited members of the Calendar module, see the Calendar Module Reference.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/cardhop/index.html b/docs/tutorial/apps/cardhop/index.html new file mode 100644 index 0000000..9737fae --- /dev/null +++ b/docs/tutorial/apps/cardhop/index.html @@ -0,0 +1,143 @@ + + + + + + + Cardhop Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Cardhop Module Overview

+
+

Cardhop Resources

+ +

For all classes, methods, and inherited members of the Cardhop module, see the Cardhop Module Reference.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/chromium/index.html b/docs/tutorial/apps/chromium/index.html new file mode 100644 index 0000000..c1854ef --- /dev/null +++ b/docs/tutorial/apps/chromium/index.html @@ -0,0 +1,224 @@ + + + + + + + Chromium Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Chromium Module Overview

+ +

PyXA has full support for Chromium and Chromium derivatives such as Google Chrome, Opera, Brave, Vivaldi, and Microsoft Edge. Some additional convenience methods, such as PyXA.apps.Chromium.XAChromiumApplication.new_tab(), are provided to simplify common scripting tasks.

+
+

Windows and Tabs

+

PyXA allows full control over Chromium windows and tabs, as well as full access to their properties. Opening a webpage in Chromium (or any Chromium derivative) is accomplished by calling PyXA.apps.Chromium.XAChromiumApplication.open() and providing a URL as an argument. The URL can be either a string or an PyXA.XABase.XAURL object. The URL must be a full URL—that is, it must follow the structure of “scheme://host/relativeURI”.

+

New windows can be created using the PyXA.apps.Chromium.XAChromiumApplication.new_window() method, and a URL can be passed as an argument to open a window at the specified URL. Similarly, new tabs can be created using PyXA.apps.Chromium.XAChromiumApplication.new_tab(), and again a URL can be specified. PyXA.apps.Chromium.XAChromiumApplication.make() can be used to manually create a new window or tab object without adding it to the UI until PyXA.XABaseScriptable.XASBWindowList.push() or PyXA.apps.Chromium.XAChromiumTabList.push() is called, allowing you to split the construction of an element across portions of your script. This ability is likely most useful when the window’s or tab’s properties are influenced by the result of multiple logical operations.

+
+
+

Bookmarks

+

Using PyXA, you can obtain a list of bookmarks in Chromium, bookmark folders, and their associated data. To get a list of bookmark folders, use PyXA.apps.Chromium.XAChromiumApplication.bookmark_folders(). Use PyXA.apps.Chromium.XAChromiumBookmarkFolder.bookmark_items() to list the individual bookmarks contained in a folder. PyXA.apps.Chromium.XAChromiumApplication.bookmarks_bar and PyXA.apps.Chromium.XAChromiumApplication.other_bookmarks can be used to access bookmarks on the bookmarks bar and in all other folders, respectively.

+

It is not currently possible to create bookmark folders or bookmark items via PyXA (or AppleScript) as that functionality is not made available by the Chromium developers. Despite this lack of support, bookmark and bookmark folder creation via UI scripting is planned for a future release.

+
+

Chromium Tutorials

+

There are currently no tutorials for the Chromium module.

+
+
+

Chromium Examples

+

The examples below provide an overview of the capabilities of the Chromium module. They do not provide any output. For more in-depth examples that show output and provide more detailed explanations, refer to the previous section (Chromium Tutorials).

+
+
+
+

Example 1 - Opening and saving a webpage

+

The example below activates Chromium.app, opens Apple’s website in a new tab, waits for the tab to finish loading, then saves the site’s resources (e.g. HTML, CSS, JavaScript, and images) to a location on the disk. Note the use of a full URL, beginning with “http”, as well as a full file path, beginning with “/”. Both a full URL and full file path are necessary in order for this example to operate successfully.

+
 1import PyXA
+ 2from time import sleep
+ 3
+ 4# Open URL in new tab
+ 5app = PyXA.application("Chromium")
+ 6app.activate()
+ 7app.open("http://apple.com")
+ 8
+ 9# Wait for tab to finish loading
+10tab = app.front_window().tabs().last()
+11while tab.loading:
+12   sleep(0.1)
+13
+14# Save the tab's content
+15tab.save("/Users/exampleuser/Downloads/apple-site")
+
+
+
+
+

Example 2 - Making new windows and tabs

+

This example shows how to manually create new windows and tabs in Chromium. The general logic for this is to create a new object of the specified type, then push that object onto the relevant list. Alternatively, you can use the PyXA.apps.Chromium.XAChromiumApplication.new_window() and PyXA.apps.Chromium.XAChromiumApplication.new_tab() methods.

+
 1import PyXA
+ 2
+ 3app = PyXA.application("Chromium")
+ 4app.activate()
+ 5
+ 6# Make a new window using the convenience method
+ 7app.new_window("http://www.apple.com")
+ 8
+ 9# Make a new tab using the convenience method
+10app.new_tab("http://www.apple.com")
+11
+12# Make a new window manually
+13window = app.make("window")
+14app.windows().push(window)
+15
+16# Make a new tab manually
+17tab = app.make("tab", {"URL": "http://www.apple.com"})
+18window.tabs().push(tab)
+
+
+
+

Chromium Resources

+ +

For all classes, methods, and inherited members of the Chromium module, see the Chromium Module Reference.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/console/index.html b/docs/tutorial/apps/console/index.html new file mode 100644 index 0000000..d05f24f --- /dev/null +++ b/docs/tutorial/apps/console/index.html @@ -0,0 +1,166 @@ + + + + + + + Console Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Console Module Overview

+ +

PyXA has fully supports all scripting features of Console.app, but there is minimal support (from Apple) in the first place in that regard. Future versions of PyXA might explore expanding the feature offering through UI scripting, utilization of Objective-C frameworks, and other means.

+
+

Console Tutorials

+

There are currently no tutorials for the Console module.

+
+
+

Console Examples

+
+

Example 1 - Coming Soon

+

An example will be added soon.

+
+
+
+

Console Resources

+ +

For all classes, methods, and inherited members of the Console module, see the Console Module Reference.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/contacts/index.html b/docs/tutorial/apps/contacts/index.html new file mode 100644 index 0000000..4bea31f --- /dev/null +++ b/docs/tutorial/apps/contacts/index.html @@ -0,0 +1,136 @@ + + + + + + + Contacts Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Contacts Module Overview

+

For all classes, methods, and inherited members of the Contacts module, see the Contacts Module Reference.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/dictionary/index.html b/docs/tutorial/apps/dictionary/index.html new file mode 100644 index 0000000..fa8ed54 --- /dev/null +++ b/docs/tutorial/apps/dictionary/index.html @@ -0,0 +1,136 @@ + + + + + + + Dictionary Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Dictionary Module Overview

+

For all classes, methods, and inherited members of the Dictionary module, see the Dictionary Module Reference.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/drafts/index.html b/docs/tutorial/apps/drafts/index.html new file mode 100644 index 0000000..067042b --- /dev/null +++ b/docs/tutorial/apps/drafts/index.html @@ -0,0 +1,136 @@ + + + + + + + Drafts Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Drafts Module Overview

+

For all classes, methods, and inherited members of the Drafts module, see the Drafts Module Reference.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/fantastical/index.html b/docs/tutorial/apps/fantastical/index.html new file mode 100644 index 0000000..7170871 --- /dev/null +++ b/docs/tutorial/apps/fantastical/index.html @@ -0,0 +1,172 @@ + + + + + + + Fantastical Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Fantastical Module Overview

+

The Fantastical module provides access to Fantastical’s features from within PyXA, making use of both the application’s scripting dictionary as well as its URL scheme.

+
+

Fantastical Examples

+
+

Example 1 - Interacting with Currently Selected Calendar Items

+
import PyXA
+app = PyXA.application("Fantastical")
+items = app.selected_calendar_items()
+urls = [item.show_url.url for item in items]
+print(urls)
+# ['x-fantastical://show?item=7d627e52-ae3d-39eb-b86b-57b037f92cab&calendarIdentifier=A5E06B53-667F-42EE-A6FD-99609F6711E3&date=2022-02-21%2000:00', 'x-fantastical://show?item=e4bcc8c4-cd34-3c1d-b273-def4ecd47eae&calendarIdentifier=A5E06B53-667F-42EE-A6FD-99609F6711E3&date=2022-02-14%2000:00', ...]
+
+
+
+
+

Example 2 - Using Natural Language to Create Events

+
import PyXA
+app = PyXA.application("Fantastical")
+app.parse_sentence("Meeting from 2pm to 3 today")
+app.parse_sentence("Joe's birthday August 26th all day")
+app.parse_sentence("Computer Science Homework due on Tuesday")
+app.parse_sentence("Vacation from August 26 to September 2")
+app.parse_sentence("Meeting at 2pm today alert 20 minutes before")
+app.parse_sentence("Attend Apple Event at 1 Infinite Loop, Cupertino, CA on September 14 at 9am")
+app.parse_sentence("Remind me to clean on Wednesday")
+
+
+
+
+
+

Fantastical Resources

+ +

For all classes, methods, and inherited members of the Fantastical module, see the Fantastical Module Reference.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/finder/index.html b/docs/tutorial/apps/finder/index.html new file mode 100644 index 0000000..e61250c --- /dev/null +++ b/docs/tutorial/apps/finder/index.html @@ -0,0 +1,136 @@ + + + + + + + Finder Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Finder Module Overview

+

For all classes, methods, and inherited members of the Finder module, see the Finder Module Reference.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/flow/index.html b/docs/tutorial/apps/flow/index.html new file mode 100644 index 0000000..ea14b64 --- /dev/null +++ b/docs/tutorial/apps/flow/index.html @@ -0,0 +1,167 @@ + + + + + + + Flow Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Flow Module Overview

+

The Flow module allows you to programmatically control Flow’s timer sessions from within your Python scripts.

+
+

Flow Examples

+
+

Example 1 - Run session only while a specific app is open

+

One possible use case of the Flow module is automatically starting Flow sessions based on the context of the system. For example, you might want to start a Flow session when you first open Notes, then only allow the session counter to continue as long as you’re using the Notes app (in other words, if you get distracted and wander over to YouTube, the session pauses until you get back on track). The code below shows how to use PyXA to implement this use case.

+
import PyXA
+from time import sleep
+
+flow = PyXA.Application("Flow")
+in_session = False
+
+while True:
+    apps = PyXA.running_applications().localized_name()
+    if "Notes" in apps and not in_session:
+        flow.start()
+        in_session = True
+    elif "Notes" not in apps:
+        flow.stop()
+        in_session = False
+    sleep(1)
+
+
+

Based on this code, you can create scripts for managing context-based Flow sessions informed by many metrics–or as few as you need.

+
+
+
+

Flow Resources

+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/fontbook/index.html b/docs/tutorial/apps/fontbook/index.html new file mode 100644 index 0000000..6371860 --- /dev/null +++ b/docs/tutorial/apps/fontbook/index.html @@ -0,0 +1,136 @@ + + + + + + + Font Book Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Font Book Module Overview

+

For all classes, methods, and inherited members of the Font Book module, see the Font Book Module Reference.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/hammerspoon/index.html b/docs/tutorial/apps/hammerspoon/index.html new file mode 100644 index 0000000..18a3bb9 --- /dev/null +++ b/docs/tutorial/apps/hammerspoon/index.html @@ -0,0 +1,148 @@ + + + + + + + Hammerspoon Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Hammerspoon Module Overview

+

The Hammerspoon module provides the ability to run Hammerspoon Lua scripts from within PyXA. To do this, simply call the execute_lua_code() method and supply a Lua script as an argument. You can then utilize the value returned by the Lua script in your Python program.

+
import PyXA
+app = PyXA.application("hammerspoon")
+result = app.execute_lua_code("""
+    app = hs.appfinder.appFromName("Finder")
+    window = app:mainWindow()
+    return window:title()
+""")
+print(result)
+# Recents
+
+
+

For all classes, methods, and inherited members of the Hammerspoon module, see the Hammerspoon Module Reference.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/imageevents/index.html b/docs/tutorial/apps/imageevents/index.html new file mode 100644 index 0000000..dbc65cf --- /dev/null +++ b/docs/tutorial/apps/imageevents/index.html @@ -0,0 +1,322 @@ + + + + + + + Image Events Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Image Events Module Overview

+ +

PyXA supports the full scripting dictionary for Image Events, and some additional image manipulation features have been implemented using Objective-C APIs.

+
+

Image Events Tutorials

+ +
+

Tutorial 2 - Working With Lists of Images

+

The Image Events module has been designed around convenience, and a key aspect of that is the ability to conduct bulk operations with XAList objects, in particular by using the XAImageEventsImageList class. In addition to general syntactic convenience, XAImageEventsImageList objects provide significant performance improvements over conventional looping operations. Since XALists do not spend time dereferencing PyObjC/ScriptingBridge pointers, they send far fewer Apple Events, leading to much faster execution. This is evidenced by the code below:

+
from timeit import timeit
+import PyXA
+app = PyXA.Application("Image Events")
+
+def without_xalist():
+    img_data = []
+    images = [app.open("/Users/exampleUser/Desktop/Example1.jpeg"), app.open("/Users/exampleUser/Desktop/Example2.jpeg"), app.open("/Users/exampleUser/Desktop/Example3.jpeg")]
+    for image in images:
+        image.scale(3)
+        image.rotate(45)
+        img_data.append(image.get_clipboard_representation())
+    PyXA.XAClipboard().content = img_data
+
+def with_xalist():
+    images = app.open("/Users/exampleUser/Desktop/Example1.jpeg", "/Users/exampleUser/Desktop/Example2.jpeg", "/Users/exampleUser/Desktop/Example3.jpeg")
+    PyXA.XAClipboard().content = images.scale(3).rotate(45)
+
+r1 = timeit(without_xalist, number=100)
+r2 = timeit(with_xalist, number=100)
+
+print("Non-XAList avg over 100 trials:", r1 / 100)
+# ~3.835 seconds per iteration (on M1 Pro MacBook Pro)
+
+print("XAList avg over 100 trials:", r2 / 100)
+# ~0.076 seconds per iteration (on M1 Pro MacBook Pro)
+
+
+

In the XAList-equipped function, app.open yeilds an XAImageEventsImageList object. We then scale and rotate all images in the list The code above also highlights the concise coding style supported by XAImageEventsImageList objects. Method chaining as done here is entirely optional, but some may prefer this approach due to its similarity to JXA and JavaScript at large.

+

All attributes and methods of the XAImageEventsImage class can be called on XAImageEventsImageList objects as well.

+

images = app.open(“/Users/exampleUser/Desktop/Example1.jpeg”, “/Users/exampleUser/Desktop/Example2.jpeg”, “/Users/exampleUser/Desktop/Example3.jpeg”) +# # print(images[0].rotate(30).image_with_modifications.show_in_preview()) +# print(images.original_images()[0].show_in_preview())

+
# Access Attributes in Bulk
+print(images.properties())
+print(images.bit_depth(), images.color_space())
+print(images.dimensions(), images.resolution())
+print(images.file_type(), images.image_file(), images.name())
+
+# Retrieve Images By Attribute Value
+print(images.by_name("Example.png"))
+print(images.by_dimensions((2022, 1542)))
+print(images.by_file_type(app.FileType.JPEG))
+print(images.by_color_space(app.ColorSpace.RGB))
+print(images.by_bit_depth(app.BitDepth.MILLIONS_OF_COLORS))
+
+# Perform Bulk Manipulation Operations
+images.rotate(45).scale(2)
+images.flip_horizontally()
+images.embed_profile(app.profiles().by_name("Generic CMYK Profile"))
+images.save(file_paths=["/Users/exampleUser/Desktop/NewExample1.jpeg", "/Users/exampleUser/Desktop/NewExample2.jpeg", "/Users/exampleUser/Desktop/NewExample3.jpeg"])
+PyXA.XAClipboard().content = images
+
+
+
+
+
+

Image Events Examples

+

The examples below provide an overview of the capabilities of the Image Events module. For more in-depth examples that show output and provide more detailed explanations, refer to the previous section (Image Events Tutorials).

+
+

Example 1 - Using Image Events Alongside Other PyXA Features

+
+

Combining Image Events, XAImages, Photos.app, and more

+

The functionality of the Image Events module can be easily extended by intertwining it with other PyXA features. The XAImage class is a key example of this. In fact, you can easily convert images managed by Image Events into XAImages, giving you full access to all features thereof. In the code below, we first use Image Events to rotate an image, then we use the extract_text() method from XAImage to retrieve text contained within. We also open the original and modified images in preview, copy the raw data of the modified image’s TIFF representation to the clipboard, and save the modified image to a file on the disk.

+
import PyXA
+app = PyXA.Application("Image Events")
+image = app.open("/Users/steven/Desktop/code.png").rotate(45)
+modified_image = image.modified_image_object
+print(modified_image.extract_text())
+
+image.original_image_object.show_in_preview()
+modified_image.show_in_preview()
+
+PyXA.XAClipboard().contents = str(modified_image.data)
+modified_image.save("/Users/exampleUser/Desktop/NewExample4.png")
+
+
+
+
+
+
+

Image Events Resources

+ +

For all classes, methods, and inherited members of the Image Events module, see the Image Events Module Reference.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/index.html b/docs/tutorial/apps/index.html new file mode 100644 index 0000000..dc11d01 --- /dev/null +++ b/docs/tutorial/apps/index.html @@ -0,0 +1,189 @@ + + + + + + + Application Module Overviews — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/iterm/index.html b/docs/tutorial/apps/iterm/index.html new file mode 100644 index 0000000..5ea6677 --- /dev/null +++ b/docs/tutorial/apps/iterm/index.html @@ -0,0 +1,135 @@ + + + + + + + iTerm Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/tutorial/apps/keynote/index.html b/docs/tutorial/apps/keynote/index.html new file mode 100644 index 0000000..7d93e22 --- /dev/null +++ b/docs/tutorial/apps/keynote/index.html @@ -0,0 +1,136 @@ + + + + + + + Keynote Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Keynote Module Overview

+

For all classes, methods, and inherited members of the Keynote module, see the Keynote Module Reference and iWork Base Reference.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/mail/index.html b/docs/tutorial/apps/mail/index.html new file mode 100644 index 0000000..1f06f09 --- /dev/null +++ b/docs/tutorial/apps/mail/index.html @@ -0,0 +1,136 @@ + + + + + + + Mail Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Mail Module Overview

+

For all classes, methods, and inherited members of the Mail module, see the Mail Module Reference.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/maps/index.html b/docs/tutorial/apps/maps/index.html new file mode 100644 index 0000000..3858f0b --- /dev/null +++ b/docs/tutorial/apps/maps/index.html @@ -0,0 +1,136 @@ + + + + + + + Maps Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Maps Module Overview

+

For all classes, methods, and inherited members of the Maps module, see the Maps Module Reference.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/messages/index.html b/docs/tutorial/apps/messages/index.html new file mode 100644 index 0000000..64c851f --- /dev/null +++ b/docs/tutorial/apps/messages/index.html @@ -0,0 +1,210 @@ + + + + + + + Messages Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Messages Module Overview

+ +

PyXA supports all of the OSA features for Messages.app.

+
+

Messages Tutorials

+

There are currently no tutorials for the Messages module.

+
+
+

Messages Examples

+

The examples below provide an overview of the capabilities of the Automator module.

+
+

Example 1 - Creating workflows from scratch

+

The example below creates a workflow that displays a notification, waits five seconds, then starts the screen saver. The process for creating workflows begins with making a new workflow object, adding it to the list of workflows, and saving it to the disk. Without saving here, you may encounter errors as some methods and actions require access to the workflow file. With an empty workflow created, the next step is to add actions, which is most easily done by name. Next, you must retrieve a mutable form of the actions; you can think of the original ones as a template that you’ve now made a copy of. From there, you can change the value of settings however you desire.

+
 1import PyXA
+ 2app = PyXA.application("Automator")
+ 3
+ 4# Create and save a new workflow
+ 5new_workflow = app.make("workflow", {"name": "New Workflow"})
+ 6app.workflows().push(new_workflow)
+ 7new_workflow.save()
+ 8
+ 9# Add actions to the workflow
+10action1 = app.automator_actions().by_name("Display Notification")
+11action2 = app.automator_actions().by_name("Pause")
+12action3 = app.automator_actions().by_name("Start Screen Saver")
+13app.add(action1, new_workflow)
+14app.add(action2, new_workflow)
+15app.add(action3, new_workflow)
+16
+17# Obtain actions in mutable form and change their settings
+18actions = new_workflow.automator_actions()
+19notification_text = actions[0].settings().by_name("title")
+20notification_text.set_property("value", "PyXA Notification")
+21
+22pause_duration = actions[1].settings().by_name("pauseDuration")
+23pause_duration.set_property("value", 5)
+24
+25# Run the workflow
+26new_workflow.execute()
+
+
+
+
+

Example 2 - Running existing workflows

+

In the short example below, we open an existing workflow file, run it, and display the execution’s results.

+
1import PyXA
+2app = PyXA.application("Automator")
+3
+4app.open("/Users/exampleuser/Downloads/Example.workflow")
+5workflow = app.workflows().by_name("Example.workflow")
+6workflow.execute()
+7
+8print(workflow.execution_result)
+
+
+
+
+
+

Messages Resources

+ +

For all classes, methods, and inherited members of the Messages module, see the Messages Module Reference.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/music/index.html b/docs/tutorial/apps/music/index.html new file mode 100644 index 0000000..28acb99 --- /dev/null +++ b/docs/tutorial/apps/music/index.html @@ -0,0 +1,136 @@ + + + + + + + Music Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/tutorial/apps/notes/index.html b/docs/tutorial/apps/notes/index.html new file mode 100644 index 0000000..2f625ba --- /dev/null +++ b/docs/tutorial/apps/notes/index.html @@ -0,0 +1,324 @@ + + + + + + + Notes Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Notes Module Overview

+
+

Notes Tutorials

+
+

Tutorial 1 - Interacting with Notes

+
+

Accessing Notes.app Objects

+
import PyXA
+from datetime import datetime, timedelta
+
+app = PyXA.Application("Notes")
+
+# Get top-level lists of objects
+print(app.accounts())
+print(app.folders())
+print(app.notes())
+print(app.attachments())
+# <<class 'PyXA.apps.Notes.XANotesAccountList'>[('iCloud', 'x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICAccount/p3'), ...]>
+# <<class 'PyXA.apps.Notes.XANotesFolderList'>[('COS 573 - Computer Vision', 'x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICFolder/p4176'), ...]>
+# <<class 'PyXA.apps.Notes.XANoteList'>['x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICNote/p5232', ...]>
+# <<class 'PyXA.apps.Notes.XANotesAttachmentList'>[('hello, world', 'x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICAttachment/p4122'), ...]>
+
+# Use chaining to get objects organized by container
+print(app.folders().notes())
+# <<class 'PyXA.apps.Notes.XANoteList'>[(
+#     "x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICNote/p4174"
+# ), (
+#     "x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICNote/p4175"
+# ), (
+#     "x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICNote/p5232",
+#     "x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICNote/p4827",
+#     "x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICNote/p4935",
+#     ...
+# )]>
+
+# Get attachments organized per note, per folder, per account
+print(app.accounts().folders().notes().attachments())
+
+# Get notes by attributes
+note1 = app.notes().by_name("PyXA Ideas")
+note2 = app.notes().containing("plaintext", "random note text")
+recently_edited = app.notes().greater_than("modificationDate", datetime.now() - timedelta(hours=5))
+
+# Get attachments on a specific notes
+note1_attachments = note1.attachments()
+
+# Get notes in a specific folder
+fnotes = app.folders()[1].notes()
+
+
+
+
+

Accessing Attributes of Notes.app Objects

+

Access individual attributes

+
import PyXA
+app = PyXA.Application("Notes")
+notes = app.notes()
+
+# Access attributes of accounts
+account = app.accounts().first
+print(account.name)
+print(account.default_folder)
+# iCloud
+# <<class 'PyXA.apps.Notes.XANotesFolder'>Notes, x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICFolder/p1>
+
+# Access attributes of folders
+folder = app.folders()[0]
+print(folder.name)
+print(folder.id)
+# COS 573 - Computer Vision
+# x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICFolder/p4176
+
+# Access attributes of notes
+note = app.notes().by_name("Important Note")
+print("Name:", note.name)
+print("\nBody:", note.body)
+print("\nPlaintext:", note.plaintext)
+print("\nCreation Date:", note.creation_date)
+print("Modification Date:", note.modification_date)
+print("\nID:", note.id)
+# Name: Important Note
+#
+# Body: <div><b><span style="font-size: 24px">Important Note</span></b></div>
+# <div><br></div>
+# <div>Important note text</div>
+# <div><br></div>
+# <div><img style="max-width: 100%; max-height: 100%;" src="data:image/png;base64,
+# ...
+#
+# Plaintext: Important Note
+#
+# Important note text
+# ...
+#
+# Creation Date: 2022-10-25 09:32:00 +0000
+# Modification Date: 2022-10-25 10:38:16 +0000
+#
+# ID: x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICNote/p5303
+
+# Access attributes of attachments
+attachment = note.attachments().last
+print(attachment.name)
+print(attachment.content_identifier)
+print(attachment.container)
+# Owl.png
+# cid:64D2B218-576E-405F-A147-34D2C8B86E6B@icloud.apple.com
+# <<class 'PyXA.apps.Notes.XANote'>>
+
+
+

Access attributes in bulk

+
PyXA
+app = PyXA.Application("Notes")
+
+accounts = app.accounts()
+print(accounts.name())
+print(accounts.upgraded())
+# ['iCloud']
+# [True]
+
+folders = app.folders()
+print(folders.name())
+print(folders.shared())
+print(folders.id())
+# ['COS 573 - Computer Vision', 'COS 598 - NLP', 'Imported Notes', 'Notes', 'Quick Notes', 'Raycast', 'Recently Deleted']
+# [False, False, False, False, False, True, False]
+# ['x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICFolder/p4176', ...]
+
+notes = app.notes()
+print(notes.name())
+print(notes.plaintext())
+# ['Important Note', 'PyXA 0.1.0', 'Lecture 12', 'Random Python Notes', ...]
+# ['Important Note\n\nImportant note text\n\n\n', 'PyXA 0.1.0\n\nSupport for New Applications\nAdobe Acrobat Reader\nAmphetamine\nBike\nFlow\nImage Events\niTerm\nRStudio\nSpotify\nSystem Events\n\n\nAdditions\nXALSM — A class for convenient text classification...', ...]
+
+attachments = app.attachments()
+print(attachments.name())
+print(attachments.url())
+# ['Pasted Graphic 1.tiff', 'Pasted Graphic 2.tiff', 'Pasted Graphic 3.tiff', 'Owl.png', ...]
+# ['https://books.apple.com/us/book/applescript/id383961702', 'https://books.apple.com/us/book/applescript-questions-and-answers-2020-edition/id1491304822', ...]
+
+
+
+
+

Creating New Folders, Notes, and Attachments

+
import PyXA
+app = PyXA.Application("Notes")
+
+# Add a folder via push() method
+new_folder_1 = app.make("folder", {"name": "New Folder 3"})
+app.folders().push(new_folder_1)
+
+# Add a folder via new_folder() method
+new_folder_2 = app.new_folder("New Folder 4", account=app.accounts()[0])
+
+# Add a note via push() method
+new_note_1 = app.make("note", {"body": "<h1>New Note!</h1><br/>Hello, world!"})
+app.folders().by_name("New Folder 3").notes().push(new_note_1)
+
+# Add a note via new_note() method
+new_note_2 = app.new_note("New Note Title", "New note text", folder=new_folder_2)
+
+# Add an attachment to a note
+note = app.notes().by_name("Important Note")
+new_attachment = app.make("attachment", data="/Users/steven/Downloads/Important Document.pdf")
+note.attachments().push(new_attachment)
+
+
+
+
+
+
+

Notes Examples

+

The examples below show some simple use cases for the Notes module that might help you spark an idea. For more in-depth examples that show output and provide more detailed explanations, refer to the previous section (Notes Tutorials).

+
+

Example 1 - Saving Safari Tab Text to a Note

+
#!/usr/bin/env python
+
+import PyXA
+safari = PyXA.Application("Safari")
+current_tab = safari.front_window.current_tab
+tab_name = current_tab.name
+tab_text = current_tab.text
+
+notes = PyXA.Application("Notes")
+folder = notes.folders().by_name("Saved Websites")
+notes.new_note(tab_name, tab_text, folder)
+
+
+

For all classes, methods, and inherited members of the Notes module, see the Notes Module Reference.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/numbers/index.html b/docs/tutorial/apps/numbers/index.html new file mode 100644 index 0000000..04357e0 --- /dev/null +++ b/docs/tutorial/apps/numbers/index.html @@ -0,0 +1,136 @@ + + + + + + + Numbers Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Numbers Module Overview

+

For all classes, methods, and inherited members of the Numbers module, see the Numbers Module Reference and iWork Base Reference.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/omnioutliner/index.html b/docs/tutorial/apps/omnioutliner/index.html new file mode 100644 index 0000000..7972c8b --- /dev/null +++ b/docs/tutorial/apps/omnioutliner/index.html @@ -0,0 +1,136 @@ + + + + + + + OmniOutliner Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

OmniOutliner Module Overview

+

For all classes, methods, and inherited members of the OmniOutliner module, see the OmniOutliner Module Reference.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/pages/index.html b/docs/tutorial/apps/pages/index.html new file mode 100644 index 0000000..ed765bc --- /dev/null +++ b/docs/tutorial/apps/pages/index.html @@ -0,0 +1,136 @@ + + + + + + + Pages Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/tutorial/apps/photos/index.html b/docs/tutorial/apps/photos/index.html new file mode 100644 index 0000000..58aa226 --- /dev/null +++ b/docs/tutorial/apps/photos/index.html @@ -0,0 +1,136 @@ + + + + + + + Photos Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Photos Module Overview

+

For all classes, methods, and inherited members of the Photos module, see the Photos Module Reference.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/preview/index.html b/docs/tutorial/apps/preview/index.html new file mode 100644 index 0000000..594efb2 --- /dev/null +++ b/docs/tutorial/apps/preview/index.html @@ -0,0 +1,136 @@ + + + + + + + Preview Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Preview Module Overview

+

For all classes, methods, and inherited members of the Preview module, see the Preview Module Reference.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/quicktimeplayer/index.html b/docs/tutorial/apps/quicktimeplayer/index.html new file mode 100644 index 0000000..3e77100 --- /dev/null +++ b/docs/tutorial/apps/quicktimeplayer/index.html @@ -0,0 +1,136 @@ + + + + + + + QuickTime Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

QuickTime Module Overview

+

For all classes, methods, and inherited members of the QuickTime module, see the QuickTime Module Reference.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/reminders/index.html b/docs/tutorial/apps/reminders/index.html new file mode 100644 index 0000000..59341d5 --- /dev/null +++ b/docs/tutorial/apps/reminders/index.html @@ -0,0 +1,136 @@ + + + + + + + Reminders Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Reminders Module Overview

+

For all classes, methods, and inherited members of the Reminders module, see the Reminders Module Reference.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/rstudio/index.html b/docs/tutorial/apps/rstudio/index.html new file mode 100644 index 0000000..74b8fe0 --- /dev/null +++ b/docs/tutorial/apps/rstudio/index.html @@ -0,0 +1,135 @@ + + + + + + + RStudio Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/tutorial/apps/safari/index.html b/docs/tutorial/apps/safari/index.html new file mode 100644 index 0000000..afeb05c --- /dev/null +++ b/docs/tutorial/apps/safari/index.html @@ -0,0 +1,216 @@ + + + + + + + Safari Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Safari Module Overview

+ +

PyXA has full nearly complete feature support for Safari, but some functionalities, such as saving a document, are currently unavailable. These will be implemented in future versions of the Safari module.

+
+

Safari Tutorials

+

There are currently no tutorials for the Safari module.

+
+
+

Safari Examples

+

The examples below provide an overview of the capabilities of the Safari module. For more in-depth examples that show output and provide more detailed explanations, refer to the previous section (Safari Tutorials).

+
+

Example 1 - Using Safari Methods and Attributes

+

This example provides an overview of the most common methods and attributes of the Safari module.

+
 1import PyXA
+ 2
+ 3# Open URL in new tab
+ 4safari = PyXA.application("Safari")
+ 5
+ 6# Get open windows, documents, and tabs
+ 7window1 = safari.front_window()
+ 8window2 = safari.windows()[1]
+ 9documents = safari.documents()
+10current_doc = safari.current_document
+11tabs = window1.tabs()
+12current_tab = window1.current_tab
+13
+14# Get properties of documents
+15urls = documents.url()
+16names = documents.name()
+17html = current_doc.source()
+18
+19# Get properties of tabs
+20urls = tabs.url()
+21texts = tabs.text()
+22name = current_tab.name()
+23
+24# Filter documents and tabs
+25doc1 = documents.by_url("https://apple.com")
+26doc2 = documents.by_name("Apple")
+27tab1 = tabs.by_index(1)
+28tab2 = tabs.by_visible(True)
+29
+30# Bulk document operations
+31documents.add_to_reading_list()
+32documents.email()
+33documents.do_javascript("alert('Testing 1 2 3');")
+34documents.search("Example")
+35
+36# Bulk tab operations
+37tabs.reload()
+38tabs.add_to_reading_list()
+39tabs.email()
+40tabs.do_javascript("alert('Hello!');")
+41tabs.search("Example")
+42tabs.move_to(window2)
+43tabs.duplicate_to(window2)
+44
+45# Sub-array operations
+46some_tabs = tabs[3:5]
+47some_tabs.close()
+
+
+
+
+
+

Safari Resources

+ +

For all classes, methods, and inherited members of the Safari module, see the Safari Module Reference.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/shortcuts/index.html b/docs/tutorial/apps/shortcuts/index.html new file mode 100644 index 0000000..d363341 --- /dev/null +++ b/docs/tutorial/apps/shortcuts/index.html @@ -0,0 +1,206 @@ + + + + + + + Shortcuts Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Shortcuts Module Overview

+ +

Most of Shortcuts.app’s scripting interface is available via PyXA, however some significant features are currently limited by sandboxing constraints. PyXA is able to interact with existing shortcuts, including run them, but it is currently unable to create new shortcuts or shortcut folders. That said, it is possible to use Shortcuts links to install new shortcuts. It would be feasible to use functional, atomically constructed shortcuts (i.e. each shortcut accomplishes a single task and returns a transformed value) to construct larger sequences of actions, effectively re-instituting an ability to create shortcuts. For now, that is left as an exercise for PyXA users. Future versions of PyXA may utilize the Shortcuts URI scheme, in combination with the Intents framework, to re-implement these features in a more straightforward way.

+
+

Shortcuts Tutorials

+

There are currently no tutorials for the Shortcuts module.

+
+
+

Shortcuts Examples

+

The examples below provide an overview of the capabilities of the Shortcuts module. They do not provide any output. For more in-depth examples that show output and provide more detailed explanations, refer to the previous section (Shortcuts Tutorials).

+
+

Example 1 - Run shortcuts and receive their return values

+

The example below activates Chromium.app, opens Apple’s website in a new tab, waits for the tab to finish loading, then saves the site’s resources (e.g. HTML, CSS, JavaScript, and images) to a location on the disk. Note the use of a full URL, beginning with “http”, as well as a full file path, beginning with “/”. Both a full URL and full file path are necessary in order for this example to operate successfully.

+
 1import PyXA
+ 2app = PyXA.application("Shortcuts")
+ 3
+ 4# Get shortcuts by name
+ 5sqrt = app.shortcuts().by_name("sqrt(x)")
+ 6sin = app.shortcuts().by_name("sin(x)")
+ 7
+ 8# Run sqrt function, get first entry in output array
+ 9root = sqrt.run(81)[0]
+10print(root)
+11
+12# Run sin function, get first entry in output array
+13sin_root = sin.run(root)[0]
+14print(sin_root)
+
+
+
+
+

Example 2 - Combine shortcut output with Python

+

This example highlights how you can intertwine PyXA, Shortcuts, and Python to carry out more complex processes. The example below uses a shortcut to obtain the source HTML of the Google homepage, then uses Python’s tempfile module alongside PyXA’s PyXA.Safari.XASafariApplication.open() method to display a local HTML file in the browser.

+
 1import PyXA
+ 2import tempfile
+ 3
+ 4# Get the source of webpage, using a shortcut
+ 5app = PyXA.application("Shortcuts")
+ 6s1 = app.shortcuts().by_name("Get HTML")
+ 7source = s1.run("http://google.com")[0]
+ 8
+ 9# Create a temporary HTML file
+10temp = tempfile.NamedTemporaryFile(suffix=".html")
+11temp.write(bytes(source, "UTF-8"))
+12
+13# Open the HTML file
+14PyXA.application("Safari").open(temp.name)
+15sleep(0.5)
+16temp.close()
+
+
+
+
+
+

Shortcuts Resources

+ +

For all classes, methods, and inherited members of the Shortcuts module, see the Shortcuts Module Reference.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/spotify/index.html b/docs/tutorial/apps/spotify/index.html new file mode 100644 index 0000000..051dd02 --- /dev/null +++ b/docs/tutorial/apps/spotify/index.html @@ -0,0 +1,135 @@ + + + + + + + Spotify Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/tutorial/apps/stocks/index.html b/docs/tutorial/apps/stocks/index.html new file mode 100644 index 0000000..678b4bd --- /dev/null +++ b/docs/tutorial/apps/stocks/index.html @@ -0,0 +1,136 @@ + + + + + + + Stocks Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Stocks Module Overview

+

For all classes, methods, and inherited members of the Stocks module, see the Stocks Module Reference.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/systemevents/index.html b/docs/tutorial/apps/systemevents/index.html new file mode 100644 index 0000000..5a4cd9a --- /dev/null +++ b/docs/tutorial/apps/systemevents/index.html @@ -0,0 +1,199 @@ + + + + + + + System Events Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

System Events Module Overview

+

The Terminal module enables control over Terminal.app from within Python, including the ability to run Terminal script and receive the execution return value.

+
+

System Events Examples

+
+

Example 1 - Sorting the Desktop

+
import PyXA
+app = PyXA.Application("System Events")
+
+# Set the desktop picture
+app.current_desktop.picture = "/Users/exampleUser/Desktop/Images/Background.png"
+
+# Toggle darkmode
+app.appearance_preferences.dark_mode = not app.appearance_preferences.dark_mode
+
+# # Add a login item -- This opens the Documents folder upon login
+new_item = app.make("login item", {"path": "/Users/exampleUser/Documents"})
+app.login_items().push(new_item)
+
+# Start the current screensaver
+app.current_screen_saver.start()
+
+
+

This example uses PyXA to sort files on the desktop into appropriate category folders.

+
import PyXA
+app = PyXA.Application("System Events")
+
+desktop_files = app.desktop_folder.files()
+desktop_folders = app.desktop_folder.folders()
+
+# Create sorting bin folders
+images_folder = app.make("folder", {"name": "Images"})
+videos_folder = app.make("folder", {"name": "Videos"})
+audio_folder = app.make("folder", {"name": "Audio"})
+documents_folder = app.make("folder", {"name": "Documents"})
+desktop_folders.push(images_folder, videos_folder, audio_folder, documents_folder)
+
+# Sort images
+image_predicate = "name ENDSWITH '.png' OR name ENDSWITH '.jpg' OR name ENDSWITH '.jpeg' OR name ENDSWITH '.aiff'"
+image_files = desktop_files.filter(image_predicate)
+image_files.move_to(images_folder)
+
+# Sort videos
+video_predicate = "name ENDSWITH '.mov' OR name ENDSWITH '.mp4' OR name ENDSWITH '.avi' OR name ENDSWITH '.m4v'"
+video_files = desktop_files.filter(video_predicate)
+video_files.move_to(videos_folder)
+
+# Sort audio
+audio_predicate = "name ENDSWITH '.mp3' OR name ENDSWITH '.ogg'"
+audio_files = desktop_files.filter(audio_predicate)
+audio_files.move_to(audio_folder)
+
+# Sort remaining (documents)
+desktop_files.move_to(documents_folder)
+
+
+
+
+
+

System Events Resources

+ +

For all classes, methods, and inherited members of the System Events module, see the System Events Module Reference.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/systempreferences/index.html b/docs/tutorial/apps/systempreferences/index.html new file mode 100644 index 0000000..70a18c9 --- /dev/null +++ b/docs/tutorial/apps/systempreferences/index.html @@ -0,0 +1,136 @@ + + + + + + + System Preferences Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

System Preferences Module Overview

+

For all classes, methods, and inherited members of the System Preferences module, see the System Preferences Module Reference.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/terminal/index.html b/docs/tutorial/apps/terminal/index.html new file mode 100644 index 0000000..97a0ce7 --- /dev/null +++ b/docs/tutorial/apps/terminal/index.html @@ -0,0 +1,187 @@ + + + + + + + Terminal Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Terminal Module Overview

+

The Terminal module enables control over Terminal.app from within Python, including the ability to run Terminal script and receive the execution return value.

+
+

Terminal Examples

+
+

Example 1 - Using Terminal methods and attributes

+

This example showcases many of the methods and attributes available for use in the Terminal module.

+
import PyXA
+app = PyXA.application("Terminal")
+
+# Get information about the current tab
+tab = app.current_tab
+print(tab.custom_title)
+print(tab.processes)
+print(tab.number_of_rows, tab.number_of_columns)
+# Terminal
+# (
+#     login,
+#     "-zsh",
+#     python
+# )
+# 24 80
+
+# Set tab properties
+tab.custom_title = "Testing 1 2 3"
+tab.number_of_rows = 50
+tab.title_displays_custom_title = True
+
+# Run scripts and utilize return values
+value = app.do_script("ls", return_result=True)
+print("Number of items:", len(value["stdout"].split("\n")) - 1)
+
+value = app.do_script("ping www.google.com -c 1", return_result=True)
+if "1 packets received" in value["stdout"]:
+    print("Online!")
+else:
+    print("Offline!")
+
+# Modify settings
+settings = tab.current_settings
+settings.background_color = PyXA.XAColor(255, 0, 0)
+settings.font_size = 10
+
+
+
+
+
+

Terminal Resources

+ +

For all classes, methods, and inherited members of the Terminal module, see the Terminal Module Reference.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/textedit/index.html b/docs/tutorial/apps/textedit/index.html new file mode 100644 index 0000000..e8db011 --- /dev/null +++ b/docs/tutorial/apps/textedit/index.html @@ -0,0 +1,249 @@ + + + + + + + TextEdit Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

TextEdit Module Overview

+ +

TextEdit is fully supported in PyXA.

+
+

TextEdit Tutorials

+

There are currently no tutorials for the Shortcuts module.

+
+
+

TextEdit Examples

+

The examples below provide an overview of the capabilities of the TextEdit module. For more in-depth examples that show output and provide more detailed explanations, refer to the previous section (TextEdit Tutorials).

+
+

Example 1 - Using TextEdit methods and attributes

+

This example utilizes most of the methods provided in the TextEdit module, and it shows how to accomplish common tasks such as retrieving the currently opened documents, opening documents, creating new documents, and editing documents.

+
import PyXA
+textedit = PyXA.application("TextEdit")
+textedit.activate()
+
+# Opening existing documents
+document = textedit.open("/Users/steven/Documents/Example.txt")
+document = textedit.documents().first
+document = textedit.front_window().document
+
+# Creating new documents
+textedit.new_document("new_doc_1.txt", location="/Users/exampleuser/Documents/")
+new_doc_2 = textedit.make("document", {"path": "/Users/exampleuser/Documents/NewDocument2.txt"})
+textedit.documents().push(new_doc_2)
+
+# Accessing top-level text elements
+paragraphs = document.paragraphs()
+sentences = document.sentences()
+words = document.words()
+characters = document.characters()
+
+# Conducting bulk operations with XAList objects
+combined_words = paragraphs[3:8].words()
+print(paragraphs.sentences())
+textedit.documents().append("\\nA new line in each open document")
+
+# Text elements are parents of text elements
+# Note: Words/characters are currently children of paragraphs, not sentences.
+sentences2 = paragraphs[0].sentences()
+words2 = paragraphs[0].words()
+characters2 = words2[0].characters()
+
+# Saving and closing documents
+document.save()
+document.close()
+
+
+
+
+

Example 2 - Creating documents from text returned by other PyXA methods

+

The example below implements a crude yet functional automatic flashcard generator that uses the text content of a webpage to create a randomized set of flashcards. The first half of the code uses the PyXA.Safari module to extract the visible text of a Wikipedia page, then saves that text to the disk. The second half then uses the TextEdit module to obtain a list of paragraphs in the text, from which five are randomly selected. The first sentence of each selected paragraphs is used as the hint for the flashcard. This could have use as a study tool or as a way to quickly summarize a topic, in addition to other potential uses.

+
import os
+from pprint import pprint
+import PyXA
+import random
+from time import sleep
+
+# Open a URL and wait for it to load
+safari = PyXA.application("Safari")
+safari.open("https://en.wikipedia.org/wiki/Computer")
+sleep(1)
+
+# Get the text of the document, then close the tab
+doc_text = safari.current_document.text
+safari.front_window().current_tab.close()
+
+# Create folder path if it doesn't already exist
+folder_path = "/Users/steven/Documents/articles/"
+os.makedirs(folder_path, exist_ok=True)
+
+# Save the document text to a file on the disk
+file_path = folder_path + "Wikipedia-Computer.txt"
+with open(file_path, "w") as file:
+   file.write(doc_text)
+
+# Open the document and get its paragraphs
+textedit = PyXA.application("TextEdit")
+textedit.open(file_path)
+doc = textedit.front_window().document
+paragraphs = doc.paragraphs()
+
+# Create 5 random (sentence, paragraph) 'flashcards'
+flashcards = []
+while len(flashcards) < 5:
+   paragraph = random.choice(paragraphs)
+   if len(paragraph) > 200:
+      sentence = random.choice(paragraph.sentences())
+      flashcards.append((sentence, paragraph))
+
+pprint(flashcards)
+
+
+
+
+
+

TextEdit Resources

+ +

For all classes, methods, and inherited members of the TextEdit module, see the TextEdit Module Reference.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/apps/tv/index.html b/docs/tutorial/apps/tv/index.html new file mode 100644 index 0000000..4e34d03 --- /dev/null +++ b/docs/tutorial/apps/tv/index.html @@ -0,0 +1,136 @@ + + + + + + + TV Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/tutorial/apps/vlc/index.html b/docs/tutorial/apps/vlc/index.html new file mode 100644 index 0000000..85a63f2 --- /dev/null +++ b/docs/tutorial/apps/vlc/index.html @@ -0,0 +1,186 @@ + + + + + + + VLC Module Overview — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

VLC Module Overview

+
+

VLC Examples

+
+

Example 1 - Working with VLC methods and attributes

+

This example provides a general overview of the functionalities supported by the VLC module. Additional examples can be found in the code reference for this module.

+
 1 import PyXA
+ 2 app = PyXA.application("VLC")
+ 3
+ 4 # Open or get (without opening) files and URLs
+ 5 app.open("/Users/exampleUser/ExampleFile.m4v")
+ 6 app.open("https://upload.wikimedia.org/wikipedia/commons/transcoded/e/e1/Black_Hole_Merger_Simulation_GW170104.webm/Black_Hole_Merger_Simulation_GW170104.webm.1080p.vp9.webm")
+ 7 app.get_url("https://upload.wikimedia.org/wikipedia/commons/transcoded/e/e1/Black_Hole_Merger_Simulation_GW170104.webm/Black_Hole_Merger_Simulation_GW170104.webm.1080p.vp9.webm")
+ 8
+ 9 # Control playback
+10 app.stop()
+11 app.play()
+12 app.previous()
+13 app.next()
+14 app.step_forward()
+15 app.step_backward()
+16 app.current_time = app.current_time + 5
+17
+18 # Control volume
+19 app.volume_up()
+20 app.volume_down()
+21 app.mute()
+22 app.audio_volume = 256
+23
+24 # Control the VLC window
+25 app.fullscreen()
+26 app.fullscreen_mode = False
+27 app.front_window.bounds = (0, 0, 500, 500)
+28 app.zoomed = True
+29
+30 # Utilize information about playback
+31 file = app.path_of_current_item
+32 file.show_in_finder()
+33
+34 if app.audio_volume > 256:
+35     app.audio_volume = 256
+
+
+
+
+
+

VLC Resources

+ +

For all classes, methods, and inherited members of the VLC module, see the VLC Module Reference.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/appscript.html b/docs/tutorial/appscript.html new file mode 100644 index 0000000..4b0533d --- /dev/null +++ b/docs/tutorial/appscript.html @@ -0,0 +1,137 @@ + + + + + + + Using Appscript to Work With Unsupported Applications — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Using Appscript to Work With Unsupported Applications

+

PyXA aims to be have fine-grained documentation on a per-application basis, which greatly limits its ability to interact with applications outside of the ones explicitly mentioned in this documentation. To make up for this limitation, PyXA falls back to appscript when no PyXA definition exists for an application. This allows you to interact with any AppleScript-compatible application, through appscript, while having access to the additional features of PyXA for an ever-expanding set of applications.

+
+

Converting Between Appscript and PyXA Types

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/clipboard.html b/docs/tutorial/clipboard.html new file mode 100644 index 0000000..dca5632 --- /dev/null +++ b/docs/tutorial/clipboard.html @@ -0,0 +1,202 @@ + + + + + + + Working With The Clipboard — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Working With The Clipboard

+

PyXA affords full access to the system clipboard (or pasteboard, in Objective-C terms), making it easy to read content from or write content to the clipboard from within Python. PyXA provides a convenient XAClipboard class to handle clipboard-related actions.

+
+

Reading Clipboard Content

+

To read content from the clipboard, you need only to instantiate an instance of XAClipboard and access its content property. This will provide a dictionary containing the raw NSData object, property list, and string associated with each object type in the clipboard. The example below shows this in action. In this case, the text “Testing 1 2 3…” was copied from a plaintext file, where no formatting data is present.

+
import PyXA
+cb = PyXA.XAClipboard()
+print(cb.content)
+# {'public.utf8-plain-text': {'data': {length = 16, bytes = 0x54657374696e672031203220332e2e2e}, 'properties': None, 'strings': 'Testing 1 2 3...'}}
+
+
+

In comparison, when running the code after copying text from within Pages, we also receive the formatting data objects and their associated properties and strings, as shown below. Note that we use print instead of pprint in order to save space here, but the output follows the save structure as before: for each type of data contained in the clipboard, we receive the NSData object, the property list, and the string associated with that data type. The key difference is that copying formatted text places several types of data on the clipboard, including the plaintext representation, while copying plaintext directly only involves a single clipboard type.

+
import PyXA
+cb = PyXA.XAClipboard()
+print(cb.content)
+# {'com.apple.flat-rtfd': {'data': {length = 408, bytes = 0x72746664 00000000 03000000 02000000 ... 00000000 00000000 }, 'properties': None, 'strings': None}, 'public.rtf': {'data': {length = 317, bytes = 0x7b5c7274 66315c61 6e73695c 616e7369 ... 20322033 2e2e2e7d }, 'properties': None, 'strings': '{\\rtf1\\ansi\\ansicpg1252\\cocoartf2638\n\\cocoatextscaling0\\cocoaplatform0{\\fonttbl\\f0\\fnil\\fcharset0 HelveticaNeue;}\n{\\colortbl;\\red255\\green255\\blue255;\\red0\\green0\\blue0;}\n{\\*\\expandedcolortbl;;\\cssrgb\\c0\\c0\\c0;}\n\\deftab720\n\\pard\\pardeftab720\\partightenfactor0\n\n\\f0\\fs22 \\cf2 \\up0 \\nosupersub \\ulnone Testing 1 2 3...}'}, 'public.utf16-external-plain-text': {'data': {length = 34, bytes = 0xfffe5400 65007300 74006900 6e006700 ... 33002e00 2e002e00 }, 'properties': None, 'strings': None}, 'public.utf8-plain-text': {'data': {length = 16, bytes = 0x54657374696e672031203220332e2e2e}, 'properties': None, 'strings': 'Testing 1 2 3...'}, 'org.nspasteboard.TransientType': {'data': {length = 0, bytes = 0x}, 'properties': None, 'strings': ''}, 'org.nspasteboard.AutoGeneratedType': {'data': {length = 0, bytes = 0x}, 'properties': None, 'strings': ''}}
+
+
+

You can parse the content dictionary to obtain the exact information that you need, or you can use built-in convenience functions to obtain the most common data types. These functions currently include get_strings(), get_urls(), and get_images(). For example:

+
import PyXA
+cb = PyXA.XAClipboard()
+print(cb.get_strings())
+# ['Testing 1 2 3...']
+
+
+
import PyXA
+cb = PyXA.XAClipboard()
+print(cb.get_urls())
+# [<<class 'PyXA.XABase.XAPath'>file:///Users/exampleUser/Documents/example.jpeg>]
+
+
+
import PyXA
+cb = PyXA.XAClipboard()
+print(cb.get_images())
+# [<PyXA.XABase.XAImage object at 0x11c551e20>, <PyXA.XABase.XAImage object at 0x11c551fa0>, <PyXA.XABase.XAImage object at 0x100cb9310>]
+
+
+
+
+

Writing Content to the Clipboard

+

To write content to the clipboard, set the content property of the XAClipboard object. This works for Python’s base literal classes, some general Python classes, and all PyXA classes. The example below highlights how this functionality can be used for different data types.

+
import PyXA
+cb = PyXA.XAClipboard()
+cb.content = "Testing 1 2 3"
+cb.content = 42
+cb.content = True
+cb.content = [1, 2, "Three"]
+
+image = PyXA.XAImage("/Users/exampleUser/Documents/Test.jpg")
+cb.content = image
+
+path = PyXA.XAPath("/Users/steven/Downloads/Test.jpg")
+cb.content = path
+
+url = PyXA.XAURL("http://macrumors.com")
+cb.content = url
+
+sound = PyXA.XASound("/Users/steven/Downloads/Test.mp3")
+cb.content = sound
+
+
+

For strings and other literal values, the plaintext form of the value will be added to the clipboard. For PyXA class objects, one or more items representing the object in multiple forms will be added to the clipboard. For example, setting the clipboard content to an XAURL object will add the URL as a URL type and as a plaintext string, while setting the content to an XASound object will add the raw sound data, a file URL, and the file path string. More information on how each PyXA object type is represented can be found in the corresponding code reference material.

+

You can also copy XAList objects to the clipboard in the same way. When you do this, data for each element in the list is added to the clipboard. The type of data added to the clipboard varies based on the list type, but it generally matches the data type added for a single element of the corresponding class. For example, for Music tracks, a single track copied to the clipboard adds the track name to the clipboard, while a list of tracks copies the names of each track to the clipboard (as separate items).

+
import PyXA
+tracks = PyXA.application("Music").tracks()
+PyXA.XAClipboard().content = tracks
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/extensions/web/rssfeed.html b/docs/tutorial/extensions/web/rssfeed.html new file mode 100644 index 0000000..a190e44 --- /dev/null +++ b/docs/tutorial/extensions/web/rssfeed.html @@ -0,0 +1,182 @@ + + + + + + + Reading RSS Feeds — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Reading RSS Feeds

+

PyXA provides straightforward RSS reading capabilities through the RSSFeed class. In combination with the associated RSSItem and RSSItemContent classes, the RSSFeed class handles the details of parsing RSS feeds and makes their information accessible via object attributes and methods. These classes also automatically converts complex types, such as URLs and images, into their PyXA representations.

+

To create a new RSS reader, instantiate an RSSFeed object and provide an RSS feed endpoint (i.e. URL) as an argument. You can then view the retrieved RSS items via the items() method. The example below obtains the top 10 songs on iTunes, at the of time of writing, from Apple’s public RSS feed.

+
import PyXA
+reader = PyXA.RSSFeed("http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml")
+print(reader.items())
+# <<class 'PyXA.extensions.XAWeb.RSSItemList'>['Hold Me Closer - Elton John & Britney Spears', 'Only Ever Wanted - Timcast', "I Ain't Worried - OneRepublic", 'wait in the truck - HARDY & Lainey Wilson', 'Bring Me to Life - Evanescence', 'Running Up That Hill (A Deal with God) - Kate Bush', 'Beer With My Friends - Kenny Chesney & Old Dominion', 'American Pie (Full Length Version) - Don Mclean', 'She Had Me At Heads Carolina - Cole Swindell', 'You Proof - Morgan Wallen']>
+
+
+

As you can see, the items() method returns an RSSItemList object, an instance of XAList – meaning that 1) the list supports bulk actions via method calls, and 2) the items are not fully evaluated until retrieved from the list by index. The latter is not significant when working with small amounts of items as in the example above, but it saves significant time when working with very large lists. The ability to perform bulk actions is present regardless of list size. The example below shows some of the bulk methods available for the RSSItemList class.

+
import PyXA
+reader = PyXA.RSSFeed("http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml")
+items = reader.items()
+print(items)
+print(items.title())
+print(items.link())
+print(items.shuffle())
+
+# <<class 'PyXA.extensions.XAWeb.RSSItemList'>['Hold Me Closer - Elton John & Britney Spears', 'Only Ever Wanted - Timcast', "I Ain't Worried - OneRepublic", 'Bring Me to Life - Evanescence', 'wait in the truck - HARDY & Lainey Wilson', 'Running Up That Hill (A Deal with God) - Kate Bush', 'Beer With My Friends - Kenny Chesney & Old Dominion', 'American Pie (Full Length Version) - Don Mclean', 'She Had Me At Heads Carolina - Cole Swindell', "Summer of '69 - Bryan Adams"]>
+
+# ['Hold Me Closer - Elton John & Britney Spears', 'Only Ever Wanted - Timcast', "I Ain't Worried - OneRepublic", 'Bring Me to Life - Evanescence', 'wait in the truck - HARDY & Lainey Wilson', 'Running Up That Hill (A Deal with God) - Kate Bush', 'Beer With My Friends - Kenny Chesney & Old Dominion', 'American Pie (Full Length Version) - Don Mclean', 'She Had Me At Heads Carolina - Cole Swindell', "Summer of '69 - Bryan Adams"]
+
+# [<<class 'PyXA.XABase.XAURL'>>, <<class 'PyXA.XABase.XAURL'>>, <<class 'PyXA.XABase.XAURL'>>, <<class 'PyXA.XABase.XAURL'>>, <<class 'PyXA.XABase.XAURL'>>, <<class 'PyXA.XABase.XAURL'>>, <<class 'PyXA.XABase.XAURL'>>, <<class 'PyXA.XABase.XAURL'>>, <<class 'PyXA.XABase.XAURL'>>, <<class 'PyXA.XABase.XAURL'>>]
+
+# <<class 'PyXA.extensions.XAWeb.RSSItemList'>['Bring Me to Life - Evanescence', 'American Pie (Full Length Version) - Don Mclean', "I Ain't Worried - OneRepublic", 'Running Up That Hill (A Deal with God) - Kate Bush', 'Only Ever Wanted - Timcast', 'Beer With My Friends - Kenny Chesney & Old Dominion', 'wait in the truck - HARDY & Lainey Wilson', 'Hold Me Closer - Elton John & Britney Spears', "Summer of '69 - Bryan Adams", 'She Had Me At Heads Carolina - Cole Swindell']>
+
+
+

The combination of XAList objects and automatic conversion to PyXA-wrapped objects allows for highly streamlined code. For example, to open each image contained in the description element of each RSS item in preview, you can use bulk operations first to get the description of each item, then to get the images of each description, and finally to show each image.

+
import PyXA
+reader = PyXA.RSSFeed("https://www.nhc.noaa.gov/gtwo.xml")
+descriptions = reader.items().description()
+descriptions.images().show_in_preview()
+
+
+

You could, of course, condense this further by taking full advantage of PyXA’s support for chaining method calls:

+
import PyXA
+PyXA.RSSFeed("https://www.nhc.noaa.gov/gtwo.xml").items().description().images().show_in_preview()
+
+
+

In this case, the sacrifice to readability is not too extreme, but you can decide which form suites your tastes.

+

The previous example utilized the images() method to obtain a list of XAImage objects. Another useful method is the links() method, which obtains a list of XAURL objects. Both of these methods work on lists of item content as well as on individual items. An example of using the links() method is shown below. The example also showcases how you can use interweave an RSS reader with other aspects of PyXA, in this case using the XASound class to listen to m4a files stored at a web URL.

+
import PyXA
+reader = PyXA.RSSFeed("http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml")
+links = reader.items().links()
+m4as = filter(lambda x: "m4a" in x.url, links)
+
+for index, song in enumerate(m4as):
+    print("Now playing: " + reader.items()[index].title)
+    sound = PyXA.XASound(song)
+    sound.play()
+    sleep(sound.duration)
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/images.html b/docs/tutorial/images.html new file mode 100644 index 0000000..91c63f8 --- /dev/null +++ b/docs/tutorial/images.html @@ -0,0 +1,399 @@ + + + + + + + Working with Images — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Working with Images

+

PyXA uses the XAImage class to provide a standard, convenient way to interact with images stored in files, images created by other PyXA operations, and images managed by applications such as Photos or Image Events. Using this class, you can:

+
    +
  • Load and save images

  • +
  • Access information about images, such as whether they contain transparent pixels

  • +
  • Copy images to the clipboard

  • +
  • Set image attributes such as vibrance and temperature

  • +
  • Apply filters and distortions

  • +
  • Create composite images or blend images together using composition filters

  • +
  • Stitch images together

  • +
  • Extract text contained in images

  • +
+

The XAImage class aims to simplify complex Objective-C implementations of image manipulation down to just a few lines of code for PyXA users. As a result, creating scripts to operate on images can be done quickly and without needing to understand the underlying mechanisms as work. You can then intuitively utilize images elsewhere in your automation scripts. Some ideas for automation include:

+
    +
  • Download images from an online API, extract text from them, and store the text in a note

  • +
  • Find images containing a certain word or phrase and sort them into an album in Photos

  • +
  • Create a mosaic of all images in a particular photo album, or of all images taken in the last year

  • +
  • Auto-enhance all images stored in a particular folder

  • +
  • Store images files sent to you in a particular folder immediately after receiving them

  • +
  • Overlay the songs of a Music playlist onto a mosaic of all the songs’ album artworks

  • +
+

…and many more! What will you come up with?

+

The rest of this page describes the various features of the XAImage class and provides several examples for you to reference.

+
+

Loading Images

+

To initialize an XAImage object, you provide some kind of reference to an image via the image_reference parameter (the first parameter of XAImage’s init method). This parameter accepts data in many forms, including: a raw string file path (with any image file extension), a web or filesystem URL, an XAPath or XAURL object, another XAImage object, and any object whose class implements the XAImageLike protocol, such as XAPhotosMediaItem. The code below shows how to use these different kinds of image references.

+
import PyXA
+# Load a single image file
+img = PyXA.XAImage("/Users/exampleUser/Desktop/PyXALogoTransparent.png")
+print(img)
+# <PyXA.XABase.XAImage object at 0x104b385b0>
+
+# Load an image from a web URL
+img = PyXA.XAImage("https://raw.githubusercontent.com/SKaplanOfficial/PyXA/main/docs/_static/assets/PyXALogoTransparent.png")
+img.show_in_preview()
+
+# Load images from a XAURL or XAPath
+path = PyXA.XAPath("/Users/exampleUser/Desktop/PyXALogoTransparent.png")
+url = PyXA.XAURL("https://raw.githubusercontent.com/SKaplanOfficial/PyXA/main/docs/_static/assets/PyXALogoTransparent.png")
+img1 = PyXA.XAImage(path)
+img2 = PyXA.XAImage(url)
+
+# Initialize an image from another image
+img1 = PyXA.XAImage("/Users/exampleUser/Desktop/PyXALogoTransparent.png")
+img2 = PyXA.XAImage(img1)
+
+# Get an image from Photos
+photos = PyXA.Application("Photos")
+img = PyXA.XAImage(photos.media_items().by_title("PyXA Logo"))
+
+
+

Additionally, some apps such as Image Events utilize subclasses of XAImage to afford a more direct connection between their content and the functionality of XAImages. In the case of Image Events, an image opened using PyXA.apps.ImageEvents.XAImageEventsApplication.open() is an instance of PyXA.apps.ImageEvents().XAImageEventsImage`, a subclass of :class:`~PyXA.XABase.XAImage, and has access to both XAImage’s methods as well as methods specific to the Image Events context.

+
import PyXA
+ie = PyXA.Application("Image Events")
+ie_img = ie.open("/Users/steven/Desktop/PyXALogoTransparent.png")
+
+# Use XAImageEventsImage methods
+profile = ie.profiles().by_name("Generic Gray Profile")
+ie_img.embed_profile(profile)
+
+# Use XAList methods
+ie_img.pad(50, 50, PyXA.XAColor.black()).rotate(45)
+ie_img.gaussian_blur().bloom().show_in_preview()
+
+
+

You can also use the open() method to open one or more image files or URLs. When opening multiple images at a time, this method returns an XAImageList object – more on that later.

+
+
+

Accessing Image Information

+
import PyXA
+image = PyXA.XAImage.open("/Users/steven/Desktop/PyXALogoTransparent.png")
+
+# Check if image has alpha channel
+if image.has_alpha_channel:
+    # Check if image contains transparent pixels
+    if image.is_opaque:
+        print("Image is capable of having transparent pixels, but does not have any right now")
+    else:
+        print("Image contains transparent pixels")
+else:
+    print("Image cannot contain transparent pixels in its current format")
+
+# Print other attributes
+print(image.color_space_name)
+print(image.size)
+print(image.data)
+
+
+
+
+

Modifying Image Attributes

+

In addition to accessing information attributes, you can use PyXA to concisely set image attributes such as the vibrance, tint, and temperature of an image. The mutable attributes are:

+ +
import PyXA
+image = PyXA.XAImage.open("/Users/steven/Downloads/Owl.png")
+image.vibrance = 0.1
+image.highlight = 0
+image.shadow = 1
+image.tint = 200
+image.temperature = 12000
+image.gamma = 10
+image.show_in_preview()
+
+
+
+
+

Basics of Image Manipulation

+

In addition to modifiable attributes, PyXA provides several method for basic image manipulation, including: flip_horizontally(), flip_vertically(), rotate(), scale(), crop(), and pad().

+
import PyXA
+
+# Apply individual modifications
+image = PyXA.XAImage("/Users/steven/Desktop/cat2.jpeg")
+image.crop((600, 600))
+image.scale(2, 2)
+image.show_in_preview()
+
+# Apply modifications using method chaining
+image.pad(pad_color=PyXA.XAColor.red()).rotate(45).flip_horizontally()
+image.show_in_preview()
+
+
+
+
+

Applying Filters

+

PyXA provides easy-access to several common image filters that might be useful for automation workflows; for more advanced use cases, a dedicated image manipulation library is recommended. The provided filter methods are:

+ +
import PyXA
+image = PyXA.XAImage("/Users/steven/Desktop/cat2.jpeg")
+image.pixellate().sepia().vignette(5).show_in_preview()
+
+
+
+
+

Adding Distortions

+

In addition to filters, PyXA provided a few methods for adding distortions to images. These methods include bump(), pinch(), and twirl().

+
import PyXA
+image = PyXA.XAImage("/Users/steven/Downloads/Owl.png")
+image.bump(radius=800, curvature=1).pinch((871, 871), intensity=1).twirl().show_in_preview()
+
+
+
+
+

Composite Operations

+

PyXA currently supports four composite operations (operations that merge many images into a single, composite image): horizontal_stitch(), vertical_stitch(), additive_composition(), and subtractive_composition(). The first two are image concatenation operations which “stitch” together a series of images either vertically or horizontally, one on top of or next to another, to form a single combined imaged, while the other two produce an image by overlaying images and applying a specific blend filter.

+

The composite image operations noted above are methods of the XAImageList class.

+
import PyXA
+images = PyXA.XAImage.open("/Users/steven/Downloads/Owl.png", "/Users/steven/Desktop/PyXALogoTransparent.png")
+
+images.additive_composition().show_in_preview()
+images.subtractive_composition().show_in_preview()
+images.horizontal_stitch().show_in_preview()
+images.vertical_stitch().show_in_preview()
+
+
+
+
+

Text Extraction

+

With PyXA, you can extract text from images using just one method call. When working with a single XAImage object , calling the object’s extract_text() method will return a list of all text contained within the image, separated by newline characters. Likewise, when calling extract_text() on an XAImageList object, you will get a list of lists of strings, with each image’s text organized into its own entry.

+
import PyXA
+# Extract text from one image
+image = PyXA.XAImage("/Users/steven/Desktop/handwritingImage.png")
+print(images.extract_text())
+# ["This is a handwritten note"]
+
+# Extract text from multiple images at a time
+images = PyXA.XAImage.open("/Users/steven/Desktop/codeImage.png", "/Users/steven/Desktop/handwritingImage.png", "/Users/steven/Desktop/signImage.jpeg")
+texts = images.extract_text()
+print(texts)
+# [
+#   ["import PyXA", 'PyXA.Application("Music").play()'],
+#   ["This is a handwritten note"],
+#   ["KEEP", "RIGHT"],
+# ]
+
+
+

This functionality allows you to quickly and easily obtain the text within an image, then use that text elsewhere in your automation scripts. For example, the code below rotates or scales images according to the text found within them:

+
import PyXA
+import os
+
+sample_folder = "/Users/steven/Desktop/samples/"
+output_folder = "/Users/steven/Desktop/output/"
+
+# Create output folder if necessary
+if not os.path.exists(output_folder):
+    os.makedirs(output_folder, exist_ok=True)
+
+# Loop through source images
+for index, sample in enumerate(os.listdir(sample_folder)):
+    print(f"Analyzing sample {index + 1}...")
+    image = PyXA.XAImage(sample_folder + sample)
+
+    # Extract image text -- each image source is known to have two lines
+    image_text = image.extract_text()
+    operation = image_text[0]
+    arg = int(image_text[1])
+
+    # Apply appropriate operation
+    if operation == "rotate":
+        image.rotate(arg)
+    elif operation == "scale":
+        image.scale(arg, arg)
+
+    # Save modified image to file in output folder
+    print("\tWriting to disk...")
+    image.save(output_folder + sample)
+
+
+
+
+

Working with Lists of Images

+

As with many other PyXA classes, XAImage has an associated XAImageList class that provides both convenience and performance improvements over standard lists. For example, PyXA.XABase.XAImageList.flip_horizontally() method performs over twice as fast as iterating over the same size list of individual PyXA.XABase.XAImage objects and calling the PyXA.XABase.XAImage.flip_horizontally() method on each list item, as seen in the example code below:

+
import PyXA
+from timeit import timeit
+
+def without_xalist():
+    images = [PyXA.XAImage("/Users/steven/Desktop/dog1.JPG"), PyXA.XAImage("/Users/steven/Desktop/dog1.JPG"), PyXA.XAImage("/Users/steven/Desktop/dog1.JPG")]
+    flipped_images = []
+    for image in images:
+        flipped_images.append(image.flip_vertically())
+    return flipped_images
+
+def with_xalist():
+    images = PyXA.XAImage.open("/Users/steven/Desktop/dog1.JPG", "/Users/steven/Desktop/dog1.JPG", "/Users/steven/Desktop/dog1.JPG")
+    flipped_images = images.flip_vertically()
+    return flipped_images
+
+t1 = timeit(without_xalist, number=100)
+t2 = timeit(with_xalist, number=100)
+print("Non-XAList avg over 100 trials:", t1 / 50.0)
+print("XAList avg over 100 trials:", t2 / 50.0 )
+# Non-XAList avg over 100 trials: 1.53993887584
+# XAList avg over 100 trials: 0.6404187591799999
+
+
+

A relationship exists for all of the XAImage and XAImageList methods. Thus, generally speaking, you’ll want to make use of XAImageList objects any time you work with several or more images.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/index.html b/docs/tutorial/index.html new file mode 100644 index 0000000..2b15072 --- /dev/null +++ b/docs/tutorial/index.html @@ -0,0 +1,236 @@ + + + + + + + Tutorial — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Tutorial

+
+

Installation

+

Before you get started with PyXA, you’ll need to install it. The easiest way to do so is through Pip using the following command:

+
python -m pip install mac-pyxa
+
+
+

Alternatively, you can install PyXA on a per-project basis by cloning the GitHub repository in the project’s main directory.

+
+
+

Basic Usage

+

Let’s walk through some examples to introduce you to the ins and outs of PyXA. Create a new folder in a location of your choice and name it PyXA Examples. Then, in that folder, create a new file called basics.py, then open the file in your favorite code editor. If you have the Visual Studio Code code command installed and enabled, the following command accomplishes all of the above in one fell swoop:

+
mkdir "PyXA Examples" && cd "PyXA Examples" && touch basics.py && code basics.py
+
+
+

Now, let’s design our first PyXA automation workflow. Suppose we want to write a script that gets the URL of the current Safari tab and prints it (to the Terminal/console). To do this, we first import the PyXA library, then we obtain a reference to the Safari application, a reference to Safari’s frontmost window, and finally a reference to the currently displayed tab. From there, we retrieve and print the URL of the tab. The script is thus:

+
import PyXA
+print(PyXA.application("Safari").front_window.current_tab.url)
+
+
+

Save this script to basics.py. To test the workflow, open https://www.google.com in a new Safari tab, then run basics.py in your Terminal. You should see the following:

+
% python basics.py
+https://www.google.com
+
+
+

Try visiting different sites in Safari and re-running the script. As you navigate to different sites, you’ll see that the printed URL changes accordingly.

+

This particular workflow is fairly straightforward, but it is nonetheless useful to compare its syntax to that of AppleScript and JXA. In AppleScript, the same workflow would look like this:

+
tell application "Safari"
+   return URL of the current tab of window 1
+end tell
+
+
+

And the equivalent JXA syntax would be:

+
(function() {
+   return Application('Safari').windows()[0].currentTab.url()
+})();
+
+
+

As you can see, the syntax of PyXA closely follows the syntax of JXA while remaining true to the standard conventions of Python. Most notably, multi-word names for variables and methods use the Pythonic snake_case format instead of camelCase. For example, as seen above, PyXA uses current_tab() while JXA uses currentTab. Another difference is that PyXA prefers object properties while JXA blurs the line between properties and methods. In PyXA, the properties listed in an application’s scripting dictionary are referenced using the dot notation for object properties, and actions on objects are executed via method calls. PyXA also includes properties and methods beyond those described in scripting dictionaries on an application-specific basis.

+

Like AppleScript and JXA, PyXA’s syntax is often flexible, allowing multiple ways to accomplish the same goal. All of the following code samples are valid ways to create the same workflow as above.

+
import PyXA
+print(PyXA.application("Safari").windows()[0].current_tab.url)
+
+
+
import PyXA
+print(PyXA.application("Safari").current_document.url)
+
+
+
import PyXA
+print(PyXA.application("Safari").documents()[0].url)
+
+
+

The approach you use will depend one your goals for any given workflow as well as the kind(s) of inputs the workflow should be able to handle.

+

Let’s make our workflow more useful by having it save the URL to a new note. To do this, we’ll need a reference to the Notes app. We then need to tell the Notes app to create a new note with the URL as the note’s content. We can temporarily store the URL in a variable to make our code more readable. The PyXA script for this is as follows:

+
import PyXA
+current_url = PyXA.application("Safari").front_window.current_tab.url
+PyXA.application("Notes").new_note(current_url)
+
+
+

If you run this workflow and go to the Notes app, you’ll see that a new note has been created containing the current tab’s URL in bold typeface. This is already a more useful automation, but we can improve it by making Notes automatically activate and show the newly created note. To do this, we can simply call the new note object’s show() method:

+
import PyXA
+current_url = PyXA.application("Safari").front_window.current_tab.url
+PyXA.application("Notes").new_note(current_url).show()
+
+
+

When you run this, the Notes app will open to newly created note containing the current Safari tab’s URL. Cool! Let’s make another change. Right now, the URL is used as the title for the note, but it would be nice if the title reflected the title of the webpage. Since we need to retrieve multiple properties from the current tab, we should store a reference to it in a variable to keep our script running efficiently. We’ll retrieve the URL property of the current tab as we did before, and now we’ll also retrieve the name property. We can then specify the title and content of the new note by passing two arguments to the new_note() method. Another improvement we’ll make is turning the URL into an actually clickable link by surrounding it with HTML anchor tags. Our script thus becomes:

+
import PyXA
+current_tab = PyXA.application("Safari").front_window.current_tab
+current_url = "<a href=" + current_tab.url + ">" + current_tab.url + "</a>"
+current_name = current_tab.name
+PyXA.application("Notes").new_note(current_name, current_url).show()
+
+
+

With that, our script is complete! You can run the script from your Terminal at any time, but you might want to save the workflow as an executable for greater convenience. The easiest way to do this is to add a shebang to the top of the script that instructs the Terminal to run the code using the Python interpreter:

+
#!/usr/bin/env python
+
+import PyXA
+current_tab = PyXA.application("Safari").front_window.current_tab
+current_url = "<a href=" + current_tab.url + ">" + current_tab.url + "</a>"
+current_name = current_tab.name
+PyXA.application("Notes").new_note(current_name, current_url).show()
+
+
+

You then need to remove the .py extension from the script and grant the file execution privileges. Both these actions can be accomplished using the following Terminal command:

+
mv basics.py basics && chmod +x basics
+
+
+

When you double click on the script from within Finder, or when you run ./basics in the Terminal, the workflow should execute as it did before. If you want, you can change the icon of the file to give your automation a distinct look. You can then move the file to your desktop, the dock, or anywhere you want.

+
+
+

Additional Tutorial Topics

+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/lists.html b/docs/tutorial/lists.html new file mode 100644 index 0000000..2a6ed90 --- /dev/null +++ b/docs/tutorial/lists.html @@ -0,0 +1,304 @@ + + + + + + + Working With Lists — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Working With Lists

+

PyXA uses the XAList class to enable batch operations and provide fast enumeration over scriptable objects. This wrapper class behaves like a regular list in many situations; for example, when working with an XAList object, you can use indices, slices, and iterators as you would normally. To avoid sending numerous Apple Events and causing excessive delays, XAList objects lazily evaluate their members – that is, they don’t retrieve their member objects until you request an object at a specific index. At that point, they send a single Apple Event, obtain a reference to the desired scriptable object, and wrap it in a PyXA-compatible class.

+

This approach allows you to quickly access large lists of scriptable objects such as all notes, songs, or photos. As evidence: the list-fetching portion of script below takes only 64 milliseconds to complete on my machine despite me having well over 2000 notes, 2000 songs, and 8000 photos.

+
import PyXA
+from datetime import datetime
+
+music_app = PyXA.Application("Music")
+notes_app = PyXA.Application("Notes")
+photos_app = PyXA.Application("Photos")
+
+time_1 = datetime.now()
+tracks = music_app.tracks()
+notes = notes_app.notes()
+photos = photos_app.media_items()
+time_2 = datetime.now()
+
+print(time_2 - time_1)
+# 0:00:00.063908
+
+
+

In addition to speed, XALists provide batch operation capabilities. When working with a list of PyXA objects, all properties of those objects can be accessed via method calls on the list wrapper class. For example, you can retrieve the plaintext of every note, the name of every Music track, or the filename of every photo by just calling the appropriate method on the associated list object. The example below illustrates the latter.

+
import PyXA
+from datetime import datetime
+
+photos_app = PyXA.Application("Photos")
+
+time_1 = datetime.now()
+photos = photos_app.media_items()
+print(photos.filename())
+time_2 = datetime.now()
+
+print(time_2 - time_1)
+# ['IMG_0497.PNG', 'IMG_4341.JPG', 'IMG_2482.JPG', 'IMG_0488.JPG', ...]
+# 0:00:00.691846
+
+
+

As you can see, this operation is also very speedy, even for large photo collections. Using multithreaded enumeration, PyXA sends many Apple Events requesting the filename property for each photo. Since each Apple Event involves a retrieving a single unicode property, without requiring any recursive queries, the entire operation can be done in well under a second. Note that the photo objects still have yet to be fully evaluated at this point.

+
+

Forcing Evaluation

+

To force evaluation of an object, request it by index or by using the first() or last() methods, or by a specialized by_property() method (such as PyXA.apps.PhotosApp.XAPhotosMediaItemList.by_filename()). The code below showcases each of these approaches:

+
import PyXA
+from datetime import datetime
+
+photos_app = PyXA.Application("Photos")
+
+time_1 = datetime.now()
+photos = photos_app.media_items()
+
+photo_1 = photos[0]
+photo_2 = photos[-1]
+photo_3 = photos.at(0)
+photo_4 = photos.at(-1)
+photo_5 = photos.first
+photo_6 = photos.last
+photo_7 = photos.by_filename("IMG_0497.PNG")
+time_2 = datetime.now()
+
+print(time_2 - time_1)
+# 0:00:01.201319
+
+
+

This script takes a bit longer than the previous ones due to the many requests for scriptable object references. Still, the overall process remains far faster than if we didn’t do lazy evaluation at all.

+

For comparison, if we force evaluation on each object in a list by iterating over the list, we find that getting a property value for each object takes a significant amount of time. The script below uses the iterative approach to get the name of each note, and it took almost half a minute on my machine. Attempting this form of batch operation on 8000+ photos would take an even longer time.

+
import PyXA
+from datetime import datetime
+
+notes_app = PyXA.Application("Notes")
+
+time_1 = datetime.now()
+notes = notes_app.notes()
+names = []
+for note in notes:
+    names.append(note.name)
+time_2 = datetime.now()
+
+print(names)
+print(time_2 - time_1)
+# ['Note 1', 'Note 2', ...]
+# 0:00:33.767063
+
+
+
+
+

Filters

+

Filter methods can be used to narrow down the list of objects, thereby making iteration more feasible. The script below uses a filter to narrow the list of all tracks down to just the tracks whose artist is Adele.

+
import PyXA
+from datetime import datetime
+
+music_app = PyXA.Application("Music")
+
+time_1 = datetime.now()
+tracks = music_app.tracks().filter("artist", "==", "Adele")
+time_2 = datetime.now()
+
+print(tracks.name())
+print(time_2 - time_1)
+# ['Hello', 'Chasing Pavements', 'Skyfall', ...]
+# 0:00:00.076569
+
+
+

PyXA provides several convenience methods for retrieving lists matching simple filters. These methods include equalling(), not_equalling(), containing(), beginning_with(), ending_width(), greater_than(), less_than(), and between(). Each of these methods returns an XAList object containing the items matching the corresponding filter. The code below shows how many of the methods can be used.

+
import PyXA
+notes = PyXA.Application("Notes")
+print(app.notes().containing("body", "Hello").name())
+print(app.notes().containing("title", "Hello").name())
+# ['Note 1', 'Example Note', 'Another Note']
+# ['Hello, world!']
+
+print(notes.notes().greater_than("creationDate", date(2022, 8, 30)).name())
+print(notes.notes().not_equalling("shared", True).name())
+# ["Aug. 31st Note"]
+# ["Note 1", "Note 2", "Note 3", ...]
+
+music = PyXA.Application("Music")
+print(music.tracks().between("playedCount", 10, 20))
+print(music.tracks().not_containing("name", "a"))
+# <<class 'PyXA.apps.Music.XAMusicTrackList'>['Irresistible', 'Absent Minded (Piano Version)', "Say You Won't Let Go", ...]>
+# <<class 'PyXA.apps.Music.XAMusicTrackList'>['Hello', 'Rolling in the Deep', ...]>
+
+photos = PyXA.Application("Photos")
+print(photos.media_items().equalling("favorite", True))
+print(photos.media_items().beginning_with("name", "P"))
+# <<class 'PyXA.apps.PhotosApp.XAPhotosMediaItemList'>['CB24FE9F-E9DC-4A5C-A0B0-CC779B1CEDCE/L0/001', ...]>
+# <<class 'PyXA.apps.PhotosApp.XAPhotosMediaItemList'>['0BA38221-C569-4ACF-A3BD-967CB87EB7EB/L0/001']>
+
+
+

You can also use by_property() to retrieve a single object from the list based on its property values. containing() will match the first object whose property value contains a given value, while by_property() will match the first object whose property value exactly matches the given value. The example below shows these methods at work.

+
import PyXA
+from datetime import datetime
+
+music_app = PyXA.Application("Music")
+
+time_1 = datetime.now()
+tracks = music_app.tracks()
+track_1 = tracks.containing("name", "yfal")
+track_2 = tracks.by_property("genre", "pop")
+name_1 = track_1.name
+name_2 = track_2.name
+time_2 = datetime.now()
+
+print(name_1)
+print(name_2)
+print(time_2 - time_1)
+# Skyfall
+# Take On Me
+# 0:00:00.144339
+
+
+
+
+

Bulk Actions

+

In addition to improving the efficiency of automation workflows aiming to get values from numerous scriptable objects, ~PyXA.XABase.XAList objects are a quick and convenient way to execute actions on many objects at a time. The available actions vary by object type. The script below uses this strategy to implement a rudimentary dark mode for Safari by setting the background of all tabs to black and their body text to white.

+
import PyXA
+safari_app = PyXA.Application("Safari")
+tabs = safari_app.front_window.tabs()
+tabs.do_javascript("document.body.style.backgroundColor = 'black'; document.body.style.textColor = 'white';")
+
+
+
+
+

Adding New Elements

+

The push() method allows you to add new elements to a scriptable object list, thereby creating a scriptable object. This can be used to create new notes, new tabs, new playlists, and so on.

+
import PyXA
+safari_app = PyXA.Application("Safari")
+new_doc = safari_app.make("tab", {"URL": "http://www.google.com"})
+safari_app.front_window.tabs().push(new_doc)
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/menubar.html b/docs/tutorial/menubar.html new file mode 100644 index 0000000..cf86554 --- /dev/null +++ b/docs/tutorial/menubar.html @@ -0,0 +1,348 @@ + + + + + + + Add Items to the Menu Bar — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Add Items to the Menu Bar

+
+

The Basics

+

PyXA provides a straightforward way to add interactive items to the top menu bar of your Mac. Using the XAMenuBar class, you can add new menus, attach items and actions to them, and customize them in just a few lines of code. For example, the four line code below creates a new menu titled “Hello” and places it on the right side of the menu bar, to the left of any existing items.

+
import PyXA
+menu_bar = PyXA.XAMenuBar()
+m1 = menu_bar.new_menu("Hello!")
+menu_bar.display()
+
+
+

This code instantiates a new XAMenuBarMenu object with “Hello” as its title text, then displays the menu in the system status bar. We haven’t added any interactivity yet, but PyXA already handles the task of adding a “Quit” option to the menu. Helpful! When you run this code, you should see something along these lines (though your icons may be in a different order):

+../_images/HelloMenu.png +

Note that, unlike many other PyXA features, your menu bar script will stay running until you specific tell it to quit. This allows you to create create customizations to your menu bar that persist throughout your work session. If you set the script to run on startup, you can create a persistent modification to the menu bar in this way.

+

The script above creates menu button that currently doesn’t do anything. To add interactivity, use the new_item() method to associate a menu item with some method. Continuing our example, let’s add a menu item that, when clicked, prints “Hi” to the Terminal. This change can be made by adding a single line, as seen below:

+
import PyXA
+menu_bar = PyXA.XAMenuBar()
+menu = menu_bar.new_menu("Hello!")
+item = menu.new_item(content="Print Hi", action=lambda item, *args: print("Hi"))
+menu_bar.display()
+
+
+

The new_item() method associates an action method to a menu item with a given ID. When that item is clicked by the user, the action method will be executed. The above code, when run, produces the following menu:

+../_images/PrintHi.png +

The code above uses a lambda function to specify our method; this is a convenient way to write the code concisely, but you can also pass in a normal function name to achieve the same effect. The code above can also be expressed as:

+
import PyXA
+
+def print_hi(item, *args):
+    print("Hi")
+
+menu_bar = PyXA.XAMenuBar()
+menu = menu_bar.new_menu("Hello!")
+item = menu.new_item(content="Print Hi", action=print_hi)
+menu_bar.display()
+
+
+../_images/PrintHiImage.png +

Menus, menu items, and subitems all accept an optional action argument, allowing you to set a method to be executed when a menu is opened or a menu item is clicked.

+
import PyXA
+
+# State-based images
+on_icon = PyXA.XAImage.symbol("sun.max")
+off_icon = PyXA.XAImage.symbol("moon")
+state = True
+
+def toggle_state(menu, button):
+    global state
+    if button == 1:
+        # Handle right click -- toggle state
+        state = not state
+        menu.icon = on_icon if state else off_icon
+
+# Create and display the menu
+menu_bar = PyXA.XAMenuBar()
+menu = menu_bar.new_menu(icon=on_icon, action=toggle_state)
+menu_bar.display()
+
+
+

To add a submenu to a menu item, use new_subitem(). Likewise, to add a non-interactive separator item, use add_separator(). Using these building blocks, you can easily add additional menus and menu items, further extending the functionality of your menu bar. A few examples are provided below.

+
+

Example 1 - Application Launcher

+
import PyXA
+
+# Initialize application objects
+safari = PyXA.Application("Safari")
+messages = PyXA.Application("Messages")
+notes = PyXA.Application("Notes")
+shortcuts = PyXA.Application("Shortcuts")
+discord = PyXA.Application("Discord")
+github = PyXA.Application("GitHub Desktop")
+vscode = PyXA.Application("Visual Studio Code")
+
+# Construct the menu
+menu_bar = PyXA.XAMenuBar()
+app_menu = menu_bar.new_menu(icon=PyXA.XAImage.symbol("square.grid.2x2"))  # Give the menu an app grid-esque icon
+app_menu.new_item(content="Safari", action=lambda *args: safari.activate(), icon=safari.icon) # Use the application icons as menu item images
+app_menu.new_item("Messages", action=lambda *args: messages.activate(), icon=messages.icon)
+app_menu.new_item("Notes", action=lambda *args: notes.activate(), icon=notes.icon)
+app_menu.new_item("Shortcuts", action=lambda *args: shortcuts.activate(), icon=shortcuts.icon)
+app_menu.new_item("Discord", action=lambda *args: discord.activate(), icon=discord.icon)
+app_menu.new_item("GitHub Desktop", action=lambda *args: github.activate(), icon=github.icon)
+app_menu.new_item("Visual Studio Code", action=lambda *args: vscode.activate(), icon=vscode.icon)
+menu_bar.display()
+
+
+
+
+

Example 2 - Emoji Bookmarks

+
import PyXA
+menu_bar = PyXA.XAMenuBar()
+m1 = menu_bar.new_menu("🌦")
+m1.new_item("Weather.gov", action=lambda *args: PyXA.XAURL("https://www.weather.gov").open())
+m1.new_item("Weather.com", action=lambda *args: PyXA.XAURL("https://weather.com/weather/today").open())
+m1.new_item("Accuweather.com", action=lambda *args: PyXA.XAURL("https://www.accuweather.com").open())
+
+m2 = menu_bar.new_menu("📖")
+m2.new_item("Develop in Swift", action=lambda *args: PyXA.XAURL("https://books.apple.com/us/book/develop-in-swift-fundamentals/id1511184145").open())
+m2.new_item("NYTimes", action=lambda *args: PyXA.XAURL("https://www.nytimes.com").open())
+m2.new_item("New York Public Library", action=lambda *args: PyXA.XAURL("https://www.nypl.org").open())
+
+m3 = menu_bar.new_menu("🦊")
+m3.new_item("Random Fox Image", action=lambda *args: PyXA.XAURL("https://randomfox.ca").open())
+m3.new_item("Random Duck Image", action=lambda *args: PyXA.XAURL("https://generatorfun.com/random-duck-image").open())
+m3.new_item("Random Cat Image", action=lambda *args: PyXA.XAURL("https://genrandom.com/cats/").open())
+menu_bar.display()
+
+
+
+
+

Example 3 - Application Controller

+
import PyXA
+
+menu_bar = PyXA.XAMenuBar()
+menu = menu_bar.new_menu("⚙️")
+menu.new_item("Minimize all windows", action=lambda *args: PyXA.running_applications().windows().collapse(), icon=PyXA.XAImage.symbol("dock.arrow.down.rectangle"))
+menu.new_item("Hide all applications", action=lambda *args: PyXA.running_applications().hide(), icon=PyXA.XAImage.symbol("eye.slash"))
+menu.new_item("Quite all applications", action=lambda *args: PyXA.running_applications().terminate(), icon=PyXA.XAImage.symbol("xmark.circle"))
+menu_bar.display()
+
+
+
+
+
+

Customization

+

You can customize your menu bar items by adding images to them, as well as by adjusting the width and height of the images. Additional customization options might be added in the future.

+

To display an image on the menu bar, create an XAImage object and set it as the image argument when calling new_menu(). The example below shows this in action – and it even draws the image from an online source (though you could just as easily use a local source instead). When calling new_menu(), you can also specify the image_dimensions argument to customize the size of the image.

+
import PyXA
+img = PyXA.XAImage("https://www.nasa.gov/sites/default/files/thumbnails/image/main_image_star-forming_region_carina_nircam_final-5mb.jpg")
+menu_bar = PyXA.XAMenuBar()
+menu_bar.new_menu(icon=img, icon_dimensions=(100, 50))
+menu_bar.display()
+
+
+../_images/JWSTMenuBar.png +

You can update the image during runtime by setting the image and image_dimensions attributes. The code below displays a random fox image in the menu bar and allows users to click a “Random Fox” menu item to retrieve a new image.

+
import PyXA
+import requests
+
+def random_fox_link() -> str:
+    response = requests.get("https://randomfox.ca/floof/")
+    json_data = response.json()
+    return json_data["image"]
+
+def update_image(item, button, menu, *args):
+    img = PyXA.XAImage(random_fox_link())
+    menu.icon = img
+
+img = PyXA.XAImage(random_fox_link())
+menu_bar = PyXA.XAMenuBar()
+menu = menu_bar.new_menu(icon=img, icon_dimensions=(80, 44))
+menu.new_item("Random Fox", action=update_image, args=[menu])
+menu_bar.display()
+
+
+

You can also add images to menu items in a similar manner. When calling PyXA.XABase.XAMenuBarMenu.new_item(), provide an image argument alongside an optional image_dimensions argument. The example below creates three menu items, each with an image attached. While the width and height for a menu in the menu bar is limited to the available space, there is no such restriction for items within menus – you can set the image to be as large or as small as you want.

+
import PyXA
+
+icon1 = PyXA.XAImage("/Users/exampleUser/Documents/icon1.jpg")
+icon2 = PyXA.XAImage("/Users/exampleUser/Documents/icon2.jpg")
+icon3 = PyXA.XAImage("/Users/exampleUser/Documents/icon3.jpg")
+
+menu_bar = PyXA.XAMenuBar()
+menu = menu_bar.new_menu("Menu 1")
+menu.new_item("Item 1", icon=icon1)
+menu.new_item("Item 2", icon=icon2, icon_dimensions=(300, 300))
+menu.new_item("Item 3", icon=icon3, icon_dimensions=(500, 250))
+menu_bar.display()
+
+
+../_images/MenuItemImages.png +

Another way to customize your menus is by modifying the text that they display. By default, menus and menu items will display the name that they are given upon creation, but you can modify the displayed text by setting the title attribute. The example below uses this feature to create a near-live CPU monitor in the menu bar:

+
import PyXA
+import psutil
+import threading
+
+update_interval = 1
+
+def set_update_interval(slider, *args):
+    global update_interval
+    update_interval = (slider.value * 10 + 1) / 100
+
+menu_bar = PyXA.XAMenuBar()
+graph_menu = menu_bar.new_menu(icon_dimensions=(5, 20))
+text_menu = menu_bar.new_menu("CPU: 0%")
+
+slider_label = graph_menu.new_item("Update Interval")
+slider_label.enabled = False
+
+interval_slider = graph_menu.new_slider_item(action=set_update_interval)
+interval_slider.value = 9.9
+
+def update_display():
+    while True:
+        # Get CPU utilization, update title text
+        cpu_usage = psutil.cpu_percent(update_interval)
+        message = "CPU: " + str(cpu_usage) + "%"
+        text_menu.content = message
+
+        # Construct graph image
+        used_graph_height = 20 * cpu_usage / 100.0
+        used_color = PyXA.XAColor.green() if cpu_usage < 60 else PyXA.XAColor.red()
+        used_swatch = used_color.make_swatch(5, used_graph_height + 1)
+        divider_swatch = PyXA.XAColor.black().make_swatch(5, 2)
+        free_swatch = PyXA.XAColor.gray().make_swatch(5, 20 - used_graph_height)
+
+        # Display utilization graph
+        graph_img = PyXA.XAImage.vertical_stitch([used_swatch, divider_swatch, free_swatch])
+        graph_menu.icon = graph_img
+
+cpu_monitor = threading.Thread(target=update_display)
+cpu_monitor.start()
+menu_bar.display()
+
+
+../_images/CPUMonitor.png +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/spotlight.html b/docs/tutorial/spotlight.html new file mode 100644 index 0000000..21a113d --- /dev/null +++ b/docs/tutorial/spotlight.html @@ -0,0 +1,238 @@ + + + + + + + Searching Spotlight — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Searching Spotlight

+

The PyXA.XABase.XASpotlight class allows you to search Spotlight and obtain XAPath references to files. With this, you can easily locate and open files with particular names, containing particular content, or modified on a particular date. The examples below show how to carry out such tasks.

+
+

Simple Searches

+

To perform a simple term-based file search, instantiate a XASpotlight object and provide a search term as an argument, as seen in the code below. This will instruct PyXA to prepare a new Spotlight search, but it won’t begin the search until you actually attempt to access the results. When you provide a string, integer, or float as a search term, PyXA searches for files where the term appears in their display name, file system name, or text content. The search can take some time depending on how many items match the search, but usually completes within a second. The results of a search are given as a list of XAPath objects.

+
>>> import PyXA
+>>> search = PyXA.XASpotlight("Example")
+>>> print(search.results)
+[<<class 'PyXA.XABase.XAPath'>file:///Users/exampleUser/Documents/ExampleFile1.txt>, <<class 'PyXA.XABase.XAPath'>file:///Users/exampleUser/Documents/ExampleFile2.pdf>, ...]
+
+
+

The more specific your query is, the less time the search will take. The easiest way to increase the specificity is to provide a longer search string, as in the following example:

+
+

import PyXA +search = PyXA.XASpotlight(“This is a test”) +print(len(search.results)) +10

+
+

Alternatively, you can supply multiple arguments to check for multiple terms. Doing this instructs PyXA to search for files where all of the supplied terms are found in the name or content of the file. For example, a text file named “test.txt” containing the text “This is awesome” would appear in the first search below but not the second. In the first search, we are looking for files where “this” appears in the filename or content, “is” appears in the filename or content, “a” appears in the filename or content, and “test” appears in the filename or content. Our example file has “test” in its name, and “this”, “is”, and “a” all appear in its content, thus the file would appear in the search results. For the second search, we are looking for files where “This is” appears in the filename or content and “a test” appears in the filename or content. Our example file does not match that condition, thus it would not appear in the search results.

+
>>> import PyXA
+>>> search = PyXA.XASpotlight("This", "is", "a", "test")
+>>> print(len(search.results))
+40022
+
+
+
>>> import PyXA
+>>> search = PyXA.XASpotlight("This is", "a test")
+>>> print(len(search.results))
+49
+
+
+

Note that the first search above returned over 800 times more results than the second and thus takes noticeably longer to finish. Just as before, providing longer search strings increases the specificity of the query, helping Spotlight to more quickly narrow down the search results. When providing multiple arguments, you can also increase specificity by simply providing more arguments, as highlighted by the two code snippets below:

+
>>> search = PyXA.XASpotlight("This", "is", "a", "test", "avocado")
+>>> print(len(search.results))
+15
+
+
+
>>> search = PyXA.XASpotlight("This", "is", "a", "test", "avocado", "quack")
+>>> print(len(search.results))
+2
+
+
+

If you find that searches are taking too long, you can increase the specificity of your search query in any of the following ways: +- Use terms less likely to appear in many files +- Use longer strings, combining multiple words in one argument +- Use multiple search terms, providing multiple words as separate arguments +- Combining all of the above methods

+
+
+

Search by Date

+

PyXA also provides a mechanism to search Spotlight by date. To perform a simple date-based search, instantiate a XASpotlight object and pass a datetime object as an argument. This instructs PyXA to search for files created, added, or modified within the surrounding 24-hour period (plus or minus 12 hours from the supplied datetime).

+
>>> import PyXA
+>>> from datetime import datetime
+>>> search = PyXA.XASpotlight(datetime.now())
+>>> print(search.results)
+[<<class 'PyXA.XABase.XAPath'>file:///Users/exampleUser/Documents/>, <<class 'PyXA.XABase.XAPath'>file:///Users/exampleUser/Documents/GitHub/>, ...]
+
+
+

To search for files created, added, or modified within a specific time range, you can supply two datetime objects as arguments, as seen in the example below:

+
>>> import PyXA
+>>> from datetime import date, datetime, time
+>>> date1 = datetime.combine(date(2022, 5, 17), time(0, 0, 0))
+>>> date2 = datetime.combine(date(2022, 5, 18), time(0, 0, 0))
+>>> search = PyXA.XASpotlight(date1, date2)
+>>> print(search.results)
+[<<class 'PyXA.XABase.XAPath'>file:///Users/exampleUser/Downloads/>, <<class 'PyXA.XABase.XAPath'>file:///Users/exampleUser/Downloads/Example.txt>, ...]
+
+
+

You can also combined these two date-based search methods with term-based ones by adding additional arguments. The date(s) must always come before the term(s). All previously noted strategies for increasing query specificity still apply. The two code snippets below showcase this in action.

+
>>> import PyXA
+>>> search = PyXA.XASpotlight(datetime.now(), "This", "is", "a", "test")
+>>> print(len(search.results))
+42
+
+
+
>>> import PyXA
+>>> search = PyXA.XASpotlight(datetime.now() - timedelta(minutes=5), datetime.now(), "This is a test")
+>>> print(len(search.results))
+2
+
+
+
+
+

Search by Predicate

+

PyXA allows you to supply your own predicate to filter search results by. You can supply the predicate as either a raw string or as an XAPredicate object. For the former, use Apple’s documentation on File Metadata Query Expression Syntax as a reference. The following examples show how to use both strategies.

+
>>> import PyXA
+>>> search = PyXA.XASpotlight()
+>>> search.predicate = "kMDItemDisplayName == 'Example.txt'"
+>>> search.run()
+>>> print(search.results)
+[<<class 'PyXA.XABase.XAPath'>file:///Users/exampleUser/Downloads/Example.txt>]
+
+
+
>>> import PyXA
+>>> search = PyXA.XASpotlight()
+>>> predicate = PyXA.XAPredicate()
+>>> predicate.add_eq_condition("kMDItemDisplayName", "Example.txt")
+>>> search.predicate = predicate
+>>> search.run()
+>>> print(len(search.results))
+[<<class 'PyXA.XABase.XAPath'>file:///Users/exampleUser/Downloads/Example.txt>]
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/tips_tricks.html b/docs/tutorial/tips_tricks.html new file mode 100644 index 0000000..82957c7 --- /dev/null +++ b/docs/tutorial/tips_tricks.html @@ -0,0 +1,134 @@ + + + + + + + Tips and Tricks — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Tips and Tricks

+
    +
  1. Know when and when not to chain commands. You might be tempted to use a batch operation such as PyXA.Application(“Notes”).notes().plaintext() to obtain the text of each note, but then you will _only_ have the unicode text, not references to the note objects. If you’re going to need the note objects, you should store a reference to the list of notes in a separate variable, then run batch operations via that reference. On the other hand, you should make use of PyXA’s command chaining where reasonable to improve the overall clarity of your code and maintain its syntactic similarity to JXA.

  2. +
  3. Use XAList and its child classes whenever dealing with lists of PyXA objects. Bulk methods on XAList objects are often significantly faster (sometimes over 56x faster) than using non-bulk methods and regular iteration over a list.

  4. +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/ui_scripting.html b/docs/tutorial/ui_scripting.html new file mode 100644 index 0000000..656ee8d --- /dev/null +++ b/docs/tutorial/ui_scripting.html @@ -0,0 +1,157 @@ + + + + + + + UI Scripting — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

UI Scripting

+

PyXA supports using System Events to script the UI of otherwise non-scriptable applications. In fact, PyXA uses this functionality to provide scripting features for several applications, including Maps and Stocks.

+

The process for scripting an application’s UI starts with getting its window object, from which you can call various methods, such as groups() and toolbars(), to obtain lists of UI elements. These methods provide access to all UI element types listed in the System Events scripting dictionary. Lists of elements obtained in this fashion are instances of XASystemEventsUIElementList, a subclass of XAList. You can use bulk methods on a list of UI elements to retrieve information about the list’s contents. For example, you can call object_description() to get the accessibility or role description of all elements in the list. List filtration methods such as by_object_description() allow you to efficiently access elements with particular property values.

+

Retrieving an element from an XASystemEventsUIElementList object will return a instance of XASystemEventsUIElement. You can then obtain the properties of the UI element via the object’s attributes. Upon doing so, the reference to the AppleScript scripting object will be evaluated, causing one or more Apple Events to be sent. This behavior makes it possible to quickly traverse the UI hierarchy without sending unnecessary Apple Events and causing slowdowns.

+

Once you have a reference to a specific UI element, you can call methods such as click() to carry out actions on that element, or you can obtain a list of actions by calling actions(). Call perform() to perform a particular action.

+

An example of this process is provided below.

+
from time import sleep
+import PyXA
+
+podcasts = PyXA.Application("Podcasts")
+
+# Get the list of podcast playback controls
+playback_buttons = podcasts.front_window.groups()[0].groups()[0].groups()[0].groups()[0].groups()[0].groups()[0].groups()[1].groups()[0].groups()[0].groups()[2].groups()[0].groups()[0].buttons()
+
+# Get buttons by property value
+rewind_button = playback_buttons.by_object_description("Rewind")
+play_button = playback_buttons.by_object_description("Play")
+skip_button = playback_buttons.by_object_description("Skip")
+
+# Click the buttons
+play_button.click()
+sleep(1)
+skip_button.click()
+sleep(1)
+rewind_button.click()
+
+
+

In this example, we obtain a list of buttons by traversing the UI hierarchy of the Podcasts app to reach the specific group containing the rewind, play, and skip forward buttons at the top of the window. You can use macOS’s built-in Accessibility Inspector application to help identify the element hierarchy. Once we have the list of buttons, we obtain references to each individual button according to its object description. We then call the click() method of each button to observe its effect.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/tutorial/user_input.html b/docs/tutorial/user_input.html new file mode 100644 index 0000000..f808943 --- /dev/null +++ b/docs/tutorial/user_input.html @@ -0,0 +1,337 @@ + + + + + + + Getting User Input — PyXA 0.1.2 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Getting User Input

+

PyXA provides several ways to get user input via dialogs, menus, and other familiar means. You can still use Python’s input() method to get keyboard input, and you can use Python’s built-in support for commandline arguments to get input in that way as well. Additional input methods (such as detecting keystrokes and/or mouseclicks in other applications) will be added in a future version of PyXA, but other packages exist that already offer such functionality.

+
+

Alerts

+
import PyXA
+response = PyXA.XAAlert(
+    title = "Alert!",
+    message = "",
+    style = PyXA.XAAlertStyle.INFORMATIONAL,
+    buttons = ["Ok", "Cancel"]
+).display()
+print(response)
+# 1000
+
+
+
+
+

Dialogs

+
import PyXA
+response = PyXA.XADialog(
+    text = "This is a dialog",
+    title = "Notice",
+    buttons = ["Ok", "Cool", "Thanks"],
+    icon = "caution",
+).display()
+print(response)
+# Cool
+
+
+
import PyXA
+response = PyXA.XADialog(
+    text = "What is your name?",
+    title = "What is your name?",
+    buttons = ["Continue"],
+    default_button = "Continue",
+    icon = "note",
+    default_answer = ""
+).display()
+print("Your name is", response[1])
+# Your name is Steven
+
+
+
import PyXA
+response = PyXA.XADialog(
+    text = "Enter the secret",
+    title = "Super Secret",
+    buttons = ["Continue"],
+    default_button = "Continue",
+    icon = "note",
+    default_answer = "",
+    hidden_answer = True
+).display()
+print("The secret message was", response[1])
+# The secret message was 42
+
+
+
+ +
+

File and Folder Pickers

+
import PyXA
+response = PyXA.XAFilePicker(
+    prompt = "Choose File",
+    types = ["png"],
+    default_location = "/",
+    show_invisibles = False,
+    multiple_selections_allowed = False,
+    show_package_contents = False
+).display()
+print(response)
+# <<class 'PyXA.XABase.XAPath'>file:///Users/ExampleUser/Desktop/Example.png>
+
+
+
import PyXA
+response = PyXA.XAFolderPicker(
+    prompt = "Choose Folder",
+    default_location = "/",
+    show_invisibles = False,
+    multiple_selections_allowed = True,
+    show_package_contents = False
+).display()
+print(response)
+# [<<class 'PyXA.XABase.XAPath'>file:///Applications/>, <<class 'PyXA.XABase.XAPath'>file:///Library/>]
+
+
+
+
+

File Name Dialogs

+
import PyXA
+response = PyXA.XAFileNameDialog(
+    prompt = "Choose Folder",
+    default_name = "New File",
+    default_location = "/Users/Shared",
+).display()
+print(response)
+# <<class 'PyXA.XABase.XAPath'>file:///Users/Shared/New%20File>
+
+
+
+
+

Color Pickers

+
import PyXA
+response = PyXA.XAColorPicker(
+    style = PyXA.XAColorPickerStyle.CRAYONS
+).display()
+print(response)
+# <<class 'PyXA.XABase.XAColor'>r=1.0, g=0.8323456645, b=0.4732058644, a=1.0>
+
+
+
+
+

Command Detectors

+
import PyXA
+
+def open_google():
+    PyXA.XAURL("https://google.com").open()
+
+detector = PyXA.XACommandDetector()
+detector.on_detect("go to Google", open_google)
+detector.on_detect("go to Bing", lambda : PyXA.XAURL("https://bing.com").open())
+detector.listen()
+
+
+

If you want to detect an exact command and display the standard macOS Voice Control interface, use a PyXA.XABase.XACommandDetector object. If you want to detect whether a user’s spoken input passes a certain rule, or if you want the command detection to occur without displaying an graphical interface, use PyXA.XABase.XASpeechRecognizer.

+
+
+

Speech Recognizers

+
import PyXA
+listener = PyXA.XASpeechRecognizer()
+result = listener.listen()
+if result == "Hi":
+    PyXA.speak("Hey!")
+
+
+
import PyXA
+import re
+
+listener = PyXA.XASpeechRecognizer({
+    lambda s: s.lower() == "open google": lambda _: PyXA.XAURL("https://google.com").open(),
+})
+regex = re.compile(r'^(Open|Go to|Site|Jump to|Show me) (b|B)ing')
+listener.on_detect(lambda s: regex.match(s) != None, lambda _: PyXA.XAURL("https://bing.com").open())
+result = listener.listen()
+
+
+
import PyXA
+
+def detect_website_query(query: str) -> bool:
+    """Detects queries of the form "Go to [website name]".
+
+    :param query: The query to assess
+    :type query: str
+    :return: True if the query matches the form "Go to [website name]" for any of the supported websites
+    :rtype: bool
+    """
+    site_names = ["google", "bing", "duckduckgo", "yahoo"]
+    return query.startswith("Go to ") and any([query.lower().endswith(x) for x in site_names])
+
+def go_to_website(query: str) -> PyXA.XAURL:
+    """Opens a website specified in a query of the form "Go to [website name]".
+
+    :param query: The query to respond to
+    :type query: str
+    :return: The url as a PyXA XAURL object
+    :rtype: PyXA.XAURL
+    """
+    site = query[6:]
+    url = PyXA.XAURL("https://" + site + ".com")
+    url.open()
+    return url
+
+listener = PyXA.XASpeechRecognizer({
+    detect_website_query: go_to_website,
+})
+
+result = listener.listen()
+print(result)
+# <<class 'PyXA.XABase.XAURL'>https://Bing.com>
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/Makefile b/sphinx/Makefile similarity index 92% rename from docs/Makefile rename to sphinx/Makefile index d0c3cbf..98ccfd3 100644 --- a/docs/Makefile +++ b/sphinx/Makefile @@ -14,6 +14,10 @@ help: .PHONY: help Makefile +github: + @make html + @cp -a build/html/. ../docs + # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile diff --git a/docs/make.bat b/sphinx/make.bat similarity index 100% rename from docs/make.bat rename to sphinx/make.bat diff --git a/sphinx/source/_static/assets/CPUMonitor.png b/sphinx/source/_static/assets/CPUMonitor.png new file mode 100644 index 0000000..3ab75c4 Binary files /dev/null and b/sphinx/source/_static/assets/CPUMonitor.png differ diff --git a/sphinx/source/_static/assets/Example3_Notes.png b/sphinx/source/_static/assets/Example3_Notes.png new file mode 100644 index 0000000..e981102 Binary files /dev/null and b/sphinx/source/_static/assets/Example3_Notes.png differ diff --git a/sphinx/source/_static/assets/HelloMenu.png b/sphinx/source/_static/assets/HelloMenu.png new file mode 100644 index 0000000..f79fec5 Binary files /dev/null and b/sphinx/source/_static/assets/HelloMenu.png differ diff --git a/sphinx/source/_static/assets/JWSTMenuBar.png b/sphinx/source/_static/assets/JWSTMenuBar.png new file mode 100644 index 0000000..2f596d8 Binary files /dev/null and b/sphinx/source/_static/assets/JWSTMenuBar.png differ diff --git a/sphinx/source/_static/assets/MenuItemImages.png b/sphinx/source/_static/assets/MenuItemImages.png new file mode 100644 index 0000000..45171d8 Binary files /dev/null and b/sphinx/source/_static/assets/MenuItemImages.png differ diff --git a/sphinx/source/_static/assets/PrintHi.png b/sphinx/source/_static/assets/PrintHi.png new file mode 100644 index 0000000..0c84b2a Binary files /dev/null and b/sphinx/source/_static/assets/PrintHi.png differ diff --git a/sphinx/source/_static/assets/PrintHiImage.png b/sphinx/source/_static/assets/PrintHiImage.png new file mode 100644 index 0000000..09bf391 Binary files /dev/null and b/sphinx/source/_static/assets/PrintHiImage.png differ diff --git a/sphinx/source/_static/assets/PyXALogoLight.png b/sphinx/source/_static/assets/PyXALogoLight.png new file mode 100644 index 0000000..086fad9 Binary files /dev/null and b/sphinx/source/_static/assets/PyXALogoLight.png differ diff --git a/sphinx/source/_static/assets/PyXALogoTransparent.png b/sphinx/source/_static/assets/PyXALogoTransparent.png new file mode 100644 index 0000000..6d8a9aa Binary files /dev/null and b/sphinx/source/_static/assets/PyXALogoTransparent.png differ diff --git a/sphinx/source/about/index.rst b/sphinx/source/about/index.rst new file mode 100644 index 0000000..faa5eeb --- /dev/null +++ b/sphinx/source/about/index.rst @@ -0,0 +1,21 @@ +Project Overview +================ + +What is PyXA? +############# + +Python for Automation, or PyXA for short, is a wrapper around several macOS frameworks that enables AppleScript- and JXA-like control over macOS applications from within Python. PyXA's objects and methods are based on applications' scripting dictionaries and coupled with additional automation features supported by Apple's macOS APIs. + +PyXA was created with the goals of: + + 1. Simplifying the way automation tasks can be accomplished via Python + 2. Introducing new features to macOS application scripting by simplifying complex procedures into simple, declarative methods + 3. Disambiguating the capabilities of application scripting on macOS by providing easy-to-follow documentation throughout the entire project + +PyXA fills a gap where currently available frameworks ultimately fall short: it aims to be easy to learn for users accustomed to Python (or users who _must_ use Python). To that end, the package's documentation contains numerous examples of how to use just about every method, and additional examples are provided covering specific use cases. PyXA's code also serves as a source of examples for how to use `PyObjC `_ to interact with various macOS frameworks. + +Is PyXA for Me? +############### + +PyXA is not intended to replace AppleScript or even to cover 100% of AppleScript's capabilities. Instead, PyXA is meant to provide general convenience in accomplishing AppleScript and other automation tasks via Python, for the most commonly used applications. If you need a complete Apple Event bridge, or if you find that PyXA cannot handle your particular use case, consider using `appscript `_ or one of its derivatives. If you just need something that works in most circumstances, that has abundant examples for you to reference, and supports some additional automation features (such as opening Maps to a specific address), then PyXA might be a good fit for you. + diff --git a/sphinx/source/bugs.rst b/sphinx/source/bugs.rst new file mode 100644 index 0000000..762caba --- /dev/null +++ b/sphinx/source/bugs.rst @@ -0,0 +1,16 @@ +Bugs +==== + +Bugs in PyXA +************ + +If you find a bug within any of the code in `PyXA's GitHub Repository`_, please create a new issue on GitHub that describes the bug, the circumstances that cause the bug to occur, a description of your configuration, and any potential solutions that you might have thought of. After creating an issue, if you have the time and expertise to implement the fix, you can create a new pull request containing your changes. Make sure to follow the `Guidelines for Contributing to PyXA's Code`_. + +Documentation Bugs +****************** + +If you find a bug in this documentation, please create a new issue on `PyXA's GitHub Repository`_. If you have an idea for a potential fix, please include a description of the fix within the issue. After creating an issue, if you have the time and expertise to implement the fix, you can create a new pull request containing your changes. Make sure to follow the `Guidelines for Contributing to PyXA's Documentation`_. + +.. _PyXA's GitHub Repository: https://github.com/SKaplanOfficial/PyXA/issues +.. _Guidelines for Contributing to PyXA's Code: https://github.com/SKaplanOfficial/PyXA/blob/main/CONTRIBUTING.md#code +.. _Guidelines for Contributing to PyXA's Documentation: https://github.com/SKaplanOfficial/PyXA/blob/main/CONTRIBUTING.md#documentation \ No newline at end of file diff --git a/docs/source/conf.py b/sphinx/source/conf.py similarity index 100% rename from docs/source/conf.py rename to sphinx/source/conf.py diff --git a/sphinx/source/index.rst b/sphinx/source/index.rst new file mode 100644 index 0000000..957786f --- /dev/null +++ b/sphinx/source/index.rst @@ -0,0 +1,32 @@ +.. PyXA documentation master file, created by + sphinx-quickstart on Sat May 28 10:21:18 2022. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +.. image:: _static/assets/PyXALogoTransparent.png + :alt: PyXA Logo + + +PyXA Documentation +================== + +Python for Automation is a wrapper around Apple's Scripting Bridge framework that enables AppleScript- and JXA-like control over macOS applications from within Python. + +.. toctree:: + :maxdepth: 3 + :caption: Contents: + + about/index + tutorial/index + reference/index + bugs + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + +.. note:: + This project is under active development. \ No newline at end of file diff --git a/sphinx/source/reference/additions/learn.rst b/sphinx/source/reference/additions/learn.rst new file mode 100644 index 0000000..cdeec0a --- /dev/null +++ b/sphinx/source/reference/additions/learn.rst @@ -0,0 +1,7 @@ +Learn Module +============ + +.. automodule:: PyXA.Additions.Learn + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/additions/speech.rst b/sphinx/source/reference/additions/speech.rst new file mode 100644 index 0000000..2b33a3e --- /dev/null +++ b/sphinx/source/reference/additions/speech.rst @@ -0,0 +1,7 @@ +Speech Module +============= + +.. automodule:: PyXA.Additions.Speech + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/additions/ui.rst b/sphinx/source/reference/additions/ui.rst new file mode 100644 index 0000000..1159bcd --- /dev/null +++ b/sphinx/source/reference/additions/ui.rst @@ -0,0 +1,7 @@ +UI Module +========= + +.. automodule:: PyXA.Additions.UI + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/additions/utils.rst b/sphinx/source/reference/additions/utils.rst new file mode 100644 index 0000000..17fadce --- /dev/null +++ b/sphinx/source/reference/additions/utils.rst @@ -0,0 +1,7 @@ +Utils Module +============ + +.. automodule:: PyXA.Additions.Utils + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/additions/web.rst b/sphinx/source/reference/additions/web.rst new file mode 100644 index 0000000..7193a6b --- /dev/null +++ b/sphinx/source/reference/additions/web.rst @@ -0,0 +1,7 @@ +Web Module +========== + +.. automodule:: PyXA.Additions.Web + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/automator.rst b/sphinx/source/reference/apps/automator.rst new file mode 100644 index 0000000..7ca9479 --- /dev/null +++ b/sphinx/source/reference/apps/automator.rst @@ -0,0 +1,7 @@ +Automator Module Reference +========================== + +.. automodule:: PyXA.apps.Automator + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/bike.rst b/sphinx/source/reference/apps/bike.rst new file mode 100644 index 0000000..e44d4b7 --- /dev/null +++ b/sphinx/source/reference/apps/bike.rst @@ -0,0 +1,7 @@ +Bike Module Reference +===================== + +.. automodule:: PyXA.apps.Bike + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/calculator.rst b/sphinx/source/reference/apps/calculator.rst new file mode 100644 index 0000000..20e3315 --- /dev/null +++ b/sphinx/source/reference/apps/calculator.rst @@ -0,0 +1,7 @@ +Calculator Module Reference +=========================== + +.. automodule:: PyXA.apps.Calculator + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/calendar.rst b/sphinx/source/reference/apps/calendar.rst new file mode 100644 index 0000000..5816218 --- /dev/null +++ b/sphinx/source/reference/apps/calendar.rst @@ -0,0 +1,7 @@ +Calendar Module Reference +========================= + +.. automodule:: PyXA.apps.Calendar + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/cardhop.rst b/sphinx/source/reference/apps/cardhop.rst new file mode 100644 index 0000000..1dee9d2 --- /dev/null +++ b/sphinx/source/reference/apps/cardhop.rst @@ -0,0 +1,7 @@ +Cardhop Module Reference +======================== + +.. automodule:: PyXA.apps.Cardhop + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/chromium.rst b/sphinx/source/reference/apps/chromium.rst new file mode 100644 index 0000000..1f6d5f7 --- /dev/null +++ b/sphinx/source/reference/apps/chromium.rst @@ -0,0 +1,7 @@ +Chromium Module Reference +========================= + +.. automodule:: PyXA.apps.Chromium + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/console.rst b/sphinx/source/reference/apps/console.rst new file mode 100644 index 0000000..b9e68fb --- /dev/null +++ b/sphinx/source/reference/apps/console.rst @@ -0,0 +1,7 @@ +Console Module Reference +======================== + +.. automodule:: PyXA.apps.Console + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/contacts.rst b/sphinx/source/reference/apps/contacts.rst new file mode 100644 index 0000000..c49a316 --- /dev/null +++ b/sphinx/source/reference/apps/contacts.rst @@ -0,0 +1,7 @@ +Contacts Module Reference +========================= + +.. automodule:: PyXA.apps.Contacts + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/dictionary.rst b/sphinx/source/reference/apps/dictionary.rst new file mode 100644 index 0000000..04136db --- /dev/null +++ b/sphinx/source/reference/apps/dictionary.rst @@ -0,0 +1,7 @@ +Dictionary Module Reference +=========================== + +.. automodule:: PyXA.apps.Dictionary + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/drafts.rst b/sphinx/source/reference/apps/drafts.rst new file mode 100644 index 0000000..7edf3d4 --- /dev/null +++ b/sphinx/source/reference/apps/drafts.rst @@ -0,0 +1,7 @@ +Drafts Module Reference +======================= + +.. automodule:: PyXA.apps.Drafts + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/fantastical.rst b/sphinx/source/reference/apps/fantastical.rst new file mode 100644 index 0000000..7748545 --- /dev/null +++ b/sphinx/source/reference/apps/fantastical.rst @@ -0,0 +1,7 @@ +Fantastical Module Reference +============================ + +.. automodule:: PyXA.apps.Fantastical + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/finder.rst b/sphinx/source/reference/apps/finder.rst new file mode 100644 index 0000000..de896dd --- /dev/null +++ b/sphinx/source/reference/apps/finder.rst @@ -0,0 +1,7 @@ +Finder Module Reference +======================= + +.. automodule:: PyXA.apps.Finder + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/flow.rst b/sphinx/source/reference/apps/flow.rst new file mode 100644 index 0000000..6058eda --- /dev/null +++ b/sphinx/source/reference/apps/flow.rst @@ -0,0 +1,7 @@ +Flow Module Reference +===================== + +.. automodule:: PyXA.apps.Flow + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/fontbook.rst b/sphinx/source/reference/apps/fontbook.rst new file mode 100644 index 0000000..66b6928 --- /dev/null +++ b/sphinx/source/reference/apps/fontbook.rst @@ -0,0 +1,7 @@ +FontBook Module Reference +========================= + +.. automodule:: PyXA.apps.FontBook + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/hammerspoon.rst b/sphinx/source/reference/apps/hammerspoon.rst new file mode 100644 index 0000000..c461ebb --- /dev/null +++ b/sphinx/source/reference/apps/hammerspoon.rst @@ -0,0 +1,7 @@ +Hammerspoon Module Reference +============================ + +.. automodule:: PyXA.apps.Hammerspoon + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/imageevents.rst b/sphinx/source/reference/apps/imageevents.rst new file mode 100644 index 0000000..2ccdff7 --- /dev/null +++ b/sphinx/source/reference/apps/imageevents.rst @@ -0,0 +1,7 @@ +Image Events Module Reference +============================= + +.. automodule:: PyXA.apps.ImageEvents + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/iterm.rst b/sphinx/source/reference/apps/iterm.rst new file mode 100644 index 0000000..bd8b7d7 --- /dev/null +++ b/sphinx/source/reference/apps/iterm.rst @@ -0,0 +1,7 @@ +iTerm Module Reference +====================== + +.. automodule:: PyXA.apps.iTerm + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/iwork.rst b/sphinx/source/reference/apps/iwork.rst new file mode 100644 index 0000000..4381564 --- /dev/null +++ b/sphinx/source/reference/apps/iwork.rst @@ -0,0 +1,7 @@ +iWork Base Reference +==================== + +.. automodule:: PyXA.apps.iWorkApplicationBase + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/keynote.rst b/sphinx/source/reference/apps/keynote.rst new file mode 100644 index 0000000..e919a84 --- /dev/null +++ b/sphinx/source/reference/apps/keynote.rst @@ -0,0 +1,7 @@ +Keynote Module Reference +======================== + +.. automodule:: PyXA.apps.Keynote + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/mail.rst b/sphinx/source/reference/apps/mail.rst new file mode 100644 index 0000000..5a07beb --- /dev/null +++ b/sphinx/source/reference/apps/mail.rst @@ -0,0 +1,7 @@ +Mail Module Reference +===================== + +.. automodule:: PyXA.apps.Mail + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/maps.rst b/sphinx/source/reference/apps/maps.rst new file mode 100644 index 0000000..fef6ba4 --- /dev/null +++ b/sphinx/source/reference/apps/maps.rst @@ -0,0 +1,7 @@ +Maps Module Reference +===================== + +.. automodule:: PyXA.apps.Maps + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/media.rst b/sphinx/source/reference/apps/media.rst new file mode 100644 index 0000000..effa451 --- /dev/null +++ b/sphinx/source/reference/apps/media.rst @@ -0,0 +1,7 @@ +Media Application Reference +=========================== + +.. automodule:: PyXA.apps.MediaApplicationBase + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/messages.rst b/sphinx/source/reference/apps/messages.rst new file mode 100644 index 0000000..c4165c6 --- /dev/null +++ b/sphinx/source/reference/apps/messages.rst @@ -0,0 +1,7 @@ +Messages Module Reference +========================= + +.. automodule:: PyXA.apps.Messages + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/music.rst b/sphinx/source/reference/apps/music.rst new file mode 100644 index 0000000..a9b6bc7 --- /dev/null +++ b/sphinx/source/reference/apps/music.rst @@ -0,0 +1,7 @@ +Music Module Reference +====================== + +.. automodule:: PyXA.apps.Music + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/notes.rst b/sphinx/source/reference/apps/notes.rst new file mode 100644 index 0000000..52816e2 --- /dev/null +++ b/sphinx/source/reference/apps/notes.rst @@ -0,0 +1,7 @@ +Notes Module Reference +====================== + +.. automodule:: PyXA.apps.Notes + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/numbers.rst b/sphinx/source/reference/apps/numbers.rst new file mode 100644 index 0000000..9548550 --- /dev/null +++ b/sphinx/source/reference/apps/numbers.rst @@ -0,0 +1,7 @@ +Numbers Module Reference +======================== + +.. automodule:: PyXA.apps.Notes + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/omnioutliner.rst b/sphinx/source/reference/apps/omnioutliner.rst new file mode 100644 index 0000000..15ef804 --- /dev/null +++ b/sphinx/source/reference/apps/omnioutliner.rst @@ -0,0 +1,7 @@ +OmniOutliner Module Reference +============================= + +.. automodule:: PyXA.apps.OmniOutliner + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/pages.rst b/sphinx/source/reference/apps/pages.rst new file mode 100644 index 0000000..4e00843 --- /dev/null +++ b/sphinx/source/reference/apps/pages.rst @@ -0,0 +1,7 @@ +Pages Module Reference +====================== + +.. automodule:: PyXA.apps.Pages + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/photos.rst b/sphinx/source/reference/apps/photos.rst new file mode 100644 index 0000000..6386a1b --- /dev/null +++ b/sphinx/source/reference/apps/photos.rst @@ -0,0 +1,7 @@ +Photos Module Reference +======================= + +.. automodule:: PyXA.apps.PhotosApp + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/preview.rst b/sphinx/source/reference/apps/preview.rst new file mode 100644 index 0000000..8a31b7f --- /dev/null +++ b/sphinx/source/reference/apps/preview.rst @@ -0,0 +1,7 @@ +Preview Module Reference +======================== + +.. automodule:: PyXA.apps.Preview + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/quicktimeplayer.rst b/sphinx/source/reference/apps/quicktimeplayer.rst new file mode 100644 index 0000000..7e38663 --- /dev/null +++ b/sphinx/source/reference/apps/quicktimeplayer.rst @@ -0,0 +1,7 @@ +QuickTime Module Reference +========================== + +.. automodule:: PyXA.apps.QuickTimePlayer + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/reminders.rst b/sphinx/source/reference/apps/reminders.rst new file mode 100644 index 0000000..dd7b1a0 --- /dev/null +++ b/sphinx/source/reference/apps/reminders.rst @@ -0,0 +1,7 @@ +Reminders Module Reference +========================== + +.. automodule:: PyXA.apps.Reminders + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/rstudio.rst b/sphinx/source/reference/apps/rstudio.rst new file mode 100644 index 0000000..558eb71 --- /dev/null +++ b/sphinx/source/reference/apps/rstudio.rst @@ -0,0 +1,7 @@ +RStudio Module Reference +======================== + +.. automodule:: PyXA.apps.RStudio + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/safari.rst b/sphinx/source/reference/apps/safari.rst new file mode 100644 index 0000000..03a3c6f --- /dev/null +++ b/sphinx/source/reference/apps/safari.rst @@ -0,0 +1,7 @@ +Safari Module Reference +======================= + +.. automodule:: PyXA.apps.Safari + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/shortcuts.rst b/sphinx/source/reference/apps/shortcuts.rst new file mode 100644 index 0000000..ea4f240 --- /dev/null +++ b/sphinx/source/reference/apps/shortcuts.rst @@ -0,0 +1,7 @@ +Shortcuts Module Reference +========================== + +.. automodule:: PyXA.apps.Shortcuts + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/spotify.rst b/sphinx/source/reference/apps/spotify.rst new file mode 100644 index 0000000..7b8a40c --- /dev/null +++ b/sphinx/source/reference/apps/spotify.rst @@ -0,0 +1,7 @@ +Spotify Module Reference +======================== + +.. automodule:: PyXA.apps.Spotify + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/stocks.rst b/sphinx/source/reference/apps/stocks.rst new file mode 100644 index 0000000..2bca5c5 --- /dev/null +++ b/sphinx/source/reference/apps/stocks.rst @@ -0,0 +1,7 @@ +Stocks Module Reference +======================= + +.. automodule:: PyXA.apps.Stocks + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/systemevents.rst b/sphinx/source/reference/apps/systemevents.rst new file mode 100644 index 0000000..c9cbdfa --- /dev/null +++ b/sphinx/source/reference/apps/systemevents.rst @@ -0,0 +1,7 @@ +System Events Module Reference +============================== + +.. automodule:: PyXA.apps.SystemEvents + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/systempreferences.rst b/sphinx/source/reference/apps/systempreferences.rst new file mode 100644 index 0000000..7052590 --- /dev/null +++ b/sphinx/source/reference/apps/systempreferences.rst @@ -0,0 +1,7 @@ +System Preferences Module Reference +=================================== + +.. automodule:: PyXA.apps.SystemPreferences + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/terminal.rst b/sphinx/source/reference/apps/terminal.rst new file mode 100644 index 0000000..01f7edf --- /dev/null +++ b/sphinx/source/reference/apps/terminal.rst @@ -0,0 +1,7 @@ +Terminal Module Reference +========================= + +.. automodule:: PyXA.apps.Terminal + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/textedit.rst b/sphinx/source/reference/apps/textedit.rst new file mode 100644 index 0000000..c4162c4 --- /dev/null +++ b/sphinx/source/reference/apps/textedit.rst @@ -0,0 +1,7 @@ +TextEdit Module Reference +========================= + +.. automodule:: PyXA.apps.TextEdit + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/tv.rst b/sphinx/source/reference/apps/tv.rst new file mode 100644 index 0000000..27dee95 --- /dev/null +++ b/sphinx/source/reference/apps/tv.rst @@ -0,0 +1,7 @@ +TV Module Reference +=================== + +.. automodule:: PyXA.apps.TV + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/apps/vlc.rst b/sphinx/source/reference/apps/vlc.rst new file mode 100644 index 0000000..0718718 --- /dev/null +++ b/sphinx/source/reference/apps/vlc.rst @@ -0,0 +1,7 @@ +VLC Module Reference +==================== + +.. automodule:: PyXA.apps.VLC + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/index.rst b/sphinx/source/reference/index.rst new file mode 100644 index 0000000..b4ae62b --- /dev/null +++ b/sphinx/source/reference/index.rst @@ -0,0 +1,78 @@ +Code Documentation and Reference +================================ + +Top-level PyXA Modules +---------------------- +.. toctree:: + :maxdepth: 2 + + pyxa + xabase + xabasescriptable + xatypes + xaprotocols + xaerrors + +First-Party Application Module Reference +---------------------------------------- +.. toctree:: + :maxdepth: 2 + + apps/automator + apps/calculator + apps/calendar + apps/console + apps/contacts + apps/dictionary + apps/finder + apps/fontbook + apps/imageevents + apps/keynote + apps/mail + apps/maps + apps/messages + apps/music + apps/notes + apps/numbers + apps/pages + apps/photos + apps/preview + apps/quicktimeplayer + apps/reminders + apps/safari + apps/shortcuts + apps/stocks + apps/systemevents + apps/systempreferences + apps/terminal + apps/textedit + apps/tv + +Third-Party Application Module Reference +---------------------------------------- +.. toctree:: + :maxdepth: 2 + + apps/bike + apps/cardhop + apps/chromium + apps/fantastical + apps/flow + apps/drafts + apps/hammerspoon + apps/iterm + apps/omnioutliner + apps/spotify + apps/vlc + apps/rstudio + +PyXA Additions +-------------- +.. toctree:: + :maxdepth: 2 + + additions/learn + additions/speech + additions/ui + additions/utils + additions/web \ No newline at end of file diff --git a/sphinx/source/reference/pyxa.rst b/sphinx/source/reference/pyxa.rst new file mode 100644 index 0000000..87fcbc3 --- /dev/null +++ b/sphinx/source/reference/pyxa.rst @@ -0,0 +1,7 @@ +PyXA Module +=========== + +.. automodule:: PyXA.PyXA + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/xabase.rst b/sphinx/source/reference/xabase.rst new file mode 100644 index 0000000..635bf51 --- /dev/null +++ b/sphinx/source/reference/xabase.rst @@ -0,0 +1,8 @@ +XABase Module +============= + +.. automodule:: PyXA.XABase + :members: + :undoc-members: + :special-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/xabasescriptable.rst b/sphinx/source/reference/xabasescriptable.rst new file mode 100644 index 0000000..21ff7b4 --- /dev/null +++ b/sphinx/source/reference/xabasescriptable.rst @@ -0,0 +1,7 @@ +XABaseScriptable Module +======================= + +.. automodule:: PyXA.XABaseScriptable + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/xaerrors.rst b/sphinx/source/reference/xaerrors.rst new file mode 100644 index 0000000..1167281 --- /dev/null +++ b/sphinx/source/reference/xaerrors.rst @@ -0,0 +1,7 @@ +XAErrors Module +=============== + +.. automodule:: PyXA.XAErrors + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/xaprotocols.rst b/sphinx/source/reference/xaprotocols.rst new file mode 100644 index 0000000..d1dba87 --- /dev/null +++ b/sphinx/source/reference/xaprotocols.rst @@ -0,0 +1,7 @@ +XAProtocols Module +================== + +.. automodule:: PyXA.XAProtocols + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/reference/xatypes.rst b/sphinx/source/reference/xatypes.rst new file mode 100644 index 0000000..4102a77 --- /dev/null +++ b/sphinx/source/reference/xatypes.rst @@ -0,0 +1,7 @@ +XATypes Module +============== + +.. automodule:: PyXA.XATypes + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/sphinx/source/tutorial/applescript.rst b/sphinx/source/tutorial/applescript.rst new file mode 100644 index 0000000..2c3ce85 --- /dev/null +++ b/sphinx/source/tutorial/applescript.rst @@ -0,0 +1,177 @@ +Running AppleScripts +==================== + +PyXA has a dedicated :class:`~PyXA.XABase.AppleScript` class which supports several useful features for working with AppleScript scripts. This allows you to run any AppleScript you desire, thereby opening up the entirety of AppleScript's capabilities to Python. + + +Creating and Running AppleScript Code +------------------------------------- + +The easiest way to run AppleScript code on-the-fly is to instantiate an :class:`~PyXA.XABase.AppleScript` object with the text of the script as an argument. You can run the script using the :func:`~PyXA.XABase.AppleScript.run` method, as seen in the code below. The script won't run until you tell it to, allowing you to modify the script after instantiation but before execution. + +.. code-block:: Python + + import PyXA + PyXA.AppleScript("tell application \"Safari\" to activate").run() + +Note that if your script includes quoted text, you need to properly escape the quotation marks if using the above format. You can also use triple quotes to preserve the string's formatting, which allows you to use unescaped quotes and has the added benefit of preserving line breaks. As seen in the example below, this provides an easy way to create and run multiline AppleScripts. + +.. code-block:: Python + + import PyXA + script = PyXA.AppleScript("""tell application "Pages" + set the miniaturized of window 1 to true + end tell + """) + script.run() + +You can also modify :class:`~PyXA.XABase.AppleScript` objects after instantiation using the :func:`~PyXA.XABase.AppleScript.add`, :func:`~PyXA.XABase.AppleScript.insert`, and :func:`~PyXA.XABase.AppleScript.pop` methods. These provide the ability to dynamically add and remove lines from the script. You can then use Python's control blocks (such as if/elif/else) to create powerful combinations of Python and AppleScript that utilize the capabilities of both languages. The script below shows a basic implementation of this. The code creates an :class:`PyXA.apps.Notes.XANotesApplication` application object to interact with the Notes app and sets up and empty :class:`~PyXA.XABase.AppleScript` object. We then use combinations of the :func:`~PyXA.XABase.AppleScript.add`, :func:`~PyXA.XABase.AppleScript.insert`, and :func:`~PyXA.XABase.AppleScript.pop` methods to construct an AppleScript script. Note how we dynamically construct the AppleScript code based on whether a note with a specific name exists, which we check from within Python. While this particular script is not very useful, you could use this capability to generate lengthy AppleScripts that are specialized to a user's system, for example. + +.. code-block:: Python + + import PyXA + app = PyXA.application("Notes") + script = PyXA.AppleScript() + script.add("tell application \"Notes\"") + script.add("end tell") + script.add("error") + script.pop() + + if "PyXA Ideas" in app.notes().name(): + script.insert(1, "set note1 to the note \"PyXA Ideas\"") + script.add("show note1") + else: + script.add("error \"Could not find the note!\"") + + script.run() + print(script) + # <['tell application "Notes"', 'set note1 to the note "PyXA Ideas"', 'show note1', 'end tell']> + + +Reading Execution Results +------------------------- + +The script contained within an :class:`~PyXA.XABase.AppleScript` object will execute upon calling the :func:`~PyXA.XABase.AppleScript.run` method, returning a dictionary containing the execution return value of the script. This allows you to further intertwine Python logic with AppleScript. The returned dictionary is structured as follows: + +.. code-block:: + + { + 'string': 'Example.txt', + 'int': 0, + 'bool': True, + 'float': 0.0, + 'date': None, + 'file_url': file:///Users/exampleUser/Documents/Example.txt, + 'type_code': 6881357, + 'data': {length = 108, bytes = 0x4d006900 6e006500 63007200 61006600 ... 54007500 62006500 }, + 'event': + } + +This structure provides a convenient way to access the information contained in an execution return value, especially when that data has a well-defined type (such as a string, integer, boolean, float, or date). When the return value is a single string, for example, you can access it by getting the "string" key of the result dictionary, as shown in the example below: + +.. code-block:: Python + + import PyXA + script = PyXA.AppleScript("""tell application "Safari" to get the name of window 1""") + result = script.run() + print(result["string"]) + # Running AppleScripts — PyXA 0.0.9 documentation + +When dealing with other forms of data, such as a list of Safari tab names or the list of IDs of all chats in Messages, you can use the :func:`~PyXA.XABase.AppleScript.parse_result_data` function to extract the text and numbers from the raw Apple Event data. This function takes the results dictionary, isolated the NSAppleEventDescriptor, loops through each sub-descriptor, gets the string value of the descriptor or creates a tuple of the sub-descriptor's values, then returns a list containing the value or tuple associated with each entry. The first code snippet below shows how to get the names of all Safari tabs, the second shows how to list the ID property of all chats in Messages, and the third shows how to create PyXA objects from the returned data. + +.. code-block:: Python + + import PyXA + script = PyXA.AppleScript("""tell application "Safari" + set tabNames to {} + repeat with t in tabs of window 1 + set end of tabNames to (name of t) + end repeat + return tabNames + end tell + """) + result = script.run() + print(PyXA.AppleScript.parse_result_data(result)) + # ['Google', 'Bing', 'Apple'] + +.. code-block:: Python + + import PyXA + script = PyXA.AppleScript("""tell application "Messages" + get chats + end tell + """) + result = script.run() + print(PyXA.AppleScript.parse_result_data(result)) + # [('ID', 'iMessage;-;+11234567890'), ('ID', 'iMessage;-;+11234567891'), ...] + +.. code-block:: Python + + import PyXA + app = PyXA.application("Messages") + script = PyXA.AppleScript("""tell application "Messages" + get chats + end tell + """) + result = script.run() + entries = PyXA.AppleScript.parse_result_data(result) + chats = [app.chats().by_id(entry[1]) for entry in entries] + print(chats) + # [<<['Example Person']>>, ...] + +The example above are not particularly useful, as PyXA already provides faster and more straightforward ways to accomplish these tasks. For example, the third example, re-written in PyXA code, is: + +.. code-block:: Python + + import PyXA + app = PyXA.application("Messages") + print([x for x in app.chats()]) + +Still, the ability to convert between AppleScript return values and PyXA object types may be useful in some situations. + + +Loading External Scripts +------------------------ +PyXA provides a way to load existing AppleScript .scpt files using the :func:`~PyXA.XABase.AppleScript.load` method. Once loaded, the script can be treated like any other :class:`~PyXA.XABase.AppleScript` object. + +.. code-block:: Python + + import PyXA + script = PyXA.AppleScript.load("/Users/exampleUser/Downloads/Test.scpt") + print(script.run()) + +You can even modify the script in the same ways as before: + +.. code-block:: Python + + import PyXA + script = PyXA.AppleScript.load("/Users/exampleUser/Downloads/Test.scpt") + script.add(3, "set note1 to the note \"PyXA Ideas\"") + script.insert(4, "show note1") + print(script.run()) + +This allows you to run your existing AppleScripts from Python. In combination with the ability to read execution results (see `Reading Execution Results`), the ability to load scripts makes PyXA a powerful yet convenient way to interface between Python and AppleScript, without losing access to your existing library of AppleScript automations. + + +Saving Scripts +-------------- +Once you've created and/or modified a script, you can save it to a .scpt file using the :func:`~PyXA.XABase.AppleScript.save` method. If the script was initially loaded from a file, you can call :func:`~PyXA.XABase.AppleScript.save` without any arguments -- the script will be saved to the existing .scpt file. You can also provide a file path as an argument to instruct PyXA to save the script to a particular destination. Note that the script is compiled before it is saved, so specifying a path to anything other than a .scpt file will result in an unreadable document. + +.. code-block:: Python + + import PyXA + script = PyXA.AppleScript.load("/Users/steven/Downloads/Example.scpt") + script.insert(2, "delay 2") + script.insert(3, "set the miniaturized of window 1 to true") + script.save() + +.. code-block:: Python + + import PyXA + script = PyXA.AppleScript(""" + tell application "Safari" + activate + end tell + """) + >>> script.save("/Users/exampleUser/Downloads/Example.scpt") + diff --git a/sphinx/source/tutorial/apps/automator/index.rst b/sphinx/source/tutorial/apps/automator/index.rst new file mode 100644 index 0000000..5a35fb2 --- /dev/null +++ b/sphinx/source/tutorial/apps/automator/index.rst @@ -0,0 +1,81 @@ +Automator Module +================ + +.. contents:: Table of Contents + :depth: 3 + :local: + +Overview +######## +PyXA supports all of Automator's OSA features, including but not limited to creating and executing workflows, managing Automator actions and their settings, and interacting with execution return values. PyXA can create workflows and variables, assign and arrange actions, and modify the attributes thereof. PyXA can also observe the execution of workflow files, allowing you to use existing automation workflows aongside PyXA and Python in general. + +Automator Tutorials +################### +There is currently one tutorial for the Automator module: + +.. toctree:: + :maxdepth: 1 + + tutorial1 + +Automator Examples +################## +The examples below provide an overview of the capabilities of the Automator module. + +Example 1 - Creating workflows from scratch +******************************************* + +The example below creates a workflow that displays a notification, waits five seconds, then starts the screen saver. The process for creating workflows begins with making a new workflow object, adding it to the list of workflows, and saving it to the disk. Without saving here, you may encounter errors as some methods and actions require access to the workflow file. With an empty workflow created, the next step is to add actions, which is most easily done by name. Next, you must retrieve a mutable form of the actions; you can think of the original ones as a template that you've now made a copy of. From there, you can change the value of settings however you desire. + +.. code-block:: python + :linenos: + + import PyXA + app = PyXA.application("Automator") + + # Create and save a new workflow + new_workflow = app.make("workflow", {"name": "New Workflow"}) + app.workflows().push(new_workflow) + new_workflow.save() + + # Add actions to the workflow + action1 = app.automator_actions().by_name("Display Notification") + action2 = app.automator_actions().by_name("Pause") + action3 = app.automator_actions().by_name("Start Screen Saver") + app.add(action1, new_workflow) + app.add(action2, new_workflow) + app.add(action3, new_workflow) + + # Obtain actions in mutable form and change their settings + actions = new_workflow.automator_actions() + notification_text = actions[0].settings().by_name("title") + notification_text.set_property("value", "PyXA Notification") + + pause_duration = actions[1].settings().by_name("pauseDuration") + pause_duration.set_property("value", 5) + + # Run the workflow + new_workflow.execute() + +Example 2 - Running existing workflows +************************************** + +In the short example below, we open an existing workflow file, run it, and display the execution's results. + +.. code-block:: python + :linenos: + + import PyXA + app = PyXA.application("Automator") + + app.open("/Users/exampleuser/Downloads/Example.workflow") + workflow = app.workflows().by_name("Example.workflow") + workflow.execute() + + print(workflow.execution_result) + +Automator Resources +################### +- `Automator User Guide - Apple Support `_ + +For all classes, methods, and inherited members of the Automator module, see the :ref:`Automator Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/automator/tutorial1.rst b/sphinx/source/tutorial/apps/automator/tutorial1.rst new file mode 100644 index 0000000..37d1927 --- /dev/null +++ b/sphinx/source/tutorial/apps/automator/tutorial1.rst @@ -0,0 +1,124 @@ +Making a Combined Workflow for Creating Image Mosaic +==================================================== + +Overview +######## +Automation scripts can ask users for many different kinds of input, and different automation technologies are particularly suited to handling some types of inputs over others. Moreover, prompting users for different kinds of input may be easier using one automation technology over another. For example, Python has specialized tools for working with command-line arguments, so you might use PyXA over other automation technologies when looking to create a command-line automation script. Comparatively, Shortcuts and Automator provide highly intuitive ways to get non-text input from users, so you might opt to use one of them instead when looking to handle image, video, and other media data. When working on automation scripts, you can combine all of these technologies and use them in tandem, enabling you to always utilize the best tool for the task. In this tutorial, we combine the abilities of PyXA and Automator, producing a combined workflow to create a mosaic of selected images using the `Pillow `_ library for Python. + +Part 1 - Getting User Input +########################### +To create our combined automation workflow, let's first think about its component parts. We know that Automator has actions for user input, so you might be able to guess that there is a dedicated "Ask For Photos" action. It's unlikely that Apple would expose the direct NSImage objects via that action, so we can assume that the action outputs either image file paths or image IDs. This is something that we'll need to check in a moment. The Python Image Library (Pillow) primarily operates on images loaded from files, and Python is slower than Automator at retrieving UI element property values, so ideally we'll have the PyXA side of the automation script working with file paths. Let's create a workflow in Automator that prompts the user to select photos as input and outputs image file paths. + +This can be accomplished with a single action: "Ask For Photos". This action already outputs file paths, so there is no need for an additional action to extract that data. You can confirm this by adding the action (dragging it from the left-side sidebar into the main work area, then dropping it), then pressing the "run" button in the top right corner. The workflow will prompt you to select images. After clicking "Choose", click the "Results" button on the action and open the tab labelled "{}" for "Raw Data". You should see an image file path -- hooray! When this workflow is run from PyXA, the execution return value will be in the same format as the raw data displayed. + +Save the workflow as "Ask For Photos.workflow" in a location of your choosing. This tutorial assumes that the workflow was saved in the Automator folder of iCloud, but this does not need to be the case -- just make sure to change the path in the PyXA code. + +With the workflow saved, we can move on to the PyXA script. Since we're working with Automator, we need to initialize the Automator application object. Next, we instruct Automator to open a workflow from a specified file path. This provides a reference to the now-open workflow element, which we can execute. As test, let's print the output of the execution. Our code is thus: + +.. code-block:: python + :linenos: + + import PyXA + automator = PyXA.application("Automator") + workflow = automator.open("/Users/exampleuser/Library/Mobile Documents/com~apple~Automator/Documents/Ask For Photos.workflow") + print(workflow.execute()) + +If you run the PyXA script now, you should again be prompted to select photos, and you should see that the paths to each image you selected, if any, were printed by the PyXA script. + + +Part 2 - Creating A Mosaic +########################## +The goal of this tutorial is to highlight the ability to intertwine PyXA and Automator -- believe it or not, we're done with that! The rest of this part looks at how to using the Pillow library to create a mosaic of images; it has nothing to do with PyXA, apart from that we used PyXA to execute an Automator workflow. To run the rest of this tutorial, you'll need to adjust your imports to the following: + +.. code-block:: python + + import PyXA, math + from PIL import Image + +We start by setting a base width and height for each image within the mosaic. We choose 400x200 for simplicity, but you can choose any size. Each image in the mosaic will have those dimensions or smaller. + +.. code-block:: python + + base_width = 400 + base_height = 200 + +Next, we calculate the root of the number of image paths we have. For simplicity, we are creating an NxN mosaic, where N is the integer root of the total number of images. This tutorial forgoes error checking and other niceties that you might wish to include in your remake of this automation. + +.. code-block:: python + + root = int(math.sqrt(len(image_paths))) + +With the root and base dimensions set, we can create the canvas for our mosaic. The canvas is initially an empty image with the size of the final image we intend to create. + +.. code-block:: python + + dim = (root * base_width, root * base_width) + mosaic = Image.new("RGB", dim) + +To populate the image, we place scaled down versions of the images we selected at calculated locations. This is done by looping over each row and column of the mosaic and pasting the scaled down image at the appropriate location. Since we are making a square mosaic, the number of rows and columns both goes from 0 to the root defined previously. The path of each image then sits at index `row + col * root`. We load the image at that path, then resize it while maintaining proportions. We then paste the resized image at the slot defined by the row, column, and base dimensions. + +.. code-block:: python + + for row in range(0, root): + for col in range(0, root): + path = image_paths[row + col * root] + img = Image.open(path) + + width = int(max(base_width, base_width/img.size[0] * img.size[1])) + img = img.resize((base_width, width), Image.ANTIALIAS) + mosaic.paste(img, (base_width * col, base_width * row)) + +Finally, we use the `show` method to show the mosaic in Preview. + +.. code-block:: python + + mosaic.show() + +Conclusion +########## +The full code for this tutorial: + +.. code-block:: python + :linenos: + + import PyXA, math + from PIL import Image + + # Execute Automator workflow and receive list of image paths + automator = PyXA.application("Automator") + workflow = automator.open("/Users/steven/Library/Mobile Documents/com~apple~Automator/Documents/Ask For Photos.workflow") + image_paths = workflow.execute() + + # Set base dimensions of mosaic images + base_width = 400 + base_height = 200 + + # Get number of rows and columns + root = int(math.sqrt(len(image_paths))) + + # Create empty canvas + dim = (root * base_width, root * base_width) + mosaic = Image.new("RGB", dim) + + # Populate the canvas + for row in range(0, root): + for col in range(0, root): + # Load image from path + path = image_paths[row + col * root] + img = Image.open(path) + + # Resize proportionally + width = int(max(base_width, base_width/img.size[0] * img.size[1])) + img = img.resize((base_width, width), Image.ANTIALIAS) + mosaic.paste(img, (base_width * col, base_width * row)) + + mosaic.show() + +See Also +######## + +.. .. toctree:: +.. :maxdepth: 1 + +.. tutorial2 +.. ../shortcuts/tutorial1 diff --git a/sphinx/source/tutorial/apps/bike/index.rst b/sphinx/source/tutorial/apps/bike/index.rst new file mode 100644 index 0000000..243306b --- /dev/null +++ b/sphinx/source/tutorial/apps/bike/index.rst @@ -0,0 +1,10 @@ +Bike Module Overview +==================== + +Bike Resources +############## +- `Creating Scripts - Bike Guide `_ +- `Using Scripts - Bike Guide `_ +- `Bike Extensions Wiki `_ + +For all classes, methods, and inherited members of the Bike module, see the :ref:`Bike Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/calculator/index.rst b/sphinx/source/tutorial/apps/calculator/index.rst new file mode 100644 index 0000000..185f982 --- /dev/null +++ b/sphinx/source/tutorial/apps/calculator/index.rst @@ -0,0 +1,45 @@ +Calculator Module Overview +========================== + +.. contents:: Table of Contents + :depth: 3 + :local: + +PyXA enables limited scripting functionalities in Calculator.app, despite no official scripting support for it. Currently, the calculator's scripting functionalities are entirely supported by UI scripting, however additional features are planned for future development work. + +Using :func:`XACalculatorApplication.input`, you can command the Calculator to execute a sequence of button clicks. The sequence must be a continuous string (no spaces). The valid characters are numbers `0-9`, `+`, `-`, `*`, `/`, `%`, `~`, `=`, and `c`. Their meanings are as follows: + + - `+`, `-`, `*`, and `/` correspond to their usual operation buttons. + - `%` designates the percentage button. + - `~` corresponds to the negation button. + - `=` represents the equals button. + - `c` denotes the clear button. + +Calculator Tutorials +#################### +There are currently no tutorials for working with the Calculator application. + +Calculator Examples +################### +The examples below provide an overview of the capabilities of the Calculator module. They do not provide any output. +.. For more in-depth examples that show output and provide more detailed explanations, refer to the previous section (:ref:`Tutorials`). + +Example 1 - Performing Operations in Calculator.app +*************************************************** + +This example uses :func:`XACalculatorApplication.input` to calculate the result of an expression, then retrieves the result using :func:`XACalculatorApplication.current_value`. + +.. code-block:: python + :linenos: + + import PyXA + app = PyXA.application("Calculator") + app.input("3.14159265*2*3*5*5*5=") + x = app.current_value() + print(x) + +Calculator Resources +#################### +- `Calculator User Guide - Apple Support `_ + +For all classes, methods, and inherited members of the Calculator module, see the :ref:`Calculator Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/calendar/index.rst b/sphinx/source/tutorial/apps/calendar/index.rst new file mode 100644 index 0000000..2268ff8 --- /dev/null +++ b/sphinx/source/tutorial/apps/calendar/index.rst @@ -0,0 +1,141 @@ +Calendar Module Overview +======================== + +.. contents:: Table of Contents + :depth: 3 + :local: + +PyXA supports nearly all AppleScript/JXA commands for the Calendar application while adding some additional quality-of-life methods that AppleScript is missing. Alarms are not currently supported, but they will be by the time of PyXA's full release. New methods, such as :func:`PyXA.apps.Calendar.XACalendarEvent.add_attachment`, attempt to follow the style of JXA and make use of Apple's `EventKit Framework `_. + +Calendar Tutorials +################## +There are two (planned) tutorials for working with the Calendar application: + +- Create a Daily Event Summary Script +- How To: Add a Zoom link to all events with a given tag + +Calendar Examples +################# +The examples below provide an overview of the capabilities of the Calendar module. They do not provide any output. For more in-depth examples that show output and provide more detailed explanations, refer to the previous section (:ref:`Tutorials`). + +Example 1 - Listing Calendars and Events +**************************************** + +One of the most common tasks when working with the Calendar application is that of listing events. PyXA offers several ways to obtain such lists, all of which may be useful in different contexts. In order to list events, you must first obtain a reference to one or more calendars, which can be done in a few ways as well. Lines `5-10` show the primary ways of obtain a calendar reference, while lines `12-18` show ways to obtain lists of events from the selected calendar. + +A general rule of thumb when using PyXA to list events is that the more specific you can make your query, the better. While listing all events is necessary in some situations, a more specific query will always perform better. Filters, such as `{"title": "Learn PyXA"}`, can be used to decrease the number of queried events and, likewise, decrease the time of the listing operation. Filters can contain multiple parameters to further narrow the selection of events. The Calendar module provides some helper methods to assist in the creation and application of filters. For example, :func:`PyXA.apps.Calendar.XACalendar.events_in_range` can (and should) be used to find events occurring between two dates. + +In addition to listing events, you can obtain references to specific events using the methods shown in lines `20-25`. These methods always select the first event that matches their respective filter, if applicable, so there are no performance concerns there. However, there is no guarantee that the list of events will maintain a consistent order. A filter that directly identifies an event using its unique properties is therefore preferred over a general filter that matches with multiple events. + +.. code-block:: python + :linenos: + + from datetime import datetime, timedelta + import PyXA + app = PyXA.application("Calendar") + + # Getting calendars + all_calendars = app.calendars() + calendar = app.default_calendar() + calendar0 = app.calendar(0) + calendar1 = app.calendar(1) + named_calendar = app.calendar({"title": "Calendar"}) + + # Getting lists of events + all_events = calendar.events() + events_at_location = calendar.events({"location": "1 Main Street\\nPortland ME 04101\\nUnited States"}) + named_events = calendar.events({"title": "Learn PyXA"}) + events_between_dates = calendar.events_in_range(datetime.now(), datetime.now() + timedelta(days = 7)) + events_today = calendar.events_today() + events_this_week = calendar.week_events() + + # Getting specific events + event0 = calendar.event(0) + first_event = calendar.first_event() + last_event = calendar.last_event() + named_event = calendar.events({"title": "Learn PyXA"})[0] + event_by_id = calendar.event({"uid": "A54CF13A-36D2-5DE1-9980-BE19C4C102A4"}) + + # Get today's event from each calendar + events = [] + for calendar in all_calendars: + events.extend(calendar.events_today()) + +Example 2 - Creating Calendars and Events +***************************************** + +.. code-block:: python + :linenos: + + from datetime import datetime, timedelta + import PyXA + app = PyXA.application("Calendar") + + # Create a new calendar + new_calendar = app.new_calendar("PyXA Development") + + # Create new events + start_date = datetime.now() + end_date = start_date + timedelta(hours = 1) + app.new_event("Test 1", start_date, end_date) # Created in default/currently selected calendar + app.new_event("Test 2", start_date, end_date, new_calendar) # Created in the new calendar + new_calendar.new_event("Test 3", start_date, end_date) # Same as Test 2 + +Example 3 - Modifying and Manipulating Events +********************************************* + +.. code-block:: python + :linenos: + + from datetime import date + import PyXA + app = PyXA.application("Calendar") + + calendar = app.default_calendar() + calendar1 = app.calendar(1) + event = calendar.events_today()[0] + + # Modify event properties + event.rename("Title changed") + + new_start_date = date(2022, 6, 6) + new_end_date = date(2022, 6, 7) + event.set_property("startDate", new_start_date) + event.set_property("endDate", new_end_date) + + # Execute event actions + event.duplicate() + event.copy_to(calendar1) + event.move_to(calendar1) + event.delete() + +Example 5 - Displaying Events in Calendar.app +********************************************* + +.. code-block:: python + :linenos: + + from datetime import date + import PyXA + app = PyXA.application("Calendar") + + calendar = app.default_calendar() + calendar1 = app.calendar(1) + event = calendar.events_today()[0] + + event.show() + app.switch_view_to("day") + app.switch_view_to("week") + app.switch_view_to("month") + app.view_calendar_at(date(2022, 6, 5)) + app.view_calendar_at(event.end_date) + +Calendar Resources +################## +- `Calendar User Guide - Apple Support `_ + +For all classes, methods, and inherited members of the Calendar module, see the :ref:`Calendar Module Reference`. + +.. .. automodapi:: PyXA.apps.Calendar +.. :no-main-docstr: +.. :skip: NSMutableArray, NSPredicate, NSURL, SBObject, date, datetime, timedelta \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/cardhop/index.rst b/sphinx/source/tutorial/apps/cardhop/index.rst new file mode 100644 index 0000000..941f65c --- /dev/null +++ b/sphinx/source/tutorial/apps/cardhop/index.rst @@ -0,0 +1,8 @@ +Cardhop Module Overview +======================= + +Cardhop Resources +################# +- `Cardhop Integration With Other Apps Help `_ +- +For all classes, methods, and inherited members of the Cardhop module, see the :ref:`Cardhop Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/chromium/index.rst b/sphinx/source/tutorial/apps/chromium/index.rst new file mode 100644 index 0000000..c6cbac1 --- /dev/null +++ b/sphinx/source/tutorial/apps/chromium/index.rst @@ -0,0 +1,85 @@ +Chromium Module Overview +======================== + +.. contents:: Table of Contents + :depth: 3 + :local: + +PyXA has full support for Chromium and Chromium derivatives such as Google Chrome, Opera, Brave, Vivaldi, and Microsoft Edge. Some additional convenience methods, such as :func:`PyXA.apps.Chromium.XAChromiumApplication.new_tab`, are provided to simplify common scripting tasks. + +Windows and Tabs +**************** +PyXA allows full control over Chromium windows and tabs, as well as full access to their properties. Opening a webpage in Chromium (or any Chromium derivative) is accomplished by calling :func:`PyXA.apps.Chromium.XAChromiumApplication.open` and providing a URL as an argument. The URL can be either a string or an :class:`PyXA.XABase.XAURL` object. The URL must be a full URL—that is, it must follow the structure of "scheme://host/relativeURI". + +New windows can be created using the :func:`PyXA.apps.Chromium.XAChromiumApplication.new_window` method, and a URL can be passed as an argument to open a window at the specified URL. Similarly, new tabs can be created using :func:`PyXA.apps.Chromium.XAChromiumApplication.new_tab`, and again a URL can be specified. :func:`PyXA.apps.Chromium.XAChromiumApplication.make` can be used to manually create a new window or tab object without adding it to the UI until :func:`PyXA.XABaseScriptable.XASBWindowList.push` or :func:`PyXA.apps.Chromium.XAChromiumTabList.push` is called, allowing you to split the construction of an element across portions of your script. This ability is likely most useful when the window's or tab's properties are influenced by the result of multiple logical operations. + +Bookmarks +********* +Using PyXA, you can obtain a list of bookmarks in Chromium, bookmark folders, and their associated data. To get a list of bookmark folders, use :func:`PyXA.apps.Chromium.XAChromiumApplication.bookmark_folders`. Use :func:`PyXA.apps.Chromium.XAChromiumBookmarkFolder.bookmark_items` to list the individual bookmarks contained in a folder. :attr:`PyXA.apps.Chromium.XAChromiumApplication.bookmarks_bar` and :attr:`PyXA.apps.Chromium.XAChromiumApplication.other_bookmarks` can be used to access bookmarks on the bookmarks bar and in all other folders, respectively. + +It is not currently possible to create bookmark folders or bookmark items via PyXA (or AppleScript) as that functionality is not made available by the Chromium developers. Despite this lack of support, bookmark and bookmark folder creation via UI scripting is planned for a future release. + +Chromium Tutorials +################## +There are currently no tutorials for the Chromium module. + +Chromium Examples +################# +The examples below provide an overview of the capabilities of the Chromium module. They do not provide any output. For more in-depth examples that show output and provide more detailed explanations, refer to the previous section (:ref:`Chromium Tutorials`). + +Example 1 - Opening and saving a webpage +**************************************** + +The example below activates Chromium.app, opens Apple's website in a new tab, waits for the tab to finish loading, then saves the site's resources (e.g. HTML, CSS, JavaScript, and images) to a location on the disk. Note the use of a full URL, beginning with "http", as well as a full file path, beginning with "/". Both a full URL and full file path are necessary in order for this example to operate successfully. + +.. code-block:: python + :linenos: + + import PyXA + from time import sleep + + # Open URL in new tab + app = PyXA.application("Chromium") + app.activate() + app.open("http://apple.com") + + # Wait for tab to finish loading + tab = app.front_window().tabs().last() + while tab.loading: + sleep(0.1) + + # Save the tab's content + tab.save("/Users/exampleuser/Downloads/apple-site") + +Example 2 - Making new windows and tabs +*************************************** + +This example shows how to manually create new windows and tabs in Chromium. The general logic for this is to create a new object of the specified type, then push that object onto the relevant list. Alternatively, you can use the :func:`PyXA.apps.Chromium.XAChromiumApplication.new_window` and :func:`PyXA.apps.Chromium.XAChromiumApplication.new_tab` methods. + +.. code-block:: python + :linenos: + + import PyXA + + app = PyXA.application("Chromium") + app.activate() + + # Make a new window using the convenience method + app.new_window("http://www.apple.com") + + # Make a new tab using the convenience method + app.new_tab("http://www.apple.com") + + # Make a new window manually + window = app.make("window") + app.windows().push(window) + + # Make a new tab manually + tab = app.make("tab", {"URL": "http://www.apple.com"}) + window.tabs().push(tab) + +Chromium Resources +################## +- `Chromium Quick Start Guide `_ + +For all classes, methods, and inherited members of the Chromium module, see the :ref:`Chromium Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/console/index.rst b/sphinx/source/tutorial/apps/console/index.rst new file mode 100644 index 0000000..971ef86 --- /dev/null +++ b/sphinx/source/tutorial/apps/console/index.rst @@ -0,0 +1,46 @@ +Console Module Overview +======================= + +.. contents:: Table of Contents + :depth: 3 + :local: + +PyXA has fully supports all scripting features of Console.app, but there is minimal support (from Apple) in the first place in that regard. Future versions of PyXA might explore expanding the feature offering through UI scripting, utilization of Objective-C frameworks, and other means. + +Console Tutorials +################# +There are currently no tutorials for the Console module. + +Console Examples +################ +.. The examples below provide an overview of the capabilities of the Chromium module. They do not provide any output. For more in-depth examples that show output and provide more detailed explanations, refer to the previous section (:ref:`Chromium Tutorials`). + +Example 1 - Coming Soon +**************************************** + +An example will be added soon. + +.. .. code-block:: python +.. :linenos: + +.. import PyXA +.. from time import sleep + +.. # Open URL in new tab +.. app = PyXA.application("Chromium") +.. app.activate() +.. app.open("http://apple.com") + +.. # Wait for tab to finish loading +.. tab = app.front_window().tabs().last() +.. while tab.loading: +.. sleep(0.1) + +.. # Save the tab's content +.. tab.save("/Users/exampleuser/Downloads/apple-site") + +Console Resources +################# +- `Console User Guide - Apple Support `_ + +For all classes, methods, and inherited members of the Console module, see the :ref:`Console Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/contacts/index.rst b/sphinx/source/tutorial/apps/contacts/index.rst new file mode 100644 index 0000000..b56d15a --- /dev/null +++ b/sphinx/source/tutorial/apps/contacts/index.rst @@ -0,0 +1,4 @@ +Contacts Module Overview +======================== + +For all classes, methods, and inherited members of the Contacts module, see the :ref:`Contacts Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/dictionary/index.rst b/sphinx/source/tutorial/apps/dictionary/index.rst new file mode 100644 index 0000000..ea91a0f --- /dev/null +++ b/sphinx/source/tutorial/apps/dictionary/index.rst @@ -0,0 +1,4 @@ +Dictionary Module Overview +========================== + +For all classes, methods, and inherited members of the Dictionary module, see the :ref:`Dictionary Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/drafts/index.rst b/sphinx/source/tutorial/apps/drafts/index.rst new file mode 100644 index 0000000..6e8daf6 --- /dev/null +++ b/sphinx/source/tutorial/apps/drafts/index.rst @@ -0,0 +1,4 @@ +Drafts Module Overview +====================== + +For all classes, methods, and inherited members of the Drafts module, see the :ref:`Drafts Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/fantastical/index.rst b/sphinx/source/tutorial/apps/fantastical/index.rst new file mode 100644 index 0000000..cf4f6f0 --- /dev/null +++ b/sphinx/source/tutorial/apps/fantastical/index.rst @@ -0,0 +1,41 @@ +Fantastical Module Overview +=========================== + +The Fantastical module provides access to Fantastical's features from within PyXA, making use of both the application's scripting dictionary as well as its URL scheme. + +Fantastical Examples +#################### + +Example 1 - Interacting with Currently Selected Calendar Items +************************************************************** + +.. code-block:: python + + import PyXA + app = PyXA.application("Fantastical") + items = app.selected_calendar_items() + urls = [item.show_url.url for item in items] + print(urls) + # ['x-fantastical://show?item=7d627e52-ae3d-39eb-b86b-57b037f92cab&calendarIdentifier=A5E06B53-667F-42EE-A6FD-99609F6711E3&date=2022-02-21%2000:00', 'x-fantastical://show?item=e4bcc8c4-cd34-3c1d-b273-def4ecd47eae&calendarIdentifier=A5E06B53-667F-42EE-A6FD-99609F6711E3&date=2022-02-14%2000:00', ...] + +Example 2 - Using Natural Language to Create Events +*************************************************** + +.. code-block:: python + + import PyXA + app = PyXA.application("Fantastical") + app.parse_sentence("Meeting from 2pm to 3 today") + app.parse_sentence("Joe's birthday August 26th all day") + app.parse_sentence("Computer Science Homework due on Tuesday") + app.parse_sentence("Vacation from August 26 to September 2") + app.parse_sentence("Meeting at 2pm today alert 20 minutes before") + app.parse_sentence("Attend Apple Event at 1 Infinite Loop, Cupertino, CA on September 14 at 9am") + app.parse_sentence("Remind me to clean on Wednesday") + +Fantastical Resources +##################### +- `Fantastical Integration With Other Apps Help `_ +- `Fantastical Guide - Calendar.com `_ + +For all classes, methods, and inherited members of the Fantastical module, see the :ref:`Fantastical Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/finder/index.rst b/sphinx/source/tutorial/apps/finder/index.rst new file mode 100644 index 0000000..334d91b --- /dev/null +++ b/sphinx/source/tutorial/apps/finder/index.rst @@ -0,0 +1,4 @@ +Finder Module Overview +====================== + +For all classes, methods, and inherited members of the Finder module, see the :ref:`Finder Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/flow/index.rst b/sphinx/source/tutorial/apps/flow/index.rst new file mode 100644 index 0000000..4cfdcf8 --- /dev/null +++ b/sphinx/source/tutorial/apps/flow/index.rst @@ -0,0 +1,36 @@ +Flow Module Overview +==================== + +The Flow module allows you to programmatically control Flow's timer sessions from within your Python scripts. + +Flow Examples +############# + +Example 1 - Run session only while a specific app is open +********************************************************* + +One possible use case of the Flow module is automatically starting Flow sessions based on the context of the system. For example, you might want to start a Flow session when you first open Notes, then only allow the session counter to continue as long as you're using the Notes app (in other words, if you get distracted and wander over to YouTube, the session pauses until you get back on track). The code below shows how to use PyXA to implement this use case. + +.. code-block:: python + + import PyXA + from time import sleep + + flow = PyXA.Application("Flow") + in_session = False + + while True: + apps = PyXA.running_applications().localized_name() + if "Notes" in apps and not in_session: + flow.start() + in_session = True + elif "Notes" not in apps: + flow.stop() + in_session = False + sleep(1) + +Based on this code, you can create scripts for managing context-based Flow sessions informed by many metrics--or as few as you need. + +Flow Resources +############## +- `Flow API/Scripts `_ \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/fontbook/index.rst b/sphinx/source/tutorial/apps/fontbook/index.rst new file mode 100644 index 0000000..12fee67 --- /dev/null +++ b/sphinx/source/tutorial/apps/fontbook/index.rst @@ -0,0 +1,4 @@ +Font Book Module Overview +========================= + +For all classes, methods, and inherited members of the Font Book module, see the :ref:`Font Book Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/hammerspoon/index.rst b/sphinx/source/tutorial/apps/hammerspoon/index.rst new file mode 100644 index 0000000..0f0d557 --- /dev/null +++ b/sphinx/source/tutorial/apps/hammerspoon/index.rst @@ -0,0 +1,18 @@ +Hammerspoon Module Overview +=========================== + +The Hammerspoon module provides the ability to run Hammerspoon Lua scripts from within PyXA. To do this, simply call the :func:`~PyXA.apps.Hammerspoon.XAHammerspoonApplication.execute_lua_code` method and supply a Lua script as an argument. You can then utilize the value returned by the Lua script in your Python program. + +.. code-block:: Python + + import PyXA + app = PyXA.application("hammerspoon") + result = app.execute_lua_code(""" + app = hs.appfinder.appFromName("Finder") + window = app:mainWindow() + return window:title() + """) + print(result) + # Recents + +For all classes, methods, and inherited members of the Hammerspoon module, see the :ref:`Hammerspoon Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/imageevents/index.rst b/sphinx/source/tutorial/apps/imageevents/index.rst new file mode 100644 index 0000000..3022d6f --- /dev/null +++ b/sphinx/source/tutorial/apps/imageevents/index.rst @@ -0,0 +1,194 @@ +Image Events Module Overview +============================ + +.. contents:: Table of Contents + :depth: 3 + :local: + +PyXA supports the full scripting dictionary for Image Events, and some additional image manipulation features have been implemented using Objective-C APIs. + +Image Events Tutorials +###################### + +Tutorial 1 - Basic Image-Related Tasks +************************************** + +Reading Image Properties +------------------------ + +Similar to many other PyXA classes, the :class:`~PyXA.apps.ImageEvents.XAImageEventsImage` class provides several convenient ways to access various attributes (or properties) of images. To get an overview of all properties, you can access the :attr:`~PyXA.apps.ImageEvents.XAImageEventsImage.properties` attribute. This will provide a dictionary containing many details, with elements elevated to PyXA objects or types where appropriate. + +.. code-block:: python + + import PyXA + app = PyXA.Application("Image Events") + app.launch() + image = app.open("/Users/exampleUser/Desktop/Example1.png") + + # Show all properties of the image + print(image.properties) + + # {'color_space': , 'image_file': <Example1.png>, 'bit_depth': , 'dimensions': (1106, 278), 'location': <Desktop>, 'embedded_profile': <sRGB IEC61966-2.1>, 'file_type': , 'class': 'image', 'name': 'Example1.png', 'resolution': (72.0, 72.0)} + +In many cases, it is faster or simply more convenient to access properties directly. All properties in the dictionary above can also be accessed as attributes of the :class:`~PyXA.apps.ImageEvents.XAImageEventsImage` class, as we do below: + +.. code-block:: python + + print(image.color_space) + print(image.image_file) + print(image.dimensions) + print(image.resolution) + print(image.name) + + # ColorSpace.RGB + # <Example1.png> + # (1106, 278) + # (72.0, 72.0) + # Example1.png + +Manipulating Images +------------------- + +Unlike other PyXA classes, most of these attributes are read-only and cannot be changed by simply setting them equal to a new value. Instead, the :class:`~PyXA.apps.ImageEvents.XAImageEventsImage` class has several methods that perform image manipulation operations, in turn altering the properties of the image. For example, to change the color space of an image to grayscale, you would embed a gray color profile in it, as done in the code block below: + +.. code-block:: python + + gray_profile = app.profiles().by_name("Generic Gray Profile") + image.embed_profile(gray_profile) + +Note how we obtain a reference to the desired color profile by name. This is likely to be the most straightforward way of referencing profiles. You can view a list of all profile names by simply printing the result of the :func:`PyXA.apps.ImageEvents.XAImageEventsApplication.profiles` method. + +To alter the dimensions of an images, use the :func:`~PyXA.apps.ImageEvents.XAImageEventsImage.crop`, :func:`~PyXA.apps.ImageEvents.XAImageEventsImage.scale`, and :func:`~PyXA.apps.ImageEvents.XAImageEventsImage.pad` methods of the :class:`~PyXA.apps.ImageEvents.XAImageEventsImage` class. Cropping will isolate a section of the image, discarding content outside that area and decreasing the width and/or height of the image. Scaling maintains the image's content while uniformly increasing or decreasing the dimensions of the image. Padding an image will add a border of a specified thickness and color around the image, increasing its dimensions in the process. + +.. code-block:: python + + # Cropping + image.crop((300, 300)) # Crop to +/- 150 pixels horizontally, +/- 50 pixels vertically from the center of the image + + # Scaling + image.scale(2, 2) # Scale the image up 3x + image.scale(0.25) # Scale the image down to 1/4 the size + + # Padding + image.pad(100, 100) # Add a 100 pixel wide white border around the entire image + image.pad(50, 0, PyXA.XAColor(0, 0, 0)) # Add a 50 pixel black border on only the left and ride sides + image.pad(0, 25, PyXA.XAColor(1, 0, 0)) # Add a 25 pixel red border only on the top and bottom + + image.show_in_preview() + +In addition to cropping, scaling, and padding, the :class:`~PyXA.apps.ImageEvents.XAImageEventsImage` class provides methods for rotating and flipping images, namely :func:`~PyXA.apps.ImageEvents.XAImageEventsImage.rotate`, :func:`~PyXA.apps.ImageEvents.XAImageEventsImage.flip_horizontally`, and :func:`~PyXA.apps.ImageEvents.XAImageEventsImage.flip_vertically`. + +After manipulating an image, use the :func:`~PyXA.apps.ImageEvents.XAImageEventsImage.save` method to save the modified image to the disk. Without any parameters, this method will save the image in-place, overriding the existing image file. + +.. code-block:: python + + image.save() # Save the image in-place (override original) + image.save(file_path="/Users/exampleUser/Desktop/Example2.png") # Save to specific file path (override any file at that location) + +The :class:`~PyXA.apps.ImageEvents.XAImageEventsImage` class implemented the :class:`~PyXA.XAProtocols.XAClipboardCodable` protocol, so you can also save image modifications directly to the clipboard, as done in the code below. This will copy the modified image's raw data to the clipboard without creating a permanent file on the disk. You can then paste the image, with all modifications included, into other applications. + +.. code-block:: python + + image.scale(0.25) + image.pad(50, 50, PyXA.XAColor(0, 0, 1)) + PyXA.XAClipboard().content = image + +Tutorial 2 - Working With Lists of Images +***************************************** + +The Image Events module has been designed around convenience, and a key aspect of that is the ability to conduct bulk operations with :class:`~PyXA.XABase.XAList` objects, in particular by using the :class:`~PyXA.apps.ImageEvents.XAImageEventsImageList` class. In addition to general syntactic convenience, :class:`~PyXA.apps.ImageEvents.XAImageEventsImageList` objects provide significant performance improvements over conventional looping operations. Since XALists do not spend time dereferencing PyObjC/ScriptingBridge pointers, they send far fewer Apple Events, leading to much faster execution. This is evidenced by the code below: + +.. code-block:: python + + from timeit import timeit + import PyXA + app = PyXA.Application("Image Events") + + def without_xalist(): + img_data = [] + images = [app.open("/Users/exampleUser/Desktop/Example1.jpeg"), app.open("/Users/exampleUser/Desktop/Example2.jpeg"), app.open("/Users/exampleUser/Desktop/Example3.jpeg")] + for image in images: + image.scale(3) + image.rotate(45) + img_data.append(image.get_clipboard_representation()) + PyXA.XAClipboard().content = img_data + + def with_xalist(): + images = app.open("/Users/exampleUser/Desktop/Example1.jpeg", "/Users/exampleUser/Desktop/Example2.jpeg", "/Users/exampleUser/Desktop/Example3.jpeg") + PyXA.XAClipboard().content = images.scale(3).rotate(45) + + r1 = timeit(without_xalist, number=100) + r2 = timeit(with_xalist, number=100) + + print("Non-XAList avg over 100 trials:", r1 / 100) + # ~3.835 seconds per iteration (on M1 Pro MacBook Pro) + + print("XAList avg over 100 trials:", r2 / 100) + # ~0.076 seconds per iteration (on M1 Pro MacBook Pro) + +In the XAList-equipped function, `app.open` yeilds an :class:`~PyXA.apps.ImageEvents.XAImageEventsImageList` object. We then scale and rotate all images in the list The code above also highlights the concise coding style supported by :class:`~PyXA.apps.ImageEvents.XAImageEventsImageList` objects. Method chaining as done here is entirely optional, but some may prefer this approach due to its similarity to JXA and JavaScript at large. + +All attributes and methods of the :class:`~PyXA.apps.ImageEvents.XAImageEventsImage` class can be called on :class:`~PyXA.apps.ImageEvents.XAImageEventsImageList` objects as well. + +images = app.open("/Users/exampleUser/Desktop/Example1.jpeg", "/Users/exampleUser/Desktop/Example2.jpeg", "/Users/exampleUser/Desktop/Example3.jpeg") +# # print(images[0].rotate(30).image_with_modifications.show_in_preview()) +# print(images.original_images()[0].show_in_preview()) + +.. code-block:: python + + # Access Attributes in Bulk + print(images.properties()) + print(images.bit_depth(), images.color_space()) + print(images.dimensions(), images.resolution()) + print(images.file_type(), images.image_file(), images.name()) + + # Retrieve Images By Attribute Value + print(images.by_name("Example.png")) + print(images.by_dimensions((2022, 1542))) + print(images.by_file_type(app.FileType.JPEG)) + print(images.by_color_space(app.ColorSpace.RGB)) + print(images.by_bit_depth(app.BitDepth.MILLIONS_OF_COLORS)) + + # Perform Bulk Manipulation Operations + images.rotate(45).scale(2) + images.flip_horizontally() + images.embed_profile(app.profiles().by_name("Generic CMYK Profile")) + images.save(file_paths=["/Users/exampleUser/Desktop/NewExample1.jpeg", "/Users/exampleUser/Desktop/NewExample2.jpeg", "/Users/exampleUser/Desktop/NewExample3.jpeg"]) + PyXA.XAClipboard().content = images + +Image Events Examples +##################### +The examples below provide an overview of the capabilities of the Image Events module. For more in-depth examples that show output and provide more detailed explanations, refer to the previous section (:ref:`Image Events Tutorials`). + +Example 1 - Using Image Events Alongside Other PyXA Features +************************************************************ + +Combining Image Events, XAImages, Photos.app, and more +------------------------------------------------------ + +The functionality of the Image Events module can be easily extended by intertwining it with other PyXA features. The :class:`~PyXA.XABase.XAImage` class is a key example of this. In fact, you can easily convert images managed by Image Events into XAImages, giving you full access to all features thereof. In the code below, we first use Image Events to rotate an image, then we use the :func:`~PyXA.XABase.XAImage.extract_text` method from :class:`~PyXA.XABase.XAImage` to retrieve text contained within. We also open the original and modified images in preview, copy the raw data of the modified image's TIFF representation to the clipboard, and save the modified image to a file on the disk. + +.. code-block:: python + + import PyXA + app = PyXA.Application("Image Events") + image = app.open("/Users/steven/Desktop/code.png").rotate(45) + modified_image = image.modified_image_object + print(modified_image.extract_text()) + + image.original_image_object.show_in_preview() + modified_image.show_in_preview() + + PyXA.XAClipboard().contents = str(modified_image.data) + modified_image.save("/Users/exampleUser/Desktop/NewExample4.png") + + + + + + +Image Events Resources +###################### +- `Mac Automation Scripting Guide - Manipulating Images `_ + +For all classes, methods, and inherited members of the Image Events module, see the :ref:`Image Events Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/index.rst b/sphinx/source/tutorial/apps/index.rst new file mode 100644 index 0000000..906bf09 --- /dev/null +++ b/sphinx/source/tutorial/apps/index.rst @@ -0,0 +1,57 @@ +Application Module Overviews +============================ + +First-Party Application Modules Overviews +----------------------------------------- + +.. toctree:: + :maxdepth: 1 + + automator/index + calculator/index + calendar/index + console/index + contacts/index + dictionary/index + finder/index + fontbook/index + imageevents/index + keynote/index + mail/index + maps/index + messages/index + music/index + notes/index + numbers/index + pages/index + photos/index + preview/index + quicktimeplayer/index + reminders/index + safari/index + shortcuts/index + stocks/index + systemevents/index + systempreferences/index + terminal/index + textedit/index + tv/index + +Third-Party Application Module Overviews +---------------------------------------- + +.. toctree:: + :maxdepth: 1 + + bike/index + cardhop/index + chromium/index + drafts/index + fantastical/index + flow/index + hammerspoon/index + iterm/index + omnioutliner/index + spotify/index + vlc/index + rstudio/index \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/iterm/index.rst b/sphinx/source/tutorial/apps/iterm/index.rst new file mode 100644 index 0000000..6093a51 --- /dev/null +++ b/sphinx/source/tutorial/apps/iterm/index.rst @@ -0,0 +1,2 @@ +iTerm Module Overview +===================== \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/keynote/index.rst b/sphinx/source/tutorial/apps/keynote/index.rst new file mode 100644 index 0000000..f20319a --- /dev/null +++ b/sphinx/source/tutorial/apps/keynote/index.rst @@ -0,0 +1,4 @@ +Keynote Module Overview +======================= + +For all classes, methods, and inherited members of the Keynote module, see the :ref:`Keynote Module Reference` and :ref:`iWork Base Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/mail/index.rst b/sphinx/source/tutorial/apps/mail/index.rst new file mode 100644 index 0000000..09e3ee1 --- /dev/null +++ b/sphinx/source/tutorial/apps/mail/index.rst @@ -0,0 +1,4 @@ +Mail Module Overview +==================== + +For all classes, methods, and inherited members of the Mail module, see the :ref:`Mail Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/maps/index.rst b/sphinx/source/tutorial/apps/maps/index.rst new file mode 100644 index 0000000..85e698d --- /dev/null +++ b/sphinx/source/tutorial/apps/maps/index.rst @@ -0,0 +1,4 @@ +Maps Module Overview +==================== + +For all classes, methods, and inherited members of the Maps module, see the :ref:`Maps Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/messages/index.rst b/sphinx/source/tutorial/apps/messages/index.rst new file mode 100644 index 0000000..c486420 --- /dev/null +++ b/sphinx/source/tutorial/apps/messages/index.rst @@ -0,0 +1,74 @@ +Messages Module Overview +======================== + +.. contents:: Table of Contents + :depth: 3 + :local: + +PyXA supports all of the OSA features for Messages.app. + +Messages Tutorials +################## +There are currently no tutorials for the Messages module. + +Messages Examples +################# +The examples below provide an overview of the capabilities of the Automator module. + +Example 1 - Creating workflows from scratch +******************************************* + +The example below creates a workflow that displays a notification, waits five seconds, then starts the screen saver. The process for creating workflows begins with making a new workflow object, adding it to the list of workflows, and saving it to the disk. Without saving here, you may encounter errors as some methods and actions require access to the workflow file. With an empty workflow created, the next step is to add actions, which is most easily done by name. Next, you must retrieve a mutable form of the actions; you can think of the original ones as a template that you've now made a copy of. From there, you can change the value of settings however you desire. + +.. code-block:: python + :linenos: + + import PyXA + app = PyXA.application("Automator") + + # Create and save a new workflow + new_workflow = app.make("workflow", {"name": "New Workflow"}) + app.workflows().push(new_workflow) + new_workflow.save() + + # Add actions to the workflow + action1 = app.automator_actions().by_name("Display Notification") + action2 = app.automator_actions().by_name("Pause") + action3 = app.automator_actions().by_name("Start Screen Saver") + app.add(action1, new_workflow) + app.add(action2, new_workflow) + app.add(action3, new_workflow) + + # Obtain actions in mutable form and change their settings + actions = new_workflow.automator_actions() + notification_text = actions[0].settings().by_name("title") + notification_text.set_property("value", "PyXA Notification") + + pause_duration = actions[1].settings().by_name("pauseDuration") + pause_duration.set_property("value", 5) + + # Run the workflow + new_workflow.execute() + +Example 2 - Running existing workflows +************************************** + +In the short example below, we open an existing workflow file, run it, and display the execution's results. + +.. code-block:: python + :linenos: + + import PyXA + app = PyXA.application("Automator") + + app.open("/Users/exampleuser/Downloads/Example.workflow") + workflow = app.workflows().by_name("Example.workflow") + workflow.execute() + + print(workflow.execution_result) + +Messages Resources +################## +- `Messages User Guide - Apple Support `_ + +For all classes, methods, and inherited members of the Messages module, see the :ref:`Messages Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/music/index.rst b/sphinx/source/tutorial/apps/music/index.rst new file mode 100644 index 0000000..e747777 --- /dev/null +++ b/sphinx/source/tutorial/apps/music/index.rst @@ -0,0 +1,4 @@ +Music Module Overview +===================== + +For all classes, methods, and inherited members of the Music module, see the :ref:`Music Module Reference` and :ref:`Media Application Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/notes/index.rst b/sphinx/source/tutorial/apps/notes/index.rst new file mode 100644 index 0000000..b6655f4 --- /dev/null +++ b/sphinx/source/tutorial/apps/notes/index.rst @@ -0,0 +1,199 @@ +Notes Module Overview +===================== + +Notes Tutorials +############### + +Tutorial 1 - Interacting with Notes +*********************************** + +Accessing Notes.app Objects +--------------------------- + +.. code-block:: python + + import PyXA + from datetime import datetime, timedelta + + app = PyXA.Application("Notes") + + # Get top-level lists of objects + print(app.accounts()) + print(app.folders()) + print(app.notes()) + print(app.attachments()) + # <[('iCloud', 'x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICAccount/p3'), ...]> + # <[('COS 573 - Computer Vision', 'x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICFolder/p4176'), ...]> + # <['x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICNote/p5232', ...]> + # <[('hello, world', 'x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICAttachment/p4122'), ...]> + + # Use chaining to get objects organized by container + print(app.folders().notes()) + # <[( + # "x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICNote/p4174" + # ), ( + # "x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICNote/p4175" + # ), ( + # "x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICNote/p5232", + # "x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICNote/p4827", + # "x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICNote/p4935", + # ... + # )]> + + # Get attachments organized per note, per folder, per account + print(app.accounts().folders().notes().attachments()) + + # Get notes by attributes + note1 = app.notes().by_name("PyXA Ideas") + note2 = app.notes().containing("plaintext", "random note text") + recently_edited = app.notes().greater_than("modificationDate", datetime.now() - timedelta(hours=5)) + + # Get attachments on a specific notes + note1_attachments = note1.attachments() + + # Get notes in a specific folder + fnotes = app.folders()[1].notes() + +Accessing Attributes of Notes.app Objects +----------------------------------------- + +Access individual attributes + +.. code-block:: python + + import PyXA + app = PyXA.Application("Notes") + notes = app.notes() + + # Access attributes of accounts + account = app.accounts().first + print(account.name) + print(account.default_folder) + # iCloud + # <Notes, x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICFolder/p1> + + # Access attributes of folders + folder = app.folders()[0] + print(folder.name) + print(folder.id) + # COS 573 - Computer Vision + # x-coredata://234D909C-B445-42A0-967L-380DF21392D2/ICFolder/p4176 + + # Access attributes of notes + note = app.notes().by_name("Important Note") + print("Name:", note.name) + print("\nBody:", note.body) + print("\nPlaintext:", note.plaintext) + print("\nCreation Date:", note.creation_date) + print("Modification Date:", note.modification_date) + print("\nID:", note.id) + # Name: Important Note + # + # Body:
Important Note
+ #

+ #
Important note text
+ #

+ #
New Note!
Hello, world!"}) + app.folders().by_name("New Folder 3").notes().push(new_note_1) + + # Add a note via new_note() method + new_note_2 = app.new_note("New Note Title", "New note text", folder=new_folder_2) + + # Add an attachment to a note + note = app.notes().by_name("Important Note") + new_attachment = app.make("attachment", data="/Users/steven/Downloads/Important Document.pdf") + note.attachments().push(new_attachment) + +Notes Examples +############## +The examples below show some simple use cases for the Notes module that might help you spark an idea. For more in-depth examples that show output and provide more detailed explanations, refer to the previous section (:ref:`Notes Tutorials`). + +Example 1 - Saving Safari Tab Text to a Note +******************************************** + +.. code-block:: python + + #!/usr/bin/env python + + import PyXA + safari = PyXA.Application("Safari") + current_tab = safari.front_window.current_tab + tab_name = current_tab.name + tab_text = current_tab.text + + notes = PyXA.Application("Notes") + folder = notes.folders().by_name("Saved Websites") + notes.new_note(tab_name, tab_text, folder) + +For all classes, methods, and inherited members of the Notes module, see the :ref:`Notes Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/numbers/index.rst b/sphinx/source/tutorial/apps/numbers/index.rst new file mode 100644 index 0000000..9a98cb3 --- /dev/null +++ b/sphinx/source/tutorial/apps/numbers/index.rst @@ -0,0 +1,4 @@ +Numbers Module Overview +======================= + +For all classes, methods, and inherited members of the Numbers module, see the :ref:`Numbers Module Reference` and :ref:`iWork Base Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/omnioutliner/index.rst b/sphinx/source/tutorial/apps/omnioutliner/index.rst new file mode 100644 index 0000000..2277bb2 --- /dev/null +++ b/sphinx/source/tutorial/apps/omnioutliner/index.rst @@ -0,0 +1,4 @@ +OmniOutliner Module Overview +============================ + +For all classes, methods, and inherited members of the OmniOutliner module, see the :ref:`OmniOutliner Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/pages/index.rst b/sphinx/source/tutorial/apps/pages/index.rst new file mode 100644 index 0000000..9af38cc --- /dev/null +++ b/sphinx/source/tutorial/apps/pages/index.rst @@ -0,0 +1,4 @@ +Pages Module Overview +===================== + +For all classes, methods, and inherited members of the Pages module, see the :ref:`Pages Module Reference` and :ref:`iWork Base Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/photos/index.rst b/sphinx/source/tutorial/apps/photos/index.rst new file mode 100644 index 0000000..74428b5 --- /dev/null +++ b/sphinx/source/tutorial/apps/photos/index.rst @@ -0,0 +1,4 @@ +Photos Module Overview +====================== + +For all classes, methods, and inherited members of the Photos module, see the :ref:`Photos Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/preview/index.rst b/sphinx/source/tutorial/apps/preview/index.rst new file mode 100644 index 0000000..0c0a283 --- /dev/null +++ b/sphinx/source/tutorial/apps/preview/index.rst @@ -0,0 +1,4 @@ +Preview Module Overview +======================= + +For all classes, methods, and inherited members of the Preview module, see the :ref:`Preview Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/quicktimeplayer/index.rst b/sphinx/source/tutorial/apps/quicktimeplayer/index.rst new file mode 100644 index 0000000..1f6b260 --- /dev/null +++ b/sphinx/source/tutorial/apps/quicktimeplayer/index.rst @@ -0,0 +1,4 @@ +QuickTime Module Overview +========================= + +For all classes, methods, and inherited members of the QuickTime module, see the :ref:`QuickTime Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/reminders/index.rst b/sphinx/source/tutorial/apps/reminders/index.rst new file mode 100644 index 0000000..d8efc2d --- /dev/null +++ b/sphinx/source/tutorial/apps/reminders/index.rst @@ -0,0 +1,4 @@ +Reminders Module Overview +========================= + +For all classes, methods, and inherited members of the Reminders module, see the :ref:`Reminders Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/rstudio/index.rst b/sphinx/source/tutorial/apps/rstudio/index.rst new file mode 100644 index 0000000..a423b49 --- /dev/null +++ b/sphinx/source/tutorial/apps/rstudio/index.rst @@ -0,0 +1,3 @@ +RStudio Module Overview +======================= + diff --git a/sphinx/source/tutorial/apps/safari/index.rst b/sphinx/source/tutorial/apps/safari/index.rst new file mode 100644 index 0000000..7a989ec --- /dev/null +++ b/sphinx/source/tutorial/apps/safari/index.rst @@ -0,0 +1,79 @@ +Safari Module Overview +====================== + +.. contents:: Table of Contents + :depth: 3 + :local: + +PyXA has full nearly complete feature support for Safari, but some functionalities, such as saving a document, are currently unavailable. These will be implemented in future versions of the Safari module. + + +Safari Tutorials +################## +There are currently no tutorials for the Safari module. + +Safari Examples +############### +The examples below provide an overview of the capabilities of the Safari module. For more in-depth examples that show output and provide more detailed explanations, refer to the previous section (:ref:`Safari Tutorials`). + +Example 1 - Using Safari Methods and Attributes +*********************************************** + +This example provides an overview of the most common methods and attributes of the Safari module. + +.. code-block:: python + :linenos: + + import PyXA + + # Open URL in new tab + safari = PyXA.application("Safari") + + # Get open windows, documents, and tabs + window1 = safari.front_window() + window2 = safari.windows()[1] + documents = safari.documents() + current_doc = safari.current_document + tabs = window1.tabs() + current_tab = window1.current_tab + + # Get properties of documents + urls = documents.url() + names = documents.name() + html = current_doc.source() + + # Get properties of tabs + urls = tabs.url() + texts = tabs.text() + name = current_tab.name() + + # Filter documents and tabs + doc1 = documents.by_url("https://apple.com") + doc2 = documents.by_name("Apple") + tab1 = tabs.by_index(1) + tab2 = tabs.by_visible(True) + + # Bulk document operations + documents.add_to_reading_list() + documents.email() + documents.do_javascript("alert('Testing 1 2 3');") + documents.search("Example") + + # Bulk tab operations + tabs.reload() + tabs.add_to_reading_list() + tabs.email() + tabs.do_javascript("alert('Hello!');") + tabs.search("Example") + tabs.move_to(window2) + tabs.duplicate_to(window2) + + # Sub-array operations + some_tabs = tabs[3:5] + some_tabs.close() + +Safari Resources +################## +- `Safari Quick Start Guide `_ + +For all classes, methods, and inherited members of the Safari module, see the :ref:`Safari Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/shortcuts/index.rst b/sphinx/source/tutorial/apps/shortcuts/index.rst new file mode 100644 index 0000000..aab52f1 --- /dev/null +++ b/sphinx/source/tutorial/apps/shortcuts/index.rst @@ -0,0 +1,70 @@ +Shortcuts Module Overview +========================= + +.. contents:: Table of Contents + :depth: 3 + :local: + +Most of Shortcuts.app's scripting interface is available via PyXA, however some significant features are currently limited by sandboxing constraints. PyXA is able to interact with existing shortcuts, including run them, but it is currently unable to create new shortcuts or shortcut folders. That said, it is possible to use Shortcuts links to install new shortcuts. It would be feasible to use functional, atomically constructed shortcuts (i.e. each shortcut accomplishes a single task and returns a transformed value) to construct larger sequences of actions, effectively re-instituting an ability to create shortcuts. For now, that is left as an exercise for PyXA users. Future versions of PyXA may utilize the Shortcuts URI scheme, in combination with the Intents framework, to re-implement these features in a more straightforward way. + +Shortcuts Tutorials +################### +There are currently no tutorials for the Shortcuts module. + +Shortcuts Examples +################## +The examples below provide an overview of the capabilities of the Shortcuts module. They do not provide any output. For more in-depth examples that show output and provide more detailed explanations, refer to the previous section (:ref:`Shortcuts Tutorials`). + +Example 1 - Run shortcuts and receive their return values +********************************************************* + +The example below activates Chromium.app, opens Apple's website in a new tab, waits for the tab to finish loading, then saves the site's resources (e.g. HTML, CSS, JavaScript, and images) to a location on the disk. Note the use of a full URL, beginning with "http", as well as a full file path, beginning with "/". Both a full URL and full file path are necessary in order for this example to operate successfully. + +.. code-block:: python + :linenos: + + import PyXA + app = PyXA.application("Shortcuts") + + # Get shortcuts by name + sqrt = app.shortcuts().by_name("sqrt(x)") + sin = app.shortcuts().by_name("sin(x)") + + # Run sqrt function, get first entry in output array + root = sqrt.run(81)[0] + print(root) + + # Run sin function, get first entry in output array + sin_root = sin.run(root)[0] + print(sin_root) + +Example 2 - Combine shortcut output with Python +*********************************************** + +This example highlights how you can intertwine PyXA, Shortcuts, and Python to carry out more complex processes. The example below uses a shortcut to obtain the source HTML of the Google homepage, then uses Python's tempfile module alongside PyXA's :func:`PyXA.Safari.XASafariApplication.open` method to display a local HTML file in the browser. + +.. code-block:: python + :linenos: + + import PyXA + import tempfile + + # Get the source of webpage, using a shortcut + app = PyXA.application("Shortcuts") + s1 = app.shortcuts().by_name("Get HTML") + source = s1.run("http://google.com")[0] + + # Create a temporary HTML file + temp = tempfile.NamedTemporaryFile(suffix=".html") + temp.write(bytes(source, "UTF-8")) + + # Open the HTML file + PyXA.application("Safari").open(temp.name) + sleep(0.5) + temp.close() + +Shortcuts Resources +################### +- `Shortcuts for macOS User Guide - Apple Support `_ + +For all classes, methods, and inherited members of the Shortcuts module, see the :ref:`Shortcuts Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/spotify/index.rst b/sphinx/source/tutorial/apps/spotify/index.rst new file mode 100644 index 0000000..98ba8c2 --- /dev/null +++ b/sphinx/source/tutorial/apps/spotify/index.rst @@ -0,0 +1,3 @@ +Spotify Module Overview +======================= + diff --git a/sphinx/source/tutorial/apps/stocks/index.rst b/sphinx/source/tutorial/apps/stocks/index.rst new file mode 100644 index 0000000..eeeaae4 --- /dev/null +++ b/sphinx/source/tutorial/apps/stocks/index.rst @@ -0,0 +1,4 @@ +Stocks Module Overview +====================== + +For all classes, methods, and inherited members of the Stocks module, see the :ref:`Stocks Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/systemevents/index.rst b/sphinx/source/tutorial/apps/systemevents/index.rst new file mode 100644 index 0000000..e7c4eff --- /dev/null +++ b/sphinx/source/tutorial/apps/systemevents/index.rst @@ -0,0 +1,69 @@ +System Events Module Overview +============================= + +The Terminal module enables control over Terminal.app from within Python, including the ability to run Terminal script and receive the execution return value. + +System Events Examples +###################### + +Example 1 - Sorting the Desktop +******************************* + +.. code-block:: python + + import PyXA + app = PyXA.Application("System Events") + + # Set the desktop picture + app.current_desktop.picture = "/Users/exampleUser/Desktop/Images/Background.png" + + # Toggle darkmode + app.appearance_preferences.dark_mode = not app.appearance_preferences.dark_mode + + # # Add a login item -- This opens the Documents folder upon login + new_item = app.make("login item", {"path": "/Users/exampleUser/Documents"}) + app.login_items().push(new_item) + + # Start the current screensaver + app.current_screen_saver.start() + +This example uses PyXA to sort files on the desktop into appropriate category folders. + +.. code-block:: python + + import PyXA + app = PyXA.Application("System Events") + + desktop_files = app.desktop_folder.files() + desktop_folders = app.desktop_folder.folders() + + # Create sorting bin folders + images_folder = app.make("folder", {"name": "Images"}) + videos_folder = app.make("folder", {"name": "Videos"}) + audio_folder = app.make("folder", {"name": "Audio"}) + documents_folder = app.make("folder", {"name": "Documents"}) + desktop_folders.push(images_folder, videos_folder, audio_folder, documents_folder) + + # Sort images + image_predicate = "name ENDSWITH '.png' OR name ENDSWITH '.jpg' OR name ENDSWITH '.jpeg' OR name ENDSWITH '.aiff'" + image_files = desktop_files.filter(image_predicate) + image_files.move_to(images_folder) + + # Sort videos + video_predicate = "name ENDSWITH '.mov' OR name ENDSWITH '.mp4' OR name ENDSWITH '.avi' OR name ENDSWITH '.m4v'" + video_files = desktop_files.filter(video_predicate) + video_files.move_to(videos_folder) + + # Sort audio + audio_predicate = "name ENDSWITH '.mp3' OR name ENDSWITH '.ogg'" + audio_files = desktop_files.filter(audio_predicate) + audio_files.move_to(audio_folder) + + # Sort remaining (documents) + desktop_files.move_to(documents_folder) + +System Events Resources +####################### +- `System Events - AppleScript: The Definitive Guide `_ + +For all classes, methods, and inherited members of the System Events module, see the :ref:`System Events Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/systempreferences/index.rst b/sphinx/source/tutorial/apps/systempreferences/index.rst new file mode 100644 index 0000000..2ced133 --- /dev/null +++ b/sphinx/source/tutorial/apps/systempreferences/index.rst @@ -0,0 +1,4 @@ +System Preferences Module Overview +================================== + +For all classes, methods, and inherited members of the System Preferences module, see the :ref:`System Preferences Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/terminal/index.rst b/sphinx/source/tutorial/apps/terminal/index.rst new file mode 100644 index 0000000..c17adc9 --- /dev/null +++ b/sphinx/source/tutorial/apps/terminal/index.rst @@ -0,0 +1,56 @@ +Terminal Module Overview +======================== + +The Terminal module enables control over Terminal.app from within Python, including the ability to run Terminal script and receive the execution return value. + +Terminal Examples +################# + +Example 1 - Using Terminal methods and attributes +************************************************* + +This example showcases many of the methods and attributes available for use in the Terminal module. + +.. code-block:: python + + import PyXA + app = PyXA.application("Terminal") + + # Get information about the current tab + tab = app.current_tab + print(tab.custom_title) + print(tab.processes) + print(tab.number_of_rows, tab.number_of_columns) + # Terminal + # ( + # login, + # "-zsh", + # python + # ) + # 24 80 + + # Set tab properties + tab.custom_title = "Testing 1 2 3" + tab.number_of_rows = 50 + tab.title_displays_custom_title = True + + # Run scripts and utilize return values + value = app.do_script("ls", return_result=True) + print("Number of items:", len(value["stdout"].split("\n")) - 1) + + value = app.do_script("ping www.google.com -c 1", return_result=True) + if "1 packets received" in value["stdout"]: + print("Online!") + else: + print("Offline!") + + # Modify settings + settings = tab.current_settings + settings.background_color = PyXA.XAColor(255, 0, 0) + settings.font_size = 10 + +Terminal Resources +################## +- `Terminal User Guide - Apple Support `_ + +For all classes, methods, and inherited members of the Terminal module, see the :ref:`Terminal Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/textedit/index.rst b/sphinx/source/tutorial/apps/textedit/index.rst new file mode 100644 index 0000000..85981d4 --- /dev/null +++ b/sphinx/source/tutorial/apps/textedit/index.rst @@ -0,0 +1,111 @@ +TextEdit Module Overview +======================== + +.. contents:: Table of Contents + :depth: 3 + :local: + +TextEdit is fully supported in PyXA. + +TextEdit Tutorials +################## +There are currently no tutorials for the Shortcuts module. + +TextEdit Examples +################# +The examples below provide an overview of the capabilities of the TextEdit module. For more in-depth examples that show output and provide more detailed explanations, refer to the previous section (:ref:`TextEdit Tutorials`). + +Example 1 - Using TextEdit methods and attributes +************************************************* + +This example utilizes most of the methods provided in the TextEdit module, and it shows how to accomplish common tasks such as retrieving the currently opened documents, opening documents, creating new documents, and editing documents. + +.. code-block:: python + + import PyXA + textedit = PyXA.application("TextEdit") + textedit.activate() + + # Opening existing documents + document = textedit.open("/Users/steven/Documents/Example.txt") + document = textedit.documents().first + document = textedit.front_window().document + + # Creating new documents + textedit.new_document("new_doc_1.txt", location="/Users/exampleuser/Documents/") + new_doc_2 = textedit.make("document", {"path": "/Users/exampleuser/Documents/NewDocument2.txt"}) + textedit.documents().push(new_doc_2) + + # Accessing top-level text elements + paragraphs = document.paragraphs() + sentences = document.sentences() + words = document.words() + characters = document.characters() + + # Conducting bulk operations with XAList objects + combined_words = paragraphs[3:8].words() + print(paragraphs.sentences()) + textedit.documents().append("\\nA new line in each open document") + + # Text elements are parents of text elements + # Note: Words/characters are currently children of paragraphs, not sentences. + sentences2 = paragraphs[0].sentences() + words2 = paragraphs[0].words() + characters2 = words2[0].characters() + + # Saving and closing documents + document.save() + document.close() + +Example 2 - Creating documents from text returned by other PyXA methods +*********************************************************************** + +The example below implements a crude yet functional automatic flashcard generator that uses the text content of a webpage to create a randomized set of flashcards. The first half of the code uses the :mod:`PyXA.Safari` module to extract the visible text of a Wikipedia page, then saves that text to the disk. The second half then uses the TextEdit module to obtain a list of paragraphs in the text, from which five are randomly selected. The first sentence of each selected paragraphs is used as the hint for the flashcard. This could have use as a study tool or as a way to quickly summarize a topic, in addition to other potential uses. + +.. code-block:: python + + import os + from pprint import pprint + import PyXA + import random + from time import sleep + + # Open a URL and wait for it to load + safari = PyXA.application("Safari") + safari.open("https://en.wikipedia.org/wiki/Computer") + sleep(1) + + # Get the text of the document, then close the tab + doc_text = safari.current_document.text + safari.front_window().current_tab.close() + + # Create folder path if it doesn't already exist + folder_path = "/Users/steven/Documents/articles/" + os.makedirs(folder_path, exist_ok=True) + + # Save the document text to a file on the disk + file_path = folder_path + "Wikipedia-Computer.txt" + with open(file_path, "w") as file: + file.write(doc_text) + + # Open the document and get its paragraphs + textedit = PyXA.application("TextEdit") + textedit.open(file_path) + doc = textedit.front_window().document + paragraphs = doc.paragraphs() + + # Create 5 random (sentence, paragraph) 'flashcards' + flashcards = [] + while len(flashcards) < 5: + paragraph = random.choice(paragraphs) + if len(paragraph) > 200: + sentence = random.choice(paragraph.sentences()) + flashcards.append((sentence, paragraph)) + + pprint(flashcards) + +TextEdit Resources +################## +- `TextEdit User Guide - Apple Support `_ + +For all classes, methods, and inherited members of the TextEdit module, see the :ref:`TextEdit Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/tv/index.rst b/sphinx/source/tutorial/apps/tv/index.rst new file mode 100644 index 0000000..a8c610e --- /dev/null +++ b/sphinx/source/tutorial/apps/tv/index.rst @@ -0,0 +1,4 @@ +TV Module Overview +================== + +For all classes, methods, and inherited members of the TV module, see the :ref:`TV Module Reference` and :ref:`Media Application Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/apps/vlc/index.rst b/sphinx/source/tutorial/apps/vlc/index.rst new file mode 100644 index 0000000..4fb4752 --- /dev/null +++ b/sphinx/source/tutorial/apps/vlc/index.rst @@ -0,0 +1,56 @@ +VLC Module Overview +=================== + +VLC Examples +############ + +Example 1 - Working with VLC methods and attributes +*************************************************** + +This example provides a general overview of the functionalities supported by the VLC module. Additional examples can be found in the code reference for this module. + +.. code-block:: python + :linenos: + + import PyXA + app = PyXA.application("VLC") + + # Open or get (without opening) files and URLs + app.open("/Users/exampleUser/ExampleFile.m4v") + app.open("https://upload.wikimedia.org/wikipedia/commons/transcoded/e/e1/Black_Hole_Merger_Simulation_GW170104.webm/Black_Hole_Merger_Simulation_GW170104.webm.1080p.vp9.webm") + app.get_url("https://upload.wikimedia.org/wikipedia/commons/transcoded/e/e1/Black_Hole_Merger_Simulation_GW170104.webm/Black_Hole_Merger_Simulation_GW170104.webm.1080p.vp9.webm") + + # Control playback + app.stop() + app.play() + app.previous() + app.next() + app.step_forward() + app.step_backward() + app.current_time = app.current_time + 5 + + # Control volume + app.volume_up() + app.volume_down() + app.mute() + app.audio_volume = 256 + + # Control the VLC window + app.fullscreen() + app.fullscreen_mode = False + app.front_window.bounds = (0, 0, 500, 500) + app.zoomed = True + + # Utilize information about playback + file = app.path_of_current_item + file.show_in_finder() + + if app.audio_volume > 256: + app.audio_volume = 256 + + +VLC Resources +############# +- `TextEdit User Guide - Apple Support `_ + +For all classes, methods, and inherited members of the VLC module, see the :ref:`VLC Module Reference`. \ No newline at end of file diff --git a/sphinx/source/tutorial/appscript.rst b/sphinx/source/tutorial/appscript.rst new file mode 100644 index 0000000..b851169 --- /dev/null +++ b/sphinx/source/tutorial/appscript.rst @@ -0,0 +1,8 @@ +Using Appscript to Work With Unsupported Applications +===================================================== + +PyXA aims to be have fine-grained documentation on a per-application basis, which greatly limits its ability to interact with applications outside of the ones explicitly mentioned in this documentation. To make up for this limitation, PyXA falls back to `appscript `_ when no PyXA definition exists for an application. This allows you to interact with any AppleScript-compatible application, through appscript, while having access to the additional features of PyXA for an ever-expanding set of applications. + +Converting Between Appscript and PyXA Types +------------------------------------------- + diff --git a/sphinx/source/tutorial/clipboard.rst b/sphinx/source/tutorial/clipboard.rst new file mode 100644 index 0000000..14be001 --- /dev/null +++ b/sphinx/source/tutorial/clipboard.rst @@ -0,0 +1,84 @@ +Working With The Clipboard +========================== + +PyXA affords full access to the system clipboard (or pasteboard, in Objective-C terms), making it easy to read content from or write content to the clipboard from within Python. PyXA provides a convenient :class:`~PyXA.XABase.XAClipboard` class to handle clipboard-related actions. + +Reading Clipboard Content +------------------------- + +To read content from the clipboard, you need only to instantiate an instance of :class:`~PyXA.XABase.XAClipboard` and access its :attr:`~PyXA.XABase.XAClipboard.content` property. This will provide a dictionary containing the raw NSData object, property list, and string associated with each object type in the clipboard. The example below shows this in action. In this case, the text "Testing 1 2 3..." was copied from a plaintext file, where no formatting data is present. + +.. code-block:: Python + + import PyXA + cb = PyXA.XAClipboard() + print(cb.content) + # {'public.utf8-plain-text': {'data': {length = 16, bytes = 0x54657374696e672031203220332e2e2e}, 'properties': None, 'strings': 'Testing 1 2 3...'}} + +In comparison, when running the code after copying text from within Pages, we also receive the formatting data objects and their associated properties and strings, as shown below. Note that we use `print` instead of `pprint` in order to save space here, but the output follows the save structure as before: for each type of data contained in the clipboard, we receive the NSData object, the property list, and the string associated with that data type. The key difference is that copying formatted text places several types of data on the clipboard, including the plaintext representation, while copying plaintext directly only involves a single clipboard type. + +.. code-block:: Python + + import PyXA + cb = PyXA.XAClipboard() + print(cb.content) + # {'com.apple.flat-rtfd': {'data': {length = 408, bytes = 0x72746664 00000000 03000000 02000000 ... 00000000 00000000 }, 'properties': None, 'strings': None}, 'public.rtf': {'data': {length = 317, bytes = 0x7b5c7274 66315c61 6e73695c 616e7369 ... 20322033 2e2e2e7d }, 'properties': None, 'strings': '{\\rtf1\\ansi\\ansicpg1252\\cocoartf2638\n\\cocoatextscaling0\\cocoaplatform0{\\fonttbl\\f0\\fnil\\fcharset0 HelveticaNeue;}\n{\\colortbl;\\red255\\green255\\blue255;\\red0\\green0\\blue0;}\n{\\*\\expandedcolortbl;;\\cssrgb\\c0\\c0\\c0;}\n\\deftab720\n\\pard\\pardeftab720\\partightenfactor0\n\n\\f0\\fs22 \\cf2 \\up0 \\nosupersub \\ulnone Testing 1 2 3...}'}, 'public.utf16-external-plain-text': {'data': {length = 34, bytes = 0xfffe5400 65007300 74006900 6e006700 ... 33002e00 2e002e00 }, 'properties': None, 'strings': None}, 'public.utf8-plain-text': {'data': {length = 16, bytes = 0x54657374696e672031203220332e2e2e}, 'properties': None, 'strings': 'Testing 1 2 3...'}, 'org.nspasteboard.TransientType': {'data': {length = 0, bytes = 0x}, 'properties': None, 'strings': ''}, 'org.nspasteboard.AutoGeneratedType': {'data': {length = 0, bytes = 0x}, 'properties': None, 'strings': ''}} + +You can parse the content dictionary to obtain the exact information that you need, or you can use built-in convenience functions to obtain the most common data types. These functions currently include :func:`~PyXA.XABase.XAClipboard.get_strings`, :func:`~PyXA.XABase.XAClipboard.get_urls`, and :func:`~PyXA.XABase.XAClipboard.get_images`. For example: + +.. code-block:: Python + + import PyXA + cb = PyXA.XAClipboard() + print(cb.get_strings()) + # ['Testing 1 2 3...'] + +.. code-block:: Python + + import PyXA + cb = PyXA.XAClipboard() + print(cb.get_urls()) + # [<file:///Users/exampleUser/Documents/example.jpeg>] + +.. code-block:: Python + + import PyXA + cb = PyXA.XAClipboard() + print(cb.get_images()) + # [, , ] + +Writing Content to the Clipboard +-------------------------------- + +To write content to the clipboard, set the :attr:`~PyXA.XABase.XAClipboard.content` property of the :class:`~PyXA.XABase.XAClipboard` object. This works for Python's base literal classes, some general Python classes, and all PyXA classes. The example below highlights how this functionality can be used for different data types. + +.. code-block:: Python + + import PyXA + cb = PyXA.XAClipboard() + cb.content = "Testing 1 2 3" + cb.content = 42 + cb.content = True + cb.content = [1, 2, "Three"] + + image = PyXA.XAImage("/Users/exampleUser/Documents/Test.jpg") + cb.content = image + + path = PyXA.XAPath("/Users/steven/Downloads/Test.jpg") + cb.content = path + + url = PyXA.XAURL("http://macrumors.com") + cb.content = url + + sound = PyXA.XASound("/Users/steven/Downloads/Test.mp3") + cb.content = sound + +For strings and other literal values, the plaintext form of the value will be added to the clipboard. For PyXA class objects, one or more items representing the object in multiple forms will be added to the clipboard. For example, setting the clipboard content to an :class:`~PyXA.XABase.XAURL` object will add the URL as a URL type and as a plaintext string, while setting the content to an :class:`~PyXA.XABase.XASound` object will add the raw sound data, a file URL, and the file path string. More information on how each PyXA object type is represented can be found in the corresponding code reference material. + +You can also copy :class:`~PyXA.XABase.XAList` objects to the clipboard in the same way. When you do this, data for each element in the list is added to the clipboard. The type of data added to the clipboard varies based on the list type, but it generally matches the data type added for a single element of the corresponding class. For example, for Music tracks, a single track copied to the clipboard adds the track name to the clipboard, while a list of tracks copies the names of each track to the clipboard (as separate items). + +.. code-block:: Python + + import PyXA + tracks = PyXA.application("Music").tracks() + PyXA.XAClipboard().content = tracks \ No newline at end of file diff --git a/sphinx/source/tutorial/extensions/web/rssfeed.rst b/sphinx/source/tutorial/extensions/web/rssfeed.rst new file mode 100644 index 0000000..1cf3f73 --- /dev/null +++ b/sphinx/source/tutorial/extensions/web/rssfeed.rst @@ -0,0 +1,66 @@ +Reading RSS Feeds +================= + +PyXA provides straightforward RSS reading capabilities through the :class:`~PyXA.extensions.XAWeb.RSSFeed` class. In combination with the associated :class:`~PyXA.extensions.XAWeb.RSSItem` and :class:`~PyXA.extensions.XAWeb.RSSItemContent` classes, the :class:`~PyXA.extensions.XAWeb.RSSFeed` class handles the details of parsing RSS feeds and makes their information accessible via object attributes and methods. These classes also automatically converts complex types, such as URLs and images, into their PyXA representations. + +To create a new RSS reader, instantiate an :class:`~PyXA.extensions.XAWeb.RSSFeed` object and provide an RSS feed endpoint (i.e. URL) as an argument. You can then view the retrieved RSS items via the :func:`~PyXA.extensions.XAWeb.RSSFeed.items` method. The example below obtains the top 10 songs on iTunes, at the of time of writing, from Apple's public RSS feed. + +.. code-block:: Python + + import PyXA + reader = PyXA.RSSFeed("http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml") + print(reader.items()) + # <['Hold Me Closer - Elton John & Britney Spears', 'Only Ever Wanted - Timcast', "I Ain't Worried - OneRepublic", 'wait in the truck - HARDY & Lainey Wilson', 'Bring Me to Life - Evanescence', 'Running Up That Hill (A Deal with God) - Kate Bush', 'Beer With My Friends - Kenny Chesney & Old Dominion', 'American Pie (Full Length Version) - Don Mclean', 'She Had Me At Heads Carolina - Cole Swindell', 'You Proof - Morgan Wallen']> + +As you can see, the :func:`~PyXA.extensions.XAWeb.RSSFeed.items` method returns an :class:`~PyXA.extensions.XAWeb.RSSItemList` object, an instance of :class:`~PyXA.XABase.XAList` -- meaning that 1) the list supports bulk actions via method calls, and 2) the items are not fully evaluated until retrieved from the list by index. The latter is not significant when working with small amounts of items as in the example above, but it saves significant time when working with very large lists. The ability to perform bulk actions is present regardless of list size. The example below shows some of the bulk methods available for the :class:`~PyXA.extensions.XAWeb.RSSItemList` class. + +.. code-block:: Python + + import PyXA + reader = PyXA.RSSFeed("http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml") + items = reader.items() + print(items) + print(items.title()) + print(items.link()) + print(items.shuffle()) + + # <['Hold Me Closer - Elton John & Britney Spears', 'Only Ever Wanted - Timcast', "I Ain't Worried - OneRepublic", 'Bring Me to Life - Evanescence', 'wait in the truck - HARDY & Lainey Wilson', 'Running Up That Hill (A Deal with God) - Kate Bush', 'Beer With My Friends - Kenny Chesney & Old Dominion', 'American Pie (Full Length Version) - Don Mclean', 'She Had Me At Heads Carolina - Cole Swindell', "Summer of '69 - Bryan Adams"]> + + # ['Hold Me Closer - Elton John & Britney Spears', 'Only Ever Wanted - Timcast', "I Ain't Worried - OneRepublic", 'Bring Me to Life - Evanescence', 'wait in the truck - HARDY & Lainey Wilson', 'Running Up That Hill (A Deal with God) - Kate Bush', 'Beer With My Friends - Kenny Chesney & Old Dominion', 'American Pie (Full Length Version) - Don Mclean', 'She Had Me At Heads Carolina - Cole Swindell', "Summer of '69 - Bryan Adams"] + + # [<>, <>, <>, <>, <>, <>, <>, <>, <>, <>] + + # <['Bring Me to Life - Evanescence', 'American Pie (Full Length Version) - Don Mclean', "I Ain't Worried - OneRepublic", 'Running Up That Hill (A Deal with God) - Kate Bush', 'Only Ever Wanted - Timcast', 'Beer With My Friends - Kenny Chesney & Old Dominion', 'wait in the truck - HARDY & Lainey Wilson', 'Hold Me Closer - Elton John & Britney Spears', "Summer of '69 - Bryan Adams", 'She Had Me At Heads Carolina - Cole Swindell']> + +The combination of :class:`~PyXA.XABase.XAList` objects and automatic conversion to PyXA-wrapped objects allows for highly streamlined code. For example, to open each image contained in the `description` element of each RSS item in preview, you can use bulk operations first to get the description of each item, then to get the images of each description, and finally to show each image. + +.. code-block:: Python + + import PyXA + reader = PyXA.RSSFeed("https://www.nhc.noaa.gov/gtwo.xml") + descriptions = reader.items().description() + descriptions.images().show_in_preview() + +You could, of course, condense this further by taking full advantage of PyXA's support for chaining method calls: + +.. code-block:: Python + + import PyXA + PyXA.RSSFeed("https://www.nhc.noaa.gov/gtwo.xml").items().description().images().show_in_preview() + +In this case, the sacrifice to readability is not too extreme, but you can decide which form suites your tastes. + +The previous example utilized the :func:`~PyXA.extensions.XAWeb.RSSItemContentList.images` method to obtain a list of :class:`~PyXA.XABase.XAImage` objects. Another useful method is the :func:`~PyXA.extensions.XAWeb.RSSItemContentList.links` method, which obtains a list of :class:`~PyXA.XABase.XAURL` objects. Both of these methods work on lists of item content as well as on individual items. An example of using the :func:`~PyXA.extensions.XAWeb.RSSItemContentList.links` method is shown below. The example also showcases how you can use interweave an RSS reader with other aspects of PyXA, in this case using the :class:`~PyXA.XABase.XASound` class to listen to m4a files stored at a web URL. + +.. code-block:: Python + + import PyXA + reader = PyXA.RSSFeed("http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml") + links = reader.items().links() + m4as = filter(lambda x: "m4a" in x.url, links) + + for index, song in enumerate(m4as): + print("Now playing: " + reader.items()[index].title) + sound = PyXA.XASound(song) + sound.play() + sleep(sound.duration) diff --git a/sphinx/source/tutorial/images.rst b/sphinx/source/tutorial/images.rst new file mode 100644 index 0000000..9dda6fd --- /dev/null +++ b/sphinx/source/tutorial/images.rst @@ -0,0 +1,284 @@ +Working with Images +=================== + +PyXA uses the :class:`~PyXA.XABase.XAImage` class to provide a standard, convenient way to interact with images stored in files, images created by other PyXA operations, and images managed by applications such as Photos or Image Events. Using this class, you can: + +- Load and save images +- Access information about images, such as whether they contain transparent pixels +- Copy images to the clipboard +- Set image attributes such as vibrance and temperature +- Apply filters and distortions +- Create composite images or blend images together using composition filters +- Stitch images together +- Extract text contained in images + +The :class:`~PyXA.XABase.XAImage` class aims to simplify complex Objective-C implementations of image manipulation down to just a few lines of code for PyXA users. As a result, creating scripts to operate on images can be done quickly and without needing to understand the underlying mechanisms as work. You can then intuitively utilize images elsewhere in your automation scripts. Some ideas for automation include: + +- Download images from an online API, extract text from them, and store the text in a note +- Find images containing a certain word or phrase and sort them into an album in Photos +- Create a mosaic of all images in a particular photo album, or of all images taken in the last year +- Auto-enhance all images stored in a particular folder +- Store images files sent to you in a particular folder immediately after receiving them +- Overlay the songs of a Music playlist onto a mosaic of all the songs' album artworks + +...and many more! What will you come up with? + +The rest of this page describes the various features of the :class:`~PyXA.XABase.XAImage` class and provides several examples for you to reference. + +Loading Images +-------------- + +To initialize an :class:`~PyXA.XABase.XAImage` object, you provide some kind of reference to an image via the `image_reference` parameter (the first parameter of XAImage's init method). This parameter accepts data in many forms, including: a raw string file path (with any image file extension), a web or filesystem URL, an :class:`~PyXA.XABase.XAPath` or :class:`~PyXA.XABase.XAURL` object, another :class:`~PyXA.XABase.XAImage` object, and any object whose class implements the :class:`~PyXA.XAProtocols.XAImageLike` protocol, such as :class:`~PyXA.apps.PhotosApp.XAPhotosMediaItem`. The code below shows how to use these different kinds of image references. + +.. code-block:: python + + import PyXA + # Load a single image file + img = PyXA.XAImage("/Users/exampleUser/Desktop/PyXALogoTransparent.png") + print(img) + # + + # Load an image from a web URL + img = PyXA.XAImage("https://raw.githubusercontent.com/SKaplanOfficial/PyXA/main/docs/_static/assets/PyXALogoTransparent.png") + img.show_in_preview() + + # Load images from a XAURL or XAPath + path = PyXA.XAPath("/Users/exampleUser/Desktop/PyXALogoTransparent.png") + url = PyXA.XAURL("https://raw.githubusercontent.com/SKaplanOfficial/PyXA/main/docs/_static/assets/PyXALogoTransparent.png") + img1 = PyXA.XAImage(path) + img2 = PyXA.XAImage(url) + + # Initialize an image from another image + img1 = PyXA.XAImage("/Users/exampleUser/Desktop/PyXALogoTransparent.png") + img2 = PyXA.XAImage(img1) + + # Get an image from Photos + photos = PyXA.Application("Photos") + img = PyXA.XAImage(photos.media_items().by_title("PyXA Logo")) + +Additionally, some apps such as Image Events utilize subclasses of :class:`~PyXA.XABase.XAImage` to afford a more direct connection between their content and the functionality of XAImages. In the case of Image Events, an image opened using :func:`PyXA.apps.ImageEvents.XAImageEventsApplication.open` is an instance of :func:`PyXA.apps.ImageEvents`.XAImageEventsImage`, a subclass of `:class:`~PyXA.XABase.XAImage`, and has access to both XAImage's methods as well as methods specific to the Image Events context. + +.. code-block:: python + + import PyXA + ie = PyXA.Application("Image Events") + ie_img = ie.open("/Users/steven/Desktop/PyXALogoTransparent.png") + + # Use XAImageEventsImage methods + profile = ie.profiles().by_name("Generic Gray Profile") + ie_img.embed_profile(profile) + + # Use XAList methods + ie_img.pad(50, 50, PyXA.XAColor.black()).rotate(45) + ie_img.gaussian_blur().bloom().show_in_preview() + +You can also use the :func:`~PyXA.XABase.XAImage.open` method to open one or more image files or URLs. When opening multiple images at a time, this method returns an :class:`~PyXA.XABase.XAImageList` object -- more on that later. + +Accessing Image Information +--------------------------- + +.. code-block:: python + + import PyXA + image = PyXA.XAImage.open("/Users/steven/Desktop/PyXALogoTransparent.png") + + # Check if image has alpha channel + if image.has_alpha_channel: + # Check if image contains transparent pixels + if image.is_opaque: + print("Image is capable of having transparent pixels, but does not have any right now") + else: + print("Image contains transparent pixels") + else: + print("Image cannot contain transparent pixels in its current format") + + # Print other attributes + print(image.color_space_name) + print(image.size) + print(image.data) + +Modifying Image Attributes +-------------------------- + +In addition to accessing information attributes, you can use PyXA to concisely set image attributes such as the vibrance, tint, and temperature of an image. The mutable attributes are: + +- :attr:`~PyXA.XABase.XAImage.gamma` +- :attr:`~PyXA.XABase.XAImage.vibrance` +- :attr:`~PyXA.XABase.XAImage.tint` +- :attr:`~PyXA.XABase.XAImage.temperature` +- :attr:`~PyXA.XABase.XAImage.white_point` +- :attr:`~PyXA.XABase.XAImage.highlight` +- :attr:`~PyXA.XABase.XAImage.shadow` + +.. code-block:: python + + import PyXA + image = PyXA.XAImage.open("/Users/steven/Downloads/Owl.png") + image.vibrance = 0.1 + image.highlight = 0 + image.shadow = 1 + image.tint = 200 + image.temperature = 12000 + image.gamma = 10 + image.show_in_preview() + +Basics of Image Manipulation +---------------------------- + +In addition to modifiable attributes, PyXA provides several method for basic image manipulation, including: :func:`~PyXA.XABase.XAImage.flip_horizontally`, :func:`~PyXA.XABase.XAImage.flip_vertically`, :func:`~PyXA.XABase.XAImage.rotate`, :func:`~PyXA.XABase.XAImage.scale`, :func:`~PyXA.XABase.XAImage.crop`, and :func:`~PyXA.XABase.XAImage.pad`. + +.. code-block:: python + + import PyXA + + # Apply individual modifications + image = PyXA.XAImage("/Users/steven/Desktop/cat2.jpeg") + image.crop((600, 600)) + image.scale(2, 2) + image.show_in_preview() + + # Apply modifications using method chaining + image.pad(pad_color=PyXA.XAColor.red()).rotate(45).flip_horizontally() + image.show_in_preview() + +Applying Filters +---------------- + +PyXA provides easy-access to several common image filters that might be useful for automation workflows; for more advanced use cases, a dedicated image manipulation library is recommended. The provided filter methods are: + +- :func:`~PyXA.XABase.XAImage.bloom` +- :func:`~PyXA.XABase.XAImage.crystallize` +- :func:`~PyXA.XABase.XAImage.comic` +- :func:`~PyXA.XABase.XAImage.depth_of_field` +- :func:`~PyXA.XABase.XAImage.edges` +- :func:`~PyXA.XABase.XAImage.gaussian_blur` +- :func:`~PyXA.XABase.XAImage.invert` +- :func:`~PyXA.XABase.XAImage.monochrome` +- :func:`~PyXA.XABase.XAImage.outline` +- :func:`~PyXA.XABase.XAImage.pixellate` +- :func:`~PyXA.XABase.XAImage.pointillize` +- :func:`~PyXA.XABase.XAImage.reduce_noise` +- :func:`~PyXA.XABase.XAImage.sepia` +- :func:`~PyXA.XABase.XAImage.vignette` + +.. code-block:: python + + import PyXA + image = PyXA.XAImage("/Users/steven/Desktop/cat2.jpeg") + image.pixellate().sepia().vignette(5).show_in_preview() + +Adding Distortions +------------------ + +In addition to filters, PyXA provided a few methods for adding distortions to images. These methods include :func:`~PyXA.XABase.XAImage.bump`, :func:`~PyXA.XABase.XAImage.pinch`, and :func:`~PyXA.XABase.XAImage.twirl`. + +.. code-block:: python + + import PyXA + image = PyXA.XAImage("/Users/steven/Downloads/Owl.png") + image.bump(radius=800, curvature=1).pinch((871, 871), intensity=1).twirl().show_in_preview() + +Composite Operations +-------------------- + +PyXA currently supports four composite operations (operations that merge many images into a single, composite image): :func:`~PyXA.XABase.XAImageList.horizontal_stitch`, :func:`~PyXA.XABase.XAImageList.vertical_stitch`, :func:`~PyXA.XABase.XAImageList.additive_composition`, and :func:`~PyXA.XABase.XAImageList.subtractive_composition`. The first two are image concatenation operations which "stitch" together a series of images either vertically or horizontally, one on top of or next to another, to form a single combined imaged, while the other two produce an image by overlaying images and applying a specific blend filter. + +The composite image operations noted above are methods of the :class:`~PyXA.XABase.XAImageList` class. + +.. code-block:: python + + import PyXA + images = PyXA.XAImage.open("/Users/steven/Downloads/Owl.png", "/Users/steven/Desktop/PyXALogoTransparent.png") + + images.additive_composition().show_in_preview() + images.subtractive_composition().show_in_preview() + images.horizontal_stitch().show_in_preview() + images.vertical_stitch().show_in_preview() + +Text Extraction +--------------- + +With PyXA, you can extract text from images using just one method call. When working with a single :class:`~PyXA.XABase.XAImage` object , calling the object's :func:`~PyXA.XABase.XAImage.extract_text` method will return a list of all text contained within the image, separated by newline characters. Likewise, when calling :func:`~PyXA.XABase.XAImageList.extract_text` on an :class:`~PyXA.XABase.XAImageList` object, you will get a list of lists of strings, with each image's text organized into its own entry. + +.. code-block:: python + + import PyXA + # Extract text from one image + image = PyXA.XAImage("/Users/steven/Desktop/handwritingImage.png") + print(images.extract_text()) + # ["This is a handwritten note"] + + # Extract text from multiple images at a time + images = PyXA.XAImage.open("/Users/steven/Desktop/codeImage.png", "/Users/steven/Desktop/handwritingImage.png", "/Users/steven/Desktop/signImage.jpeg") + texts = images.extract_text() + print(texts) + # [ + # ["import PyXA", 'PyXA.Application("Music").play()'], + # ["This is a handwritten note"], + # ["KEEP", "RIGHT"], + # ] + +This functionality allows you to quickly and easily obtain the text within an image, then use that text elsewhere in your automation scripts. For example, the code below rotates or scales images according to the text found within them: + +.. code-block:: python + + import PyXA + import os + + sample_folder = "/Users/steven/Desktop/samples/" + output_folder = "/Users/steven/Desktop/output/" + + # Create output folder if necessary + if not os.path.exists(output_folder): + os.makedirs(output_folder, exist_ok=True) + + # Loop through source images + for index, sample in enumerate(os.listdir(sample_folder)): + print(f"Analyzing sample {index + 1}...") + image = PyXA.XAImage(sample_folder + sample) + + # Extract image text -- each image source is known to have two lines + image_text = image.extract_text() + operation = image_text[0] + arg = int(image_text[1]) + + # Apply appropriate operation + if operation == "rotate": + image.rotate(arg) + elif operation == "scale": + image.scale(arg, arg) + + # Save modified image to file in output folder + print("\tWriting to disk...") + image.save(output_folder + sample) + +Working with Lists of Images +---------------------------- + +As with many other PyXA classes, :class:`~PyXA.XABase.XAImage` has an associated :class:`~PyXA.XABase.XAImageList` class that provides both convenience and performance improvements over standard lists. For example, :func:`PyXA.XABase.XAImageList.flip_horizontally` method performs over twice as fast as iterating over the same size list of individual :class:`PyXA.XABase.XAImage` objects and calling the :func:`PyXA.XABase.XAImage.flip_horizontally` method on each list item, as seen in the example code below: + +.. code-block:: python + + import PyXA + from timeit import timeit + + def without_xalist(): + images = [PyXA.XAImage("/Users/steven/Desktop/dog1.JPG"), PyXA.XAImage("/Users/steven/Desktop/dog1.JPG"), PyXA.XAImage("/Users/steven/Desktop/dog1.JPG")] + flipped_images = [] + for image in images: + flipped_images.append(image.flip_vertically()) + return flipped_images + + def with_xalist(): + images = PyXA.XAImage.open("/Users/steven/Desktop/dog1.JPG", "/Users/steven/Desktop/dog1.JPG", "/Users/steven/Desktop/dog1.JPG") + flipped_images = images.flip_vertically() + return flipped_images + + t1 = timeit(without_xalist, number=100) + t2 = timeit(with_xalist, number=100) + print("Non-XAList avg over 100 trials:", t1 / 50.0) + print("XAList avg over 100 trials:", t2 / 50.0 ) + # Non-XAList avg over 100 trials: 1.53993887584 + # XAList avg over 100 trials: 0.6404187591799999 + +A relationship exists for all of the :class:`~PyXA.XABase.XAImage` and :class:`~PyXA.XABase.XAImageList` methods. Thus, generally speaking, you'll want to make use of :class:`~PyXA.XABase.XAImageList` objects any time you work with several or more images. \ No newline at end of file diff --git a/sphinx/source/tutorial/index.rst b/sphinx/source/tutorial/index.rst new file mode 100644 index 0000000..77c4675 --- /dev/null +++ b/sphinx/source/tutorial/index.rst @@ -0,0 +1,144 @@ +Tutorial +======== + +Installation +------------ + +Before you get started with PyXA, you'll need to install it. The easiest way to do so is through Pip using the following command: + +.. code-block:: bash + + python -m pip install mac-pyxa + +Alternatively, you can install PyXA on a per-project basis by cloning the GitHub repository in the project's main directory. + +Basic Usage +----------- + +Let's walk through some examples to introduce you to the ins and outs of PyXA. Create a new folder in a location of your choice and name it `PyXA Examples`. Then, in that folder, create a new file called `basics.py`, then open the file in your favorite code editor. If you have the Visual Studio Code `code` command installed and enabled, the following command accomplishes all of the above in one fell swoop: + +.. code-block:: bash + + mkdir "PyXA Examples" && cd "PyXA Examples" && touch basics.py && code basics.py + +Now, let's design our first PyXA automation workflow. Suppose we want to write a script that gets the URL of the current Safari tab and prints it (to the Terminal/console). To do this, we first import the PyXA library, then we obtain a reference to the Safari application, a reference to Safari's frontmost window, and finally a reference to the currently displayed tab. From there, we retrieve and print the URL of the tab. The script is thus: + +.. code-block:: Python + + import PyXA + print(PyXA.application("Safari").front_window.current_tab.url) + +Save this script to `basics.py`. To test the workflow, open `https://www.google.com` in a new Safari tab, then run `basics.py` in your Terminal. You should see the following: + +.. code-block:: bash + + % python basics.py + https://www.google.com + +Try visiting different sites in Safari and re-running the script. As you navigate to different sites, you'll see that the printed URL changes accordingly. + +This particular workflow is fairly straightforward, but it is nonetheless useful to compare its syntax to that of AppleScript and JXA. In AppleScript, the same workflow would look like this: + +.. code-block:: AppleScript + + tell application "Safari" + return URL of the current tab of window 1 + end tell + +And the equivalent JXA syntax would be: + +.. code-block:: JavaScript + + (function() { + return Application('Safari').windows()[0].currentTab.url() + })(); + +As you can see, the syntax of PyXA closely follows the syntax of JXA while remaining true to the standard conventions of Python. Most notably, multi-word names for variables and methods use the Pythonic snake_case format instead of camelCase. For example, as seen above, PyXA uses :func:`~PyXA.apps.Safari.XASafariWindow.current_tab` while JXA uses `currentTab`. Another difference is that PyXA prefers object properties while JXA blurs the line between properties and methods. In PyXA, the properties listed in an application's scripting dictionary are referenced using the dot notation for object properties, and actions on objects are executed via method calls. PyXA also includes properties and methods beyond those described in scripting dictionaries on an application-specific basis. + +Like AppleScript and JXA, PyXA's syntax is often flexible, allowing multiple ways to accomplish the same goal. All of the following code samples are valid ways to create the same workflow as above. + +.. code-block:: Python + + import PyXA + print(PyXA.application("Safari").windows()[0].current_tab.url) + +.. code-block:: Python + + import PyXA + print(PyXA.application("Safari").current_document.url) + +.. code-block:: Python + + import PyXA + print(PyXA.application("Safari").documents()[0].url) + +The approach you use will depend one your goals for any given workflow as well as the kind(s) of inputs the workflow should be able to handle. + +Let's make our workflow more useful by having it save the URL to a new note. To do this, we'll need a reference to the Notes app. We then need to tell the Notes app to create a new note with the URL as the note's content. We can temporarily store the URL in a variable to make our code more readable. The PyXA script for this is as follows: + +.. code-block:: Python + + import PyXA + current_url = PyXA.application("Safari").front_window.current_tab.url + PyXA.application("Notes").new_note(current_url) + +If you run this workflow and go to the Notes app, you'll see that a new note has been created containing the current tab's URL in bold typeface. This is already a more useful automation, but we can improve it by making Notes automatically activate and show the newly created note. To do this, we can simply call the new note object's :func:`~PyXA.apps.Notes.XANote.show()` method: + +.. code-block:: Python + + import PyXA + current_url = PyXA.application("Safari").front_window.current_tab.url + PyXA.application("Notes").new_note(current_url).show() + +When you run this, the Notes app will open to newly created note containing the current Safari tab's URL. Cool! Let's make another change. Right now, the URL is used as the title for the note, but it would be nice if the title reflected the title of the webpage. Since we need to retrieve multiple properties from the current tab, we should store a reference to it in a variable to keep our script running efficiently. We'll retrieve the `URL` property of the current tab as we did before, and now we'll also retrieve the `name` property. We can then specify the title and content of the new note by passing two arguments to the :func:`~PyXA.app.Notes.XANotesApplication.new_note()` method. Another improvement we'll make is turning the URL into an actually clickable link by surrounding it with HTML anchor tags. Our script thus becomes: + +.. code-block:: Python + + import PyXA + current_tab = PyXA.application("Safari").front_window.current_tab + current_url = "" + current_tab.url + "" + current_name = current_tab.name + PyXA.application("Notes").new_note(current_name, current_url).show() + +With that, our script is complete! You can run the script from your Terminal at any time, but you might want to save the workflow as an executable for greater convenience. The easiest way to do this is to add a `shebang` to the top of the script that instructs the Terminal to run the code using the Python interpreter: + +.. code-block:: bash + + #!/usr/bin/env python + + import PyXA + current_tab = PyXA.application("Safari").front_window.current_tab + current_url = "" + current_tab.url + "" + current_name = current_tab.name + PyXA.application("Notes").new_note(current_name, current_url).show() + +You then need to remove the .py extension from the script and grant the file execution privileges. Both these actions can be accomplished using the following Terminal command: + +.. code-block:: bash + + mv basics.py basics && chmod +x basics + +When you double click on the script from within Finder, or when you run `./basics` in the Terminal, the workflow should execute as it did before. If you want, you can `change the icon of the file`_ to give your automation a distinct look. You can then move the file to your desktop, the dock, or anywhere you want. + + +Additional Tutorial Topics +-------------------------- + +.. toctree:: + :maxdepth: 1 + + apps/index + lists + images + clipboard + user_input + spotlight + ui_scripting + applescript + menubar + extensions/web/rssfeed + appscript + tips_tricks + + +.. _change the icon of the file: https://support.apple.com/en-gb/guide/mac-help/mchlp2313/mac diff --git a/sphinx/source/tutorial/lists.rst b/sphinx/source/tutorial/lists.rst new file mode 100644 index 0000000..4de8f40 --- /dev/null +++ b/sphinx/source/tutorial/lists.rst @@ -0,0 +1,192 @@ +Working With Lists +================== + +PyXA uses the :class:`~PyXA.XABase.XAList` class to enable batch operations and provide fast enumeration over scriptable objects. This wrapper class behaves like a regular list in many situations; for example, when working with an :class:`~PyXA.XABase.XAList` object, you can use indices, slices, and iterators as you would normally. To avoid sending numerous Apple Events and causing excessive delays, :class:`~PyXA.XABase.XAList` objects lazily evaluate their members -- that is, they don't retrieve their member objects until you request an object at a specific index. At that point, they send a single Apple Event, obtain a reference to the desired scriptable object, and wrap it in a PyXA-compatible class. + +This approach allows you to quickly access large lists of scriptable objects such as all notes, songs, or photos. As evidence: the list-fetching portion of script below takes only 64 milliseconds to complete on my machine despite me having well over 2000 notes, 2000 songs, and 8000 photos. + +.. code-block:: Python + + import PyXA + from datetime import datetime + + music_app = PyXA.Application("Music") + notes_app = PyXA.Application("Notes") + photos_app = PyXA.Application("Photos") + + time_1 = datetime.now() + tracks = music_app.tracks() + notes = notes_app.notes() + photos = photos_app.media_items() + time_2 = datetime.now() + + print(time_2 - time_1) + # 0:00:00.063908 + +In addition to speed, `XALists` provide batch operation capabilities. When working with a list of PyXA objects, all properties of those objects can be accessed via method calls on the list wrapper class. For example, you can retrieve the plaintext of every note, the name of every Music track, or the filename of every photo by just calling the appropriate method on the associated list object. The example below illustrates the latter. + +.. code-block:: Python + + import PyXA + from datetime import datetime + + photos_app = PyXA.Application("Photos") + + time_1 = datetime.now() + photos = photos_app.media_items() + print(photos.filename()) + time_2 = datetime.now() + + print(time_2 - time_1) + # ['IMG_0497.PNG', 'IMG_4341.JPG', 'IMG_2482.JPG', 'IMG_0488.JPG', ...] + # 0:00:00.691846 + +As you can see, this operation is also very speedy, even for large photo collections. Using multithreaded enumeration, PyXA sends many Apple Events requesting the filename property for each photo. Since each Apple Event involves a retrieving a single unicode property, without requiring any recursive queries, the entire operation can be done in well under a second. Note that the photo objects still have yet to be fully evaluated at this point. + +Forcing Evaluation +------------------ + +To force evaluation of an object, request it by index or by using the :func:`~PyXA.XABase.XAList.first` or :func:`~PyXA.XABase.XAList.last` methods, or by a specialized :func:`~PyXA.XABase.XAList.by_property` method (such as :func:`PyXA.apps.PhotosApp.XAPhotosMediaItemList.by_filename()`). The code below showcases each of these approaches: + +.. code-block:: Python + + import PyXA + from datetime import datetime + + photos_app = PyXA.Application("Photos") + + time_1 = datetime.now() + photos = photos_app.media_items() + + photo_1 = photos[0] + photo_2 = photos[-1] + photo_3 = photos.at(0) + photo_4 = photos.at(-1) + photo_5 = photos.first + photo_6 = photos.last + photo_7 = photos.by_filename("IMG_0497.PNG") + time_2 = datetime.now() + + print(time_2 - time_1) + # 0:00:01.201319 + +This script takes a bit longer than the previous ones due to the many requests for scriptable object references. Still, the overall process remains far faster than if we didn't do lazy evaluation at all. + +For comparison, if we force evaluation on each object in a list by iterating over the list, we find that getting a property value for each object takes a significant amount of time. The script below uses the iterative approach to get the name of each note, and it took almost half a minute on my machine. Attempting this form of batch operation on 8000+ photos would take an even longer time. + +.. code-block:: Python + + import PyXA + from datetime import datetime + + notes_app = PyXA.Application("Notes") + + time_1 = datetime.now() + notes = notes_app.notes() + names = [] + for note in notes: + names.append(note.name) + time_2 = datetime.now() + + print(names) + print(time_2 - time_1) + # ['Note 1', 'Note 2', ...] + # 0:00:33.767063 + +Filters +------- + +Filter methods can be used to narrow down the list of objects, thereby making iteration more feasible. The script below uses a filter to narrow the list of all tracks down to just the tracks whose artist is Adele. + +.. code-block:: Python + + import PyXA + from datetime import datetime + + music_app = PyXA.Application("Music") + + time_1 = datetime.now() + tracks = music_app.tracks().filter("artist", "==", "Adele") + time_2 = datetime.now() + + print(tracks.name()) + print(time_2 - time_1) + # ['Hello', 'Chasing Pavements', 'Skyfall', ...] + # 0:00:00.076569 + +PyXA provides several convenience methods for retrieving lists matching simple filters. These methods include :func:`~PyXA.XABase.XAList.equalling`, :func:`~PyXA.XABase.XAList.not_equalling`, :func:`~PyXA.XABase.XAList.containing`, :func:`~PyXA.XABase.XAList.beginning_with`, :func:`~PyXA.XABase.XAList.ending_width`, :func:`~PyXA.XABase.XAList.greater_than`, :func:`~PyXA.XABase.XAList.less_than`, and :func:`~PyXA.XABase.XAList.between`. Each of these methods returns an :class:`~PyXA.XABase.XAList` object containing the items matching the corresponding filter. The code below shows how many of the methods can be used. + +.. code-block:: Python + + import PyXA + notes = PyXA.Application("Notes") + print(app.notes().containing("body", "Hello").name()) + print(app.notes().containing("title", "Hello").name()) + # ['Note 1', 'Example Note', 'Another Note'] + # ['Hello, world!'] + + print(notes.notes().greater_than("creationDate", date(2022, 8, 30)).name()) + print(notes.notes().not_equalling("shared", True).name()) + # ["Aug. 31st Note"] + # ["Note 1", "Note 2", "Note 3", ...] + + music = PyXA.Application("Music") + print(music.tracks().between("playedCount", 10, 20)) + print(music.tracks().not_containing("name", "a")) + # <['Irresistible', 'Absent Minded (Piano Version)', "Say You Won't Let Go", ...]> + # <['Hello', 'Rolling in the Deep', ...]> + + photos = PyXA.Application("Photos") + print(photos.media_items().equalling("favorite", True)) + print(photos.media_items().beginning_with("name", "P")) + # <['CB24FE9F-E9DC-4A5C-A0B0-CC779B1CEDCE/L0/001', ...]> + # <['0BA38221-C569-4ACF-A3BD-967CB87EB7EB/L0/001']> + +You can also use :func:`~PyXA.XABase.XAList.by_property` to retrieve a single object from the list based on its property values. :func:`~PyXA.XABase.XAList.containing` will match the first object whose property value contains a given value, while :func:`~PyXA.XABase.XAList.by_property` will match the first object whose property value exactly matches the given value. The example below shows these methods at work. + +.. code-block:: Python + + import PyXA + from datetime import datetime + + music_app = PyXA.Application("Music") + + time_1 = datetime.now() + tracks = music_app.tracks() + track_1 = tracks.containing("name", "yfal") + track_2 = tracks.by_property("genre", "pop") + name_1 = track_1.name + name_2 = track_2.name + time_2 = datetime.now() + + print(name_1) + print(name_2) + print(time_2 - time_1) + # Skyfall + # Take On Me + # 0:00:00.144339 + +Bulk Actions +------------ + +In addition to improving the efficiency of automation workflows aiming to get values from numerous scriptable objects, `~PyXA.XABase.XAList` objects are a quick and convenient way to execute actions on many objects at a time. The available actions vary by object type. The script below uses this strategy to implement a rudimentary dark mode for Safari by setting the background of all tabs to black and their body text to white. + +.. code-block:: Python + + import PyXA + safari_app = PyXA.Application("Safari") + tabs = safari_app.front_window.tabs() + tabs.do_javascript("document.body.style.backgroundColor = 'black'; document.body.style.textColor = 'white';") + + +Adding New Elements +------------------- + +The :func:`~PyXA.XABase.XAList.push` method allows you to add new elements to a scriptable object list, thereby creating a scriptable object. This can be used to create new notes, new tabs, new playlists, and so on. + +.. code-block:: Python + + import PyXA + safari_app = PyXA.Application("Safari") + new_doc = safari_app.make("tab", {"URL": "http://www.google.com"}) + safari_app.front_window.tabs().push(new_doc) \ No newline at end of file diff --git a/sphinx/source/tutorial/menubar.rst b/sphinx/source/tutorial/menubar.rst new file mode 100644 index 0000000..c9af41d --- /dev/null +++ b/sphinx/source/tutorial/menubar.rst @@ -0,0 +1,246 @@ +Add Items to the Menu Bar +========================= + +The Basics +########## + +PyXA provides a straightforward way to add interactive items to the top menu bar of your Mac. Using the :class:`~PyXA.XABase.XAMenuBar` class, you can add new menus, attach items and actions to them, and customize them in just a few lines of code. For example, the four line code below creates a new menu titled "Hello" and places it on the right side of the menu bar, to the left of any existing items. + +.. code-block:: python + + import PyXA + menu_bar = PyXA.XAMenuBar() + m1 = menu_bar.new_menu("Hello!") + menu_bar.display() + +This code instantiates a new :class:`~PyXA.XABase.XAMenuBarMenu` object with "Hello" as its title text, then displays the menu in the system status bar. We haven't added any interactivity yet, but PyXA already handles the task of adding a "Quit" option to the menu. Helpful! When you run this code, you should see something along these lines (though your icons may be in a different order): + +.. image:: ../_static/assets/HelloMenu.png + +Note that, unlike many other PyXA features, your menu bar script will stay running until you specific tell it to quit. This allows you to create create customizations to your menu bar that persist throughout your work session. If you set the script to run on startup, you can create a persistent modification to the menu bar in this way. + +The script above creates menu button that currently doesn't do anything. To add interactivity, use the :func:`~PyXA.XABase.XAMenuBarMenu.new_item` method to associate a menu item with some method. Continuing our example, let's add a menu item that, when clicked, prints "Hi" to the Terminal. This change can be made by adding a single line, as seen below: + +.. code-block:: python + + import PyXA + menu_bar = PyXA.XAMenuBar() + menu = menu_bar.new_menu("Hello!") + item = menu.new_item(content="Print Hi", action=lambda item, *args: print("Hi")) + menu_bar.display() + +The :func:`~PyXA.XABase.XAMenuBarMenu.new_item` method associates an action method to a menu item with a given ID. When that item is clicked by the user, the action method will be executed. The above code, when run, produces the following menu: + +.. image:: ../_static/assets/PrintHi.png + +The code above uses a lambda function to specify our method; this is a convenient way to write the code concisely, but you can also pass in a normal function name to achieve the same effect. The code above can also be expressed as: + +.. code-block:: python + + import PyXA + + def print_hi(item, *args): + print("Hi") + + menu_bar = PyXA.XAMenuBar() + menu = menu_bar.new_menu("Hello!") + item = menu.new_item(content="Print Hi", action=print_hi) + menu_bar.display() + +.. image:: ../_static/assets/PrintHiImage.png + +Menus, menu items, and subitems all accept an optional `action` argument, allowing you to set a method to be executed when a menu is opened or a menu item is clicked. + +.. code-block:: python + + import PyXA + + # State-based images + on_icon = PyXA.XAImage.symbol("sun.max") + off_icon = PyXA.XAImage.symbol("moon") + state = True + + def toggle_state(menu, button): + global state + if button == 1: + # Handle right click -- toggle state + state = not state + menu.icon = on_icon if state else off_icon + + # Create and display the menu + menu_bar = PyXA.XAMenuBar() + menu = menu_bar.new_menu(icon=on_icon, action=toggle_state) + menu_bar.display() + +To add a submenu to a menu item, use :func:`~PyXA.XABase.XAMenuBarMenuItem.new_subitem`. Likewise, to add a non-interactive separator item, use :func:`~PyXA.XABase.XAMenuBarMenu.add_separator`. Using these building blocks, you can easily add additional menus and menu items, further extending the functionality of your menu bar. A few examples are provided below. + +Example 1 - Application Launcher +******************************** + +.. code-block:: python + + import PyXA + + # Initialize application objects + safari = PyXA.Application("Safari") + messages = PyXA.Application("Messages") + notes = PyXA.Application("Notes") + shortcuts = PyXA.Application("Shortcuts") + discord = PyXA.Application("Discord") + github = PyXA.Application("GitHub Desktop") + vscode = PyXA.Application("Visual Studio Code") + + # Construct the menu + menu_bar = PyXA.XAMenuBar() + app_menu = menu_bar.new_menu(icon=PyXA.XAImage.symbol("square.grid.2x2")) # Give the menu an app grid-esque icon + app_menu.new_item(content="Safari", action=lambda *args: safari.activate(), icon=safari.icon) # Use the application icons as menu item images + app_menu.new_item("Messages", action=lambda *args: messages.activate(), icon=messages.icon) + app_menu.new_item("Notes", action=lambda *args: notes.activate(), icon=notes.icon) + app_menu.new_item("Shortcuts", action=lambda *args: shortcuts.activate(), icon=shortcuts.icon) + app_menu.new_item("Discord", action=lambda *args: discord.activate(), icon=discord.icon) + app_menu.new_item("GitHub Desktop", action=lambda *args: github.activate(), icon=github.icon) + app_menu.new_item("Visual Studio Code", action=lambda *args: vscode.activate(), icon=vscode.icon) + menu_bar.display() + +Example 2 - Emoji Bookmarks +*************************** + +.. code-block:: python + + import PyXA + menu_bar = PyXA.XAMenuBar() + m1 = menu_bar.new_menu("🌦") + m1.new_item("Weather.gov", action=lambda *args: PyXA.XAURL("https://www.weather.gov").open()) + m1.new_item("Weather.com", action=lambda *args: PyXA.XAURL("https://weather.com/weather/today").open()) + m1.new_item("Accuweather.com", action=lambda *args: PyXA.XAURL("https://www.accuweather.com").open()) + + m2 = menu_bar.new_menu("📖") + m2.new_item("Develop in Swift", action=lambda *args: PyXA.XAURL("https://books.apple.com/us/book/develop-in-swift-fundamentals/id1511184145").open()) + m2.new_item("NYTimes", action=lambda *args: PyXA.XAURL("https://www.nytimes.com").open()) + m2.new_item("New York Public Library", action=lambda *args: PyXA.XAURL("https://www.nypl.org").open()) + + m3 = menu_bar.new_menu("🦊") + m3.new_item("Random Fox Image", action=lambda *args: PyXA.XAURL("https://randomfox.ca").open()) + m3.new_item("Random Duck Image", action=lambda *args: PyXA.XAURL("https://generatorfun.com/random-duck-image").open()) + m3.new_item("Random Cat Image", action=lambda *args: PyXA.XAURL("https://genrandom.com/cats/").open()) + menu_bar.display() + +Example 3 - Application Controller +********************************** + +.. code-block:: python + + import PyXA + + menu_bar = PyXA.XAMenuBar() + menu = menu_bar.new_menu("⚙️") + menu.new_item("Minimize all windows", action=lambda *args: PyXA.running_applications().windows().collapse(), icon=PyXA.XAImage.symbol("dock.arrow.down.rectangle")) + menu.new_item("Hide all applications", action=lambda *args: PyXA.running_applications().hide(), icon=PyXA.XAImage.symbol("eye.slash")) + menu.new_item("Quite all applications", action=lambda *args: PyXA.running_applications().terminate(), icon=PyXA.XAImage.symbol("xmark.circle")) + menu_bar.display() + +Customization +############# + +You can customize your menu bar items by adding images to them, as well as by adjusting the width and height of the images. Additional customization options might be added in the future. + +To display an image on the menu bar, create an :class:`~PyXA.XABase.XAImage` object and set it as the image argument when calling :func:`~PyXA.XABase.XAMenuBar.new_menu`. The example below shows this in action -- and it even draws the image from an online source (though you could just as easily use a local source instead). When calling :func:`~PyXA.XABase.XAMenuBar.new_menu`, you can also specify the `image_dimensions` argument to customize the size of the image. + +.. code-block:: python + + import PyXA + img = PyXA.XAImage("https://www.nasa.gov/sites/default/files/thumbnails/image/main_image_star-forming_region_carina_nircam_final-5mb.jpg") + menu_bar = PyXA.XAMenuBar() + menu_bar.new_menu(icon=img, icon_dimensions=(100, 50)) + menu_bar.display() + +.. image:: ../_static/assets/JWSTMenuBar.png + +You can update the image during runtime by setting the :attr:`~PyXA.XABase.XAMenuBarMenu.image` and :attr:`~PyXA.XABase.XAMenuBarMenu.image_dimensions` attributes. The code below displays a random fox image in the menu bar and allows users to click a "Random Fox" menu item to retrieve a new image. + +.. code-block:: python + + import PyXA + import requests + + def random_fox_link() -> str: + response = requests.get("https://randomfox.ca/floof/") + json_data = response.json() + return json_data["image"] + + def update_image(item, button, menu, *args): + img = PyXA.XAImage(random_fox_link()) + menu.icon = img + + img = PyXA.XAImage(random_fox_link()) + menu_bar = PyXA.XAMenuBar() + menu = menu_bar.new_menu(icon=img, icon_dimensions=(80, 44)) + menu.new_item("Random Fox", action=update_image, args=[menu]) + menu_bar.display() + +You can also add images to menu items in a similar manner. When calling :func:`PyXA.XABase.XAMenuBarMenu.new_item`, provide an `image` argument alongside an optional `image_dimensions` argument. The example below creates three menu items, each with an image attached. While the width and height for a menu in the menu bar is limited to the available space, there is no such restriction for items within menus -- you can set the image to be as large or as small as you want. + +.. code-block:: python + + import PyXA + + icon1 = PyXA.XAImage("/Users/exampleUser/Documents/icon1.jpg") + icon2 = PyXA.XAImage("/Users/exampleUser/Documents/icon2.jpg") + icon3 = PyXA.XAImage("/Users/exampleUser/Documents/icon3.jpg") + + menu_bar = PyXA.XAMenuBar() + menu = menu_bar.new_menu("Menu 1") + menu.new_item("Item 1", icon=icon1) + menu.new_item("Item 2", icon=icon2, icon_dimensions=(300, 300)) + menu.new_item("Item 3", icon=icon3, icon_dimensions=(500, 250)) + menu_bar.display() + +.. image:: ../_static/assets/MenuItemImages.png + +Another way to customize your menus is by modifying the text that they display. By default, menus and menu items will display the name that they are given upon creation, but you can modify the displayed text by setting the :attr:`~PyXA.XABase.XAMenuBarMenuItem.title` attribute. The example below uses this feature to create a near-live CPU monitor in the menu bar: + +.. code-block:: python + + import PyXA + import psutil + import threading + + update_interval = 1 + + def set_update_interval(slider, *args): + global update_interval + update_interval = (slider.value * 10 + 1) / 100 + + menu_bar = PyXA.XAMenuBar() + graph_menu = menu_bar.new_menu(icon_dimensions=(5, 20)) + text_menu = menu_bar.new_menu("CPU: 0%") + + slider_label = graph_menu.new_item("Update Interval") + slider_label.enabled = False + + interval_slider = graph_menu.new_slider_item(action=set_update_interval) + interval_slider.value = 9.9 + + def update_display(): + while True: + # Get CPU utilization, update title text + cpu_usage = psutil.cpu_percent(update_interval) + message = "CPU: " + str(cpu_usage) + "%" + text_menu.content = message + + # Construct graph image + used_graph_height = 20 * cpu_usage / 100.0 + used_color = PyXA.XAColor.green() if cpu_usage < 60 else PyXA.XAColor.red() + used_swatch = used_color.make_swatch(5, used_graph_height + 1) + divider_swatch = PyXA.XAColor.black().make_swatch(5, 2) + free_swatch = PyXA.XAColor.gray().make_swatch(5, 20 - used_graph_height) + + # Display utilization graph + graph_img = PyXA.XAImage.vertical_stitch([used_swatch, divider_swatch, free_swatch]) + graph_menu.icon = graph_img + + cpu_monitor = threading.Thread(target=update_display) + cpu_monitor.start() + menu_bar.display() + +.. image:: ../_static/assets/CPUMonitor.png \ No newline at end of file diff --git a/sphinx/source/tutorial/spotlight.rst b/sphinx/source/tutorial/spotlight.rst new file mode 100644 index 0000000..3380cb4 --- /dev/null +++ b/sphinx/source/tutorial/spotlight.rst @@ -0,0 +1,103 @@ +Searching Spotlight +=================== +The :class:`PyXA.XABase.XASpotlight` class allows you to search Spotlight and obtain :class:`~PyXA.XABase.XAPath` references to files. With this, you can easily locate and open files with particular names, containing particular content, or modified on a particular date. The examples below show how to carry out such tasks. + +Simple Searches +--------------- +To perform a simple term-based file search, instantiate a :class:`~PyXA.XABase.XASpotlight` object and provide a search term as an argument, as seen in the code below. This will instruct PyXA to prepare a new Spotlight search, but it won't begin the search until you actually attempt to access the results. When you provide a string, integer, or float as a search term, PyXA searches for files where the term appears in their display name, file system name, or text content. The search can take some time depending on how many items match the search, but usually completes within a second. The results of a search are given as a list of :class:`~PyXA.XABase.XAPath` objects. + + >>> import PyXA + >>> search = PyXA.XASpotlight("Example") + >>> print(search.results) + [<file:///Users/exampleUser/Documents/ExampleFile1.txt>, <file:///Users/exampleUser/Documents/ExampleFile2.pdf>, ...] + +The more specific your query is, the less time the search will take. The easiest way to increase the specificity is to provide a longer search string, as in the following example: + + import PyXA + search = PyXA.XASpotlight("This is a test") + print(len(search.results)) + 10 + +Alternatively, you can supply multiple arguments to check for multiple terms. Doing this instructs PyXA to search for files where all of the supplied terms are found in the name or content of the file. For example, a text file named "test.txt" containing the text "This is awesome" would appear in the first search below but not the second. In the first search, we are looking for files where "this" appears in the filename or content, "is" appears in the filename or content, "a" appears in the filename or content, and "test" appears in the filename or content. Our example file has "test" in its name, and "this", "is", and "a" all appear in its content, thus the file would appear in the search results. For the second search, we are looking for files where "This is" appears in the filename or content and "a test" appears in the filename or content. Our example file does not match that condition, thus it would not appear in the search results. + + >>> import PyXA + >>> search = PyXA.XASpotlight("This", "is", "a", "test") + >>> print(len(search.results)) + 40022 + + >>> import PyXA + >>> search = PyXA.XASpotlight("This is", "a test") + >>> print(len(search.results)) + 49 + +Note that the first search above returned over 800 times more results than the second and thus takes noticeably longer to finish. Just as before, providing longer search strings increases the specificity of the query, helping Spotlight to more quickly narrow down the search results. When providing multiple arguments, you can also increase specificity by simply providing more arguments, as highlighted by the two code snippets below: + + >>> search = PyXA.XASpotlight("This", "is", "a", "test", "avocado") + >>> print(len(search.results)) + 15 + + >>> search = PyXA.XASpotlight("This", "is", "a", "test", "avocado", "quack") + >>> print(len(search.results)) + 2 + +If you find that searches are taking too long, you can increase the specificity of your search query in any of the following ways: +- Use terms less likely to appear in many files +- Use longer strings, combining multiple words in one argument +- Use multiple search terms, providing multiple words as separate arguments +- Combining all of the above methods + + +Search by Date +-------------- +PyXA also provides a mechanism to search Spotlight by date. To perform a simple date-based search, instantiate a :class:`~PyXA.XABase.XASpotlight` object and pass a :class:`datetime` object as an argument. This instructs PyXA to search for files created, added, or modified within the surrounding 24-hour period (plus or minus 12 hours from the supplied datetime). + + >>> import PyXA + >>> from datetime import datetime + >>> search = PyXA.XASpotlight(datetime.now()) + >>> print(search.results) + [<file:///Users/exampleUser/Documents/>, <file:///Users/exampleUser/Documents/GitHub/>, ...] + +To search for files created, added, or modified within a specific time range, you can supply two datetime objects as arguments, as seen in the example below: + + >>> import PyXA + >>> from datetime import date, datetime, time + >>> date1 = datetime.combine(date(2022, 5, 17), time(0, 0, 0)) + >>> date2 = datetime.combine(date(2022, 5, 18), time(0, 0, 0)) + >>> search = PyXA.XASpotlight(date1, date2) + >>> print(search.results) + [<file:///Users/exampleUser/Downloads/>, <file:///Users/exampleUser/Downloads/Example.txt>, ...] + +You can also combined these two date-based search methods with term-based ones by adding additional arguments. The date(s) must always come before the term(s). All previously noted strategies for increasing query specificity still apply. The two code snippets below showcase this in action. + + >>> import PyXA + >>> search = PyXA.XASpotlight(datetime.now(), "This", "is", "a", "test") + >>> print(len(search.results)) + 42 + + >>> import PyXA + >>> search = PyXA.XASpotlight(datetime.now() - timedelta(minutes=5), datetime.now(), "This is a test") + >>> print(len(search.results)) + 2 + + +Search by Predicate +------------------- +PyXA allows you to supply your own predicate to filter search results by. You can supply the predicate as either a raw string or as an :class:`~:PyXA.XABase.XAPredicate` object. For the former, use Apple's documentation on `File Metadata Query Expression Syntax`_ as a reference. The following examples show how to use both strategies. + + >>> import PyXA + >>> search = PyXA.XASpotlight() + >>> search.predicate = "kMDItemDisplayName == 'Example.txt'" + >>> search.run() + >>> print(search.results) + [<file:///Users/exampleUser/Downloads/Example.txt>] + + >>> import PyXA + >>> search = PyXA.XASpotlight() + >>> predicate = PyXA.XAPredicate() + >>> predicate.add_eq_condition("kMDItemDisplayName", "Example.txt") + >>> search.predicate = predicate + >>> search.run() + >>> print(len(search.results)) + [<file:///Users/exampleUser/Downloads/Example.txt>] + +.. _File Metadata Query Expression Syntax: https://developer.apple.com/library/archive/documentation/Carbon/Conceptual/SpotlightQuery/Concepts/QueryFormat.html#//apple_ref/doc/uid/TP40001849 \ No newline at end of file diff --git a/sphinx/source/tutorial/tips_tricks.rst b/sphinx/source/tutorial/tips_tricks.rst new file mode 100644 index 0000000..a00b91a --- /dev/null +++ b/sphinx/source/tutorial/tips_tricks.rst @@ -0,0 +1,6 @@ +Tips and Tricks +=============== + +1. Know when and when not to chain commands. You might be tempted to use a batch operation such as `PyXA.Application("Notes").notes().plaintext()` to obtain the text of each note, but then you will _only_ have the unicode text, not references to the note objects. If you're going to need the note objects, you should store a reference to the list of notes in a separate variable, then run batch operations via that reference. On the other hand, you should make use of PyXA's command chaining where reasonable to improve the overall clarity of your code and maintain its syntactic similarity to JXA. + +2. Use :class:`~PyXA.XABase.XAList` and its child classes whenever dealing with lists of PyXA objects. Bulk methods on :class:`~PyXA.XABase.XAList` objects are often significantly faster (sometimes over 56x faster) than using non-bulk methods and regular iteration over a list. \ No newline at end of file diff --git a/sphinx/source/tutorial/ui_scripting.rst b/sphinx/source/tutorial/ui_scripting.rst new file mode 100644 index 0000000..b129e60 --- /dev/null +++ b/sphinx/source/tutorial/ui_scripting.rst @@ -0,0 +1,36 @@ +UI Scripting +============ + +PyXA supports using System Events to script the UI of otherwise non-scriptable applications. In fact, PyXA uses this functionality to provide scripting features for several applications, including Maps and Stocks. + +The process for scripting an application's UI starts with getting its window object, from which you can call various methods, such as :func:`~PyXA.apps.SystemEvents.XASystemEventsWindow.groups` and :func:`~PyXA.apps.SystemEvents.XASystemEventsWindow.toolbars`, to obtain lists of UI elements. These methods provide access to all UI element types listed in the System Events scripting dictionary. Lists of elements obtained in this fashion are instances of :class:`~PyXA.apps.SystemEvents.XASystemEventsUIElementList`, a subclass of :class:`~PyXA.XABase.XAList`. You can use bulk methods on a list of UI elements to retrieve information about the list's contents. For example, you can call :func:`~PyXA.apps.SystemEvents.XASystemEventsUIElementList.object_description` to get the accessibility or role description of all elements in the list. List filtration methods such as :func:`~PyXA.apps.SystemEvents.XASystemEventsUIElementList.by_object_description` allow you to efficiently access elements with particular property values. + +Retrieving an element from an :class:`~PyXA.apps.SystemEvents.XASystemEventsUIElementList` object will return a instance of :class:`~PyXA.apps.SystemEvents.XASystemEventsUIElement`. You can then obtain the properties of the UI element via the object's attributes. Upon doing so, the reference to the AppleScript scripting object will be evaluated, causing one or more Apple Events to be sent. This behavior makes it possible to quickly traverse the UI hierarchy without sending unnecessary Apple Events and causing slowdowns. + +Once you have a reference to a specific UI element, you can call methods such as :func:`~PyXA.apps.SystemEvents.XASystemEventsButton.click` to carry out actions on that element, or you can obtain a list of actions by calling :func:`~PyXA.apps.SystemEvents.XASystemEventsUIElement.actions`. Call :func:`~PyXA.apps.SystemEvents.XASystemEventsAction.perform` to perform a particular action. + +An example of this process is provided below. + +.. code-block:: python + + from time import sleep + import PyXA + + podcasts = PyXA.Application("Podcasts") + + # Get the list of podcast playback controls + playback_buttons = podcasts.front_window.groups()[0].groups()[0].groups()[0].groups()[0].groups()[0].groups()[0].groups()[1].groups()[0].groups()[0].groups()[2].groups()[0].groups()[0].buttons() + + # Get buttons by property value + rewind_button = playback_buttons.by_object_description("Rewind") + play_button = playback_buttons.by_object_description("Play") + skip_button = playback_buttons.by_object_description("Skip") + + # Click the buttons + play_button.click() + sleep(1) + skip_button.click() + sleep(1) + rewind_button.click() + +In this example, we obtain a list of buttons by traversing the UI hierarchy of the Podcasts app to reach the specific group containing the rewind, play, and skip forward buttons at the top of the window. You can use macOS's built-in `Accessibility Inspector` application to help identify the element hierarchy. Once we have the list of buttons, we obtain references to each individual button according to its object description. We then call the :func:`~PyXA.apps.SystemEvents.XASystemEventsButton.click` method of each button to observe its effect. \ No newline at end of file diff --git a/sphinx/source/tutorial/user_input.rst b/sphinx/source/tutorial/user_input.rst new file mode 100644 index 0000000..94268c0 --- /dev/null +++ b/sphinx/source/tutorial/user_input.rst @@ -0,0 +1,221 @@ +Getting User Input +================== +PyXA provides several ways to get user input via dialogs, menus, and other familiar means. You can still use Python's :func:`input` method to get keyboard input, and you can use Python's built-in support for commandline arguments to get input in that way as well. Additional input methods (such as detecting keystrokes and/or mouseclicks in other applications) will be added in a future version of PyXA, but other packages exist that already offer such functionality. + +Alerts +------ + +.. code-block:: Python + + import PyXA + response = PyXA.XAAlert( + title = "Alert!", + message = "", + style = PyXA.XAAlertStyle.INFORMATIONAL, + buttons = ["Ok", "Cancel"] + ).display() + print(response) + # 1000 + + +Dialogs +------- + +.. code-block:: Python + + import PyXA + response = PyXA.XADialog( + text = "This is a dialog", + title = "Notice", + buttons = ["Ok", "Cool", "Thanks"], + icon = "caution", + ).display() + print(response) + # Cool + +.. code-block:: Python + + import PyXA + response = PyXA.XADialog( + text = "What is your name?", + title = "What is your name?", + buttons = ["Continue"], + default_button = "Continue", + icon = "note", + default_answer = "" + ).display() + print("Your name is", response[1]) + # Your name is Steven + +.. code-block:: Python + + import PyXA + response = PyXA.XADialog( + text = "Enter the secret", + title = "Super Secret", + buttons = ["Continue"], + default_button = "Continue", + icon = "note", + default_answer = "", + hidden_answer = True + ).display() + print("The secret message was", response[1]) + # The secret message was 42 + + + +Menus +----- + +.. code-block:: Python + + import PyXA + response = PyXA.XAMenu( + menu_items = ['Option 1', 'Option 2', 'Option 3'], + title = "Select Item", + prompt = "Select an item", + default_items = ['Option 2'], + ok_button_name = "Okay", + cancel_button_name = "Cancel", + multiple_selections_allowed = False, + empty_selection_allowed = False + ).display() + print(response) + # Option 2 + + +File and Folder Pickers +----------------------- + +.. code-block:: Python + + import PyXA + response = PyXA.XAFilePicker( + prompt = "Choose File", + types = ["png"], + default_location = "/", + show_invisibles = False, + multiple_selections_allowed = False, + show_package_contents = False + ).display() + print(response) + # <file:///Users/ExampleUser/Desktop/Example.png> + +.. code-block:: Python + + import PyXA + response = PyXA.XAFolderPicker( + prompt = "Choose Folder", + default_location = "/", + show_invisibles = False, + multiple_selections_allowed = True, + show_package_contents = False + ).display() + print(response) + # [<file:///Applications/>, <file:///Library/>] + + +File Name Dialogs +----------------- + +.. code-block:: Python + + import PyXA + response = PyXA.XAFileNameDialog( + prompt = "Choose Folder", + default_name = "New File", + default_location = "/Users/Shared", + ).display() + print(response) + # <file:///Users/Shared/New%20File> + + +Color Pickers +------------- + +.. code-block:: Python + + import PyXA + response = PyXA.XAColorPicker( + style = PyXA.XAColorPickerStyle.CRAYONS + ).display() + print(response) + # <r=1.0, g=0.8323456645, b=0.4732058644, a=1.0> + + +Command Detectors +----------------- + +.. code-block:: Python + + import PyXA + + def open_google(): + PyXA.XAURL("https://google.com").open() + + detector = PyXA.XACommandDetector() + detector.on_detect("go to Google", open_google) + detector.on_detect("go to Bing", lambda : PyXA.XAURL("https://bing.com").open()) + detector.listen() + + +If you want to detect an exact command and display the standard macOS Voice Control interface, use a :class:`PyXA.XABase.XACommandDetector` object. If you want to detect whether a user's spoken input passes a certain rule, or if you want the command detection to occur without displaying an graphical interface, use :class:`PyXA.XABase.XASpeechRecognizer`. + +Speech Recognizers +------------------ + +.. code-block:: Python + + import PyXA + listener = PyXA.XASpeechRecognizer() + result = listener.listen() + if result == "Hi": + PyXA.speak("Hey!") + +.. code-block:: Python + + import PyXA + import re + + listener = PyXA.XASpeechRecognizer({ + lambda s: s.lower() == "open google": lambda _: PyXA.XAURL("https://google.com").open(), + }) + regex = re.compile(r'^(Open|Go to|Site|Jump to|Show me) (b|B)ing') + listener.on_detect(lambda s: regex.match(s) != None, lambda _: PyXA.XAURL("https://bing.com").open()) + result = listener.listen() + +.. code-block:: Python + + import PyXA + + def detect_website_query(query: str) -> bool: + """Detects queries of the form "Go to [website name]". + + :param query: The query to assess + :type query: str + :return: True if the query matches the form "Go to [website name]" for any of the supported websites + :rtype: bool + """ + site_names = ["google", "bing", "duckduckgo", "yahoo"] + return query.startswith("Go to ") and any([query.lower().endswith(x) for x in site_names]) + + def go_to_website(query: str) -> PyXA.XAURL: + """Opens a website specified in a query of the form "Go to [website name]". + + :param query: The query to respond to + :type query: str + :return: The url as a PyXA XAURL object + :rtype: PyXA.XAURL + """ + site = query[6:] + url = PyXA.XAURL("https://" + site + ".com") + url.open() + return url + + listener = PyXA.XASpeechRecognizer({ + detect_website_query: go_to_website, + }) + + result = listener.listen() + print(result) + # <https://Bing.com> \ No newline at end of file