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: 修改需求评估文档
This commit is contained in:
61
Releases/v1.0.1/source/pinlist_generator.py
Normal file
61
Releases/v1.0.1/source/pinlist_generator.py
Normal file
@@ -0,0 +1,61 @@
|
||||
"""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,
|
||||
)
|
||||
Reference in New Issue
Block a user