Files
altium-render-engine/backend/app/models/pcb.py
T
2026-11-09 12:34:50 +03:30

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