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

Beakerboy / vbaProject-Compiler / 6798792179

08 Nov 2023 01:17PM UTC coverage: 92.227% (-6.6%) from 98.844%
6798792179

Pull #98

github

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

366 of 403 new or added lines in 15 files covered. (90.82%)

439 of 476 relevant lines covered (92.23%)

2.77 hits per line

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

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

9

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

12

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

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

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

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

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

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

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

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

55
    def get_name(self: T) -> str:
3✔
56
        return self.modName.value
3✔
57

58
    def get_bin_path(self: T) -> str:
3✔
59
        return self._file_path + ".bin"
3✔
60

61
    def add_workspace(self: T, val1: int, val2: int,
3✔
62
                      val3: int, val4: int, val5: int) -> None:
63
        self.workspace = [val1, val2, val3, val4, val5]
3✔
64

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

83
    def to_project_module_string(self: T) -> str:
3✔
84
        return self.type + "=" + self.modName.value
3✔
85

86
    def add_file(self: T, file_path: str) -> None:
3✔
87
        self._file_path = file_path
3✔
88

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

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