dissect.volume 3.18.dev1__tar.gz → 3.19.dev2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/.git-blame-ignore-revs +2 -0
  2. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/PKG-INFO +1 -1
  3. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/ddf/c_ddf.py +1 -0
  4. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/ddf/ddf.py +6 -2
  5. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/disk/__init__.py +2 -0
  6. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/disk/partition.py +0 -1
  7. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/disk/schemes/__init__.py +2 -0
  8. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/exceptions.py +3 -0
  9. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/lvm/__init__.py +2 -0
  10. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/lvm/lvm2.py +1 -1
  11. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/md/__init__.py +2 -0
  12. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/md/md.py +0 -1
  13. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/raid/stream.py +0 -1
  14. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/vinum/vinum.py +9 -4
  15. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/vss.py +5 -2
  16. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect.volume.egg-info/PKG-INFO +1 -1
  17. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/pyproject.toml +20 -2
  18. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_docs/conf.py +2 -0
  19. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/vinum/test_config.py +4 -1
  20. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/vinum/test_vinum.py +5 -2
  21. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/.gitattributes +0 -0
  22. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/COPYRIGHT +0 -0
  23. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/LICENSE +0 -0
  24. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/MANIFEST.in +0 -0
  25. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/README.md +0 -0
  26. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/__init__.py +0 -0
  27. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/ddf/__init__.py +0 -0
  28. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/ddf/c_ddf.pyi +0 -0
  29. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/disk/disk.py +0 -0
  30. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/disk/schemes/apm.py +0 -0
  31. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/disk/schemes/bsd.py +0 -0
  32. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/disk/schemes/gpt.py +0 -0
  33. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/disk/schemes/mbr.py +0 -0
  34. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/dm/__init__.py +0 -0
  35. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/dm/btree.py +0 -0
  36. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/dm/c_dm.py +0 -0
  37. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/dm/c_dm.pyi +0 -0
  38. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/dm/thin.py +0 -0
  39. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/ldm.py +0 -0
  40. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/lvm/c_lvm2.py +0 -0
  41. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/lvm/c_lvm2.pyi +0 -0
  42. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/lvm/metadata.py +0 -0
  43. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/lvm/physical.py +0 -0
  44. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/md/c_md.py +0 -0
  45. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/md/c_md.pyi +0 -0
  46. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/raid/__init__.py +0 -0
  47. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/raid/raid.py +0 -0
  48. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/vinum/__init__.py +0 -0
  49. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/vinum/c_vinum.py +0 -0
  50. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/vinum/c_vinum.pyi +0 -0
  51. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect/volume/vinum/config.py +0 -0
  52. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect.volume.egg-info/SOURCES.txt +0 -0
  53. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect.volume.egg-info/dependency_links.txt +0 -0
  54. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect.volume.egg-info/requires.txt +0 -0
  55. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/dissect.volume.egg-info/top_level.txt +0 -0
  56. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/setup.cfg +0 -0
  57. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/__init__.py +0 -0
  58. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid0-1.bin.gz +0 -0
  59. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid0-2.bin.gz +0 -0
  60. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid0-3.bin.gz +0 -0
  61. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid0-raid1-1.bin.gz +0 -0
  62. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid0-raid1-2.bin.gz +0 -0
  63. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid1-1.bin.gz +0 -0
  64. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid1-2.bin.gz +0 -0
  65. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid10-1.bin.gz +0 -0
  66. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid10-2.bin.gz +0 -0
  67. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid10-3.bin.gz +0 -0
  68. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid10-4.bin.gz +0 -0
  69. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid4-1.bin.gz +0 -0
  70. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid4-2.bin.gz +0 -0
  71. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid5-1.bin.gz +0 -0
  72. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid5-2.bin.gz +0 -0
  73. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid5-3.bin.gz +0 -0
  74. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid6-1.bin.gz +0 -0
  75. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid6-2.bin.gz +0 -0
  76. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid6-3.bin.gz +0 -0
  77. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/ddf/ddf-raid6-4.bin.gz +0 -0
  78. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/disk/apm.bin +0 -0
  79. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/disk/bsd.bin +0 -0
  80. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/disk/bsd64.bin.gz +0 -0
  81. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/disk/gpt.bin +0 -0
  82. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/disk/gpt_4k.bin +0 -0
  83. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/disk/gpt_esxi.bin +0 -0
  84. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/disk/gpt_hybrid.bin +0 -0
  85. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/disk/gpt_no_name_xff.bin +0 -0
  86. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/disk/mbr.bin +0 -0
  87. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/dm/dm-thin-data.bin.gz +0 -0
  88. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/dm/dm-thin-empty-data.bin.gz +0 -0
  89. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/dm/dm-thin-empty-metadata.bin.gz +0 -0
  90. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/dm/dm-thin-metadata.bin.gz +0 -0
  91. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/lvm/lvm-mirror-1.bin.gz +0 -0
  92. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/lvm/lvm-mirror-2.bin.gz +0 -0
  93. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/lvm/lvm-thin.bin.gz +0 -0
  94. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/lvm/lvm.bin.gz +0 -0
  95. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-90-1.bin.gz +0 -0
  96. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-90-2.bin.gz +0 -0
  97. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-90-raid1-1.bin.gz +0 -0
  98. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-90-raid1-2.bin.gz +0 -0
  99. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-linear-1.bin.gz +0 -0
  100. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-linear-2.bin.gz +0 -0
  101. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-raid0-1.bin.gz +0 -0
  102. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-raid0-2.bin.gz +0 -0
  103. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-raid0-3.bin.gz +0 -0
  104. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-raid1-1.bin.gz +0 -0
  105. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-raid1-2.bin.gz +0 -0
  106. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-raid10-1.bin.gz +0 -0
  107. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-raid10-2.bin.gz +0 -0
  108. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-raid4-1.bin.gz +0 -0
  109. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-raid4-2.bin.gz +0 -0
  110. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-raid4-3.bin.gz +0 -0
  111. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-raid5-1.bin.gz +0 -0
  112. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-raid5-2.bin.gz +0 -0
  113. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-raid5-3.bin.gz +0 -0
  114. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-raid6-1.bin.gz +0 -0
  115. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-raid6-2.bin.gz +0 -0
  116. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-raid6-3.bin.gz +0 -0
  117. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/md/md-raid6-4.bin.gz +0 -0
  118. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/vinum/vinum-concat_diska.bin.gz +0 -0
  119. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/vinum/vinum-concat_diskb.bin.gz +0 -0
  120. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/vinum/vinum-mirror_diska.bin.gz +0 -0
  121. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/vinum/vinum-mirror_diskb.bin.gz +0 -0
  122. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/vinum/vinum-raid5_diska.bin.gz +0 -0
  123. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/vinum/vinum-raid5_diskb.bin.gz +0 -0
  124. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/vinum/vinum-raid5_diskc.bin.gz +0 -0
  125. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/vinum/vinum-raid5_diskd.bin.gz +0 -0
  126. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/vinum/vinum-striped_diska.bin.gz +0 -0
  127. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/vinum/vinum-striped_diskb.bin.gz +0 -0
  128. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/vinum/vinum-stripedmirror_diska.bin.gz +0 -0
  129. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/vinum/vinum-stripedmirror_diskb.bin.gz +0 -0
  130. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/vinum/vinum-stripedmirror_diskc.bin.gz +0 -0
  131. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_data/vinum/vinum-stripedmirror_diskd.bin.gz +0 -0
  132. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_docs/Makefile +0 -0
  133. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_docs/__init__.py +0 -0
  134. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/_docs/index.rst +0 -0
  135. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/conftest.py +0 -0
  136. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/ddf/__init__.py +0 -0
  137. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/ddf/test_ddf.py +0 -0
  138. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/disk/__init__.py +0 -0
  139. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/disk/test_apm.py +0 -0
  140. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/disk/test_bsd.py +0 -0
  141. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/disk/test_gpt.py +0 -0
  142. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/disk/test_mbr.py +0 -0
  143. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/dm/__init__.py +0 -0
  144. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/dm/test_dm.py +0 -0
  145. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/lvm/__init__.py +0 -0
  146. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/lvm/test_lvm.py +0 -0
  147. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/md/__init__.py +0 -0
  148. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/md/test_md.py +0 -0
  149. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tests/vinum/__init__.py +0 -0
  150. {dissect_volume-3.18.dev1 → dissect_volume-3.19.dev2}/tox.ini +0 -0
@@ -4,3 +4,5 @@
4
4
  #
5
5
  # Change linter to Ruff (#44)
6
6
  8fefd76a54ff43b2fdbedbbb3cd330c27b1a0b14
7
+ # Add stricter Ruff linting (#63)
8
+ 6bb48483a8eaa62fba114ae33643a19f7a91a171
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dissect.volume
3
- Version: 3.18.dev1
3
+ Version: 3.19.dev2
4
4
  Summary: A Dissect module implementing a parser for different disk volume and partition systems, for example LVM2, GPT and MBR
5
5
  Author-email: Dissect Team <dissect@fox-it.com>
6
6
  License-Expression: AGPL-3.0-or-later
@@ -1,4 +1,5 @@
1
1
  # Reference: https://www.snia.org/sites/default/files/SNIA_DDF_Technical_Position_v2.0.pdf
2
+ from __future__ import annotations
2
3
 
3
4
  from dissect.cstruct import cstruct
4
5
 
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import io
4
- from typing import BinaryIO
4
+ from typing import TYPE_CHECKING, BinaryIO
5
5
 
6
6
  from dissect.util import ts
7
7
 
@@ -10,12 +10,16 @@ from dissect.volume.exceptions import DDFError
10
10
  from dissect.volume.raid.raid import (
11
11
  RAID,
12
12
  Configuration,
13
- DiskMap,
14
13
  PhysicalDisk,
15
14
  VirtualDisk,
16
15
  )
