0321 from macmini
This commit is contained in:
166
3rdparty/plugins/com_github_Steffen-W_impartGUI/impart_migration.py
vendored
Normal file
166
3rdparty/plugins/com_github_Steffen-W_impartGUI/impart_migration.py
vendored
Normal file
@ -0,0 +1,166 @@
|
||||
from pathlib import Path
|
||||
import logging
|
||||
|
||||
from .kicad_cli import kicad_cli
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
cli = kicad_cli()
|
||||
|
||||
|
||||
def find_old_lib_files(
|
||||
folder_path: str,
|
||||
libs: list[str] = ["Octopart", "Samacsys", "UltraLibrarian", "Snapeda", "EasyEDA"],
|
||||
) -> list:
|
||||
|
||||
folder_path = Path(folder_path).expanduser()
|
||||
found_files = {}
|
||||
|
||||
if not folder_path.exists():
|
||||
return found_files
|
||||
|
||||
for file in folder_path.iterdir():
|
||||
if not file.is_file():
|
||||
continue
|
||||
|
||||
if not (file.name.endswith(".lib") or file.name.endswith(".kicad_sym")):
|
||||
continue
|
||||
|
||||
for lib in libs:
|
||||
if file.name.startswith(lib):
|
||||
|
||||
if lib in found_files:
|
||||
entry = found_files[lib]
|
||||
else:
|
||||
entry = {}
|
||||
|
||||
# Check whether the file ends with ".lib"
|
||||
if file.name.endswith(".lib"):
|
||||
entry["old_lib"] = file
|
||||
|
||||
blk_file = file.with_suffix(".lib.blk")
|
||||
if blk_file.exists() and blk_file.is_file():
|
||||
entry["old_lib_blk"] = blk_file # backup file
|
||||
|
||||
dcm_file = file.with_suffix(".dcm")
|
||||
if dcm_file.exists() and dcm_file.is_file():
|
||||
entry["old_lib_dcm"] = dcm_file # description file
|
||||
|
||||
# Check whether the file with the old kicad v6 name exists
|
||||
elif file.name.endswith("_kicad_sym.kicad_sym"):
|
||||
entry["oldV6"] = file
|
||||
|
||||
dcm_file = file.with_suffix(".dcm")
|
||||
if dcm_file.exists() and dcm_file.is_file():
|
||||
entry["oldV6_dcm"] = dcm_file # description file
|
||||
|
||||
blk_file = file.with_suffix(".kicad_sym.blk")
|
||||
if blk_file.exists() and blk_file.is_file():
|
||||
entry["oldV6_blk"] = blk_file # backup file
|
||||
|
||||
# Check whether the file with the normal ".kicad_sym" extension exists
|
||||
elif file.name.endswith(".kicad_sym"):
|
||||
entry["V6"] = file
|
||||
|
||||
dcm_file = file.with_suffix(".dcm")
|
||||
if dcm_file.exists() and dcm_file.is_file():
|
||||
entry["V6_dcm"] = dcm_file # description file
|
||||
|
||||
blk_file = file.with_suffix(".kicad_sym.blk")
|
||||
if blk_file.exists() and blk_file.is_file():
|
||||
entry["V6_blk"] = blk_file # backup file
|
||||
|
||||
kicad_sym_file = file.with_name(lib + "_old_lib.kicad_sym")
|
||||
if kicad_sym_file.exists() and kicad_sym_file.is_file():
|
||||
# Possible conversion name
|
||||
entry["old_lib_kicad_sym"] = kicad_sym_file
|
||||
|
||||
if entry:
|
||||
found_files[lib] = entry
|
||||
return found_files
|
||||
|
||||
|
||||
def convert_lib(SRC: Path, DES: Path, drymode=True):
|
||||
|
||||
BLK_file = SRC.with_suffix(SRC.suffix + ".blk") # Backup
|
||||
|
||||
msg = []
|
||||
|
||||
if drymode:
|
||||
msg.append([SRC.name, DES.name])
|
||||
msg.append([SRC.name, BLK_file.name])
|
||||
|
||||
else:
|
||||
|
||||
SRC_dcm = SRC.with_suffix(".dcm")
|
||||
DES_dcm = DES.with_suffix(".dcm")
|
||||
if DES_dcm.exists() and DES_dcm.is_file():
|
||||
return []
|
||||
|
||||
if not cli.upgrade_sym_lib(SRC, DES) or not DES.exists():
|
||||
logger.error(f"converting {SRC.name} to {DES.name} produced an error")
|
||||
return []
|
||||
msg.append([SRC.stem, DES.stem])
|
||||
|
||||
if SRC_dcm.exists() and SRC_dcm.is_file():
|
||||
SRC_dcm.rename(DES_dcm)
|
||||
|
||||
SRC.rename(BLK_file)
|
||||
msg.append([SRC.name, BLK_file.name])
|
||||
|
||||
return msg
|
||||
|
||||
|
||||
def convert_lib_list(libs_dict, drymode=True):
|
||||
|
||||
if not cli.exists():
|
||||
logger.error("kicad_cli not found! Conversion is not possible.")
|
||||
drymode = True
|
||||
|
||||
convertlist = []
|
||||
for lib, paths in libs_dict.items():
|
||||
|
||||
# if "V6" in paths:
|
||||
# print(f"No conversion needed for {lib}.")
|
||||
|
||||
if "old_lib" in paths:
|
||||
file = paths["old_lib"]
|
||||
if "V6" in paths or "oldV6" in paths:
|
||||
if "old_lib_kicad_sym" in paths:
|
||||
logger.error(f"{lib} old_lib_kicad_sym already exists")
|
||||
else:
|
||||
kicad_sym_file = file.with_name(file.stem + "_old_lib.kicad_sym")
|
||||
res = convert_lib(SRC=file, DES=kicad_sym_file, drymode=drymode)
|
||||
convertlist.extend(res)
|
||||
else:
|
||||
name_V6 = file.with_name(lib + ".kicad_sym")
|
||||
res = convert_lib(SRC=file, DES=name_V6, drymode=drymode)
|
||||
convertlist.extend(res)
|
||||
|
||||
if "oldV6" in paths:
|
||||
file = paths["oldV6"]
|
||||
if "V6" in paths:
|
||||
logger.error(f"{lib} V6 already exists")
|
||||
else:
|
||||
name_V6 = file.with_name(lib + ".kicad_sym")
|
||||
res = convert_lib(SRC=file, DES=name_V6, drymode=drymode)
|
||||
convertlist.extend(res)
|
||||
return convertlist
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
from pprint import pprint
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
||||
path = "~/KiCad"
|
||||
ret = find_old_lib_files(folder_path=path)
|
||||
if ret:
|
||||
print("#######################")
|
||||
pprint(ret)
|
||||
print("#######################")
|
||||
|
||||
conv = convert_lib_list(ret, drymode=True)
|
||||
if conv:
|
||||
print("#######################")
|
||||
pprint(conv)
|
||||
print("#######################")
|
Reference in New Issue
Block a user