Skip to content

Commit 85e8571

Browse files
authored
Fix use of enabling/disabling specific filters (#260)
1 parent 0cd77f4 commit 85e8571

File tree

2 files changed

+80
-4
lines changed

2 files changed

+80
-4
lines changed

src/adguardhome/filtering.py

+30-2
Original file line numberDiff line numberDiff line change
@@ -162,14 +162,28 @@ async def enable_url(self, *, allowlist: bool, url: str) -> None:
162162
Raises:
163163
AdGuardHomeError: Failed enabling filter subscription.
164164
"""
165+
response = await self._adguard.request("filtering/status")
166+
filter_type = "whitelist_filters" if allowlist else "filters"
167+
168+
# Excluded from coverage:
169+
# https://github.com/nedbat/coveragepy/issues/515
170+
name = next( # pragma: no cover
171+
(
172+
fil["name"]
173+
for fil in response[filter_type]
174+
if fil["url"].lower() == url.lower()
175+
),
176+
"Unknown",
177+
)
178+
165179
try:
166180
await self._adguard.request(
167181
"filtering/set_url",
168182
method="POST",
169183
json_data={
170184
"url": url,
171185
"whitelist": allowlist,
172-
"data": {"enabled": True},
186+
"data": {"enabled": True, "name": name, "url": url},
173187
},
174188
)
175189
except AdGuardHomeError as exception:
@@ -187,14 +201,28 @@ async def disable_url(self, *, allowlist: bool, url: str) -> None:
187201
Raises:
188202
AdGuardHomeError: Failed disabling filter subscription.
189203
"""
204+
response = await self._adguard.request("filtering/status")
205+
filter_type = "whitelist_filters" if allowlist else "filters"
206+
207+
# Excluded from coverage:
208+
# https://github.com/nedbat/coveragepy/issues/515
209+
name = next( # pragma: no cover
210+
(
211+
fil["name"]
212+
for fil in response[filter_type]
213+
if fil["url"].lower() == url.lower()
214+
),
215+
"Unknown",
216+
)
217+
190218
try:
191219
await self._adguard.request(
192220
"filtering/set_url",
193221
method="POST",
194222
json_data={
195223
"url": url,
196224
"whitelist": allowlist,
197-
"data": {"enabled": False},
225+
"data": {"enabled": False, "name": name, "url": url},
198226
},
199227
)
200228
except AdGuardHomeError as exception:

tests/test_filtering.py

+50-2
Original file line numberDiff line numberDiff line change
@@ -323,13 +323,37 @@ async def response_handler(request):
323323
assert data == {
324324
"url": "https://example.com/1.txt",
325325
"whitelist": False,
326-
"data": {"enabled": True},
326+
"data": {
327+
"enabled": True,
328+
"url": "https://example.com/1.txt",
329+
"name": "test",
330+
},
327331
}
328332
return aresponses.Response(status=200, text="OK")
329333

334+
aresponses.add(
335+
"example.com:3000",
336+
"/control/filtering/status",
337+
"GET",
338+
aresponses.Response(
339+
status=200,
340+
headers={"Content-Type": "application/json"},
341+
text='{"filters": [{"url": "https://EXAMPLE.com/1.txt", "name": "test"}]}',
342+
),
343+
)
330344
aresponses.add(
331345
"example.com:3000", "/control/filtering/set_url", "POST", response_handler
332346
)
347+
aresponses.add(
348+
"example.com:3000",
349+
"/control/filtering/status",
350+
"GET",
351+
aresponses.Response(
352+
status=200,
353+
headers={"Content-Type": "application/json"},
354+
text='{"filters": [{"url": "https://EXAMPLE.com/1.txt", "name": "test"}]}',
355+
),
356+
)
333357
aresponses.add(
334358
"example.com:3000",
335359
"/control/filtering/set_url",
@@ -358,13 +382,37 @@ async def response_handler(request):
358382
assert data == {
359383
"url": "https://example.com/1.txt",
360384
"whitelist": False,
361-
"data": {"enabled": False},
385+
"data": {
386+
"enabled": False,
387+
"name": "test",
388+
"url": "https://example.com/1.txt",
389+
},
362390
}
363391
return aresponses.Response(status=200)
364392

393+
aresponses.add(
394+
"example.com:3000",
395+
"/control/filtering/status",
396+
"GET",
397+
aresponses.Response(
398+
status=200,
399+
headers={"Content-Type": "application/json"},
400+
text='{"filters": [{"url": "https://EXAMPLE.com/1.txt", "name": "test"}]}',
401+
),
402+
)
365403
aresponses.add(
366404
"example.com:3000", "/control/filtering/set_url", "POST", response_handler
367405
)
406+
aresponses.add(
407+
"example.com:3000",
408+
"/control/filtering/status",
409+
"GET",
410+
aresponses.Response(
411+
status=200,
412+
headers={"Content-Type": "application/json"},
413+
text='{"filters": [{"url": "https://example.com/1.txt", "name": "test"}]}',
414+
),
415+
)
368416
aresponses.add(
369417
"example.com:3000",
370418
"/control/filtering/set_url",

0 commit comments

Comments
 (0)