17
16
  from dissect.volume.raid.stream import Layout, Level
18
17
 
18
+ if TYPE_CHECKING:
19
+ from dissect.volume.raid.raid import (
20
+ DiskMap,
21
+ )
22
+
19
23
  DEFAULT_SECTOR_SIZE = 512
20
24
 
21
25
  DECADE = 3600 * 24 * (365 * 10 + 2)
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  from dissect.volume.disk.disk import Disk
2
4
  from dissect.volume.disk.partition import Partition
3
5
  from dissect.volume.exceptions import DiskError
@@ -235,7 +235,6 @@ class Partition:
235
235
 
236
236
  def translate_partition_type(type: int | str | UUID, prepend_type: bool = True) -> str:
237
237
  """Translate a partition type to a human-readable format."""
238
-
239
238
  if not isinstance(type, str):
240
239
  name = PARTITION_TYPES.get(type, "Unknown")
241
240
  type = hex(type) if isinstance(type, int) else type
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  from dissect.volume.disk.schemes.apm import APM
2
4
  from dissect.volume.disk.schemes.bsd import BSD
3
5
  from dissect.volume.disk.schemes.gpt import GPT
@@ -1,3 +1,6 @@
1
+ from __future__ import annotations
2
+
3
+
1
4
  class Error(Exception):
2
5
  pass
3
6
 
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  from dissect.volume.lvm.lvm2 import LVM2
2
4
  from dissect.volume.lvm.physical import LVM2Device
3
5
 
@@ -18,7 +18,7 @@ log.setLevel(os.getenv("DISSECT_LOG_LVM", "CRITICAL"))
18
18
 
19
19
 
20
20
  class LVM2:
21
- """Logical Volume Manager"""
21
+ """Logical Volume Manager."""
22
22
 
23
23
  def __init__(self, fh: list[BinaryIO | LVM2Device] | BinaryIO | LVM2Device):
24
24
  self.fh = [fh] if not isinstance(fh, list) else fh
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  from dissect.volume.md.md import MD, MDPhysicalDisk
2
4
 
