Skip to content

Commit

Permalink
🦄 refactor: 适配pylance静态扫描
Browse files Browse the repository at this point in the history
Signed-off-by: xqyjlj <xqyjlj@126.com>
  • Loading branch information
xqyjlj committed Feb 11, 2025
1 parent c295dc3 commit 384d9bf
Show file tree
Hide file tree
Showing 26 changed files with 322 additions and 275 deletions.
2 changes: 1 addition & 1 deletion common/clock_tree.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ def i18n(self) -> dict[str, I18nType]:
self.__i18n[name] = I18nType(i)
return self.__i18n

def i18nOrigin(self) -> dict[str, I18nType]:
def i18nOrigin(self) -> dict[str, dict[str, str]]:
return self.__data.get("i18n", {})


Expand Down
34 changes: 19 additions & 15 deletions common/coder.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,8 @@ def dump(self) -> dict:
sys.path = SETTINGS.SYS_PATH + [f"{packageFolder}/tools/generator/filters"]
for file in files:
spec = importlib.util.spec_from_file_location(Path(file).stem, file)
if spec is None or spec.loader is None:
break
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
functions = [
Expand Down Expand Up @@ -184,6 +186,8 @@ def __loadGenerator(self) -> ModuleType | None:
spec = importlib.util.spec_from_file_location(
"coder", f"{PROJECT.halFolder()}/tools/generator/generator.py"
)
if spec is None or spec.loader is None:
return None
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
Expand Down Expand Up @@ -252,7 +256,7 @@ def __render(
suffix = Path(absPath).suffix
if suffix == ".h" or suffix == ".c":
args["userCode"] = self.__matchUser(
absPath, "/\*\*<", " \*/", "/\*\*>", " \*/"
absPath, r"/\*\*<", r" \*/", r"/\*\*>", r" \*/"
)
elif Path(absPath).name == "xmake.lua":
args["userCode"] = self.__matchUser(absPath, "----<", "", "---->", "")
Expand Down Expand Up @@ -283,21 +287,21 @@ def __render(

return context

def __generateMdkArmProject(self, project: dict, path: str, minVersion: str) -> str:
spec = importlib.util.spec_from_file_location(
"coder", f"{package_dir}/tools/coder/gen_mdk_arm.py"
)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
# def __generateMdkArmProject(self, project: dict, path: str, minVersion: str) -> str:
# spec = importlib.util.spec_from_file_location(
# "coder", f"{package_dir}/tools/coder/gen_mdk_arm.py"
# )
# module = importlib.util.module_from_spec(spec)
# spec.loader.exec_module(module)

if os.path.isfile(path):
tree = etree.parse(path)
else:
tree = None
# if os.path.isfile(path):
# tree = etree.parse(path)
# else:
# tree = None

return module.main(
copy.deepcopy(project), copy.deepcopy(minVersion), copy.deepcopy(tree)
)
# return module.main(
# copy.deepcopy(project), copy.deepcopy(minVersion), copy.deepcopy(tree)
# )


class CoderCmd(QObject):
Expand Down Expand Up @@ -358,7 +362,7 @@ def __on_coder_copyLibraryProgressUpdated(
if self.progress:
if self.libraryCopiedBar is None:
self.libraryCopiedBar = tqdm(total=count, desc="copy", unit="file")
self.generatedBar.set_description(f"copy {os.path.basename(path)}")
self.libraryCopiedBar.set_description(f"copy {os.path.basename(path)}")
self.libraryCopiedBar.n = index
self.libraryCopiedBar.refresh()
if index == count:
Expand Down
16 changes: 8 additions & 8 deletions common/ip.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ def values(self) -> list[str]:
return values

@property
def default(self) -> str:
def default(self) -> str | float | int | bool | None:
default = self.__data.get("default")
if default is None:
default = self.__parameters[self.__name].default
Expand Down Expand Up @@ -256,7 +256,7 @@ def parameters(self) -> dict[str, ParameterUnitType]:
break
if tmp is None:
express = "(default)"
tmp = param.get("(default)")
tmp = param.get("(default)", {})
self.__parameters[name] = IpType.ParameterUnitType(tmp)
self.__conditions[name] = express
return self.__parameters
Expand Down Expand Up @@ -334,7 +334,7 @@ def __on_valueHub_changed(self):

if condition != express:
li.append(name)
self.__parameters[name] = IpType.ParameterUnitType(tmp)
self.parameters[name] = IpType.ParameterUnitType(tmp)
self.__conditions[name] = express
if len(li) > 0:
self.__flushI18n(li)
Expand All @@ -343,17 +343,17 @@ def __on_valueHub_changed(self):
def __flushI18n(self, names: list[str]):
locale = SETTINGS.get(SETTINGS.language).value.name()
for name in names:
parameter = self.__parameters[name]
parameter = self.parameters[name]
for key, value in parameter.values.items():
val = value.comment.get(locale)
if self.total()[name].get(key, "") != val:
old = self.__total[name].get(key, "")
self.__total[name][key] = val
old = self.total()[name].get(key, "")
self.total()[name][key] = val
self.totalChanged.emit(name, key, old, val)

if self.total2()[name].get(val, "") != key:
old = self.__total2[name].get(val, "")
self.__total2[name][val] = key
old = self.total2()[name].get(val, "")
self.total2()[name][val] = key
self.total2Changed.emit(name, val, old, key)


Expand Down
2 changes: 1 addition & 1 deletion common/summary.py
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,7 @@ def pinIp(self) -> str:
if len(pin.modes) > 0:
self.__pinIp = pin.modes[0].split(":")[0]
break
return self.__pinIp
return self.__pinIp or ""


class Summary:
Expand Down
10 changes: 5 additions & 5 deletions dialogs/package_install_dialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,13 @@ class PackageInstallDialog(MessageBoxBase):

def __init__(self, parent=None):
super().__init__(parent=parent)
self.titleLabel = SubtitleLabel(self.tr("Install package"), self)
self.titleLabel = SubtitleLabel(self.tr("Install package"), self) # type: ignore
# ----------------------------------------------------------------------
self.pathLayout = QHBoxLayout()

self.pathLineEdit = LineEdit(self)
self.pathLineEdit.setReadOnly(True)
self.pathLineEdit.setPlaceholderText(self.tr("Choose package (*.csppack) path"))
self.pathLineEdit.setPlaceholderText(self.tr("Choose package (*.csppack) path")) # type: ignore
self.pathLineEdit.textChanged.connect(self.__on_pathLineEdit_textChanged)

self.folderBtn = ToolButton()
Expand Down Expand Up @@ -98,7 +98,7 @@ def __init__(self, parent=None):
self.viewLayout.addLayout(self.progressLayout)
self.viewLayout.addWidget(self.fileLabel)
# ----------------------------------------------------------------------
self.yesButton.setText(self.tr("Install"))
self.yesButton.setText(self.tr("Install")) # type: ignore
self.yesButton.clicked.disconnect() # self._MessageBoxBase__onYesButtonClicked
self.yesButton.clicked.connect(self.__on_yesButton_clicked)
self.yesButton.setEnabled(False)
Expand All @@ -114,9 +114,9 @@ def __on_pathLineEdit_textChanged(self, text: str):
def __on_folderBtn_pressed(self):
path, _ = QFileDialog.getOpenFileName(
self,
self.tr("Choose CSP package file"),
self.tr("Choose CSP package file"), # type: ignore
SETTINGS.lastPackageFileFolder.value,
self.tr("CSP package file (*.csppack)"),
self.tr("CSP package file (*.csppack)"), # type: ignore
)
if os.path.isfile(path):
SETTINGS.set(SETTINGS.lastPackageFileFolder, os.path.dirname(path))
Expand Down
2 changes: 1 addition & 1 deletion tools/cubemx_tool/families2repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ def converter(self, path: str) -> dict[str, dict]:
peripherals = {}
for peripheralNode in peripheralNodes:
_kind = peripheralNode.attrib.get("Type", None)
num = peripheralNode.attrib.get("MaxOccurs", None)
num = peripheralNode.attrib.get("MaxOccurs", 0)
peripherals[_kind] = int(num)

socs[name] = {
Expand Down
6 changes: 3 additions & 3 deletions tools/cubemx_tool/mcu2summary.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,9 @@ def __getPins(self, pinNodes: list[etree.Element], ns: dict) -> dict:
}
for pinNode in pinNodes:
pinName = pinNode.attrib["Name"]
position: str = pinNode.attrib["Position"]
if position.isdecimal():
position: int = int(position)
position: str | int = pinNode.attrib["Position"]
if isinstance(position, str) and position.isdecimal():
position: str | int = int(position)
type_ = typeMap.get(pinNode.attrib["Type"], pinNode.attrib["Type"])
signalNodes = pinNode.findall("ns:Signal", ns)
signals = []
Expand Down
35 changes: 28 additions & 7 deletions tools/drawio_tool/drawio.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,23 +129,29 @@ def __init__(self, path: str, i18n: dict[str, dict[str, str]], local: str):
"ns": self.__root.tag.split("}")[0][1:] if "}" in self.__root.tag else ""
}
version = Version(self.__drawio.attrib["version"])
objects: list[etree.Element] = self.__drawio.find("diagram").findall(
"mxGraphModel/root/object"
)
mxCells: list[etree.Element] = self.__drawio.find("diagram").findall(
"mxGraphModel/root/mxCell"
)
diagram = self.__drawio.find("diagram")
if diagram is None:
logger.error("The 'diagram' node is not found")
return
objects: list[etree.Element] = diagram.findall("mxGraphModel/root/object")
mxCells: list[etree.Element] = diagram.findall("mxGraphModel/root/mxCell")

for obj in objects:
id_ = obj.attrib["id"]
mxCell = obj.find("mxCell")
if mxCell is None:
logger.error(f"The 'mxCell' node is not found")
break
mxCell.attrib["id"] = id_
mxCells.append(mxCell)
for mxCell in mxCells:
cell = Drawio.MxCellType(mxCell)
id_ = mxCell.attrib["id"]
if self.__isWidget(cell):
element = self.__findSvgElement(id_)
if element is None:
logger.error(f"The '{id_}' id is not found")
break
ellipses = element.findall("ns:g/ns:g/ns:ellipse", self.__namespace)
rects = element.findall("ns:g/ns:g/ns:rect", self.__namespace)
if len(ellipses) == 1:
Expand All @@ -165,6 +171,9 @@ def __init__(self, path: str, i18n: dict[str, dict[str, str]], local: str):
f"There was a problem parsing the svg file {path!r}, the default drawio configuration will be used. id {id_!r}"
)
mxGeometry = mxCell.find("mxGeometry")
if mxGeometry is None:
logger.error("The 'mxGeometry' node is not found")
break
x = float(mxGeometry.attrib["x"]) + 1
y = float(mxGeometry.attrib["y"]) + 1
width = float(mxGeometry.attrib["width"]) + 1
Expand All @@ -186,6 +195,9 @@ def __init__(self, path: str, i18n: dict[str, dict[str, str]], local: str):

for id_, item in self.__widgets.items():
element = self.__findSvgElement(id_)
if element is None:
logger.error(f"The '{id_}' id is not found")
break
self.__updateGraphicsElement(element, id_, "rgb(0, 0, 0)")

@property
Expand Down Expand Up @@ -272,7 +284,7 @@ def __isText(self, attrib: dict[str, str]) -> bool:

return times > 0

def __findSvgElement(self, id_: str) -> etree.Element:
def __findSvgElement(self, id_: str) -> etree.Element | None:
rtn = None

gs = self.__root.findall("ns:g/ns:g/ns:g/ns:g", self.__namespace)
Expand All @@ -286,16 +298,25 @@ def __findSvgElement(self, id_: str) -> etree.Element:
def __updateLine(self):
for id_ in self.__lines:
element = self.__findSvgElement(id_)
if element is None:
logger.error(f"The '{id_}' id is not found")
break
self.__updateLineElement(element, id_, "rgb(255, 0, 0)")

def __updateText(self):
for id_ in self.__texts:
element = self.__findSvgElement(id_)
if element is None:
logger.error(f"The '{id_}' id is not found")
break
self.__updateTextElement(element, id_, "rgb(0, 255, 255)")

def __updateGraphics(self):
for id_ in self.__graphics:
element = self.__findSvgElement(id_)
if element is None:
logger.error(f"The '{id_}' id is not found")
break
self.__updateGraphicsElement(element, id_, "rgb(0, 255, 0)")

def __updateLineElement(self, el: etree.Element, cellId: str, color: str):
Expand Down
9 changes: 6 additions & 3 deletions view/clock_tree_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@

import os
from pathlib import Path
from loguru import logger

import jinja2
from PySide6.QtCore import QSize
Expand Down Expand Up @@ -120,9 +121,8 @@ def __addWidget(self):

elements = self.__clockTree.elements

data = {
"isDarkMode": isDarkTheme(),
}
data = {}
data["isDarkMode"] = isDarkTheme()

env = jinja2.Environment(
loader=jinja2.FileSystemLoader(
Expand Down Expand Up @@ -152,6 +152,9 @@ def __addWidget(self):
instance = seqs[0]
name = seqs[1]
ip = IP.projectIps().get(instance)
if ip is None:
logger.error(f"The {instance} ip is not found")
break
parameter = ip.parameters.get(name)
if parameter is not None:
type_ = parameter.type
Expand Down
4 changes: 2 additions & 2 deletions view/code_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,8 @@ def flush(self):
succeed, msg = PROJECT.isGenerateSettingValid()
if not succeed:
logger.error(msg)
title = self.tr("Error")
content = self.tr("The coder settings is invalid. Please check it.")
title = self.tr("Error") # type: ignore
content = self.tr("The coder settings is invalid. Please check it.") # type: ignore
message = MessageBox(title, content, self.window())
message.setContentCopyable(True)
message.cancelButton.setDisabled(True)
Expand Down
36 changes: 18 additions & 18 deletions view/package_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,26 +75,26 @@ def setInfo(self, kind: str, name: str, version: str):
self.treeWidget.show()

# Author ---------------------------------------------------------------
authorItem = QTreeWidgetItem(self.treeWidget, [self.tr("Author")])
QTreeWidgetItem(authorItem, [self.tr("Name"), pdsc.author.name])
QTreeWidgetItem(authorItem, [self.tr("Email"), pdsc.author.email])
websiteItem = QTreeWidgetItem(authorItem, [self.tr("Website")])
QTreeWidgetItem(websiteItem, [self.tr("Blog"), pdsc.author.website.blog])
QTreeWidgetItem(websiteItem, [self.tr("Github"), pdsc.author.website.github])
authorItem = QTreeWidgetItem(self.treeWidget, [self.tr("Author")]) # type: ignore
QTreeWidgetItem(authorItem, [self.tr("Name"), pdsc.author.name]) # type: ignore
QTreeWidgetItem(authorItem, [self.tr("Email"), pdsc.author.email]) # type: ignore
websiteItem = QTreeWidgetItem(authorItem, [self.tr("Website")]) # type: ignore
QTreeWidgetItem(websiteItem, [self.tr("Blog"), pdsc.author.website.blog]) # type: ignore
QTreeWidgetItem(websiteItem, [self.tr("Github"), pdsc.author.website.github]) # type: ignore
# ----------------------------------------------------------------------
QTreeWidgetItem(self.treeWidget, [self.tr("Name"), pdsc.name])
QTreeWidgetItem(self.treeWidget, [self.tr("Version"), pdsc.version])
QTreeWidgetItem(self.treeWidget, [self.tr("License"), pdsc.license])
QTreeWidgetItem(self.treeWidget, [self.tr("Type"), pdsc.type])
QTreeWidgetItem(self.treeWidget, [self.tr("Vendor"), pdsc.vendor])
QTreeWidgetItem(self.treeWidget, [self.tr("Name"), pdsc.name]) # type: ignore
QTreeWidgetItem(self.treeWidget, [self.tr("Version"), pdsc.version]) # type: ignore
QTreeWidgetItem(self.treeWidget, [self.tr("License"), pdsc.license]) # type: ignore
QTreeWidgetItem(self.treeWidget, [self.tr("Type"), pdsc.type]) # type: ignore
QTreeWidgetItem(self.treeWidget, [self.tr("Vendor"), pdsc.vendor]) # type: ignore
QTreeWidgetItem(
self.treeWidget, [self.tr("Vendor url"), pdsc.vendorUrl.get(local)]
self.treeWidget, [self.tr("Vendor url"), pdsc.vendorUrl.get(local)] # type: ignore
)
QTreeWidgetItem(
self.treeWidget, [self.tr("Description"), pdsc.description.get(local)]
self.treeWidget, [self.tr("Description"), pdsc.description.get(local)] # type: ignore
)
QTreeWidgetItem(self.treeWidget, [self.tr("Url"), pdsc.url.get(local)])
QTreeWidgetItem(self.treeWidget, [self.tr("Support"), pdsc.support])
QTreeWidgetItem(self.treeWidget, [self.tr("Url"), pdsc.url.get(local)]) # type: ignore
QTreeWidgetItem(self.treeWidget, [self.tr("Support"), pdsc.support]) # type: ignore
self.treeWidget.expandAll()

# def setItems(tree: TreeWidget, parent=None):
Expand Down Expand Up @@ -131,7 +131,7 @@ def __init__(self, kind: str, name: str, version: str, parent: QObject):
def run(self):
status = PACKAGE.uninstall(self.kind, self.name, self.version)
if not status:
self.failed.emit(self.tr("Uninstall failed"))
self.failed.emit(self.tr("Uninstall failed")) # type: ignore


class PackageView(Ui_PackageView, QWidget):
Expand All @@ -152,7 +152,7 @@ def __init__(self, parent=None):
)

self.versionMenu = RoundMenu(parent=self)
self.uninstallAction = Action(self.tr("Uninstall"))
self.uninstallAction = Action(self.tr("Uninstall")) # type: ignore
self.uninstallAction.triggered.connect(self.__on_uninstallAction_triggered)
self.versionMenu.addAction(self.uninstallAction)

Expand Down Expand Up @@ -201,7 +201,7 @@ def __on_uninstallAction_triggered(self):
)
thread.started.connect(self.__on_uninstallThread_started)
thread.failed.connect(
lambda s: MessageBox(self.tr("Error"), s, self.window()).exec()
lambda s: MessageBox(self.tr("Error"), s, self.window()).exec() # type: ignore
)
thread.finished.connect(self.__on_uninstallThread_finished)
thread.start()
Expand Down
Loading

0 comments on commit 384d9bf

Please sign in to comment.