Coverage for d7a/alp/tag_response_action.py: 65%

17 statements  

« prev     ^ index     » next       coverage.py v7.5.0, created at 2024-05-24 08:03 +0200

1# 

2# Copyright (c) 2015-2021 University of Antwerp, Aloxy NV. 

3# 

4# This file is part of pyd7a. 

5# See https://github.com/Sub-IoT/pyd7a for further info. 

6# 

7# Licensed under the Apache License, Version 2.0 (the "License"); 

8# you may not use this file except in compliance with the License. 

9# You may obtain a copy of the License at 

10# 

11# http://www.apache.org/licenses/LICENSE-2.0 

12# 

13# Unless required by applicable law or agreed to in writing, software 

14# distributed under the License is distributed on an "AS IS" BASIS, 

15# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 

16# See the License for the specific language governing permissions and 

17# limitations under the License. 

18# 

19from d7a.alp.action import Action 

20from d7a.alp.operations.nop import NoOperation 

21from d7a.alp.operations.operation import Operation 

22from d7a.support.schema import Types 

23 

24class TagResponseAction(Action): 

25 SCHEMA = [{ 

26 "eop" : Types.BOOLEAN(), 

27 "error" : Types.BOOLEAN(), 

28 "op" : Types.BITS(6), 

29 "operation": Types.OBJECT(Operation), 

30 "operand" : Types.OBJECT(nullable=True) # there is no Operand base-class 

31 }] 

32 

33 def __init__(self, eop, error, operation=NoOperation()): 

34 self.eop = eop 

35 self.error = error 

36 super(TagResponseAction, self).__init__(operation) 

37 

38 def __iter__(self): 

39 byte = 0 

40 if self.eop: byte |= 1 << 7 

41 if self.error: byte |= 1 << 6 

42 byte += self.op 

43 yield byte 

44 

45 for byte in self.operation: yield byte