| @@ -28,7 +28,13 @@ from datetime import date | |||
| from . import dumper, environment, debug | |||
| from .date import parse_date | |||
| from .geolocation import get_position | |||
| from .utils import KOSMORRO_VERSION, KOSMORROLIB_VERSION, colored, set_colors_activated | |||
| from .utils import ( | |||
| KOSMORRO_VERSION, | |||
| KOSMORROLIB_VERSION, | |||
| colored, | |||
| set_colors_activated, | |||
| print_stderr, | |||
| ) | |||
| from .exceptions import ( | |||
| InvalidOutputFormatError, | |||
| UnavailableFeatureError, | |||
| @@ -52,7 +58,7 @@ def run(): | |||
| try: | |||
| compute_date = parse_date(args.date) | |||
| except ValueError as error: | |||
| print(colored(error.args[0], color="red", attrs=["bold"])) | |||
| print_stderr(colored(error.args[0], color="red", attrs=["bold"])) | |||
| return -1 | |||
| position = None | |||
| @@ -79,8 +85,7 @@ def run(): | |||
| ) | |||
| ) | |||
| if position is None: | |||
| print() | |||
| print( | |||
| print_stderr( | |||
| colored( | |||
| _( | |||
| "PDF output will not contain the ephemerides, because you didn't provide the observation " | |||
| @@ -109,15 +114,15 @@ def run(): | |||
| args.show_graph, | |||
| ) | |||
| except InvalidOutputFormatError as error: | |||
| print(colored(error.msg, "red")) | |||
| print_stderr(colored(error.msg, "red")) | |||
| debug.debug_print(error) | |||
| return 3 | |||
| except UnavailableFeatureError as error: | |||
| print(colored(error.msg, "red")) | |||
| print_stderr(colored(error.msg, "red")) | |||
| debug.debug_print(error) | |||
| return 2 | |||
| except DateRangeError as error: | |||
| print(colored(error.msg, "red")) | |||
| print_stderr(colored(error.msg, "red")) | |||
| debug.debug_print(error) | |||
| return 1 | |||
| @@ -128,11 +133,11 @@ def run(): | |||
| with open(args.output, opening_mode) as output_file: | |||
| output_file.write(file_content) | |||
| except UnavailableFeatureError as error: | |||
| print(colored(error.msg, "red")) | |||
| print_stderr(colored(error.msg, "red")) | |||
| debug.debug_print(error) | |||
| return 2 | |||
| except OSError as error: | |||
| print( | |||
| print_stderr( | |||
| colored( | |||
| _('The file could not be saved in "{path}": {error}').format( | |||
| path=args.output, error=error.strerror | |||
| @@ -146,7 +151,7 @@ def run(): | |||
| elif not output.is_file_output_needed(): | |||
| print(output) | |||
| else: | |||
| print( | |||
| print_stderr( | |||
| colored( | |||
| _("Please provide a file path to export in this format (--output)."), | |||
| color="red", | |||
| @@ -165,35 +170,32 @@ def get_information( | |||
| colors: bool, | |||
| show_graph: bool, | |||
| ) -> dumper.Dumper: | |||
| if position is not None: | |||
| try: | |||
| try: | |||
| if position is not None: | |||
| eph = get_ephemerides( | |||
| for_date=compute_date, position=position, timezone=timezone | |||
| ) | |||
| except OutOfRangeDateError as error: | |||
| raise DateRangeError(error.min_date, error.max_date) | |||
| else: | |||
| eph = [] | |||
| else: | |||
| eph = [] | |||
| try: | |||
| moon_phase = get_moon_phase(for_date=compute_date, timezone=timezone) | |||
| except OutOfRangeDateError as error: | |||
| moon_phase = None | |||
| print( | |||
| colored( | |||
| _( | |||
| "Moon phase can only be computed between {min_date} and {max_date}" | |||
| ).format( | |||
| min_date=format_date(error.min_date, "long"), | |||
| max_date=format_date(error.max_date, "long"), | |||
| ), | |||
| "yellow", | |||
| try: | |||
| moon_phase = get_moon_phase(for_date=compute_date, timezone=timezone) | |||
| except OutOfRangeDateError as error: | |||
| moon_phase = None | |||
| print_stderr( | |||
| colored( | |||
| _( | |||
| "Moon phase can only be computed between {min_date} and {max_date}" | |||
| ).format( | |||
| min_date=format_date(error.min_date, "long"), | |||
| max_date=format_date(error.max_date, "long"), | |||
| ), | |||
| "yellow", | |||
| ) | |||
| ) | |||
| ) | |||
| events_list = get_events(compute_date, timezone) | |||
| events_list = get_events(compute_date, timezone) | |||
| try: | |||
| return get_dumpers()[output_format]( | |||
| ephemerides=eph, | |||
| moon_phase=moon_phase, | |||
| @@ -205,6 +207,8 @@ def get_information( | |||
| ) | |||
| except KeyError as error: | |||
| raise InvalidOutputFormatError(output_format, list(get_dumpers().keys())) | |||
| except OutOfRangeDateError as error: | |||
| raise DateRangeError(error.min_date, error.max_date) | |||
| def get_dumpers() -> {str: dumper.Dumper}: | |||
| @@ -8,7 +8,7 @@ msgid "" | |||
| msgstr "" | |||
| "Project-Id-Version: PROJECT VERSION\n" | |||
| "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | |||
| "POT-Creation-Date: 2022-04-27 11:36+0000\n" | |||
| "POT-Creation-Date: 2022-04-29 12:01+0000\n" | |||
| "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |||
| "Language-Team: LANGUAGE <LL@li.org>\n" | |||
| @@ -17,94 +17,94 @@ msgstr "" | |||
| "Content-Transfer-Encoding: 8bit\n" | |||
| "Generated-By: Babel 2.10.1\n" | |||
| #: kosmorro/__main__.py:76 | |||
| #: kosmorro/__main__.py:82 | |||
| msgid "" | |||
| "Save the planet and paper!\n" | |||
| "Consider printing your PDF document only if really necessary, and use the" | |||
| " other side of the sheet." | |||
| msgstr "" | |||
| #: kosmorro/__main__.py:85 | |||
| #: kosmorro/__main__.py:90 | |||
| msgid "" | |||
| "PDF output will not contain the ephemerides, because you didn't provide " | |||
| "the observation coordinates." | |||
| msgstr "" | |||
| #: kosmorro/__main__.py:137 | |||
| #: kosmorro/__main__.py:142 | |||
| msgid "The file could not be saved in \"{path}\": {error}" | |||
| msgstr "" | |||
| #: kosmorro/__main__.py:151 | |||
| #: kosmorro/__main__.py:156 | |||
| msgid "Please provide a file path to export in this format (--output)." | |||
| msgstr "" | |||
| #: kosmorro/__main__.py:184 | |||
| #: kosmorro/__main__.py:187 | |||
| msgid "Moon phase can only be computed between {min_date} and {max_date}" | |||
| msgstr "" | |||
| #: kosmorro/__main__.py:234 | |||
| #: kosmorro/__main__.py:238 | |||
| msgid "Running on Python {python_version} with Kosmorrolib v{kosmorrolib_version}" | |||
| msgstr "" | |||
| #: kosmorro/__main__.py:247 | |||
| #: kosmorro/__main__.py:251 | |||
| msgid "" | |||
| "Compute the ephemerides and the events for a given date and a given " | |||
| "position on Earth." | |||
| msgstr "" | |||
| #: kosmorro/__main__.py:250 | |||
| #: kosmorro/__main__.py:254 | |||
| msgid "" | |||
| "By default, only the events will be computed for today.\n" | |||
| "To compute also the ephemerides, latitude and longitude arguments are " | |||
| "needed." | |||
| msgstr "" | |||
| #: kosmorro/__main__.py:263 | |||
| #: kosmorro/__main__.py:267 | |||
| msgid "Show the program version" | |||
| msgstr "" | |||
| #: kosmorro/__main__.py:271 | |||
| #: kosmorro/__main__.py:275 | |||
| msgid "" | |||
| "The format to output the information to. If not provided, the output " | |||
| "format will be inferred from the file extension of the output file." | |||
| msgstr "" | |||
| #: kosmorro/__main__.py:281 | |||
| #: kosmorro/__main__.py:285 | |||
| msgid "" | |||
| "The observer's position on Earth, in the \"{latitude},{longitude}\" " | |||
| "format. Can also be set in the KOSMORRO_POSITION environment variable." | |||
| msgstr "" | |||
| #: kosmorro/__main__.py:291 | |||
| #: kosmorro/__main__.py:295 | |||
| msgid "" | |||
| "The date for which the ephemerides must be calculated. Can be in the " | |||
| "YYYY-MM-DD format or an interval in the \"[+-]YyMmDd\" format (with Y, M," | |||
| " and D numbers). Defaults to current date." | |||
| msgstr "" | |||
| #: kosmorro/__main__.py:302 | |||
| #: kosmorro/__main__.py:306 | |||
| msgid "" | |||
| "The timezone to display the hours in (e.g. 2 for UTC+2 or -3 for UTC-3). " | |||
| "Can also be set in the KOSMORRO_TIMEZONE environment variable." | |||
| msgstr "" | |||
| #: kosmorro/__main__.py:311 | |||
| #: kosmorro/__main__.py:315 | |||
| msgid "Disable the colors in the console." | |||
| msgstr "" | |||
| #: kosmorro/__main__.py:318 | |||
| #: kosmorro/__main__.py:322 | |||
| msgid "" | |||
| "A file to export the output to. If not given, the standard output is " | |||
| "used. This argument is needed for PDF format." | |||
| msgstr "" | |||
| #: kosmorro/__main__.py:327 | |||
| #: kosmorro/__main__.py:331 | |||
| msgid "" | |||
| "Do not generate a graph to represent the rise and set times in the PDF " | |||
| "format." | |||
| msgstr "" | |||
| #: kosmorro/__main__.py:335 | |||
| #: kosmorro/__main__.py:339 | |||
| msgid "Show debugging messages" | |||
| msgstr "" | |||
| @@ -1,6 +1,7 @@ | |||
| #!/usr/bin/env python3 | |||
| from termcolor import colored as do_color | |||
| from sys import stderr | |||
| try: | |||
| from importlib.metadata import version | |||
| @@ -25,3 +26,7 @@ def colored(text, color=None, on_color=None, attrs=None): | |||
| return text | |||
| return do_color(text, color, on_color, attrs) | |||
| def print_stderr(*values: object): | |||
| print(*values, file=stderr) | |||
| @@ -29,7 +29,7 @@ def test_with_incorrect_date_values(): | |||
| result = execute(KOSMORRO + arg) | |||
| assert not result.is_successful() | |||
| assert ( | |||
| result.stdout | |||
| result.stderr | |||
| == f"The date {value} does not match the required YYYY-MM-DD format or the offset format.\n" | |||
| ) | |||
| @@ -38,7 +38,7 @@ def test_with_incorrect_date_values(): | |||
| result = execute(KOSMORRO + arg) | |||
| assert not result.is_successful() | |||
| assert ( | |||
| result.stdout == f"The date {value} is not valid: month must be in 1..12\n" | |||
| result.stderr == f"The date {value} is not valid: month must be in 1..12\n" | |||
| ) | |||
| @@ -47,6 +47,16 @@ def test_with_out_of_range_dates(): | |||
| result = execute(KOSMORRO + arg) | |||
| assert not result.is_successful() | |||
| assert ( | |||
| result.stdout | |||
| result.stderr | |||
| == "Moon phase can only be computed between August 9, 1899 and September 26, 2053\nThe date must be between July 28, 1899 and October 8, 2053\n" | |||
| ) | |||
| def test_with_out_of_range_dates_for_moon_phase_only(): | |||
| for arg in [["-d", "1899-07-30"], ["-d", "2053-10-06"]]: | |||
| result = execute(KOSMORRO + arg) | |||
| assert result.is_successful() | |||
| assert ( | |||
| result.stderr | |||
| == "Moon phase can only be computed between August 9, 1899 and September 26, 2053\n" | |||
| ) | |||
| @@ -171,35 +171,37 @@ def test_tex_output(): | |||
| i += 1 | |||
| # disabled for now, waiting for the new pdf generator | |||
| # def test_pdf_output(): | |||
| # if platform != "linux": | |||
| # # Consider it works everywhere if it does at least on Linux | |||
| # return | |||
| # | |||
| # tmp_dir = tempfile.mkdtemp() | |||
| # result = execute( | |||
| # KOSMORRO | |||
| # + [ | |||
| # "--position=50.5876,3.0624", | |||
| # "-d2020-01-27", | |||
| # "--format=pdf", | |||
| # f"--output={tmp_dir}/document.pdf", | |||
| # ] | |||
| # ) | |||
| # | |||
| # if environ.get("TEXLIVE_INSTALLED") is None: | |||
| # assert not result.is_successful() | |||
| # assert ( | |||
| # result.stdout | |||
| # == """Save the planet and paper! | |||
| # Consider printing your PDF document only if really necessary, and use the other side of the sheet. | |||
| # Building PDF was not possible, because some dependencies are not installed. | |||
| # Please look at the documentation at https://kosmorro.space/cli/generate-pdf/ for more information. | |||
| # """ | |||
| # ) | |||
| def test_pdf_output(): | |||
| if platform != "linux": | |||
| # Consider it works everywhere if it does at least on Linux | |||
| return | |||
| tmp_dir = tempfile.mkdtemp() | |||
| result = execute( | |||
| KOSMORRO | |||
| + [ | |||
| "--position=50.5876,3.0624", | |||
| "-d2020-01-27", | |||
| "--format=pdf", | |||
| f"--output={tmp_dir}/document.pdf", | |||
| ] | |||
| ) | |||
| if environ.get("TEXLIVE_INSTALLED") is None: | |||
| assert not result.is_successful() | |||
| assert ( | |||
| result.stdout | |||
| == "Save the planet and paper!\nConsider printing your PDF document only if really necessary, and use the other side of the sheet.\n" | |||
| ) | |||
| assert ( | |||
| result.stderr | |||
| == "Building PDF was not possible, because some dependencies are not installed.\nPlease look at the documentation at https://kosmorro.space/cli/generate-pdf/ for more information.\n" | |||
| ) | |||
| # return | |||
| # | |||
| # return | |||
| # disabled for now, waiting for the new pdf generator | |||
| # | |||
| # assert result.is_successful() | |||
| # assert ( | |||