- main.py: 增加show_banner()启动说明、各阶段[INFO]日志、结果摘要、任意键退出 - file_selector.py: 重写为路径输入→验证→空输入弹窗回退→不存在循环重试 - run.bat: 新建启动脚本(chcp 65001, mode con cols=80 lines=20, color 0B, title固定署名, pause) - Code/docs/modification-assessment.md: 修改需求评估文档
62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
"""PinList generator — converts a validated PinMAP into a flat pin list.
|
|
|
|
Usage
|
|
-----
|
|
>>> from pinlist_generator import generate_pinlist
|
|
>>> pinlist = generate_pinlist(pinmap, validation)
|
|
"""
|
|
|
|
from models import PinMAP, PinList, ValidationResult
|
|
|
|
|
|
def generate_pinlist(pinmap: PinMAP, validation: ValidationResult) -> PinList:
|
|
"""Generate a PinList from a PinMAP.
|
|
|
|
Rules
|
|
-----
|
|
- ``A1`` cell holds the package-info string.
|
|
- Column A = PinName, Column B = Pin number.
|
|
- Rows are sorted by pin number in ascending order.
|
|
- Missing PinNames (flagged as warnings) default to ``"NC"``.
|
|
|
|
Parameters
|
|
----------
|
|
pinmap : PinMAP
|
|
A parsed pin map.
|
|
validation : ValidationResult
|
|
The validation result (used to identify pins with missing names).
|
|
|
|
Returns
|
|
-------
|
|
PinList
|
|
"""
|
|
# Build a set of pin numbers that have missing names
|
|
missing_numbers = set()
|
|
for warn in validation.warnings:
|
|
if "缺失引脚序号" in warn.details:
|
|
# Parse the details string: "缺失引脚序号: [1, 3, 5],将默认为 NC"
|
|
import re
|
|
match = re.search(r"缺失引脚序号:\s*\[([^\]]+)\]", warn.details)
|
|
if match:
|
|
for num_str in match.group(1).split(","):
|
|
num_str = num_str.strip()
|
|
if num_str:
|
|
missing_numbers.add(int(num_str))
|
|
|
|
# Build rows: replace missing names with "NC", sort by pin number
|
|
rows: list[tuple[str, int]] = []
|
|
for pin in pinmap.pins:
|
|
pin_name = pin.name if pin.name and pin.name.strip() else "NC"
|
|
# Override if validator flagged it
|
|
if pin.number in missing_numbers:
|
|
pin_name = "NC"
|
|
rows.append((pin_name, pin.number))
|
|
|
|
# Sort by pin number (ascending)
|
|
rows.sort(key=lambda r: r[1])
|
|
|
|
return PinList(
|
|
package_info=pinmap.package_info,
|
|
rows=rows,
|
|
)
|