dissect.hypervisor 3.20.dev1__tar.gz → 3.21.dev1__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 (102) hide show
  1. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/PKG-INFO +3 -4
  2. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/disk/c_asif.pyi +1 -2
  3. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/disk/c_qcow2.pyi +1 -2
  4. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/disk/vhdx.py +2 -2
  5. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/disk/vmdk.py +1 -1
  6. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/util/vmtar.py +2 -2
  7. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect.hypervisor.egg-info/PKG-INFO +3 -4
  8. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/pyproject.toml +25 -8
  9. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/disk/test_hdd.py +1 -1
  10. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/disk/test_qcow2.py +5 -5
  11. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tox.ini +8 -12
  12. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/.git-blame-ignore-revs +0 -0
  13. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/COPYRIGHT +0 -0
  14. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/LICENSE +0 -0
  15. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/MANIFEST.in +0 -0
  16. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/README.md +0 -0
  17. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/__init__.py +0 -0
  18. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/descriptor/__init__.py +0 -0
  19. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/descriptor/c_hyperv.py +0 -0
  20. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/descriptor/hyperv.py +0 -0
  21. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/descriptor/ovf.py +0 -0
  22. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/descriptor/pvs.py +0 -0
  23. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/descriptor/vbox.py +0 -0
  24. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/descriptor/vmx.py +0 -0
  25. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/disk/__init__.py +0 -0
  26. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/disk/asif.py +0 -0
  27. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/disk/c_asif.py +0 -0
  28. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/disk/c_hdd.py +0 -0
  29. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/disk/c_qcow2.py +0 -0
  30. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/disk/c_vdi.py +0 -0
  31. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/disk/c_vhd.py +0 -0
  32. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/disk/c_vhdx.py +0 -0
  33. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/disk/c_vmdk.py +0 -0
  34. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/disk/hdd.py +0 -0
  35. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/disk/qcow2.py +0 -0
  36. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/disk/vdi.py +0 -0
  37. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/disk/vhd.py +0 -0
  38. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/exceptions.py +0 -0
  39. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/tools/__init__.py +0 -0
  40. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/tools/envelope.py +0 -0
  41. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/tools/vmtar.py +0 -0
  42. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/util/__init__.py +0 -0
  43. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect/hypervisor/util/envelope.py +0 -0
  44. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect.hypervisor.egg-info/SOURCES.txt +0 -0
  45. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect.hypervisor.egg-info/dependency_links.txt +0 -0
  46. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect.hypervisor.egg-info/entry_points.txt +0 -0
  47. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect.hypervisor.egg-info/requires.txt +0 -0
  48. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/dissect.hypervisor.egg-info/top_level.txt +0 -0
  49. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/setup.cfg +0 -0
  50. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/__init__.py +0 -0
  51. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/descriptor/hyperv/test.VMRS +0 -0
  52. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/descriptor/hyperv/test.vmcx +0 -0
  53. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/descriptor/vmx/encrypted.vmx +0 -0
  54. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/asif/basic.asif.gz +0 -0
  55. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/hdd/expanding.hdd/DiskDescriptor.xml +0 -0
  56. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/hdd/expanding.hdd/expanding.hdd +0 -0
  57. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/hdd/expanding.hdd/expanding.hdd.0.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds.gz +0 -0
  58. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/hdd/plain.hdd/DiskDescriptor.xml +0 -0
  59. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/hdd/plain.hdd/plain.hdd +0 -0
  60. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/hdd/plain.hdd/plain.hdd.0.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds.gz +0 -0
  61. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/hdd/split.hdd/DiskDescriptor.xml +0 -0
  62. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/hdd/split.hdd/split.hdd +0 -0
  63. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/hdd/split.hdd/split.hdd.0.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds.gz +0 -0
  64. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/hdd/split.hdd/split.hdd.1.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds.gz +0 -0
  65. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/hdd/split.hdd/split.hdd.2.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds.gz +0 -0
  66. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/hdd/split.hdd/split.hdd.3.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds.gz +0 -0
  67. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/hdd/split.hdd/split.hdd.4.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds.gz +0 -0
  68. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/hdd/split.hdd/split.hdd.5.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds.gz +0 -0
  69. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/qcow2/backing-chain-1.qcow2.gz +0 -0
  70. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/qcow2/backing-chain-2.qcow2.gz +0 -0
  71. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/qcow2/backing-chain-3.qcow2.gz +0 -0
  72. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/qcow2/basic.qcow2.gz +0 -0
  73. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/qcow2/data-file.bin.gz +0 -0
  74. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/qcow2/data-file.qcow2.gz +0 -0
  75. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/qcow2/snapshot.qcow2.gz +0 -0
  76. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/vhd/dynamic.vhd.gz +0 -0
  77. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/vhd/fixed.vhd.gz +0 -0
  78. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/vhdx/differencing.avhdx.gz +0 -0
  79. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/vhdx/dynamic.vhdx.gz +0 -0
  80. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/vhdx/fixed.vhdx.gz +0 -0
  81. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/disk/vmdk/sesparse.vmdk.gz +0 -0
  82. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/util/envelope/encryption.info +0 -0
  83. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/util/envelope/local.tgz.ve +0 -0
  84. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_data/util/vmtar/test.vgz +0 -0
  85. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_docs/Makefile +0 -0
  86. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_docs/conf.py +0 -0
  87. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/_docs/index.rst +0 -0
  88. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/conftest.py +0 -0
  89. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/descriptor/__init__.py +0 -0
  90. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/descriptor/test_hyperv.py +0 -0
  91. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/descriptor/test_ovf.py +0 -0
  92. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/descriptor/test_pvs.py +0 -0
  93. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/descriptor/test_vbox.py +0 -0
  94. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/descriptor/test_vmx.py +0 -0
  95. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/disk/__init__.py +0 -0
  96. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/disk/test_asif.py +0 -0
  97. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/disk/test_vhd.py +0 -0
  98. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/disk/test_vhdx.py +0 -0
  99. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/disk/test_vmdk.py +0 -0
  100. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/util/__init__.py +0 -0
  101. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/util/test_envelope.py +0 -0
  102. {dissect_hypervisor-3.20.dev1 → dissect_hypervisor-3.21.dev1}/tests/util/test_vmtar.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dissect.hypervisor
