| @@ -19,7 +19,7 @@ | |||
| __title__ = "kosmorro" | |||
| __description__ = "A program that computes your ephemerides" | |||
| __url__ = "https://kosmorro.space" | |||
| __version__ = '0.10.0' | |||
| __version__ = "0.10.0" | |||
| __author__ = "Jérôme Deuchnord" | |||
| __author_email__ = "jerome@deuchnord.fr" | |||
| __license__ = "AGPL" | |||
| @@ -1,15 +1,16 @@ | |||
| #!/usr/bin/env python3 | |||
| from traceback import print_exc | |||
| from traceback import print_exception | |||
| show_debug_messages = False | |||
| def debug_print(what): | |||
| if not show_debug_messages: | |||
| def debug_print(what, force: bool = False): | |||
| if not force and not show_debug_messages: | |||
| return | |||
| if isinstance(what, Exception): | |||
| print_exc(what) | |||
| print_exception(type(what), value=what, tb=None) | |||
| else: | |||
| print("[DEBUG] %s" % what) | |||
| @@ -35,7 +35,10 @@ from kosmorrolib.model import ASTERS, MoonPhase | |||
| from .i18n.utils import _, FULL_DATE_FORMAT, SHORT_DATETIME_FORMAT, TIME_FORMAT | |||
| from .i18n import strings | |||
| from .__version__ import __version__ as version | |||
| from .exceptions import CompileError | |||
| from .exceptions import ( | |||
| CompileError, | |||
| UnavailableFeatureError as KosmorroUnavailableFeatureError, | |||
| ) | |||
| from .debug import debug_print | |||
| @@ -474,12 +477,13 @@ class PdfDumper(Dumper): | |||
| with_colors=self.with_colors, | |||
| show_graph=self.show_graph, | |||
| ) | |||
| return self._compile(latex_dumper.to_string()) | |||
| except RuntimeError as error: | |||
| raise UnavailableFeatureError( | |||
| raise KosmorroUnavailableFeatureError( | |||
| _( | |||
| "Building PDF was not possible, because some dependencies are not" | |||
| " installed.\nPlease look at the documentation at http://kosmorro.space " | |||
| " installed.\nPlease look at the documentation at https://kosmorro.space " | |||
| "for more information." | |||
| ) | |||
| ) from error | |||
| @@ -491,37 +495,48 @@ class PdfDumper(Dumper): | |||
| @staticmethod | |||
| def _compile(latex_input) -> bytes: | |||
| package = str(Path(__file__).parent.absolute()) + "/assets/pdf/kosmorro.sty" | |||
| timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S") | |||
| current_dir = ( | |||
| os.getcwd() | |||
| ) # Keep the current directory to return to it after the PDFLaTeX execution | |||
| try: | |||
| temp_dir = tempfile.mkdtemp() | |||
| shutil.copy(package, temp_dir) | |||
| with tempfile.TemporaryDirectory() as tempdir: | |||
| timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S") | |||
| shutil.copy(package, tempdir) | |||
| temp_tex = "%s/%s.tex" % (temp_dir, timestamp) | |||
| with open("%s/%s.tex" % (tempdir, timestamp), "w") as texfile: | |||
| texfile.write(latex_input) | |||
| with open(temp_tex, "w") as tex_file: | |||
| tex_file.write(latex_input) | |||
| os.chdir(tempdir) | |||
| os.chdir(temp_dir) | |||
| debug_print("LaTeX content:\n%s" % latex_input) | |||
| try: | |||
| subprocess.run( | |||
| ["pdflatex", "-interaction", "nonstopmode", "%s.tex" % timestamp], | |||
| capture_output=True, | |||
| check=True, | |||
| ) | |||
| except FileNotFoundError as error: | |||
| raise RuntimeError("pdflatex is not installed.") from error | |||
| except subprocess.CalledProcessError as error: | |||
| with open("/tmp/kosmorro-%s.log" % timestamp, "wb") as file: | |||
| file.write(error.stdout) | |||
| subprocess.run( | |||
| ["pdflatex", "-interaction", "nonstopmode", "%s.tex" % timestamp], | |||
| capture_output=True, | |||
| check=True, | |||
| ) | |||
| raise CompileError( | |||
| _( | |||
| "An error occurred during the compilation of the PDF.\n" | |||
| "Please open an issue at https://github.com/Kosmorro/kosmorro/issues and share " | |||
| "the content of the log file at /tmp/kosmorro-%s.log" | |||
| % timestamp | |||
| ) | |||
| ) from error | |||
| os.chdir(current_dir) | |||
| with open("%s.pdf" % timestamp, "rb") as pdffile: | |||
| with open("%s/%s.pdf" % (temp_dir, timestamp), "rb") as pdffile: | |||
| return bytes(pdffile.read()) | |||
| except FileNotFoundError as error: | |||
| raise KosmorroUnavailableFeatureError( | |||
| "TeXLive is not installed." | |||
| ) from error | |||
| except subprocess.CalledProcessError as error: | |||
| with open("/tmp/kosmorro-%s.log" % timestamp, "wb") as file: | |||
| file.write(error.stdout) | |||
| raise CompileError( | |||
| _( | |||
| "An error occurred during the compilation of the PDF.\n" | |||
| "Please open an issue at https://github.com/Kosmorro/kosmorro/issues and share " | |||
| "the content of the log file at /tmp/kosmorro-%s.log" % timestamp | |||
| ) | |||
| ) from error | |||
| @@ -8,7 +8,7 @@ msgid "" | |||
| msgstr "" | |||
| "Project-Id-Version: kosmorro 0.10.0\n" | |||
| "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | |||
| "POT-Creation-Date: 2021-05-30 17:22+0200\n" | |||
| "POT-Creation-Date: 2021-06-05 17:59+0200\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" | |||
| @@ -27,84 +27,84 @@ msgid "" | |||
| "offset format." | |||
| msgstr "" | |||
| #: _kosmorro/dumper.py:108 | |||
| #: _kosmorro/dumper.py:111 | |||
| msgid "Expected events:" | |||
| msgstr "" | |||
| #: _kosmorro/dumper.py:115 | |||
| #: _kosmorro/dumper.py:118 | |||
| msgid "Note: All the hours are given in UTC." | |||
| msgstr "" | |||
| #: _kosmorro/dumper.py:122 | |||
| #: _kosmorro/dumper.py:125 | |||
| msgid "Note: All the hours are given in the UTC{offset} timezone." | |||
| msgstr "" | |||
| #: _kosmorro/dumper.py:186 _kosmorro/dumper.py:322 | |||
| #: _kosmorro/dumper.py:189 _kosmorro/dumper.py:325 | |||
| msgid "Object" | |||
| msgstr "" | |||
| #: _kosmorro/dumper.py:187 _kosmorro/dumper.py:323 | |||
| #: _kosmorro/dumper.py:190 _kosmorro/dumper.py:326 | |||
| msgid "Rise time" | |||
| msgstr "" | |||
| #: _kosmorro/dumper.py:188 _kosmorro/dumper.py:325 | |||
| #: _kosmorro/dumper.py:191 _kosmorro/dumper.py:328 | |||
| msgid "Culmination time" | |||
| msgstr "" | |||
| #: _kosmorro/dumper.py:189 _kosmorro/dumper.py:327 | |||
| #: _kosmorro/dumper.py:192 _kosmorro/dumper.py:330 | |||
| msgid "Set time" | |||
| msgstr "" | |||
| #: _kosmorro/dumper.py:223 | |||
| #: _kosmorro/dumper.py:226 | |||
| msgid "Moon phase is unavailable for this date." | |||
| msgstr "" | |||
| #: _kosmorro/dumper.py:227 _kosmorro/dumper.py:331 | |||
| #: _kosmorro/dumper.py:230 _kosmorro/dumper.py:334 | |||
| msgid "Moon phase:" | |||
| msgstr "" | |||
| #: _kosmorro/dumper.py:231 | |||
| #: _kosmorro/dumper.py:234 | |||
| msgid "{next_moon_phase} on {next_moon_phase_date} at {next_moon_phase_time}" | |||
| msgstr "" | |||
| #: _kosmorro/dumper.py:295 | |||
| #: _kosmorro/dumper.py:298 | |||
| msgid "Overview of your sky" | |||
| msgstr "" | |||
| #: _kosmorro/dumper.py:303 | |||
| #: _kosmorro/dumper.py:306 | |||
| msgid "" | |||
| "This document summarizes the ephemerides and the events of {date}. It " | |||
| "aims to help you to prepare your observation session. All the hours are " | |||
| "given in {timezone}." | |||
| msgstr "" | |||
| #: _kosmorro/dumper.py:313 | |||
| #: _kosmorro/dumper.py:316 | |||
| msgid "" | |||
| "Don't forget to check the weather forecast before you go out with your " | |||
| "equipment." | |||
| msgstr "" | |||
| #: _kosmorro/dumper.py:320 | |||
| #: _kosmorro/dumper.py:323 | |||
| msgid "Ephemerides of the day" | |||
| msgstr "" | |||
| #: _kosmorro/dumper.py:329 | |||
| #: _kosmorro/dumper.py:332 | |||
| msgid "hours" | |||
| msgstr "" | |||
| #: _kosmorro/dumper.py:336 | |||
| #: _kosmorro/dumper.py:339 | |||
| msgid "Expected events" | |||
| msgstr "" | |||
| #: _kosmorro/dumper.py:480 | |||
| #: _kosmorro/dumper.py:484 | |||
| msgid "" | |||
| "Building PDF was not possible, because some dependencies are not " | |||
| "installed.\n" | |||
| "Please look at the documentation at http://kosmorro.space for more " | |||
| "Please look at the documentation at https://kosmorro.space for more " | |||
| "information." | |||
| msgstr "" | |||
| #: _kosmorro/dumper.py:518 | |||
| #: _kosmorro/dumper.py:537 | |||
| #, python-format | |||
| msgid "" | |||
| "An error occurred during the compilation of the PDF.\n" | |||