refactor: decouple — blueprint'ы + CSS/HTML разделение (по шаблону app-autotest)
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
"""
|
||||
now.py — утилита времени.
|
||||
|
||||
Единственная функция: now() возвращает текущее UTC-время в ISO-формате с 'Z'
|
||||
(как в реальном Nubes API). Используется в app.py (run_operation) и mock_state.py.
|
||||
"""
|
||||
|
||||
from datetime import datetime, timezone
|
||||
|
||||
|
||||
def now():
|
||||
"""Текущее UTC-время в ISO-формате с суффиксом 'Z'.
|
||||
|
||||
Формат: "2026-07-31T20:30:00.123456Z"
|
||||
Реальное Nubes API возвращает dtFinish/dtCreate именно в таком виде.
|
||||
"""
|
||||
return datetime.now(timezone.utc).isoformat().replace("+00:00", "Z")
|
||||
@@ -0,0 +1,25 @@
|
||||
"""
|
||||
pluralize.py — плюрализация английских слов.
|
||||
|
||||
Единственная функция: pluralize(word) — простейшая эвристика для образования
|
||||
множественного числа. Используется в:
|
||||
- from_stands.py: при генерации state_out_template (user→users, database→databases)
|
||||
- state_machine.py: при apply_effect для subresource-операций
|
||||
"""
|
||||
|
||||
|
||||
def pluralize(word):
|
||||
"""Простейшая плюрализация английского слова.
|
||||
|
||||
Правила:
|
||||
- уже заканчивается на 's' → не меняем (status → status)
|
||||
- согласная + 'y' → 'ies' (city → cities)
|
||||
- всё остальное → + 's' (user → users, database → databases)
|
||||
|
||||
НЕ полная морфология — только для predictable subresource-имён из STANDS YAML.
|
||||
"""
|
||||
if word.endswith("s"):
|
||||
return word # уже во множественном (например "status")
|
||||
if word.endswith("y") and len(word) > 2 and word[-2] not in "aeiou":
|
||||
return word[:-1] + "ies" # "category" → "categories"
|
||||
return word + "s" # "user" → "users", "database" → "databases"
|
||||
Reference in New Issue
Block a user