3
- Version: 3.20.dev1
3
+ Version: 3.21.dev1
4
4
  Summary: A Dissect module implementing parsers for various hypervisor disk, backup and configuration files
5
5
  Author-email: Dissect Team <dissect@fox-it.com>
6
- License: Affero General Public License v3
6
+ License-Expression: AGPL-3.0-or-later
7
7
  Project-URL: homepage, https://dissect.tools
8
8
  Project-URL: documentation, https://docs.dissect.tools/en/latest/projects/dissect.hypervisor
9
9
  Project-URL: repository, https://github.com/fox-it/dissect.hypervisor
@@ -11,14 +11,13 @@ Classifier: Development Status :: 5 - Production/Stable
11
11
  Classifier: Environment :: Console
12
12
  Classifier: Intended Audience :: Developers
13
13
  Classifier: Intended Audience :: Information Technology
14
- Classifier: License :: OSI Approved
15
14
  Classifier: Operating System :: OS Independent
16
15
  Classifier: Programming Language :: Python :: 3
17
16
  Classifier: Topic :: Internet :: Log Analysis
18
17
  Classifier: Topic :: Scientific/Engineering :: Information Analysis
19
18
  Classifier: Topic :: Security
20
19
  Classifier: Topic :: Utilities
21
- Requires-Python: ~=3.9
20
+ Requires-Python: >=3.10
22
21
  Description-Content-Type: text/markdown
23
22
  License-File: LICENSE
24
23
  License-File: COPYRIGHT
@@ -1,8 +1,7 @@
1
1
  # Generated by cstruct-stubgen
2
- from typing import BinaryIO, Literal, overload
2
+ from typing import BinaryIO, Literal, TypeAlias, overload
3
3
 
4
4
  import dissect.cstruct as __cs__
5
- from typing_extensions import TypeAlias
6
5
 
7
6
  class _c_asif(__cs__.cstruct):
8
7
  ASIF_HEADER_SIGNATURE: Literal[1936221303] = ...
@@ -1,8 +1,7 @@
1
1
  # Generated by cstruct-stubgen
