This issue is part of a Codex global repository code scan.
HybridDriver.__init__() deletes the "type" key from each caller-provided config dictionary. This mutates user input and makes the same config object unusable for a later construction.
Affected code:
|
def __init__(self, drivers: list[dict | Driver]) -> None: |
|
self.drivers = [] |
|
for driver in drivers: |
|
if isinstance(driver, Driver): |
|
self.drivers.append(driver) |
|
elif isinstance(driver, dict): |
|
type = driver["type"] |
|
del driver["type"] |
|
self.drivers.append(Driver.get_driver(type)(**driver)) |
|
else: |
Minimal reproducer:
from dpdata.driver import Driver, HybridDriver
class DummyDriver(Driver):
def label(self, data):
return data
Driver.register("scan_dummy")(DummyDriver)
config = [{"type": "scan_dummy"}]
print("before", config)
HybridDriver(config)
print("after", config)
HybridDriver(config)
Current behavior:
before [{'type': 'scan_dummy'}]
after [{}]
KeyError: 'type'
HybridDriver should copy each config dict before popping or deleting keys.
This issue is part of a Codex global repository code scan.
HybridDriver.__init__()deletes the"type"key from each caller-provided config dictionary. This mutates user input and makes the same config object unusable for a later construction.Affected code:
dpdata/dpdata/driver.py
Lines 137 to 146 in a7a50bf
Minimal reproducer:
Current behavior:
HybridDrivershould copy each config dict before popping or deleting keys.