3
5
  __all__ = [
@@ -151,7 +151,6 @@ def find_super_block(fh: BinaryIO) -> tuple[int | None, int | None, int | None]:
151
151
  A tuple containing the sector, major version, and minor version of the super block, or a
152
152
  tuple of ``None`` if no super block was found.
153
153
  """
154
-
155
154
  size = fh.size if (hasattr(fh, "size") and fh.size is not None) else fh.seek(0, io.SEEK_END)
156
155
  size //= SECTOR_SIZE
157
156
 
@@ -198,7 +198,6 @@ class RAID456Stream(AlignedStream):
198
198
 
199
199
  def _get_stripe_read_info(self, offset: int) -> tuple[int, int, int, int, int | None]:
200
200
  """Calculate the stripe, offset in the stripe, data disk, parity disk and "Q" parity disk for a given sector."""
201
-
202
201
  # Reference: raid5_compute_sector
203
202
  stripe_size = self.virtual_disk.stripe_size
204
203
  raid_disks = self.virtual_disk.num_disks
@@ -15,23 +15,28 @@ from dissect.util import ts
15
15
  from dissect.volume.raid.raid import (
16
16
  RAID,
17
17
  Configuration,
18
- DiskMap,
19
18
  PhysicalDisk,
20
19
  VirtualDisk,
21
20
  )
22
21
  from dissect.volume.raid.stream import Layout, Level
23
22
  from dissect.volume.vinum.c_vinum import MAGIC_ACTIVE, MAGIC_INACTIVE, c_vinum
24
23
  from dissect.volume.vinum.config import (
25
- SD,
26
- Plex,
27
24
  PlexOrg,
28
25
  PlexState,
29
26
  SDState,
30
- Volume,
31
27
  parse_vinum_config,
32
28
  )
33
29
 
34
30
  if TYPE_CHECKING:
31
+ from dissect.volume.raid.raid import (
32
+ DiskMap,
33
+ )
34
+ from dissect.volume.vinum.config import (
35
+ SD,
36
+ Plex,
37
+ Volume,
38
+ )
39
+
35
40
  VinumPhysicalDiskDescriptor = BinaryIO | "VinumPhysicalDisk"
36
41
 
37
42
  log = logging.getLogger(__name__)
@@ -6,13 +6,16 @@ import os
6
6
  import uuid
7
7
  from collections import defaultdict
8
8
  from functools import cached_property
9
- from typing import BinaryIO
9
+ from typing import TYPE_CHECKING, BinaryIO
10
10
 
11
- from dissect.cstruct import Structure, cstruct
11
+ from dissect.cstruct import cstruct
12
12
  from dissect.util.stream import AlignedStream
13
13
 
14
14
  from dissect.volume.exceptions import Error
15
15
 
16
+ if TYPE_CHECKING:
17
+ from dissect.cstruct import Structure
18
+
16
19
  log = logging.getLogger(__name__)
17
20
  log.setLevel(os.getenv("DISSECT_LOG_VSS", "CRITICAL"))
18
21
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dissect.volume
3
- Version: 3.18.dev1
3
+ Version: 3.19.dev2
4
4
  Summary: A Dissect module implementing a parser for different disk volume and partition systems, for example LVM2, GPT and MBR
5
5
  Author-email: Dissect Team <dissect@fox-it.com>
6
6
  License-Expression: AGPL-3.0-or-later
@@ -94,7 +94,7 @@ select = [
94
94
  "SLOT",
95
95
  "SIM",
96
96
  "TID",
97
- "TCH",
97
+ "TC",
98
98
  "PTH",
99
99
  "PLC",
100
100
  "TRY",
@@ -102,8 +102,25 @@ select = [
102
102
  "PERF",
103
103
  "FURB",
104
104
  "RUF",
105
+ "D"
105
106
  ]
106
- ignore = ["E203", "B904", "UP024", "ANN002", "ANN003", "ANN204", "ANN401", "SIM105", "TRY003"]
107
+ ignore = [
108
+ "E203", "B904", "UP024", "ANN002", "ANN003", "ANN204", "ANN401", "SIM105", "TRY003", "PLC0415",
109
+ # Ignore some pydocstyle rules for now as they require a larger cleanup
110
+ "D1",
111
+ "D205",
112
+ "D301",
113
+ "D417",
114
+ # Seems bugged: https://github.com/astral-sh/ruff/issues/16824
115
+ "D402",
116
+ ]
117
+ future-annotations = true
118
+
119
+ [tool.ruff.lint.pydocstyle]
120
+ convention = "google"
121
+
122
+ [tool.ruff.lint.flake8-type-checking]
123
+ strict = true
107
124
 
108
125
  [tool.ruff.lint.per-file-ignores]
109
126
  "tests/docs/**" = ["INP001"]
@@ -112,6 +129,7 @@ ignore = ["E203", "B904", "UP024", "ANN002", "ANN003", "ANN204", "ANN401", "SIM1
112
129
  [tool.ruff.lint.isort]
113
130
  known-first-party = ["dissect.volume"]
114
131
  known-third-party = ["dissect"]
132
+ required-imports = ["from __future__ import annotations"]
115
133
 
116
134
  [tool.setuptools.packages.find]
117
135
  include = ["dissect.*"]
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  extensions = [
2
4
  "autoapi.extension",
3
5
  "sphinx.ext.autodoc",
@@ -14,7 +14,6 @@ from dissect.volume.vinum.config import (
14
14
  PlexState,
15
15
  SDState,
16
16
  TokenizeError,
17
- VinumConfigs,
18
17
  Volume,
19
18
  VolumeState,
20
19
  _parse_plex_config,
@@ -30,6 +29,10 @@ from dissect.volume.vinum.config import (
30
29
  if TYPE_CHECKING:
31
30
  from collections.abc import Iterator
32
31
 
32
+ from dissect.volume.vinum.config import (
33
+ VinumConfigs,
34
+ )
35
+
33
36
  CONF_TS = datetime.min.replace(tzinfo=timezone.utc)
34
37
 
35
38
 
@@ -2,11 +2,11 @@ from __future__ import annotations
2
2
 
3
3
  from datetime import datetime, timezone
4
4
  from io import BytesIO
5
- from typing import BinaryIO
5
+ from typing import TYPE_CHECKING, BinaryIO
6
6
 
7
7
  import pytest
8
8
 
9
- from dissect.volume.raid.stream import Layout, Level
9
+ from dissect.volume.raid.stream import Level
10
10
  from dissect.volume.vinum.c_vinum import c_vinum
11
11
  from dissect.volume.vinum.vinum import (
12
12
  Vinum,
@@ -15,6 +15,9 @@ from dissect.volume.vinum.vinum import (
15
15
  VinumPlexDisk,
16
16
  )
17
17
 
18
+ if TYPE_CHECKING:
19
+ from dissect.volume.raid.stream import Layout
20
+
18
21
 
19
22
  @pytest.mark.parametrize(
20
23
  (