Files
pinmap-to-pinlist/Releases/v1.0.1/source/pinlist_generator.py
Agent 836ad20515 v1.1.0: 增加交互提示、路径输入、窗口属性配置
- 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: 修改需求评估文档
2026-05-25 17:29:19 +08:00

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,
)