• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

CityOfZion / neo3-boa / e084b44c-1a5f-4649-92cd-d3ed06099181

05 Mar 2024 05:58PM UTC coverage: 92.023% (-0.08%) from 92.107%
e084b44c-1a5f-4649-92cd-d3ed06099181

push

circleci

Mirella de Medeiros
CU-86drpnc9z - Drop support to Python 3.10

20547 of 22328 relevant lines covered (92.02%)

1.84 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

91.03
/boa3/internal/model/type/classes/pythonclass.py
1
import abc
2✔
2

3
from boa3.internal import constants
2✔
4
from boa3.internal.model.type.classes import classtype
2✔
5
from boa3.internal.neo.vm.opcode.Opcode import Opcode
2✔
6
from boa3.internal.neo.vm.type.AbiType import AbiType
2✔
7
from boa3.internal.neo.vm.type.StackItem import StackItemType
2✔
8

9

10
class PythonClass(classtype.ClassType, abc.ABC):
2✔
11

12
    def __init__(self, identifier: str,
2✔
13
                 instance_variables: dict = None,
14
                 instance_methods: dict = None,
15
                 properties: dict = None,
16
                 class_variables: dict = None,
17
                 class_methods: dict = None,
18
                 static_methods: dict = None):
19

20
        self._instance_methods = instance_methods if isinstance(instance_methods, dict) else None
2✔
21
        self._instance_variables = instance_variables if isinstance(instance_variables, dict) else None
2✔
22
        self._properties = properties if isinstance(properties, dict) else None
2✔
23
        self._class_variables = class_variables if isinstance(class_variables, dict) else None
2✔
24
        self._class_methods = class_methods if isinstance(class_methods, dict) else None
2✔
25
        self._static_methods = static_methods if isinstance(static_methods, dict) else None
2✔
26

27
        is_init_defined = isinstance(instance_methods, dict) and constants.INIT_METHOD_ID in instance_methods
2✔
28
        self._is_init_set = is_init_defined
2✔
29
        self._constructor = (instance_methods[constants.INIT_METHOD_ID]
2✔
30
                             if is_init_defined
31
                             else None)
32

33
        super().__init__(identifier)
2✔
34

35
    def _init_class_symbols(self):
2✔
36
        """
37
        Overwrite this method to set variables and methods from this type.
38
        Always call super()._init_class_symbols in the beginning
39
        Used to avoid circular imports between the init classes
40
        """
41
        # TODO: May be removed when class inheritance is implemented #2kq1ght
42
        if not isinstance(self._instance_methods, dict):
2✔
43
            self._instance_methods = {}
2✔
44
        if not isinstance(self._instance_variables, dict):
2✔
45
            self._instance_variables = {}
2✔
46
        if not isinstance(self._properties, dict):
2✔
47
            self._properties = {}
2✔
48
        if not isinstance(self._class_variables, dict):
2✔
49
            self._class_variables = {}
2✔
50
        if not isinstance(self._class_methods, dict):
2✔
51
            self._class_methods = {}
2✔
52
        if not isinstance(self._static_methods, dict):
2✔
53
            self._static_methods = {}
2✔
54

55
    @property
2✔
56
    def class_variables(self):
2✔
57
        if not isinstance(self._class_variables, dict):
2✔
58
            self._init_class_symbols()
×
59
        return self._class_variables.copy()
2✔
60

61
    @property
2✔
62
    def instance_variables(self):
2✔
63
        if not isinstance(self._instance_variables, dict):
2✔
64
            self._init_class_symbols()
×
65
        return self._instance_variables.copy()
2✔
66

67
    @property
2✔
68
    def properties(self):
2✔
69
        if not isinstance(self._properties, dict):
2✔
70
            self._init_class_symbols()
×
71
        return self._properties.copy()
2✔
72

73
    @property
2✔
74
    def static_methods(self):
2✔
75
        if not isinstance(self._static_methods, dict):
2✔
76
            self._init_class_symbols()
2✔
77
        return self._static_methods.copy()
2✔
78

79
    @property
2✔
80
    def class_methods(self):
2✔
81
        if not isinstance(self._class_methods, dict):
2✔
82
            self._init_class_symbols()
×
83
        return self._class_methods.copy()
2✔
84

85
    @property
2✔
86
    def instance_methods(self):
2✔
87
        if not isinstance(self._instance_methods, dict):
2✔
88
            self._init_class_symbols()
×
89
        return self._instance_methods.copy()
2✔
90

91
    def constructor_method(self):
2✔
92
        if not isinstance(self._instance_variables, dict):
2✔
93
            self._init_class_symbols()
2✔
94
        if not self._is_init_set:
2✔
95
            self._constructor = (self._instance_methods[constants.INIT_METHOD_ID]
2✔
96
                                 if constants.INIT_METHOD_ID in self._instance_methods
97
                                 else None)
98
            self._is_init_set = True
2✔
99
        return self._constructor
2✔
100

101
    @property
2✔
102
    def abi_type(self) -> AbiType:
2✔
103
        return super().abi_type
×
104

105
    @property
2✔
106
    def stack_item(self) -> StackItemType:
2✔
107
        """
108
        Get the Neo VM stack item type representation for this type
109

110
        :return: the stack item type of this type. Any by default.
111
        """
112
        return super().stack_item
×
113

114
    def is_instance_opcodes(self) -> list[tuple[Opcode, bytes]]:
2✔
115
        return [(Opcode.ISTYPE, self.stack_item)]
2✔
116

117
    def generate_is_instance_type_check(self, code_generator):
2✔
118
        code_generator.insert_type_check(self.stack_item)
2✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc