feat: add Update-PiHoleList, completing the Lists API area - #113
Merged
Merged
Conversation
Implements PUT /api/lists/{list}, the last missing piece of List
management - Add-PiHoleList's own "already exists" error has referenced
this function by name since it was written. Updates an existing list's
Comment, Group(s), and/or Enabled state.
Like Update-PiHoleGroup, the underlying API replaces the entire list on
update, so this reads the list's current values first and only overrides
whichever of Comment/Group/Enabled was actually passed - using the same
$PSBoundParameters.ContainsKey() pattern (rather than checking parameter
values for $null), since that was the actual root cause of the bug fixed
in Update-PiHoleGroup: an unbound [string] binds to "", and [bool] can
never be $null, so value-based checks can't reliably detect "not passed".
Verified type only needs to be a query parameter (?type=block), not also
in the request body, by testing directly against the real server - the
API's own documented PUT body schema lists `type` as a body field too, but
(like the POST endpoint's documented schema, which turned out to expect
type in the query string only despite listing it in the body schema) the
server accepted both a query-only and query+body request identically.
The other remaining Lists gap, DELETE /lists/{list} (single item), isn't
being added as a separate function: Remove-PiHoleList already achieves the
same outcome via the batch endpoint (a batch of one) - same reasoning
already applied to skip the deprecated POST /action/flush/arp.
Verified against a real Pi-hole v6 server: partial updates (confirming the
untouched field is preserved), RawOutput, and not-found/missing-parameter/
bad-password errors. Added a dedicated integration test file (6 tests).
README regenerated.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements
PUT /api/lists/{list}, the last missing piece of List management -Add-PiHoleList's own "already exists" error has referenced this function by name since it was written. Updates an existing list's Comment, Group(s), and/or Enabled state.Like
Update-PiHoleGroup, the underlying API replaces the entire list on update, so this reads the list's current values first and only overrides whichever of Comment/Group/Enabled was actually passed - using the same$PSBoundParameters.ContainsKey()pattern (rather than checking parameter values for$null), since that was the actual root cause of the bug fixed inUpdate-PiHoleGroup: an unbound[string]binds to"", and[bool]can never be$null, so value-based checks can't reliably detect "not passed".Verified
typeonly needs to be a query parameter (?type=block), not also in the request body, by testing directly against the real server - the API's own documented PUT body schema liststypeas a body field too, but (like the POST endpoint's documented schema, which turned out to expecttypein the query string only despite listing it in the body schema) the server accepted both a query-only and query+body request identically.The other remaining Lists gap,
DELETE /lists/{list}(single item), isn't being added as a separate function:Remove-PiHoleListalready achieves the same outcome via the batch endpoint (a batch of one) - same reasoning already applied to skip the deprecatedPOST /action/flush/arp.With this merged, Lists is fully covered.
Test plan
Invoke-ScriptAnalyzer -Path .\PiHoleShell -Recurse- clean-RawOutput, and not-found/missing-parameter/bad-password errorsREADME.md🤖 Generated with Claude Code