fix(skd-edit): совместимость .py-порта с python 3.9 (PEP 701 f-string)

Два выражения автодат (ДатаНачала/ДатаОкончания) собирались внутри f-string
с бэкслешем (\uXXXX) в {…} — синтаксис валиден только с python 3.12+ (PEP 701),
на 3.9/3.11 → SyntaxError (skd-edit.py:1256/1270), весь модуль не импортируется.
Выносим выражения в переменные expr_start/expr_end перед f-string — поведение
байт-в-байт прежнее, конвенция \uXXXX сохранена. Единственный файл в корпусе
с этой несовместимостью (проверено AST-сканом всех 64 .py).

Синхронный бамп версий ps1+py (v1.28), коммент-маркер расхождения в .ps1.

Co-Authored-By: Korolev Pavel <korolev.vrn@gmail.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-06-30 12:55:09 +03:00
parent 29999a2755
commit 9d6ba55db1
2 changed files with 9 additions and 4 deletions
+2 -1
View File
@@ -1,5 +1,6 @@
# skd-edit v1.27 — Atomic 1C DCS editor
# skd-edit v1.28 — Atomic 1C DCS editor
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
# NB: парный .py собирает выражения автодат вне f-string ради совместимости с python 3.9 (PEP 701).
param(
[Parameter(Mandatory)]
[Alias('Path')]
+7 -3
View File
@@ -1,4 +1,4 @@
# skd-edit v1.27 — Atomic 1C DCS editor (Python port)
# skd-edit v1.28 — Atomic 1C DCS editor (Python port)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import json
@@ -1244,6 +1244,9 @@ def build_param_fragment(parsed, indent):
if parsed.get("autoDates"):
param_name = parsed["name"]
# Canonical БСП pattern: title + valueType + value + useRestriction + expression
# NB: expr автодат собираем в переменную (не в f-string): бэкслеш в \uXXXX
# внутри {} f-строки — SyntaxError на python < 3.12 (PEP 701). Совместимость с 3.9.
expr_start = esc_xml('&' + param_name + '.\u0414\u0430\u0442\u0430\u041d\u0430\u0447\u0430\u043b\u0430')
b_lines = [
f"{i}<parameter>",
f"{i}\t<name>\u0414\u0430\u0442\u0430\u041d\u0430\u0447\u0430\u043b\u0430</name>",
@@ -1253,11 +1256,12 @@ def build_param_fragment(parsed, indent):
f"{i}\t</valueType>",
f'{i}\t<value xsi:type="xs:dateTime">0001-01-01T00:00:00</value>',
f"{i}\t<useRestriction>true</useRestriction>",
f"{i}\t<expression>{esc_xml('&' + param_name + '.\u0414\u0430\u0442\u0430\u041d\u0430\u0447\u0430\u043b\u0430')}</expression>",
f"{i}\t<expression>{expr_start}</expression>",
f"{i}</parameter>",
]
fragments.append("\n".join(b_lines))
expr_end = esc_xml('&' + param_name + '.\u0414\u0430\u0442\u0430\u041e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f')
e_lines = [
f"{i}<parameter>",
f"{i}\t<name>\u0414\u0430\u0442\u0430\u041e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f</name>",
@@ -1267,7 +1271,7 @@ def build_param_fragment(parsed, indent):
f"{i}\t</valueType>",
f'{i}\t<value xsi:type="xs:dateTime">0001-01-01T00:00:00</value>',
f"{i}\t<useRestriction>true</useRestriction>",
f"{i}\t<expression>{esc_xml('&' + param_name + '.\u0414\u0430\u0442\u0430\u041e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f')}</expression>",
f"{i}\t<expression>{expr_end}</expression>",
f"{i}</parameter>",
]
fragments.append("\n".join(e_lines))