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

Beakerboy / vbaProject-Compiler / 11821977990

13 Nov 2024 04:53PM UTC coverage: 89.432% (-9.4%) from 98.844%
11821977990

Pull #98

github

web-flow
Merge f4d8f43eb into b766bdecc
Pull Request #98: Update module_base.py

385 of 439 new or added lines in 15 files covered. (87.7%)

457 of 511 relevant lines covered (89.43%)

4.47 hits per line

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

95.31
/src/vbaproject_compiler/Models/Entities/module_base.py
1
from ms_ovba_compression.ms_ovba import MsOvba
5✔
2
from vbaproject_compiler.Models.Fields.doubleEncodedString import (
5✔
3
    DoubleEncodedString
4
)
5
from vbaproject_compiler.Models.Fields.packed_data import PackedData
5✔
6
from vbaproject_compiler.Models.Fields.idSizeField import IdSizeField
5✔
7
from typing import TypeVar
5✔
8

9

10
T = TypeVar('T', bound='ModuleBase')
5✔
11

12

13
class ModuleBase():
5✔
14
    def __init__(self: T, name: str) -> None:
5✔
15
        """
16
        Initialize the module record
17
        """
18
        self.modName = DoubleEncodedString([0x0019, 0x0047], name)
5✔
19
        self.streamName = DoubleEncodedString([0x001A, 0x0032], name)
5✔
20
        self.docString = DoubleEncodedString([0x001C, 0x0048], "")
5✔
21
        self.helpContext = IdSizeField(0x001E, 4, 0)
5✔
22
        self.cookie = IdSizeField(0x002C, 2, 0xFFFF)
5✔
23

24
        # self.readonly = SimpleRecord(0x001E, 4, helpContext)
25
        # self.private = SimpleRecord(0x001E, 4, helpContext)
26
        self._cache = b''
5✔
27
        self.workspace = [0, 0, 0, 0, 'C']
5✔
28
        self.type = ''
5✔
29
        self.created = 0
5✔
30
        self.modified = 0
5✔
31
        self._fileSize = 0
5✔
32
        self._size = 0
5✔
33

34
        # GUIDs
35
        self._guid = []
5✔
36

37
    def set_guid(self: T, guid: str) -> None:
5✔
38
        if isinstance(guid, list):
5✔
NEW
39
            self._guid = guid
×
40
        else:
41
            self._guid = [guid]
5✔
42

43
    def add_guid(self: T, guid: str) -> None:
5✔
NEW
44
        self._guid += guid
×
45

46
    def set_cache(self: T, cache: bytes) -> None:
5✔
47
        self._cache = cache
5✔
48

49
    def get_cache(self: T) -> bytes:
5✔
50
        return self._cache
5✔
51

52
    def set_cookie(self: T, value: int) -> None:
5✔
53
        self.cookie = IdSizeField(0x002C, 2, value)
5✔
54

55
    def get_cookie(self: T) -> int:
5✔
NEW
56
        return self.cookie.value
×
57

58
    def get_name(self: T) -> str:
5✔
59
        return self.modName.value
5✔
60

61
    def get_bin_path(self: T) -> str:
5✔
62
        return self._file_path + ".bin"
5✔
63

64
    def add_workspace(self: T, val1: int, val2: int,
5✔
65
                      val3: int, val4: int, val5: int) -> None:
66
        self.workspace = [val1, val2, val3, val4, val5]
5✔
67

68
    def pack(self: T, codepage_name: str, endien: str) -> bytes:
5✔
69
        """
70
        Pack the metadata for use in the dir stream.
71
        """
72
        typeid_value = 0x0022 if self.type == 'Document' else 0x0021
5✔
73
        type_id = PackedData("HI", typeid_value, 0)
5✔
74
        self.offsetRec = IdSizeField(0x0031, 4, len(self._cache))
5✔
75
        output = (self.modName.pack(codepage_name, endien)
5✔
76
                  + self.streamName.pack(codepage_name, endien)
77
                  + self.docString.pack(codepage_name, endien)
78
                  + self.offsetRec.pack(codepage_name, endien)
79
                  + self.helpContext.pack(codepage_name, endien)
80
                  + self.cookie.pack(codepage_name, endien)
81
                  + type_id.pack(codepage_name, endien))
82
        footer = PackedData("HI", 0x002B, 0)
5✔
83
        output += footer.pack(codepage_name, endien)
5✔
84
        return output
5✔
85

86
    def to_project_module_string(self: T) -> str:
5✔
87
        return self.type + "=" + self.modName.value
5✔
88

89
    def add_file(self: T, file_path: str) -> None:
5✔
90
        self._file_path = file_path
5✔
91

92
    def write_file(self: T) -> None:
5✔
93
        bin_f = open(self._file_path + ".bin", "wb")
5✔
94
        bin_f.write(self._cache)
5✔
95
        with open(self._file_path + ".new", mode="rb") as new_f:
5✔
96
            contents = new_f.read()
5✔
97
        ms_ovba = MsOvba()
5✔
98
        compressed = ms_ovba.compress(contents)
5✔
99
        bin_f.write(compressed)
5✔
100
        bin_f.close()
5✔
101

102
    def _attr(self: T, name: str, value: str) -> str:
5✔
103
        return 'Attribute VB_' + name + ' = ' + value + '\n'
5✔
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