@@ -822,7 +822,7 @@ class DeviceAssignment(Port):
822
822
def __init__ (
823
823
self ,
824
824
port : Port ,
825
- device_id = None ,
825
+ device_identity = None ,
826
826
frontend_domain = None ,
827
827
options = None ,
828
828
mode : Union [str , AssignmentMode ] = "manual" ,
@@ -834,25 +834,38 @@ def __init__(
834
834
else :
835
835
self .mode = AssignmentMode (mode )
836
836
self .frontend_domain = frontend_domain
837
+ if device_identity == 'any' :
838
+ device_identity = None
839
+ self .device_identity = device_identity
837
840
838
841
def clone (self , ** kwargs ):
839
842
"""
840
843
Clone object and substitute attributes with explicitly given.
841
844
"""
845
+ port = kwargs .get (
846
+ "port" , Port (self .backend_domain , self .ident , self .devclass ))
842
847
attr = {
843
848
"options" : self .options ,
844
- "required " : self .required ,
845
- "attach_automatically " : self .attach_automatically ,
849
+ "mode " : self .mode ,
850
+ "device_identity " : self .device_identity ,
846
851
"frontend_domain" : self .frontend_domain ,
847
852
}
848
853
attr .update (kwargs )
849
- return self .__class__ (
850
- Port (self .backend_domain , self .ident , self .devclass ), ** attr )
854
+ return self .__class__ (port , ** attr )
851
855
852
856
@property
853
857
def device (self ) -> DeviceInfo :
854
858
"""Get DeviceInfo object corresponding to this DeviceAssignment"""
855
- return self .backend_domain .devices [self .devclass ][self .ident ]
859
+ dev = self .backend_domain .devices [self .devclass ][self .ident ]
860
+ if (self .device_identity is not None
861
+ and self .device_identity != dev .self_identity ):
862
+ # raise ProtocolError(
863
+ # "Device identity does not match, expected "
864
+ # f"'{self.device_identity}' got '{dev.self_identity}'")
865
+ # TODO
866
+ return UnknownDevice (
867
+ self .backend_domain , self .ident , devclass = self .devclass )
868
+ return dev
856
869
857
870
@property
858
871
def frontend_domain (self ) -> Optional [QubesVM ]:
@@ -923,6 +936,7 @@ def serialize(self) -> bytes:
923
936
self .pack_property (key , value )
924
937
for key , value in (
925
938
('mode' , self .mode .value ),
939
+ ('device_identity' , self .device_identity ),
926
940
('ident' , self .ident ),
927
941
('devclass' , self .devclass )))
928
942
0 commit comments