oops, now jlcpcb kicad library added
This commit is contained in:
parent
7c016e7deb
commit
35a5752b21
790 changed files with 6096722 additions and 0 deletions
135
Libraries/JLCPCB-Kicad-Library-main/handmadeLibrarySymbols.py
Normal file
135
Libraries/JLCPCB-Kicad-Library-main/handmadeLibrarySymbols.py
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
# handmadeLibrarySymbols.py
|
||||
import os
|
||||
import pandas as pd
|
||||
import re
|
||||
|
||||
|
||||
def generate_property(property, value):
|
||||
str = f"""\t\t(property "{property}" "{value}"\n\t\t\t(at 0 0 0)\n\t\t\t(effects\n\t\t\t\t(font\n\t\t\t\t\t(size 1.27 1.27)\n\t\t\t\t)\n\t\t\t\t(hide yes)\n\t\t\t)\n\t\t)\n"""
|
||||
return str
|
||||
|
||||
|
||||
def update_component_inplace(lcsc, libraryName, properties):
|
||||
filename = os.path.join("symbols", f"JLCPCB-{libraryName}.kicad_sym")
|
||||
with open(filename, "r", encoding="utf-8") as file:
|
||||
lines = file.readlines()
|
||||
|
||||
lcsc_found = False
|
||||
properties_found = {prop: False for prop in properties.keys()}
|
||||
|
||||
for i, line in enumerate(lines):
|
||||
if lcsc_found == False:
|
||||
if f'(property "LCSC" "C{lcsc}"' in line:
|
||||
lcsc_found = True
|
||||
line_offset = 1
|
||||
# print(f"Found {lcsc} on line {i} of {filename}")
|
||||
# Work Upwards to find datasheet
|
||||
if "datasheet" in properties or "description" in properties:
|
||||
while ("(symbol" not in lines[i - line_offset]) and (line_offset < 30):
|
||||
if '(property "Datasheet"' in lines[i - line_offset] and "datasheet" in properties:
|
||||
lines[i - line_offset] = f' (property "Datasheet" "{properties["datasheet"]}"\n'
|
||||
properties_found["datasheet"] = True
|
||||
elif '(property "Description"' in lines[i - line_offset] and "description" in properties:
|
||||
lines[i - line_offset] = f' (property "Description" "{properties["description"]}"\n'
|
||||
properties_found["description"] = True
|
||||
line_offset += 1
|
||||
|
||||
else:
|
||||
if '(property "ki_keywords"' in line:
|
||||
keywords_index = i
|
||||
|
||||
elif "(property " in line:
|
||||
for prop, found in properties_found.items():
|
||||
if f'(property "{prop.title()}"' in line:
|
||||
if not found and prop != "datasheet" and prop != "description":
|
||||
lines[i] = f'\t\t(property "{prop.title()}" "{properties[prop]}"\n'
|
||||
properties_found[prop] = True
|
||||
|
||||
elif "(symbol" in line:
|
||||
for prop, found in properties_found.items():
|
||||
if not found and prop != "datasheet" and prop != "description":
|
||||
lines.insert(keywords_index, generate_property(prop.title(), properties[prop]))
|
||||
break
|
||||
|
||||
if lcsc_found == False:
|
||||
archived_symbol_path = os.path.join("Archived-Symbols-Footprints", "JLCPCB-Kicad-Symbols")
|
||||
archived_symbols_lcsc = [
|
||||
os.path.splitext(filename)[0]
|
||||
for filename in os.listdir(archived_symbol_path)
|
||||
if filename.endswith(".kicad_sym")
|
||||
]
|
||||
if f"{lcsc}" in archived_symbols_lcsc:
|
||||
print(
|
||||
f"Error: https://jlcpcb.com/parts/componentSearch?searchTxt=c{lcsc} Stock={properties.get("stock")} not found in library {filename} but it was found in the archive"
|
||||
)
|
||||
else:
|
||||
print(
|
||||
f"Error: https://jlcpcb.com/parts/componentSearch?searchTxt=c{lcsc} Stock={properties.get("stock")} not found in library {filename}"
|
||||
)
|
||||
return False
|
||||
else:
|
||||
with open(filename, "w", encoding="utf-8") as file:
|
||||
file.writelines(lines)
|
||||
return True
|
||||
|
||||
|
||||
symbol_header_lines = """(kicad_symbol_lib
|
||||
(version 20231120)
|
||||
(generator "CDFER_Archive_Tool")
|
||||
(generator_version "0.0")
|
||||
"""
|
||||
|
||||
symbol_footer_lines = """)
|
||||
"""
|
||||
|
||||
|
||||
def create_archived_symbol_file(symbol_start_line, symbol_end_line, lines, lcsc):
|
||||
archived_symbols_folder = os.path.join("Archived-Symbols-Footprints", "JLCPCB-Kicad-Symbols")
|
||||
archived_symbol_lines = lines[symbol_start_line:symbol_end_line]
|
||||
|
||||
# Write archived symbol to file
|
||||
archived_filename = os.path.join(archived_symbols_folder, f"{lcsc}.kicad_sym")
|
||||
with open(archived_filename, "w", encoding="utf-8") as archived_file:
|
||||
archived_file.writelines(symbol_header_lines)
|
||||
archived_file.writelines(archived_symbol_lines)
|
||||
archived_file.writelines(symbol_footer_lines)
|
||||
print(f"Archived symbol as: {archived_filename}")
|
||||
|
||||
|
||||
def update_library_stock_inplace(libraryName):
|
||||
df = pd.read_csv("jlcpcb-components-basic-preferred.csv")
|
||||
filename = os.path.join("symbols", f"JLCPCB-{libraryName}.kicad_sym")
|
||||
with open(filename, "r", encoding="utf-8") as file:
|
||||
lines = file.readlines()
|
||||
|
||||
no_stock = False
|
||||
lcsc = 0
|
||||
symbol_start_line = 0
|
||||
|
||||
for i, line in enumerate(lines):
|
||||
lines[i] = lines[i].replace("℃", "°C")
|
||||
if line.startswith("\t(") or line.startswith(")"):
|
||||
if no_stock == True:
|
||||
create_archived_symbol_file(symbol_start_line, i, lines, lcsc)
|
||||
lines[symbol_start_line:i] = [""] * (
|
||||
i - symbol_start_line
|
||||
) # Remove symbol from library by replacing lines with empty strings
|
||||
no_stock = False
|
||||
symbol_start_line = i
|
||||
|
||||
elif '(property "LCSC" "C' in line:
|
||||
# print(f"LCSC Found on line {i} {line}")
|
||||
numbers = [int(num) for num in re.findall("\\d+", line)]
|
||||
lcsc = numbers[0]
|
||||
|
||||
rows = df[df["lcsc"] == lcsc]
|
||||
if len(rows) == 0:
|
||||
no_stock = True
|
||||
print(f"Error: No Stock found for https://jlcpcb.com/partdetail/C{lcsc}")
|
||||
|
||||
elif '(property "Stock"' in line and no_stock == True:
|
||||
lines[i] = f' (property "Stock" "0"\n'
|
||||
|
||||
with open(filename, "w", encoding="utf-8") as file:
|
||||
file.writelines(lines)
|
||||
return
|
||||
Loading…
Add table
Add a link
Reference in a new issue