@@ -25,6 +25,7 @@ jobs: | |||
- '3.10' | |||
- '3.11' | |||
- '3.12' | |||
- '3.13' | |||
name: Python ${{ matrix.python-version }} on ${{ matrix.os }} | |||
steps: | |||
@@ -8,29 +8,30 @@ msgid "" | |||
msgstr "" | |||
"Project-Id-Version: PROJECT VERSION\n" | |||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | |||
"POT-Creation-Date: 2025-03-16 11:24+0100\n" | |||
"POT-Creation-Date: 2025-03-16 11:59+0100\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" | |||
"MIME-Version: 1.0\n" | |||
"Content-Type: text/plain; charset=utf-8\n" | |||
"Content-Transfer-Encoding: 8bit\n" | |||
"Generated-By: Babel 2.15.0\n" | |||
"Generated-By: Babel 2.17.0\n" | |||
#: kosmorro/__main__.py:61 | |||
#: kosmorro/__main__.py:62 | |||
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:70 | |||
#: kosmorro/__main__.py:71 | |||
msgid "" | |||
"PDF output will not contain the ephemerides, because you didn't provide " | |||
"the observation coordinates." | |||
msgstr "" | |||
#: kosmorro/__main__.py:115 | |||
#, python-brace-format | |||
msgid "The file could not be saved in \"{path}\": {error}" | |||
msgstr "" | |||
@@ -38,21 +39,23 @@ msgstr "" | |||
msgid "Please provide a file path to export in this format (--output)." | |||
msgstr "" | |||
#: kosmorro/__main__.py:162 | |||
#: kosmorro/__main__.py:163 | |||
#, python-brace-format | |||
msgid "Moon phase can only be computed between {min_date} and {max_date}" | |||
msgstr "" | |||
#: kosmorro/__main__.py:201 | |||
#: kosmorro/__main__.py:202 | |||
#, python-brace-format | |||
msgid "Running on Python {python_version} with Kosmorrolib v{kosmorrolib_version}" | |||
msgstr "" | |||
#: kosmorro/__main__.py:214 | |||
#: kosmorro/__main__.py:215 | |||
msgid "" | |||
"Compute the ephemerides and the events for a given date and a given " | |||
"position on Earth." | |||
msgstr "" | |||
#: kosmorro/__main__.py:217 | |||
#: kosmorro/__main__.py:218 | |||
msgid "" | |||
"By default, only the events will be computed for today.\n" | |||
"To compute also the ephemerides, latitude and longitude arguments are " | |||
@@ -67,26 +70,26 @@ msgstr "" | |||
msgid "The format to output the information to" | |||
msgstr "" | |||
#: kosmorro/__main__.py:245 | |||
#: kosmorro/__main__.py:246 | |||
msgid "" | |||
"The observer's latitude on Earth. Can also be set in the " | |||
"KOSMORRO_LATITUDE environment variable." | |||
msgstr "" | |||
#: kosmorro/__main__.py:255 | |||
#: kosmorro/__main__.py:256 | |||
msgid "" | |||
"The observer's longitude on Earth. Can also be set in the " | |||
"KOSMORRO_LONGITUDE environment variable." | |||
msgstr "" | |||
#: kosmorro/__main__.py:265 | |||
#: kosmorro/__main__.py:266 | |||
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:276 | |||
#: kosmorro/__main__.py:277 | |||
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." | |||
@@ -96,13 +99,13 @@ msgstr "" | |||
msgid "Disable the colors in the console." | |||
msgstr "" | |||
#: kosmorro/__main__.py:292 | |||
#: kosmorro/__main__.py:293 | |||
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:301 | |||
#: kosmorro/__main__.py:302 | |||
msgid "" | |||
"Do not generate a graph to represent the rise and set times in the PDF " | |||
"format." | |||
@@ -113,10 +116,12 @@ msgid "Show debugging messages" | |||
msgstr "" | |||
#: kosmorro/date.py:17 | |||
#, python-brace-format | |||
msgid "The date {date} is not valid: {error}" | |||
msgstr "" | |||
#: kosmorro/date.py:39 | |||
#: kosmorro/date.py:40 | |||
#, python-brace-format | |||
msgid "" | |||
"The date {date} does not match the required YYYY-MM-DD format or the " | |||
"offset format." | |||
@@ -130,7 +135,8 @@ msgstr "" | |||
msgid "Note: All the hours are given in UTC." | |||
msgstr "" | |||
#: kosmorro/dumper.py:151 | |||
#: kosmorro/dumper.py:152 | |||
#, python-brace-format | |||
msgid "Note: All the hours are given in the UTC{offset} timezone." | |||
msgstr "" | |||
@@ -158,7 +164,8 @@ msgstr "" | |||
msgid "Moon phase:" | |||
msgstr "" | |||
#: kosmorro/dumper.py:242 | |||
#: kosmorro/dumper.py:243 | |||
#, python-brace-format | |||
msgid "{next_moon_phase} on {next_moon_phase_date} at {next_moon_phase_time}" | |||
msgstr "" | |||
@@ -166,14 +173,15 @@ msgstr "" | |||
msgid "Overview of your sky" | |||
msgstr "" | |||
#: kosmorro/dumper.py:314 | |||
#: kosmorro/dumper.py:315 | |||
#, python-brace-format | |||
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:324 | |||
#: kosmorro/dumper.py:325 | |||
msgid "" | |||
"Don't forget to check the weather forecast before you go out with your " | |||
"equipment." | |||
@@ -191,7 +199,7 @@ msgstr "" | |||
msgid "Expected events" | |||
msgstr "" | |||
#: kosmorro/dumper.py:487 | |||
#: kosmorro/dumper.py:488 | |||
msgid "" | |||
"Building PDF was not possible, because some dependencies are not " | |||
"installed.\n" | |||
@@ -199,7 +207,7 @@ msgid "" | |||
"pdf/ for more information." | |||
msgstr "" | |||
#: kosmorro/dumper.py:540 | |||
#: kosmorro/dumper.py:541 | |||
#, python-format | |||
msgid "" | |||
"An error occurred during the compilation of the PDF.\n" | |||
@@ -207,7 +215,8 @@ msgid "" | |||
"share the content of the log file at /tmp/kosmorro-%s.log" | |||
msgstr "" | |||
#: kosmorro/exceptions.py:35 | |||
#: kosmorro/exceptions.py:36 | |||
#, python-brace-format | |||
msgid "The date must be between {minimum_date} and {maximum_date}" | |||
msgstr "" | |||
@@ -318,18 +327,22 @@ msgid "Pluto" | |||
msgstr "" | |||
#: kosmorro/i18n/utils.py:27 | |||
#, python-brace-format | |||
msgid "{day_of_week} {month} {day_number}, {year}" | |||
msgstr "" | |||
#: kosmorro/i18n/utils.py:30 | |||
#, python-brace-format | |||
msgid "{month} {day_number}, {hours}:{minutes}" | |||
msgstr "" | |||
#: kosmorro/i18n/utils.py:33 | |||
#, python-brace-format | |||
msgid "{month} {day_number}, {year}" | |||
msgstr "" | |||
#: kosmorro/i18n/utils.py:36 | |||
#, python-brace-format | |||
msgid "{hours}:{minutes}" | |||
msgstr "" | |||
@@ -33,6 +33,7 @@ def test_run_without_argument(): | |||
def test_help_message(): | |||
for arg in ["--help", "-h"]: | |||
result = execute(KOSMORRO + [arg]) | |||
assert result.is_successful() | |||
# Options header has changed from "optional arguments" to "options" in Python 3.10. | |||
@@ -40,9 +41,10 @@ def test_help_message(): | |||
"optional arguments" if python_version.minor < 10 else "options" | |||
) | |||
assert ( | |||
result.stdout | |||
== """usage: kosmorro [-h] [--version] [--format {text,json,pdf}] | |||
if python_version.major == 3 and python_version.minor < 13: | |||
assert ( | |||
result.stdout | |||
== """usage: kosmorro [-h] [--version] [--format {text,json,pdf}] | |||
[--latitude LATITUDE] [--longitude LONGITUDE] [--date DATE] | |||
[--timezone TIMEZONE] [--no-colors] [--output OUTPUT] | |||
[--no-graph] [--debug] | |||
@@ -81,5 +83,47 @@ on Earth. | |||
By default, only the events will be computed for today. To compute also the | |||
ephemerides, latitude and longitude arguments are needed. | |||
""" | |||
% options_header | |||
) | |||
% options_header | |||
) | |||
else: | |||
assert ( | |||
result.stdout | |||
== """usage: kosmorro [-h] [--version] [--format {text,json,pdf}] | |||
[--latitude LATITUDE] [--longitude LONGITUDE] [--date DATE] | |||
[--timezone TIMEZONE] [--no-colors] [--output OUTPUT] | |||
[--no-graph] [--debug] | |||
Compute the ephemerides and the events for a given date and a given position | |||
on Earth. | |||
options: | |||
-h, --help show this help message and exit | |||
--version, -v Show the program version | |||
--format, -f {text,json,pdf} | |||
The format to output the information to | |||
--latitude, -lat LATITUDE | |||
The observer's latitude on Earth. Can also be set in | |||
the KOSMORRO_LATITUDE environment variable. | |||
--longitude, -lon LONGITUDE | |||
The observer's longitude on Earth. Can also be set in | |||
the KOSMORRO_LONGITUDE environment variable. | |||
--date, -d DATE 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. | |||
--timezone, -t TIMEZONE | |||
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. | |||
--no-colors Disable the colors in the console. | |||
--output, -o OUTPUT A file to export the output to. If not given, the | |||
standard output is used. This argument is needed for | |||
PDF format. | |||
--no-graph Do not generate a graph to represent the rise and set | |||
times in the PDF format. | |||
--debug Show debugging messages | |||
By default, only the events will be computed for today. To compute also the | |||
ephemerides, latitude and longitude arguments are needed. | |||
""" | |||
) |
@@ -0,0 +1,181 @@ | |||
\documentclass[a4paper,12pt]{article} | |||
\usepackage[utf8]{inputenc} | |||
\usepackage[T1]{fontenc} | |||
\usepackage[margin=25mm]{geometry} | |||
\usepackage{graphicx} | |||
\usepackage{hyperref} | |||
\usepackage{xcolor} | |||
\usepackage{fp} | |||
% Command showing the Moon phase | |||
\newcommand{\moonphase}[2]{ | |||
\begin{center} | |||
\begin{minipage}{2cm} | |||
\includegraphics[width=\linewidth]{#1} | |||
\end{minipage} | |||
\hspace{5mm} | |||
\begin{minipage}{7cm} | |||
\textbf{\currentmoonphasetitle}\\#2 | |||
\end{minipage} | |||
\end{center} | |||
} | |||
% Environment for the ephemerides, when --no-graph is given on the command line | |||
\newenvironment{ephemerides}{ | |||
\begin{table}[h] | |||
\centering | |||
\begin{tabular}{lccc} | |||
\textbf{\ephemeridesobjecttitle} & | |||
\textbf{\ephemeridesrisetimetitle} & | |||
\textbf{\ephemeridesculminationtimetitle} & | |||
\textbf{\ephemeridessettimetitle}\\ | |||
\hline | |||
}{ | |||
\end{tabular} | |||
\end{table} | |||
} | |||
% Command adding an object to the ephemerides environment | |||
\newcommand{\object}[4]{ | |||
\hline | |||
\textbf{#1} & {#2} & {#3} & {#4}\\ | |||
} | |||
% Environment to insert the ephemerides graph | |||
\newenvironment{graphephemerides}{\setlength{\unitlength}{0.02\linewidth} | |||
\begin{picture}(20,20) | |||
% Axes | |||
\put(0,-2){\vector(1,0){50}} | |||
\multiput(0,-2)(2,0){24}{ | |||
\line(0,-1){0.25} | |||
} | |||
\newcounter{hour} | |||
\multiput(-0.25,-3.5)(4,0){12}{ | |||
\sffamily\footnotesize | |||
\arabic{hour}\stepcounter{hour}\stepcounter{hour} | |||
} | |||
\put(49,-3.5){\sffamily\footnotesize \hourslabel} | |||
% Graduation | |||
\put(50,-0.5){\sffamily\footnotesize \Pluto} | |||
\put(50,1.5){\sffamily\footnotesize \Neptune} | |||
\put(50,3.5){\sffamily\footnotesize \Uranus} | |||
\put(50,5.5){\sffamily\footnotesize \Saturn} | |||
\put(50,7.5){\sffamily\footnotesize \Jupiter} | |||
\put(50,9.5){\sffamily\footnotesize \Mars} | |||
\put(50,11.5){\sffamily\footnotesize \Venus} | |||
\put(50,13.5){\sffamily\footnotesize \Mercury} | |||
\put(50,15.5){\sffamily\footnotesize \Moon} | |||
\put(50,17.5){\sffamily\footnotesize \Sun} | |||
\multiput(0,0)(0,2){10}{ | |||
\color{gray}\line(1,0){48} | |||
} | |||
\linethickness{1.5mm} | |||
}{ | |||
\end{picture} | |||
\vspace{1cm} | |||
} | |||
% Command to add an object to the graph | |||
\newcommand{\graphobject}[8]{% | |||
% #1: Y coordinate component | |||
% #2: Color | |||
% #3: Hour rise time | |||
% #4: Minute rise time | |||
% #5: Hour set time | |||
% #6: Minute set time | |||
% #7: Human-readable rise time | |||
% #8: Human-readable set time | |||
\FPeval{\start}{#3*2+(#4/60)*2}% | |||
\FPeval{\length}{#5*2+(#6/60)*2 - \start}% | |||
\FPeval{\starttext}{\start+0.7}% | |||
\FPeval{\endtext}{\start+\length-3.25}% | |||
{\color{#2}% | |||
\put(\start,#1){% | |||
\line(1, 0){\length}% | |||
}}% | |||
\put(\starttext,#1.5){\sffamily\footnotesize #7}% | |||
\put(\endtext,#1.5){\sffamily\footnotesize #8}% | |||
} | |||
\newcommand{\event}[2]{ | |||
\textbf{#1} & {#2}\\ | |||
} | |||
\newenvironment{events}{ | |||
\begin{table}[h] | |||
\begin{tabular}{ll} | |||
}{ | |||
\end{tabular} | |||
\end{table} | |||
} | |||
% Commands to handle the translated strings | |||
\newcommand{\currentmoonphasetitle}{Moon phase:} | |||
\newcommand{\ephemeridesobjecttitle}{Object} | |||
\newcommand{\ephemeridesrisetimetitle}{Rise time} | |||
\newcommand{\ephemeridesculminationtimetitle}{Culmination time} | |||
\newcommand{\ephemeridessettimetitle}{Set time} | |||
\newcommand{\hourslabel}{hours} | |||
\newcommand{\Pluto}{Pluto} | |||
\newcommand{\Neptune}{Neptune} | |||
\newcommand{\Uranus}{Uranus} | |||
\newcommand{\Saturn}{Saturn} | |||
\newcommand{\Jupiter}{Jupiter} | |||
\newcommand{\Mars}{Mars} | |||
\newcommand{\Venus}{Venus} | |||
\newcommand{\Mercury}{Mercury} | |||
\newcommand{\Moon}{Moon} | |||
\newcommand{\Sun}{Sun} | |||
% Fix Unicode issues | |||
\DeclareUnicodeCharacter{202F}{~} | |||
\DeclareUnicodeCharacter{00B0}{$^\circ$} | |||
\hypersetup{pdfinfo={% | |||
Title={Overview of your sky}, | |||
Creator={Kosmorro v__APP_VERSION__} | |||
}} | |||
\pagenumbering{gobble} | |||
\setcounter{secnumdepth}{0} | |||
\title{\sffamily\href{http://kosmorro.space}{\includegraphics[width=5cm]{__PROJECT_PATH__/assets/png/kosmorro-logo.png}}\\Overview of your sky} | |||
\date{\vspace{-11mm}\sffamily Monday, January 27, 2020} | |||
\begin{document} | |||
\maketitle | |||
This document summarizes the ephemerides and the events of Monday, January 27, 2020. It aims to help you to prepare your observation session. All the hours are given in UTC. | |||
Don't forget to check the weather forecast before you go out with your equipment. | |||
\moonphase{__PROJECT_PATH__/assets/moonphases/png/new-moon.png}{New Moon} | |||
%%% BEGIN-EPHEMERIDES-SECTION | |||
\section{\sffamily Ephemerides of the day} | |||
\begin{graphephemerides}% | |||
\graphobject{18}{gray}{7}{31}{16}{30}{7:31 AM}{4:30 PM}\graphobject{16}{gray}{9}{6}{19}{13}{9:06 AM}{7:13 PM}\graphobject{14}{gray}{8}{10}{17}{28}{8:10 AM}{5:28 PM}\graphobject{12}{gray}{9}{1}{20}{10}{9:01 AM}{8:10 PM}\graphobject{10}{gray}{4}{19}{12}{28}{4:19 AM}{12:28 PM}\graphobject{8}{gray}{6}{15}{14}{21}{6:15 AM}{2:21 PM}\graphobject{6}{gray}{6}{56}{15}{22}{6:56 AM}{3:22 PM}\graphobject{4}{gray}{0}{0}{0}{33}{}{12:33 AM}\graphobject{4}{gray}{10}{21}{24}{0}{10:21 AM}{}\graphobject{2}{gray}{9}{1}{20}{10}{9:01 AM}{8:10 PM}\graphobject{0}{gray}{6}{57}{15}{11}{6:57 AM}{3:11 PM} | |||
\end{graphephemerides} | |||
%%% END-EPHEMERIDES-SECTION | |||
%%% BEGIN-EVENTS-SECTION | |||
\section{\sffamily Expected events} | |||
\begin{events} | |||
\event{8:00 PM}{Venus and Neptune are in conjunction} | |||
\end{events} | |||
%%% END-EVENTS-SECTION | |||
\end{document} | |||