#43 — Имя файла и пути по умолчанию: - resolve_output_path() в yaml_config.py: резолвит --output с учётом output.dir, filename_template, default_format из YAML-конфига - Bare format (xlsx/odt/...) → путь по шаблону - Без расширения → автодописывается default_format (.xlsx) - Config.get_output_dir/filename/default_format() #47 — datetime precision и дедупликация: - period.last_used.from/to в YAML-конфиге и AppConfig - period.precision: date|datetime - _compute_dedup_cutoff() в cli.py: при precision=datetime вычисляет cutoff из period.last_used.to - _parse_datetime() + AND-логика дедупликации в client.py: запись исключается если created_on И updated_on < cutoff - Пропуск issues без часов после дедупликации Closes #43 Closes #47
This commit is contained in:
@@ -99,3 +99,53 @@ def expand_filename_template(
|
||||
for key, value in replacements.items():
|
||||
result = result.replace("{" + key + "}", value)
|
||||
return result
|
||||
|
||||
|
||||
KNOWN_FORMAT_NAMES = {"xlsx", "odt", "csv", "md", "html", "json"}
|
||||
|
||||
|
||||
def resolve_output_path(
|
||||
output_arg: str | None,
|
||||
*,
|
||||
output_dir: str = "",
|
||||
filename_template: str = "{author}_{from}_{to}.{ext}",
|
||||
default_format: str = "xlsx",
|
||||
author: str = "",
|
||||
from_date: str = "",
|
||||
to_date: str = "",
|
||||
) -> str | None:
|
||||
"""Resolve the final output path from --output argument and config settings.
|
||||
|
||||
Returns None if output_arg is None (meaning no file output, use console).
|
||||
|
||||
Resolution rules:
|
||||
- None → None (console output)
|
||||
- Bare format name (xlsx, odt, csv, md, html, json) → use template path
|
||||
- Path without extension → append .{default_format}
|
||||
- Path with known extension → use as-is
|
||||
- Path with unknown extension → use as-is
|
||||
"""
|
||||
if output_arg is None:
|
||||
return None
|
||||
|
||||
arg = output_arg.strip()
|
||||
|
||||
import os
|
||||
|
||||
if arg.lower() in KNOWN_FORMAT_NAMES:
|
||||
ext = arg.lower()
|
||||
resolved_dir = os.path.expanduser(output_dir) if output_dir else "."
|
||||
filename = expand_filename_template(
|
||||
filename_template,
|
||||
author=author,
|
||||
from_date=from_date,
|
||||
to_date=to_date,
|
||||
ext=ext,
|
||||
)
|
||||
return os.path.join(resolved_dir, filename)
|
||||
|
||||
_, ext = os.path.splitext(arg)
|
||||
if not ext:
|
||||
arg = f"{arg}.{default_format}"
|
||||
|
||||
return arg
|
||||
|
||||
Reference in New Issue
Block a user