Tighten configuration and export handling
This commit is contained in:
@@ -1,12 +1,14 @@
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
from datetime import datetime
|
||||
from typing import List, Optional
|
||||
|
||||
from .config import Config
|
||||
from .client import fetch_issues_with_spent_time
|
||||
from .config import Config
|
||||
from .formatters.factory import get_console_formatter, get_formatter_by_extension
|
||||
from .report_builder import build_grouped_report
|
||||
from .formatters.factory import get_formatter_by_extension, get_console_formatter
|
||||
|
||||
|
||||
def parse_date_range(date_arg: str) -> tuple[str, str]:
|
||||
@@ -15,7 +17,22 @@ def parse_date_range(date_arg: str) -> tuple[str, str]:
|
||||
parts = date_arg.split("--", 1)
|
||||
if len(parts) != 2:
|
||||
raise ValueError("Invalid date range format")
|
||||
return parts[0].strip(), parts[1].strip()
|
||||
|
||||
from_date, to_date = parts[0].strip(), parts[1].strip()
|
||||
date_pattern = r"\d{4}-\d{2}-\d{2}"
|
||||
if not re.fullmatch(date_pattern, from_date) or not re.fullmatch(date_pattern, to_date):
|
||||
raise ValueError("Date range must be in format YYYY-MM-DD--YYYY-MM-DD")
|
||||
|
||||
try:
|
||||
start = datetime.strptime(from_date, "%Y-%m-%d").date()
|
||||
end = datetime.strptime(to_date, "%Y-%m-%d").date()
|
||||
except ValueError as e:
|
||||
raise ValueError("Date range contains invalid calendar date") from e
|
||||
|
||||
if start > end:
|
||||
raise ValueError("Date range start must be less than or equal to end")
|
||||
|
||||
return start.isoformat(), end.isoformat()
|
||||
|
||||
|
||||
def main(argv: Optional[List[str]] = None) -> int:
|
||||
@@ -36,7 +53,7 @@ def main(argv: Optional[List[str]] = None) -> int:
|
||||
)
|
||||
parser.add_argument(
|
||||
"--output",
|
||||
help="Path to output .odt file (e.g., report.odt). If omitted, prints to stdout.",
|
||||
help="Path to output file (.odt, .csv, .md, .html). If omitted, prints to stdout.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--author", default="", help="Override author name from .env (REDMINE_AUTHOR)"
|
||||
|
||||
Reference in New Issue
Block a user