Skip to content
This repository was archived by the owner on Aug 25, 2024. It is now read-only.

Commit 2302fb8

Browse files
sudharsana-kjlpdxjohnny
authored andcommitted
source: json: Load JSON and patch label in dump
1 parent 5b3a970 commit 2302fb8

File tree

3 files changed

+13
-10
lines changed

3 files changed

+13
-10
lines changed

dffml/source/file.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ async def _close(self):
7676
elif self.config.filename[::-1].startswith((".zip")[::-1]):
7777
close = self.zip_closer_helper()
7878
else:
79-
close = open(self.config.filename, "w")
79+
close = open(self.config.filename, "w+")
8080
with close as fd:
8181
await self.dump_fd(fd)
8282

dffml/source/json.py

+11-8
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,24 @@ class JSONSource(FileSource, MemorySource):
1717
stored in memory.
1818
"""
1919

20-
def __init__(self, config):
21-
super().__init__(config)
22-
self.repos = {}
23-
2420
async def load_fd(self, fd):
25-
self.repos = json.load(fd)
21+
repos = json.load(fd)
2622
self.mem = {
2723
src_url: Repo(src_url, data=data)
28-
for src_url, data in self.repos.get(self.config.label, {}).items()
24+
for src_url, data in repos.get(self.config.label, {}).items()
2925
}
3026
LOGGER.debug("%r loaded %d records", self, len(self.mem))
3127

3228
async def dump_fd(self, fd):
33-
self.repos[self.config.label] = {
29+
repos = {}
30+
if fd.seekable():
31+
# Empty Stream is not a Valid JSON
32+
if fd.seek(0) is not 0:
33+
repos = json.load(fd)
34+
fd.seek(0)
35+
fd.truncate(0)
36+
repos[self.config.label] = {
3437
repo.src_url: repo.dict() for repo in self.mem.values()
3538
}
36-
json.dump(self.repos, fd)
39+
json.dump(repos, fd)
3740
LOGGER.debug("%r saved %d records", self, len(self.mem))

tests/source/test_file.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ async def test_close(self):
181181
):
182182
async with FakeFileSource(self.config("testfile")):
183183
pass
184-
m_open.assert_called_once_with("testfile", "w")
184+
m_open.assert_called_once_with("testfile", "w+")
185185

186186
async def test_close_gz(self):
187187
m_open = mock_open()

0 commit comments

Comments
 (0)