forked from mirrors/gecko-dev
		
	 02a7b4ebdf
			
		
	
	
		02a7b4ebdf
		
	
	
	
	
		
			
			Allow-list all Python code in tree for use with the black linter, and re-format all code in-tree accordingly. To produce this patch I did all of the following: 1. Make changes to tools/lint/black.yml to remove include: stanza and update list of source extensions. 2. Run ./mach lint --linter black --fix 3. Make some ad-hoc manual updates to python/mozbuild/mozbuild/test/configure/test_configure.py -- it has some hard-coded line numbers that the reformat breaks. 4. Make some ad-hoc manual updates to `testing/marionette/client/setup.py`, `testing/marionette/harness/setup.py`, and `testing/firefox-ui/harness/setup.py`, which have hard-coded regexes that break after the reformat. 5. Add a set of exclusions to black.yml. These will be deleted in a follow-up bug (1672023). # ignore-this-changeset Differential Revision: https://phabricator.services.mozilla.com/D94045
		
			
				
	
	
		
			171 lines
		
	
	
	
		
			6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			171 lines
		
	
	
	
		
			6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #!/usr/bin/python
 | |
| # This Source Code Form is subject to the terms of the Mozilla Public
 | |
| # License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| """
 | |
| mac_desktop_image.py
 | |
| 
 | |
| Mac-specific utility to get/set the desktop background image or check that
 | |
| the current background image path matches a provided path.
 | |
| 
 | |
| Depends on Objective-C python binding imports which are in the python import
 | |
| paths by default when using macOS's /usr/bin/python.
 | |
| 
 | |
| Includes generous amount of logging to aid debugging for use in automated tests.
 | |
