driverclient 0.2.8__tar.gz → 0.2.10__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 (23) hide show
  1. {driverclient-0.2.8 → driverclient-0.2.10}/PKG-INFO +1 -1
  2. {driverclient-0.2.8 → driverclient-0.2.10}/pyproject.toml +1 -1
  3. {driverclient-0.2.8 → driverclient-0.2.10}/src/driverclient/__init__.py +1 -1
  4. {driverclient-0.2.8 → driverclient-0.2.10}/src/driverclient/ops/capture.py +11 -10
  5. {driverclient-0.2.8 → driverclient-0.2.10}/src/driverclient/ops/resolve.py +11 -0
  6. {driverclient-0.2.8 → driverclient-0.2.10}/.gitignore +0 -0
  7. {driverclient-0.2.8 → driverclient-0.2.10}/README.md +0 -0
  8. {driverclient-0.2.8 → driverclient-0.2.10}/src/driverclient/__main__.py +0 -0
  9. {driverclient-0.2.8 → driverclient-0.2.10}/src/driverclient/config.json +0 -0
  10. {driverclient-0.2.8 → driverclient-0.2.10}/src/driverclient/config.py +0 -0
  11. {driverclient-0.2.8 → driverclient-0.2.10}/src/driverclient/core/__init__.py +0 -0
  12. {driverclient-0.2.8 → driverclient-0.2.10}/src/driverclient/core/hardware.py +0 -0
  13. {driverclient-0.2.8 → driverclient-0.2.10}/src/driverclient/core/http.py +0 -0
  14. {driverclient-0.2.8 → driverclient-0.2.10}/src/driverclient/core/hwid.py +0 -0
  15. {driverclient-0.2.8 → driverclient-0.2.10}/src/driverclient/core/proc.py +0 -0
  16. {driverclient-0.2.8 → driverclient-0.2.10}/src/driverclient/events.py +0 -0
  17. {driverclient-0.2.8 → driverclient-0.2.10}/src/driverclient/main.py +0 -0
  18. {driverclient-0.2.8 → driverclient-0.2.10}/src/driverclient/ops/__init__.py +0 -0
  19. {driverclient-0.2.8 → driverclient-0.2.10}/src/driverclient/ops/automate.py +0 -0
  20. {driverclient-0.2.8 → driverclient-0.2.10}/src/driverclient/ops/diagnose.py +0 -0
  21. {driverclient-0.2.8 → driverclient-0.2.10}/src/driverclient/ops/install.py +0 -0
  22. {driverclient-0.2.8 → driverclient-0.2.10}/src/driverclient/ops/scan.py +0 -0
  23. {driverclient-0.2.8 → driverclient-0.2.10}/src/driverclient/py.typed +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: driverclient
3
- Version: 0.2.8
3
+ Version: 0.2.10
4
4
  Summary: Driver Server client with an embeddable connector for config injection at runtime.
5
5
  Project-URL: Homepage, https://example.com/driverclient
6
6
  Author-email: Raja Sanaullah <sanaullah@99technologies.com>
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "driverclient"
7
- version = "0.2.8"
7
+ version = "0.2.10"
8
8
  description = "Driver Server client with an embeddable connector for config injection at runtime."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -25,7 +25,7 @@ from driverclient.main import run as _run
25
25
 
26
26
  __all__ = ["DriverClient", "ClientEvent"]
27
27
 
28
- __version__ = "0.2.8"
28
+ __version__ = "0.2.10"
29
29
 
30
30
 
31
31
  class DriverClient:
@@ -684,7 +684,6 @@ def _do_export(pkg: dict, cfg: dict) -> dict | None:
684
684
  published = pkg["published_name"]
685
685
  original = pkg.get("original_name", published)
686
686
  class_name = pkg.get("class_name", "").lower()
687
- exts = _pick_extensions(class_name, cfg)
688
687
  timeout = cfg.get("timeout_long", 120)
689
688
 
690
689
  with tempfile.TemporaryDirectory() as tmp:
@@ -711,8 +710,14 @@ def _do_export(pkg: dict, cfg: dict) -> dict | None:
711
710
  return None
712
711
 
713
712
  try:
713
+ # Pack EVERY file pnputil /export-driver produced — it already isolates
714
+ # exactly this package's files into `dest`. The old extension filter
715
+ # ([.inf,.sys,.cat]) dropped INF-referenced payloads that aren't those
716
+ # types — e.g. a camera's Media-Foundation DLLs (SPITDevMft.dll) —
717
+ # yielding packages that fail install with "cannot find the file
718
+ # specified" (broken link D). Completeness is the repo's contract.
714
719
  archive_bytes, archive_name, encoding = pack_driver_archive(
715
- dest, Path(original).stem, exts
720
+ dest, Path(original).stem, ["*"]
716
721
  )
717
722
  except Exception as e:
718
723
  events.warn("dump", f" [warn] pack error {published}: {e}",
@@ -786,11 +791,7 @@ def _upload_worker(upload_q: queue.Queue, counts: dict,
786
791
  upload_q.task_done()
787
792
 
788
793
 
789
- # ══ Extension selection ════════════════════════════════════════════════════════
790
-
791
- def _pick_extensions(class_name: str, cfg: dict) -> list[str]:
792
- overrides: dict[str, list[str]] = cfg.get("dump_extensions_overrides", {})
793
- for key, exts in overrides.items():
794
- if key.lower() in class_name:
795
- return exts
796
- return cfg.get("dump_extensions", [".inf", ".sys", ".cat"])
794
+ # Extension selection was removed: capture now packs every file
795
+ # pnputil /export-driver produces (see _do_export), so the dump_extensions /
796
+ # dump_extensions_overrides config keys are no longer consulted — filtering by
797
+ # extension is what caused incomplete packages (broken link D).
@@ -82,6 +82,16 @@ def _query_repo(scan_result: ScanResult, cfg: dict, force: bool) -> ResolveResul
82
82
  hwid_groups = [
83
83
  ids for ids in (hwid_mod.matchable_ids(d.hwids) for d in scan_result.devices) if ids
84
84
  ]
85
+ # Canonical ids of devices whose CURRENT driver is a Windows INBOX driver.
86
+ # The server uses this to offer the repo OEM instead of treating the inbox
87
+ # driver's Windows-build version (e.g. 10.0.19041.x) as "newer" than the OEM
88
+ # version (false-stale) and skipping the install. Without it, deleting an OEM
89
+ # driver → Windows binds its inbox fallback → repo never reinstalls the OEM.
90
+ inbox_ids = [
91
+ hwid_mod.canonicalize(i)
92
+ for d in scan_result.devices if getattr(d, "is_inbox", False)
93
+ for i in hwid_mod.matchable_ids(d.hwids)
94
+ ]
85
95
  # Version map ALSO keyed by the canonical ids the server matches on, so its
86
96
  # already-current / stale check lands (raw keys kept for back-compat).
87
97
  canon_versions = {
@@ -102,6 +112,7 @@ def _query_repo(scan_result: ScanResult, cfg: dict, force: bool) -> ResolveResul
102
112
  "firmware_version": scan_result.firmware_version,
103
113
  "hwids": scan_result.all_hwids,
104
114
  "hwid_groups": hwid_groups,
115
+ "inbox_hwids": inbox_ids,
105
116
  "installed_versions": {**scan_result.installed_versions, **canon_versions},
106
117
  "force": force or cfg.get("force_resolve", False),
107
118
  }
File without changes
File without changes