2
- from typing import BinaryIO, Literal, overload
2
+ from typing import BinaryIO, Literal, TypeAlias, overload
3
3
 
4
4
  import dissect.cstruct as __cs__
5
- from typing_extensions import TypeAlias
6
5
 
7
6
  class _c_qcow2(__cs__.cstruct):
8
7
  MIN_CLUSTER_BITS: Literal[9] = ...
@@ -7,7 +7,7 @@ import logging
7
7
  import os
8
8
  from functools import lru_cache
9
9
  from pathlib import Path
10
- from typing import TYPE_CHECKING, Any, BinaryIO, Callable, Final
10
+ from typing import TYPE_CHECKING, Any, BinaryIO, Final
11
11
  from uuid import UUID
12
12
 
13
13
  from dissect.util.stream import AlignedStream
@@ -29,7 +29,7 @@ from dissect.hypervisor.disk.c_vhdx import (
29
29
  from dissect.hypervisor.exceptions import InvalidSignature, InvalidVirtualDisk
30
30
 
31
31
  if TYPE_CHECKING:
32
- from collections.abc import Iterator
32
+ from collections.abc import Callable, Iterator
33
33
 
34
34
  log = logging.getLogger(__name__)
35
35
  log.setLevel(os.getenv("DISSECT_LOG_VHDX", "CRITICAL"))
@@ -407,7 +407,7 @@ RE_EXTENT_DESCRIPTOR = re.compile(
407
407
  ^
408
408
  (?P<access_mode>RW|RDONLY|NOACCESS)\s
409
409
  (?P<sectors>\d+)\s
410
- (?P<type>SPARSE|ZERO|FLAT|VMFS|VMFSSPARSE|VMFSRDM|VMFSRAW)
410
+ (?P<type>SESPARSE|SPARSE|ZERO|FLAT|VMFS|VMFSSPARSE|VMFSRDM|VMFSRAW)
411
411
  (\s(?P<filename>\".+\"))?
412
412
  (\s(?P<start_sector>\d+))?
413
413
  (\s(?P<partition_uuid>\S+))?
@@ -62,12 +62,12 @@ class VisorTarFile(tarfile.TarFile):
62
62
  raise tarfile.TarError("visor currently only supports read mode")
63
63
 
64
64
  try:
65
- from gzip import GzipFile
65
+ from gzip import GzipFile # noqa: PLC0415
66
66
  except ImportError:
67
67
  raise tarfile.CompressionError("gzip module is not available") from None
68
68
 
69
69
  try:
70
- from lzma import LZMAError, LZMAFile
70
+ from lzma import LZMAError, LZMAFile # noqa: PLC0415
71
71
  except ImportError:
72
72
  raise tarfile.CompressionError("lzma module is not available") from None
73
73
 
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dissect.hypervisor
3
- Version: 3.20.dev1
3
+ Version: 3.21.dev1
4
4
  Summary: A Dissect module implementing parsers for various hypervisor disk, backup and configuration files
5
5
  Author-email: Dissect Team <dissect@fox-it.com>
6
- License: Affero General Public License v3
6
+ License-Expression: AGPL-3.0-or-later
7
7
  Project-URL: homepage, https://dissect.tools
8
8
  Project-URL: documentation, https://docs.dissect.tools/en/latest/projects/dissect.hypervisor
9
9
  Project-URL: repository, https://github.com/fox-it/dissect.hypervisor
@@ -11,14 +11,13 @@ Classifier: Development Status :: 5 - Production/Stable
11
11
  Classifier: Environment :: Console
12
12
  Classifier: Intended Audience :: Developers
13
13
  Classifier: Intended Audience :: Information Technology
14
- Classifier: License :: OSI Approved
15
14
  Classifier: Operating System :: OS Independent
16
15
  Classifier: Programming Language :: Python :: 3
17
16
  Classifier: Topic :: Internet :: Log Analysis
18
17
  Classifier: Topic :: Scientific/Engineering :: Information Analysis
19
18
  Classifier: Topic :: Security
20
19
  Classifier: Topic :: Utilities
21
- Requires-Python: ~=3.9
20
+ Requires-Python: >=3.10
22
21
  Description-Content-Type: text/markdown
23
22
  License-File: LICENSE
24
23
  License-File: COPYRIGHT
@@ -1,13 +1,14 @@
1
1
  [build-system]
2
- requires = ["setuptools>=65.5.0", "setuptools_scm[toml]>=6.4.0"]
2
+ requires = ["setuptools>=77.0.0", "setuptools_scm[toml]>=6.4.0"]
3
3
  build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "dissect.hypervisor"
7
7
  description = "A Dissect module implementing parsers for various hypervisor disk, backup and configuration files"
8
8
  readme = "README.md"
9
- requires-python = "~=3.9"
10
- license.text = "Affero General Public License v3"
9
+ requires-python = ">=3.10"
10
+ license = "AGPL-3.0-or-later"
11
+ license-files = ["LICENSE", "COPYRIGHT"]
11
12
  authors = [
12
13
  {name = "Dissect Team", email = "dissect@fox-it.com"}
13
14
  ]
@@ -16,7 +17,6 @@ classifiers = [
16
17
  "Environment :: Console",
17
18
  "Intended Audience :: Developers",
18
19
  "Intended Audience :: Information Technology",
19
- "License :: OSI Approved",
20
20
  "Operating System :: OS Independent",
21
21
  "Programming Language :: Python :: 3",
22
22
  "Topic :: Internet :: Log Analysis",
@@ -46,13 +46,33 @@ dev = [
46
46
  "dissect.util>=3.0.dev,<4.0.dev",
47
47
  ]
48
48
 
49
+ [dependency-groups]
50
+ test = [
51
+ "pytest",
52
+ ]
53
+ lint = [
54
+ "ruff==0.13.1",
55
+ "vermin",
56
+ ]
57
+ build = [
58
+ "build",
59
+ ]
60
+ debug = [
61
+ "ipdb",
62
+ ]
63
+ dev = [
64
+ {include-group = "test"},
65
+ {include-group = "lint"},
66
+ {include-group = "debug"},
67
+ ]
68
+
49
69
  [project.scripts]
50
70
  envelope-decrypt = "dissect.hypervisor.tools.envelope:main"
51
71
  vmtar = "dissect.hypervisor.tools.vmtar:main"
52
72
 
53
73
  [tool.ruff]
54
74
  line-length = 120
55
- required-version = ">=0.11.0"
75
+ required-version = ">=0.13.1"
56
76
 
57
77
  [tool.ruff.format]
58
78
  docstring-code-format = true
@@ -102,9 +122,6 @@ ignore = ["E203", "B904", "UP024", "ANN002", "ANN003", "ANN204", "ANN401", "SIM1
102
122
  known-first-party = ["dissect.hypervisor"]
103
123
  known-third-party = ["dissect"]
104
124
 
105
- [tool.setuptools]
106
- license-files = ["LICENSE", "COPYRIGHT"]
107
-
108
125
  [tool.setuptools.packages.find]
109
126
  include = ["dissect.*"]
110
127
 
@@ -61,7 +61,7 @@ def test_split_hdd(split_hdd: Path) -> None:
61
61
 
62
62
  start = 0
63
63
 
64
- for storage, split_size in zip(storages, split_sizes):
64
+ for storage, split_size in zip(storages, split_sizes, strict=False):
65
65
  assert storage.start == start
66
66
  assert storage.end == start + split_size
67
67
  assert len(storage.images) == 1
@@ -31,7 +31,7 @@ def test_basic(basic_qcow2: BinaryIO) -> None:
31
31
  def test_data_file(data_file_qcow2: Path) -> None:
32
32
  # Test with file handle
33
33
  with gzip.open(data_file_qcow2, "rb") as fh:
34
- with pytest.raises(Error, match="data-file required but not provided \\(image_data_file = 'data-file.bin'\\)"):
34
+ with pytest.raises(Error, match=r"data-file required but not provided \(image_data_file = 'data-file.bin'\)"):
35
35
  QCow2(fh)
36
36
 
37
37
  with gzip.open(data_file_qcow2.with_name("data-file.bin.gz"), "rb") as fh_bin:
@@ -47,7 +47,7 @@ def test_data_file(data_file_qcow2: Path) -> None:
47
47
  # Test with allow_no_data_file
48
48
  qcow2 = QCow2(fh, allow_no_data_file=True)
49
49
  assert qcow2.data_file is None
50
- with pytest.raises(Error, match="data-file required but not provided \\(image_data_file = 'data-file.bin'\\)"):
50
+ with pytest.raises(Error, match=r"data-file required but not provided \(image_data_file = 'data-file.bin'\)"):
51
51
  qcow2.open()
52
52
 
53
53
  # Test with Path
@@ -68,12 +68,12 @@ def test_backing_file(backing_chain_qcow2: tuple[Path, Path, Path]) -> None:
68
68
  # Test with file handle
69
69
  with gzip.open(file1, "rb") as fh1, gzip.open(file2, "rb") as fh2, gzip.open(file3, "rb") as fh3:
70
70
  with pytest.raises(
71
- Error, match="backing-file required but not provided \\(auto_backing_file = 'backing-chain-2.qcow2'\\)"
71
+ Error, match=r"backing-file required but not provided \(auto_backing_file = 'backing-chain-2.qcow2'\)"
72
72
  ):
73
73
  QCow2(fh1)
74
74
 
75
75
  with pytest.raises(
76
- Error, match="backing-file required but not provided \\(auto_backing_file = 'backing-chain-3.qcow2'\\)"
76
+ Error, match=r"backing-file required but not provided \(auto_backing_file = 'backing-chain-3.qcow2'\)"
77
77
  ):
78
78
  QCow2(fh1, backing_file=fh2)
79
79
 
@@ -87,7 +87,7 @@ def test_backing_file(backing_chain_qcow2: tuple[Path, Path, Path]) -> None:
87
87
  qcow2 = QCow2(fh1, allow_no_backing_file=True)
88
88
  assert qcow2.backing_file is None
89
89
  with pytest.raises(
90
- Error, match="backing-file required but not provided \\(auto_backing_file = 'backing-chain-2.qcow2'\\)"
90
+ Error, match=r"backing-file required but not provided \(auto_backing_file = 'backing-chain-2.qcow2'\)"
91
91
  ):
92
92
  qcow2.open()
93
93
 
@@ -4,7 +4,7 @@ envlist = lint, py3, pypy3
4
4
  # requires if they are not available on the host system. This requires the
5
5
  # locally installed tox to have a minimum version 3.3.0. This means the names
6
6
  # of the configuration options are still according to the tox 3.x syntax.
7
- minversion = 4.4.3
7
+ minversion = 4.27.0
8
8
  # This version of virtualenv will install setuptools version 68.2.2 and pip
9
9
  # 23.3.1. These versions fully support python projects defined only through a
10
10
  # pyproject.toml file (PEP-517/PEP-518/PEP-621). This pip version also support
@@ -14,9 +14,9 @@ requires = virtualenv>=20.24.6
14
14
  [testenv]
15
15
  extras = dev
16
16
  deps =
17
- pytest
18
17
  pytest-cov
19
18
  coverage
19
+ dependency_groups = test
20
20
  commands =
21
21
  pytest --basetemp="{envtmpdir}" {posargs:--color=yes --cov=dissect --cov-report=term-missing -v tests}
22
22
  coverage report
@@ -24,28 +24,24 @@ commands =
24
24
 
25
25
  [testenv:build]
26
26
  package = skip
27
- deps =
28
- build
27
+ dependency_groups = build
29
28
  commands =
30
29
  pyproject-build
31
30
 
32
31
  [testenv:fix]
33
32
  package = skip
34
- deps =
35
- ruff==0.11.10
33
+ dependency_groups = lint
36
34
  commands =
37
- ruff format dissect tests
38
35
  ruff check --fix dissect tests
36
+ ruff format dissect tests
39
37
 
40
38
  [testenv:lint]
41
39
  package = skip
42
- deps =
43
- ruff==0.11.10
44
- vermin
40
+ dependency_groups = lint
45
41
  commands =
46
- ruff format --check dissect tests
47
42
  ruff check dissect tests
48
- vermin -t=3.9- --no-tips --lint dissect tests
43
+ ruff format --check dissect tests
44
+ vermin -t=3.10- --no-tips --lint dissect tests
49
45
 
50
46
  [testenv:docs-build]
51
47
  allowlist_externals = make