-
Notifications
You must be signed in to change notification settings - Fork 0
/
calendarios-astronomicos.py
199 lines (157 loc) · 6.92 KB
/
calendarios-astronomicos.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
import sys
from convertdate import hebrew
from convertdate import islamic
from convertdate import julianday
from flask import Flask, request
from pyluach import hebrewcal
app = Flask(__name__)
def get_islamic(year, month, day):
return islamic.from_gregorian(year, month, day)
def get_hebrew(year, month, day):
return hebrew.from_gregorian(year, month, day)
def get_hebrew_month(year, month, day):
year, month, _ = get_hebrew(year, month, day)
return hebrewcal.Month(year, month).name
def get_islamic_month(year, month, day):
year, month, _ = get_islamic(year, month, day)
islamic_months = [
"Muharram",
"Safar",
"Rabi I",
"Rabi II",
"Yumada I",
"Yumada II",
"Rayab",
"Sha'bán",
"Ramadán",
"Shawwal",
"Du al-Qa'da",
"Du al-Hiyya",
]
return islamic_months[month - 1]
def convert_format(year, month, day):
return "Fecha con <strong>formato ISO-8601</strong>: <br>{}-{}-{}<br>".format(year, month, day)
def convert_hebrew(year, month, day):
return "Fecha en el <strong>calendario judío</strong>: <br>{0} {1} ({3}) {2}<br>".format(
*get_hebrew(year, month, day), get_hebrew_month(year, month, day)
)
def convert_islamic(year, month, day):
return "Fecha en el <strong>calendario musulmán</strong>: <br>{0} {1} ({3}) {2}<br>".format(
*get_islamic(year, month, day), get_islamic_month(year, month, day)
)
def convert_julianday(year, month, day):
return "Día de la <strong>data juliana</strong>: <br>{}".format(
julianday.from_gregorian(year, month, day)
)
@app.route("/", methods=["GET", "POST"])
def easy_calendar():
if request.method == "POST":
year, month, day = str(request.form["gregorian"]).split("-")
year, month, day = int(year), int(month), int(day)
return """<link href="https://fonts.googleapis.com/css2?family=Merriweather&display=swap" rel="stylesheet">
<body style="background-color:#ffddd3;color:#522959; font-family: 'Merriweather', serif;">
<div style="margin-top: 15%;margin-left: auto;margin-right: auto;width: 45%;border: 1.5px solid #522959;padding: 10px;text-align: center;background-color:white;">
<img style="max-width:7%;height:auto;" src="https://openmoji.org/data/color/svg/1F5D3.svg" alt="Calendarios astronomicos">
<br><br>
{}<br/>{}<br/>{}<br/>{} </br></br><button style="color:#522959;font-family: 'Merriweather', serif;" onclick="location.href='/'" type="button">
Volver</button><br></div><div style="margin-top: 10%;margin-left: auto;margin-right: auto;width: 18%;text-align: center;border: 1.5px solid #522959;padding: 10px;text-align: center;background-color:white;">
<small>¡Gracias por usar Calendarios Astronómicos!</small>
</div>
""".format(
convert_format(year, month, day),
convert_hebrew(year, month, day),
convert_islamic(year, month, day),
convert_julianday(year, month, day),
)
else:
return """
<link href="https://fonts.googleapis.com/css2?family=Merriweather&display=swap" rel="stylesheet">
<body style="background-color:#ffddd3;color:#522959; font-family: 'Merriweather', serif;">
<div style="margin-top: 15%;margin-left: auto;margin-right: auto;width: 45%;border: 1.5px solid #522959;padding: 10px;text-align: center;background-color:white;">
<img style="max-width:7%;height:auto;" src="https://openmoji.org/data/color/svg/1F5D3.svg" alt="Calendarios astronomicos">
<h1 style="margin-top: 1%;">Calendarios astronómicos</h1>
<p>Es un conversor de fechas con capacidad de transformar las fechas del calendario gregoriano al calendario judío, al calendario musulmán y a la data juliana. <br><br> También devuelve la fecha en formato ISO-8061.</p>
<form action="/" method="post">
<input style="color:#522959;font-family: 'Merriweather', serif;" type="date" id="gregorian" name="gregorian" required></br></br>
<input style="color:#522959;font-family: 'Merriweather', serif;" type="submit" value="Convertir">
</form>
</div>
<div style="margin-top: 15%;margin-left: auto;margin-right: auto;width: 12%;text-align: center;border: 1.5px solid #522959;padding: 10px;text-align: center;background-color:white;">
<small>Paula González Falqué - USC</small>
</div>
"""
def run_web():
app.run(debug=True, port="3000", host="0.0.0.0")
def run_terminal():
while True:
user_input = input("Introduce una fecha (ej. 12 Feb 2015): ")
user_input = user_input.split()
if len(user_input) != 3:
print("El número de argumentos es incorrecto.")
continue
day, month, year = user_input
if day.isdecimal() is not True:
print(f"Has introducido {day}, que no es un número")
continue
if month.isalpha() is not True:
print(f"Has introducido {month}, que no sigue el formato correcto")
continue
if year.isdecimal() is not True:
print(f"Has introducido {year}, que no es un número")
continue
day = int(day)
month = month.lower()
year = int(year)
if day < 1 or day > 31:
print(f"Has introducido {day}, que es un día incorrecto")
continue
if year < 1 or year > 3000:
print(f"Has introducido {year}, que es un año incorrecto")
continue
month_names = [
"jan",
"feb",
"mar",
"apr",
"may",
"jun",
"jul",
"aug",
"sep",
"oct",
"nov",
"dec",
]
try:
month_number = month_names.index(month) + 1
except ValueError:
print("El mes introducido no coincide con las abreviaturas de un mes.")
continue
print(convert_format(year, month_number, day))
print(convert_hebrew(year, month_number, day))
print(convert_islamic(year, month_number, day))
print(convert_julianday(year, month_number, day))
break
if len(sys.argv) > 2:
print(
"El número de argumentos no es válido, si necesitas ayuda, utiliza: calendarios-astronomicos help"
)
elif len(sys.argv) == 1:
run_terminal()
elif sys.argv[1] == "web":
run_web()
elif sys.argv[1] == "help":
print(
"""Descripción:
calendarios-astronomicos es un conversor de fechas con capacidad de transformar
las fechas del calendario gregoriano al calendario judío, al calendario musulmán y a la data juliana.
También devuelve la fecha en formato ISO-8061.
Argumentos:
web Crea un servicio web para acceder de forma más cómoda al conversor.
help Muestra este mensaje de ayuda.
"""
)
else:
print(
"Argumento desconocido. Si necesitas ayuda, utiliza: calendarios-astronomicos help"
)