
| Current Path : /var/www/web-klick.de/dsh/order_model/.archive/ixml/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/web-klick.de/dsh/order_model/.archive/ixml/layer.py |
from typing import List, Optional, Union, Literal
from pydantic import BaseModel, Extra, validator
from ordermodel.image_field import ImageField
from ordermodel.title import Title
class Layer(BaseModel):
"""Model to carry layer information.
Type hint notation by 'pydantic'.
(see https://pypi.org/project/pydantic/)
Attributes:
template_description: iMask template identifier.
(e.g.) 'ST-TOURS-PRINT/ 7"-GLOBAL--LAYER'
mask_paritiy:
(e.g.) 'Wrong Reading', 'Right Reading'
glass_size: Glass size.
"""
layer_number: int
layer_device: str
layer_name: str
route_site: Literal['CB', 'MOO', 'IC'] = None # Todo: (1) Clarify, complete or remove. (2) Multiple route sites possible?
release_to_wip_site: Literal['CB', 'DR', 'IC'] = None
product: Optional[str] = None # e.g. '4EPSM/6"'
product_type: Optional[str] = None
glass_size: Optional[str] = None
quantity: Optional[str] = None
grade: Optional[str] = None # e.g. 'JC'
grade_type: Optional[str] = None
mask_parity: Literal['Wrong Reading', 'Right Reading'] = None
price: Union[int, float] = None
price_code: Optional[str] = None
customer_information_1: Optional[str] = None
customer_information_2: Optional[str] = None
template_description: Optional[str] = None
image_fields: List[ImageField] = [] # Todo: Rather define a default IF?
titles: List[Title] = []
@validator('image_fields')
def check_image_fields(cls, image_fields):
# check if the max. number if image fields is not exceeded
if len(image_fields) > 8:
raise ValueError('Maximum number of allowed image fields is 8.')
# check if all 'if_numbers' are unique
if_numbers = set(image_field.if_number for image_field in image_fields)
if len(if_numbers) != len(image_fields):
raise ValueError('Non unique image field number.')
return image_fields
brand: Optional[str]
revision: Optional[int] = None
serial_number: Optional[str] = None
diversion_plan: Optional[str] = None
po_line_number: Optional[str] = None
customer_tracking: Optional[str] = None
secured: Optional[bool] = None
maskview: Optional[str] = None
ship_method: Optional[str] = None
ship_method_site: Optional[str] = None
field_tone: Optional[str] = None
pell_required: Optional[bool] = None
cd_required: Optional[bool] = None
multi_layer: Optional[str] = None
jobdeck_template: Optional[str] = None
scheduled_eta: Optional[str] = None # Todo: Add datetime as an option.
cat_alt_cd_tolerance: Optional[str] = None
cat_alt_cd_tolerance2: Optional[str] = None
cat_alt_cd_uniformity: Optional[str] = None
cat_alt_cd_uniformity2: Optional[str] = None
cat_alt_reg_tolerance: Optional[str] = None
cat_cd_tolerance: Optional[str] = None
cat_cd_uniformity: Optional[str] = None
cat_defect_size: Optional[str] = None
cat_reg_tolerance: Optional[str] = None
# centrality
centrality_yn: Optional[bool] = None
centrality_type: Optional[str] = None
centrality_x_tol: Optional[str] = None
centrality_y_tol: Optional[str] = None
centrality_req_by: Optional[str] = None
# na-centrality
na_centrality_reqd_by: Optional[str] = None
na_centrality_type: Optional[str] = None
na_centrality_yn: Optional[bool] = None
na_centrality_x_tol: Optional[bool] = None
na_centrality_y_tol: Optional[bool] = None
na_layer_spec_rotate: Optional[str] = None
na_rotation_tol: Optional[str] = None
check_reticle: Optional[str] = None
chrome_side_description: Optional[str] = None
compact_label: Optional[str] = None
country_of_manufacture: Optional[str] = None
current_arrival_schedule: Optional[str] = None
cust_jobview_release: Optional[str] = None
customer_arrival_date: Optional[str] = None
customer_code: Optional[str] = None
customer_eccn: Optional[str] = None
customer_hold: Optional[str] = None
defect_density: Optional[str] = None
delivery_date: Optional[str] = None
direct_copy: Optional[str] = None
drop_equal_contract_date: Optional[str] = None
etch_type: Optional[str] = None
etch_type_req_by: Optional[str] = None
foundry_jobview_release: Optional[str] = None
frame_die_received: Optional[str] = None
glass_side_description: Optional[str] = None
glass_type: Optional[str] = None
imaging_required_by: Optional[str] = None
layer_rd_designation: Optional[str] = None
layer_rd_funding_project: Optional[str] = None
layer_spec_comments: Optional[str] = None
layer_spec_rotate: Optional[str] = None
layer_status: Optional[str] = None
line_ship_to_contact: Optional[str] = None
logic_dram_other: Optional[str] = None
mask_coating: Optional[str] = None
mask_feature_type: Optional[str] = None
maskshop_comments: Optional[str] = None
material_wavelength: Optional[int] = None # Todo: Check if float required + add regex?
no_commercial_charge_value: Union[int, float] = None
num_mlr_fields: Optional[int] = None # Todo: Check requirements.
number_of_images: Optional[int] = None # Todo: Check requirements.
opc_feature_type: Optional[str] = None
pack_slip_comments: Optional[str] = None
plots: Literal['Required', 'Approval'] = None
prime_die_received: Optional[str] = None
process_flow: Optional[str] = None
request_equal_mfg_date: Optional[bool] = None
requested_due_date: Optional[str] = None
rotation_tol: Optional[str] = None
send_to_site: Optional[str] = None
ship_in_sequence: Optional[str] = None
ship_set: Optional[str] = None
ship_to_location: Optional[str] = None
shipping_instructions: Optional[str] = None
site_application: Optional[str] = None
stepper_types: List[str] = None
technology_node: Optional[str] = None
time_data_received: Optional[str] = None
tp_instructions: Optional[str] = None
tpi_holds_master: Optional[str] = None
class Config:
extra = Extra.forbid