| """
 | |
| 
 | |
| from __future__ import absolute_import
 | |
| from __future__ import print_function
 | |
| 
 | |
| #
 | |
| # These Objective-C bindings imports are included in the import path by default
 | |
| # for the Mac-bundled python installed in /usr/bin/python. They're needed to
 | |
| # call the Objective-C API's to set and retrieve the current desktop background
 | |
| # image.
 | |
| #
 | |
| from AppKit import NSScreen, NSWorkspace
 | |
| from Cocoa import NSURL
 | |
| 
 | |
| import argparse
 | |
| import logging
 | |
| import os
 | |
| import sys
 | |
| 
 | |
| 
 | |
| def main():
 | |
|     parser = argparse.ArgumentParser(
 | |
|         description="Utility to print, set, or "
 | |
|         + "check the path to image being used as "
 | |
|         + "the desktop background image. By "
 | |
|         + "default, prints the path to the "
 | |
|         + "current desktop background image."
 | |
|     )
 | |
|     parser.add_argument(
 | |
|         "-v",
 | |
|         "--verbose",
 | |
|         action="store_true",
 | |
|         help="print verbose debugging information",
 | |
|         default=False,
 | |
|     )
 | |
|     group = parser.add_mutually_exclusive_group()
 | |
|     group.add_argument(
 | |
|         "-s",
 | |
|         "--set-background-image",
 | |
|         dest="newBackgroundImagePath",
 | |
|         required=False,
 | |
|         help="path to the new background image to set. A zero "
 | |
|         + "exit code indicates no errors occurred.",
 | |
|         default=None,
 | |
|     )
 | |
|     group.add_argument(
 | |
|         "-c",
 | |
|         "--check-background-image",
 | |
|         dest="checkBackgroundImagePath",
 | |
|         required=False,
 | |
|         help="check if the provided background image path "
 | |
|         + "matches the provided path. A zero exit code "
 | |
|         + "indicates the paths match.",
 | |
|         default=None,
 | |
|     )
 | |
|     args = parser.parse_args()
 | |
| 
 | |
|     # Using logging for verbose output
 | |
|     if args.verbose:
 | |
|         logging.basicConfig(level=logging.DEBUG)
 | |
|     else:
 | |
|         logging.basicConfig(level=logging.CRITICAL)
 | |
|     logger = logging.getLogger("desktopImage")
 | |
| 
 | |
|     # Print what we're going to do
 | |
|     if args.checkBackgroundImagePath is not None:
 | |
|         logger.debug(
 | |
|             "checking provided desktop image %s matches current "
 | |
|             "image" % args.checkBackgroundImagePath
 | |
|         )
 | |
|     elif args.newBackgroundImagePath is not None:
 | |
|         logger.debug("setting image to %s " % args.newBackgroundImagePath)
 | |
|     else:
 | |
|         logger.debug("retrieving desktop image path")
 | |
| 
 | |
|     focussedScreen = NSScreen.mainScreen()
 | |
|     if not focussedScreen:
 | |
|         raise RuntimeError("mainScreen error")
 | |
| 
 | |
|     ws = NSWorkspace.sharedWorkspace()
 | |
|     if not ws:
 | |
|         raise RuntimeError("sharedWorkspace error")
 | |
| 
 | |
|     # If we're just checking the image path, check it and then return.
 | |
|     # A successful exit code (0) indicates the paths match.
 | |
|     if args.checkBackgroundImagePath is not None:
 | |
|         # Get existing desktop image path and resolve it
 | |
|         existingImageURL = getCurrentDesktopImageURL(focussedScreen, ws, logger)
 | |
|         existingImagePath = existingImageURL.path()
 | |
|         existingImagePathReal = os.path.realpath(existingImagePath)
 | |
|         logger.debug("existing desktop image: %s" % existingImagePath)
 | |
|         logger.debug("existing desktop image realpath: %s" % existingImagePath)
 | |
| 
 | |
|         # Resolve the path we're going to check
 | |
|         checkImagePathReal = os.path.realpath(args.checkBackgroundImagePath)
 | |
|         logger.debug("check desktop image: %s" % args.checkBackgroundImagePath)
 | |
|         logger.debug("check desktop image realpath: %s" % checkImagePathReal)
 | |
| 
 | |
|         if existingImagePathReal == checkImagePathReal:
 | |
|             print("desktop image path matches provided path")
 | |
|             return True
 | |
| 
 | |
|         print("desktop image path does NOT match provided path")
 | |
|         return False
 | |
| 
 | |
|     # Log the current desktop image
 | |
|     if args.verbose:
 | |
|         existingImageURL = getCurrentDesktopImageURL(focussedScreen, ws, logger)
 | |
|         logger.debug("existing desktop image: %s" % existingImageURL.path())
 | |
| 
 | |
|     # Set the desktop image
 | |
|     if args.newBackgroundImagePath is not None:
 | |
|         newImagePath = args.newBackgroundImagePath
 | |
|         if not os.path.exists(newImagePath):
 | |
|             logger.critical("%s does not exist" % newImagePath)
 | |
|             return False
 | |
|         if not os.access(newImagePath, os.R_OK):
 | |
|             logger.critical("%s is not readable" % newImagePath)
 | |
|             return False
 | |
| 
 | |
|         logger.debug("new desktop image to set: %s" % newImagePath)
 | |
|         newImageURL = NSURL.fileURLWithPath_(newImagePath)
 | |
|         logger.debug("new desktop image URL to set: %s" % newImageURL)
 | |
| 
 | |
|         status = False
 | |
|         (status, error) = ws.setDesktopImageURL_forScreen_options_error_(
 | |
|             newImageURL, focussedScreen, None, None
 | |
|         )
 | |
|         if not status:
 | |
|             raise RuntimeError("setDesktopImageURL error")
 | |
| 
 | |
|     # Print the current desktop image
 | |
|     imageURL = getCurrentDesktopImageURL(focussedScreen, ws, logger)
 | |
|     imagePath = imageURL.path()
 | |
|     imagePathReal = os.path.realpath(imagePath)
 | |
|     logger.debug("updated desktop image URL: %s" % imageURL)
 | |
|     logger.debug("updated desktop image path: %s" % imagePath)
 | |
|     logger.debug("updated desktop image path (resolved): %s" % imagePathReal)
 | |
|     print(imagePathReal)
 | |
|     return True
 | |
| 
 | |
| 
 | |
| def getCurrentDesktopImageURL(focussedScreen, workspace, logger):
 | |
|     imageURL = workspace.desktopImageURLForScreen_(focussedScreen)
 | |
|     if not imageURL:
 | |
|         raise RuntimeError("desktopImageURLForScreen returned invalid URL")
 | |
|     if not imageURL.isFileURL():
 | |
|         logger.warning("desktop image URL is not a file URL")
 | |
|     return imageURL
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     if not main():
 | |
|         sys.exit(1)
 | |
|     else:
 | |
|         sys.exit(0)
 |