3131from .ldm_service import LDMService
3232
3333
34-
3534class InterfaceLDM4 :
3635 """
3736 Class specified is described in ETSI EN 302 895 V1.1.1 (2014-09). Section 5.4.4.
@@ -62,7 +61,10 @@ def check_its_aid(self, its_application_identifier) -> bool:
6261 its_application_identifier : int
6362 ITS-AID of the application that wants to register as a data provider
6463 """
65- return isinstance (its_application_identifier , int ) and its_application_identifier in VALID_ITS_AID
64+ return (
65+ isinstance (its_application_identifier , int )
66+ and its_application_identifier in VALID_ITS_AID
67+ )
6668
6769 def check_permissions (self , permissions_granted : list , data_object_id : int ) -> bool :
6870 """
@@ -87,7 +89,9 @@ def check_permissions(self, permissions_granted: list, data_object_id: int) -> b
8789 return True
8890 return False
8991
90- def register_data_consumer (self , data_consumer : RegisterDataConsumerReq ) -> RegisterDataConsumerResp :
92+ def register_data_consumer (
93+ self , data_consumer : RegisterDataConsumerReq
94+ ) -> RegisterDataConsumerResp :
9195 """
9296 Method specified in ETSI EN 302 895 V1.1.1 (2014-09). Section 6.3.1.1
9397 TODO: Apply Security. Currenly gives access to anyone sending valid information.
@@ -101,31 +105,50 @@ def register_data_consumer(self, data_consumer: RegisterDataConsumerReq) -> Regi
101105 if (
102106 data_consumer is None
103107 or self .check_its_aid (data_consumer .application_id ) is False
104- or self .check_permissions (data_consumer .access_permisions , data_consumer .application_id ) is False
108+ or self .check_permissions (
109+ data_consumer .access_permisions , data_consumer .application_id
110+ )
111+ is False
105112 ):
106- return RegisterDataConsumerResp (data_consumer .application_id , None , RegisterDataConsumerResult (2 ))
113+ return RegisterDataConsumerResp (
114+ data_consumer .application_id , None , RegisterDataConsumerResult (2 )
115+ )
107116 self .ldm_service .add_data_consumer_its_aid (data_consumer .application_id )
108- self .logging .debug ("Registered new LDM Data Consumer with application_id %d" , data_consumer .application_id )
117+ self .logging .debug (
118+ "Registered new LDM Data Consumer with application_id %d" ,
119+ data_consumer .application_id ,
120+ )
109121 return RegisterDataConsumerResp (
110122 data_consumer .application_id ,
111123 data_consumer .access_permisions ,
112124 RegisterDataConsumerResult (0 ),
113125 )
114126
115- def deregister_data_consumer (self , data_consumer : DeregisterDataConsumerReq ) -> DeregisterDataConsumerResp :
127+ def deregister_data_consumer (
128+ self , data_consumer : DeregisterDataConsumerReq
129+ ) -> DeregisterDataConsumerResp :
116130 """
117131 Method specified in ETSI EN 302 895 V1.1.1 (2014-09). Section 6.3.2.1
118132 Returning ACK 0 if the application is registered (and now will be unregistered) and
119133 ACK 1 if it is not (and will not be unregistered).
120134 """
121- self .logging .debug ("Deregistring LDM Data Consumer wtih application_id: %d" , data_consumer .application_id )
135+ self .logging .debug (
136+ "Deregistring LDM Data Consumer wtih application_id: %d" ,
137+ data_consumer .application_id ,
138+ )
122139
123140 if data_consumer .application_id in self .ldm_service .get_data_consumer_its_aid ():
124141 self .ldm_service .del_data_consumer_its_aid (data_consumer .application_id )
125- return DeregisterDataConsumerResp (data_consumer .application_id , DeregisterDataConsumerAck (0 ))
126- return DeregisterDataConsumerResp (data_consumer .application_id , DeregisterDataConsumerAck (1 ))
142+ return DeregisterDataConsumerResp (
143+ data_consumer .application_id , DeregisterDataConsumerAck (0 )
144+ )
145+ return DeregisterDataConsumerResp (
146+ data_consumer .application_id , DeregisterDataConsumerAck (1 )
147+ )
127148
128- def request_data_objects (self , data_request : RequestDataObjectsReq ) -> RequestDataObjectsResp :
149+ def request_data_objects (
150+ self , data_request : RequestDataObjectsReq
151+ ) -> RequestDataObjectsResp :
129152 """
130153 Method specified in ETSI EN 302 895 V1.1.1 (2014-09). Section 6.3.3
131154 TODO: Add error message in response if result is not successful.
@@ -140,15 +163,24 @@ def request_data_objects(self, data_request: RequestDataObjectsReq) -> RequestDa
140163 data_request .application_id ,
141164 data_request .data_object_type ,
142165 )
143- if data_request .application_id not in self .ldm_service .get_data_consumer_its_aid ():
144- return RequestDataObjectsResp (data_request .application_id , None , RequestedDataObjectsResult (1 ))
166+ if (
167+ data_request .application_id
168+ not in self .ldm_service .get_data_consumer_its_aid ()
169+ ):
170+ return RequestDataObjectsResp (
171+ data_request .application_id , None , RequestedDataObjectsResult (1 )
172+ )
145173 for data_object_type in data_request .data_object_type :
146174 if data_object_type not in DATA_OBJECT_TYPE_ID :
147- return RequestDataObjectsResp (data_request .application_id , None , RequestedDataObjectsResult (2 ))
175+ return RequestDataObjectsResp (
176+ data_request .application_id , None , RequestedDataObjectsResult (2 )
177+ )
148178
149179 if data_request .priority is not None :
150180 if data_request .priority < 0 or data_request .priority > 255 :
151- return RequestDataObjectsResp (data_request .application_id , None , RequestedDataObjectsResult (3 ))
181+ return RequestDataObjectsResp (
182+ data_request .application_id , None , RequestedDataObjectsResult (3 )
183+ )
152184 if data_request .order is not None :
153185 if not isinstance (data_request .order , list ):
154186 return RequestDataObjectsResp (
@@ -158,14 +190,20 @@ def request_data_objects(self, data_request: RequestDataObjectsReq) -> RequestDa
158190 )
159191 if data_request .filter is not None :
160192 if not isinstance (data_request .filter , Filter ):
161- return RequestDataObjectsResp (data_request .application_id , None , RequestedDataObjectsResult (4 ))
162- data_objects : list = self .ldm_service .query (data_request ) # Find data objects in LDM Maintance DataBases
193+ return RequestDataObjectsResp (
194+ data_request .application_id , None , RequestedDataObjectsResult (4 )
195+ )
196+ data_objects : list = self .ldm_service .query (
197+ data_request
198+ ) # Find data objects in LDM Maintance DataBases
163199 self .logging .debug (
164200 "LDM Data Consumer with application id %s, has recieved %s." ,
165201 data_request .application_id ,
166- len (data_objects )
202+ len (data_objects ),
203+ )
204+ return RequestDataObjectsResp (
205+ data_request .application_id , data_objects , RequestedDataObjectsResult (0 )
167206 )
168- return RequestDataObjectsResp (data_request .application_id , data_objects , RequestedDataObjectsResult (0 ))
169207
170208 def subscribe_data_consumer (
171209 self ,
@@ -201,13 +239,18 @@ def subscribe_data_consumer(
201239 callback : Callable[[None], None]
202240 Callback function that will be called when data is available for the data consumer.
203241 """
204- self .logging .debug ("LDM Data Consumer subscribed with application id %s" , str (subscribe_data_consumer ))
242+ self .logging .debug (
243+ "LDM Data Consumer subscribed with application id %s" ,
244+ str (subscribe_data_consumer ),
245+ )
205246 result = self .validate_subscribe_data_consumer (subscribe_data_consumer )
206247
207248 if result is not None :
208249 return result
209250
210- subscription_id = self .store_subscription_info (subscribe_data_consumer , callback )
251+ subscription_id = self .store_subscription_info (
252+ subscribe_data_consumer , callback
253+ )
211254
212255 return SubscribeDataObjectsResp (
213256 subscribe_data_consumer .application_id ,
@@ -265,11 +308,15 @@ def validate_subscribe_data_consumer(
265308 error_message = "Invalid multiplicity"
266309
267310 if result_code is not None :
268- return self .invalid_response (subscribe_data_consumer .application_id , result_code , error_message )
311+ return self .invalid_response (
312+ subscribe_data_consumer .application_id , result_code , error_message
313+ )
269314
270315 return None
271316
272- def invalid_response (self , application_id : int , result_code : int , error_message : str ) -> SubscribeDataObjectsResp :
317+ def invalid_response (
318+ self , application_id : int , result_code : int , error_message : str
319+ ) -> SubscribeDataObjectsResp :
273320 """
274321 Method to create SubscribeDataObjectResp with error message as specified
275322 in ETSI EN 302 895 V1.1.1 (2014-09). Section 6.3.4
@@ -326,7 +373,10 @@ def is_valid_data_object_type(self, data_object_type: str) -> bool:
326373 bool
327374 True if data_object_types are valid, False otherwise.
328375 """
329- return all (data_object_type in DATA_OBJECT_TYPE_ID for data_object_type in data_object_type )
376+ return all (
377+ data_object_type in DATA_OBJECT_TYPE_ID
378+ for data_object_type in data_object_type
379+ )
330380
331381 def is_valid_priority (self , priority : int ) -> bool :
332382 """
@@ -358,7 +408,9 @@ def is_valid_order(self, order: list[OrderTuple]) -> bool:
358408 bool
359409 True if order is valid, False otherwise.
360410 """
361- return order is None or (isinstance (order , list ) and all (o in [1 , 2 ] for o in order ))
411+ return order is None or (
412+ isinstance (order , list ) and all (o in [1 , 2 ] for o in order )
413+ )
362414
363415 def is_valid_filter (self , data_filter : Filter ) -> bool :
364416 """
@@ -409,7 +461,9 @@ def is_valid_multiplicity(self, multiplicity: int) -> bool:
409461 """
410462 return multiplicity is None or (0 <= multiplicity <= 255 )
411463
412- def store_subscription_info (self , subscribe_data_consumer : SubscribeDataobjectsReq , callback : Callable ) -> int :
464+ def store_subscription_info (
465+ self , subscribe_data_consumer : SubscribeDataobjectsReq , callback : Callable
466+ ) -> int :
413467 """
414468 Method to store subscription information as specified in ETSI EN 302 895 V1.1.1 (2014-09). Section 6.3.4
415469
@@ -436,7 +490,9 @@ def store_subscription_info(self, subscribe_data_consumer: SubscribeDataobjectsR
436490 callback ,
437491 )
438492
439- def unsubscribe_data_consumer (self , unsubscribe_data_consumer : UnsubscribeDataConsumerReq ):
493+ def unsubscribe_data_consumer (
494+ self , unsubscribe_data_consumer : UnsubscribeDataConsumerReq
495+ ):
440496 """
441497 Method specified in ETSI EN 302 895 V1.1.1 (2014-09). Section 6.3.5.1
442498 Current standard doesn't have ASN.1 implementation for UnsubscribeDataConsumerReq
@@ -452,7 +508,10 @@ def unsubscribe_data_consumer(self, unsubscribe_data_consumer: UnsubscribeDataCo
452508 "LDM Data Consumer Subscriber with application_id %s has unsubscribed." ,
453509 unsubscribe_data_consumer .application_id ,
454510 )
455- if unsubscribe_data_consumer .application_id not in self .ldm_service .get_data_consumer_its_aid ():
511+ if (
512+ unsubscribe_data_consumer .application_id
513+ not in self .ldm_service .get_data_consumer_its_aid ()
514+ ):
456515 return UnsubscribeDataConsumerResp (
457516 unsubscribe_data_consumer .application_id ,
458517 None ,
@@ -466,7 +525,9 @@ def unsubscribe_data_consumer(self, unsubscribe_data_consumer: UnsubscribeDataCo
466525 UnsubscribeDataConsumerAck (1 ),
467526 )
468527
469- if not self .ldm_service .delete_subscription (unsubscribe_data_consumer .subscription_id ):
528+ if not self .ldm_service .delete_subscription (
529+ unsubscribe_data_consumer .subscription_id
530+ ):
470531 return UnsubscribeDataConsumerResp (
471532 unsubscribe_data_consumer .application_id ,
472533 unsubscribe_data_consumer .subscription_id ,
0 commit comments