def __init__(self, name: str = None, path: str = None): check(name, "name", [str, None]) check(path, "path", [str, None]) self.__bookmark_name__ = name if self.__type__ is None: raise NotImplementedError( "Initialized an instance of StoredBookmark. Use FileBookmark or FolderBookmark instead." ) if name is not None: try: value = __stored_bookmarks__()[name] data = NSData.alloc().initWithBase64EncodedString(value, options=0) url = NSURL.URLByResolvingBookmarkData( data, options=0, relativeToURL=None, bookmarkDataIsStale=None, error=None, ) if url is not None: url.startAccessingSecurityScopedResource() self.path = str(url.path) return return except KeyError: pass if path is None: picker = sharing.FilePicker() picker.file_types = [self.__type__] picker.allows_multiple_selection = False sharing.pick_documents(picker) try: self.path = sharing.picked_files()[0] except IndexError: raise ValueError("No file selected") else: self.path = os.path.abspath(path) if name is None: return bookmark = NSURL.fileURLWithPath(self.path).bookmarkDataWithOptions( 1024, includingResourceValuesForKeys=[], relativeToURL=None, error=None ) bookmark = bookmark.base64EncodedStringWithOptions(0) bookmarks = __stored_bookmarks__() bookmarks[name] = str(bookmark) userkeys.set(bookmarks, __key__)
""" This script is an example of how importing files from other apps. """ import sharing filePicker = sharing.FilePicker.new() filePicker.fileTypes = ["public.data"] # UTI types to import filePicker.allowsMultipleSelection = True # Or `False` to import just one file def files_picked() -> None: """ This function is called when files are picked. """ files = sharing.picked_files() # Picked files as NSURLs for file in files: print(f"Do something with {file.path}") filePicker.completion = files_picked sharing.pick_documents(filePicker)