68 خطوط
1.8 KiB
Python
68 خطوط
1.8 KiB
Python
"""PCB contracts extend geometry without changing the schematic wire schema."""
|
|
from typing import Literal
|
|
from pydantic import BaseModel, Field
|
|
from .schematic import Document, Primitive, SchematicObject, Point, Bounds
|
|
from .api import RenderStatus
|
|
|
|
|
|
class PCBPrimitive(Primitive):
|
|
layer_ids: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class PCBObject(SchematicObject):
|
|
native_uid: str = ''
|
|
layer_ids: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class Footprint(BaseModel):
|
|
id: str
|
|
designator: str = ''
|
|
name: str = ''
|
|
value: str = ''
|
|
comment: str = ''
|
|
description: str = ''
|
|
library_reference: str = ''
|
|
source_library: str = ''
|
|
position: Point
|
|
rotation: float = 0
|
|
mirrored: bool = False
|
|
bounds: Bounds
|
|
parameters: dict[str, str] = Field(default_factory=dict)
|
|
primitive_ids: list[str] = Field(default_factory=list)
|
|
object_ids: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class PCBData(Document):
|
|
document_type: Literal['pcb'] = 'pcb'
|
|
components: list[Footprint]
|
|
primitives: list[PCBPrimitive]
|
|
objects: list[PCBObject]
|
|
|
|
|
|
class PCBStatus(RenderStatus):
|
|
document_type: Literal['pcb', 'pcb_comparison']
|
|
status_url: str
|
|
layers: list[dict] | None = None
|
|
net_count: int | None = None
|
|
|
|
|
|
class PCBUploadResponse(PCBStatus):
|
|
viewer_token: str | None = None
|
|
|
|
|
|
class PCBComparisonStatus(PCBStatus):
|
|
comparison_id: str
|
|
url: str
|
|
summary: dict[Literal['added','removed','modified','moved'], int] | None = None
|
|
total_changed: int | None = None
|
|
changes: list[dict] | None = None
|
|
old: dict | None = None
|
|
new: dict | None = None
|
|
nets: dict | None = None
|
|
matching: dict | None = None
|
|
limitations: list[str] | None = None
|
|
|
|
|
|
class PCBComparisonUploadResponse(PCBComparisonStatus):
|
|
viewer_token: str | None = None
|