import argparse from configparser import ConfigParser, NoOptionError from datetime import datetime, timezone import sys from suntime import Sun, SunTimeException from xdg import xdg_config_home def get_location(args): if args.latitude is not None and args.longitude is not None: return args.latitude, args.longitude config = ConfigParser() config_location = xdg_config_home().joinpath("auto-dark-mode", "config") try: with open(config_location) as stream: config.read_string("[auto-dark-mode]\n" + stream.read()) config.read(config_location) latitude = config.getfloat("auto-dark-mode", "latitude") longitude = config.getfloat("auto-dark-mode", "longitude") except (FileNotFoundError, NoOptionError): sys.exit( f"Please supply latitude and longitude with the --latitude and --longitude flags, or set them in {config_location}" ) return latitude, longitude if __name__ == "__main__": parser = argparse.ArgumentParser( description="Check if we're in day (after sunrise but before sunset) or night (after sunset but before sunrise) time" ) parser.add_argument( "--day", action="store_true", default=False, help="return successfully if it's day", ) parser.add_argument( "--night", action="store_true", default=True, help="return successfully if it's night (default)", ) parser.add_argument("--latitude", type=float, help="specify your latitude") parser.add_argument("--longitude", type=float, help="specify your longitude") args = parser.parse_args() latitude, longitude = get_location(args) try: sun = Sun(latitude, longitude) except SunTimeException: sys.exit("Could not determine sunrise/sunset times") utc_now = datetime.now(timezone.utc) if utc_now > sun.get_sunrise_time() and utc_now < sun.get_sunset_time(): if not args.day: sys.exit(1) else: if args.day: sys.exit(1)