Skip to main content
Glama
library_schematic.py6.85 kB
from skip import Schematic # Symbol class might not be directly importable in the current version import os import glob class LibraryManager: """Manage symbol libraries""" @staticmethod def list_available_libraries(search_paths=None): """List all available symbol libraries""" if search_paths is None: # Default library paths based on common KiCAD installations # This would need to be configured for the specific environment search_paths = [ "C:/Program Files/KiCad/*/share/kicad/symbols/*.kicad_sym", # Windows path pattern "/usr/share/kicad/symbols/*.kicad_sym", # Linux path pattern "/Applications/KiCad/KiCad.app/Contents/SharedSupport/symbols/*.kicad_sym", # macOS path pattern os.path.expanduser("~/Documents/KiCad/*/symbols/*.kicad_sym") # User libraries pattern ] libraries = [] for path_pattern in search_paths: try: # Use glob to find all matching files matching_libs = glob.glob(path_pattern, recursive=True) libraries.extend(matching_libs) except Exception as e: print(f"Error searching for libraries at {path_pattern}: {e}") # Extract library names from paths library_names = [os.path.splitext(os.path.basename(lib))[0] for lib in libraries] print(f"Found {len(library_names)} libraries: {', '.join(library_names[:10])}{'...' if len(library_names) > 10 else ''}") # Return both full paths and library names return {"paths": libraries, "names": library_names} @staticmethod def list_library_symbols(library_path): """List all symbols in a library""" try: # kicad-skip doesn't provide a direct way to simply list symbols in a library # without loading each one. We might need to implement this using KiCAD's Python API # directly, or by using a different approach. # For now, this is a placeholder implementation. # A potential approach would be to load the library file using KiCAD's Python API # or by parsing the library file format. # KiCAD symbol libraries are .kicad_sym files which are S-expression format print(f"Attempted to list symbols in library {library_path}. This requires advanced implementation.") return [] except Exception as e: print(f"Error listing symbols in library {library_path}: {e}") return [] @staticmethod def get_symbol_details(library_path, symbol_name): """Get detailed information about a symbol""" try: # Similar to list_library_symbols, this might require a more direct approach # using KiCAD's Python API or by parsing the symbol library. print(f"Attempted to get details for symbol {symbol_name} in library {library_path}. This requires advanced implementation.") return {} except Exception as e: print(f"Error getting symbol details for {symbol_name} in {library_path}: {e}") return {} @staticmethod def search_symbols(query, search_paths=None): """Search for symbols matching criteria""" try: # This would typically involve: # 1. Getting a list of all libraries using list_available_libraries # 2. For each library, getting a list of all symbols # 3. Filtering symbols based on the query # For now, this is a placeholder implementation libraries = LibraryManager.list_available_libraries(search_paths) results = [] print(f"Searched for symbols matching '{query}'. This requires advanced implementation.") return results except Exception as e: print(f"Error searching for symbols matching '{query}': {e}") return [] @staticmethod def get_default_symbol_for_component_type(component_type, search_paths=None): """Get a recommended default symbol for a given component type""" # This method provides a simplified way to get a symbol for common component types # It's useful when the user doesn't specify a particular library/symbol # Define common mappings from component type to library/symbol common_mappings = { "resistor": {"library": "Device", "symbol": "R"}, "capacitor": {"library": "Device", "symbol": "C"}, "inductor": {"library": "Device", "symbol": "L"}, "diode": {"library": "Device", "symbol": "D"}, "led": {"library": "Device", "symbol": "LED"}, "transistor_npn": {"library": "Device", "symbol": "Q_NPN_BCE"}, "transistor_pnp": {"library": "Device", "symbol": "Q_PNP_BCE"}, "opamp": {"library": "Amplifier_Operational", "symbol": "OpAmp_Dual_Generic"}, "microcontroller": {"library": "MCU_Module", "symbol": "Arduino_UNO_R3"}, # Add more common components as needed } # Normalize input to lowercase component_type_lower = component_type.lower() # Try direct match first if component_type_lower in common_mappings: return common_mappings[component_type_lower] # Try partial matches for key, value in common_mappings.items(): if component_type_lower in key or key in component_type_lower: return value # Default fallback return {"library": "Device", "symbol": "R"} if __name__ == '__main__': # Example Usage (for testing) # List available libraries libraries = LibraryManager.list_available_libraries() if libraries["paths"]: first_lib = libraries["paths"][0] lib_name = libraries["names"][0] print(f"Testing with first library: {lib_name} ({first_lib})") # List symbols in the first library symbols = LibraryManager.list_library_symbols(first_lib) # This will report that it requires advanced implementation # Get default symbol for a component type resistor_sym = LibraryManager.get_default_symbol_for_component_type("resistor") print(f"Default symbol for resistor: {resistor_sym['library']}/{resistor_sym['symbol']}") # Try a partial match cap_sym = LibraryManager.get_default_symbol_for_component_type("cap") print(f"Default symbol for 'cap': {cap_sym['library']}/{cap_sym['symbol']}")

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mixelpixx/KiCAD-MCP-Server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server