mirror of
https://github.com/NohamR/OqeeRewind.git
synced 2026-01-09 23:58:17 +00:00
Add input utilities for datetime and duration prompts
This commit is contained in:
100
utils/input.py
Normal file
100
utils/input.py
Normal file
@@ -0,0 +1,100 @@
|
||||
import datetime
|
||||
from InquirerPy import prompt
|
||||
from prompt_toolkit.validation import Validator, ValidationError
|
||||
|
||||
class DatetimeValidator(Validator):
|
||||
"""
|
||||
Validateur personnalisé pour les chaînes datetime au format "YYYY-MM-DD HH:MM:SS".
|
||||
"""
|
||||
def validate(self, document):
|
||||
try:
|
||||
datetime.datetime.strptime(document.text, "%Y-%m-%d %H:%M:%S")
|
||||
except ValueError:
|
||||
raise ValidationError(
|
||||
message="Veuillez entrer une date/heure valide au format YYYY-MM-DD HH:MM:SS",
|
||||
cursor_position=len(document.text),
|
||||
)
|
||||
|
||||
class DurationValidator(Validator):
|
||||
"""
|
||||
Validateur personnalisé pour les chaînes de durée au format "HH:MM:SS".
|
||||
"""
|
||||
def validate(self, document):
|
||||
parts = document.text.split(':')
|
||||
if len(parts) != 3:
|
||||
raise ValidationError(
|
||||
message="Veuillez entrer la durée au format HH:MM:SS",
|
||||
cursor_position=len(document.text),
|
||||
)
|
||||
try:
|
||||
h, m, s = [int(part) for part in parts]
|
||||
if not (0 <= m < 60 and 0 <= s < 60):
|
||||
raise ValueError("Les minutes et les secondes doivent être entre 0 et 59.")
|
||||
except ValueError:
|
||||
raise ValidationError(
|
||||
message="Format invalide. Utilisez HH:MM:SS avec des nombres valides.",
|
||||
cursor_position=len(document.text),
|
||||
)
|
||||
|
||||
def get_date_input():
|
||||
question_start_date = [
|
||||
{
|
||||
"type": "input",
|
||||
"message": "Entrez une date/heure de début (YYYY-MM-DD HH:MM:SS):",
|
||||
"name": "datetime",
|
||||
"default": "2025-01-01 12:00:00",
|
||||
"validate": DatetimeValidator(),
|
||||
"invalid_message": "Format de date/heure invalide. Utilisez YYYY-MM-DD HH:MM:SS",
|
||||
}
|
||||
]
|
||||
|
||||
start_date_result = prompt(question_start_date)
|
||||
if start_date_result:
|
||||
start_date = datetime.datetime.strptime(start_date_result["datetime"], "%Y-%m-%d %H:%M:%S")
|
||||
print(f"Date/heure de début : {start_date}")
|
||||
|
||||
question_end_date = [
|
||||
{
|
||||
"type": "list",
|
||||
"message": "Que voulez-vous entrer ?",
|
||||
"choices": ["Durée", "Date/heure de fin"],
|
||||
"name": "input_type",
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"message": "Entrez la durée (HH:MM:SS):",
|
||||
"name": "duration",
|
||||
"default": "01:00:00",
|
||||
"validate": DurationValidator(),
|
||||
"when": lambda answers: answers["input_type"] == "Durée",
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"message": "Entrez une date/heure de fin (YYYY-MM-DD HH:MM:SS):",
|
||||
"name": "datetime",
|
||||
"default": start_date_result["datetime"] if start_date_result else "2025-01-01 12:00:00",
|
||||
"validate": DatetimeValidator(),
|
||||
"when": lambda answers: answers["input_type"] == "Date/heure de fin",
|
||||
},
|
||||
]
|
||||
|
||||
end_date_result = prompt(question_end_date)
|
||||
|
||||
if end_date_result:
|
||||
if end_date_result.get("duration"):
|
||||
duration_str = end_date_result["duration"]
|
||||
try:
|
||||
h, m, s = map(int, duration_str.split(':'))
|
||||
duration_td = datetime.timedelta(hours=h, minutes=m, seconds=s)
|
||||
end_date = start_date + duration_td
|
||||
print(f"\nDate/heure de fin : {end_date}")
|
||||
except (ValueError, TypeError):
|
||||
print("Impossible d'analyser la chaîne de durée fournie.")
|
||||
|
||||
elif end_date_result.get("datetime"):
|
||||
try:
|
||||
end_date = datetime.datetime.strptime(end_date_result["datetime"], "%Y-%m-%d %H:%M:%S")
|
||||
print(f"\nDate/heure de fin : {end_date}")
|
||||
except (ValueError, TypeError):
|
||||
print("Impossible d'analyser la chaîne de date/heure fournie.")
|
||||
return start_date, end_date
|
||||
Reference in New Issue
Block a user