167 lines
5.3 KiB
Python
167 lines
5.3 KiB
Python
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("#######################")
|