Skip to content

feat(rum): add rum_replay_playlists resource (shell only) - #721

Open
michael-richey wants to merge 1 commit into
michael.richey/add-rum-operation-strong-linksfrom
michael.richey/add-rum-replay-playlists
Open

michael-richey wants to merge 1 commit into
michael.richey/add-rum-operation-strong-linksfrom
michael.richey/add-rum-replay-playlists

Conversation

@michael-richey

Copy link
Copy Markdown
Collaborator

Summary

RUM replay playlists — static shell definitions (name, description). Syncs the playlist shell only (full CRUD); the playlist→session associations (intake-tied) are out of scope.

Stacked on #720 (rum_operation_strong_links).

Feasibility spike result

The plan flagged a concern that playlists might embed session-id references that can't be cleanly stripped. Inspection of the Playlist schema confirms the playlist body (name, description) contains no session ids — session associations live on the separate .../sessions sub-resources. So the shell is clean; no stripping required.

Design

  • List GET /rum/replay/playlists; create POST; update PUT /{playlist_id}; delete DELETE /{playlist_id}.
  • Create data has no id (server-assigned, popped); update sets resource["id"] = destination_id.
  • excluded_attributes: id + server-managed created_at/updated_at/created_by/session_count.
  • No resource_connections (playlists are org-level, not app-scoped; no session refs in the shell).
  • Does not call the .../sessions sub-resources (intake-tied, out of scope).

Changes

  • datadog_sync/model/rum_replay_playlists.py (new)
  • datadog_sync/models/__init__.py — register
  • tests/unit/test_rum_replay_playlists.py (new) — 6 unit tests
  • README.md — add rum_replay_playlists (no dependencies)

Testing

  • pytest tests/unit/test_rum_replay_playlists.py → 6 passed
  • Full unit suite: no new failures.

Follow-up

Integration tests + VCR cassettes deferred (require sandbox-org API access).

@michael-richey michael-richey left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good.

The model stays nicely scoped to playlist shell sync only (and avoids sessions sub-resources), and unit tests cover CRUD semantics and payload shaping well.

No blockers from my side in this diff.

@michael-richey
michael-richey force-pushed the michael.richey/add-rum-operation-strong-links branch from 936598e to 893649f Compare September 25, 2026 20:53
@michael-richey
michael-richey force-pushed the michael.richey/add-rum-replay-playlists branch from 28865fd to b8c2f84 Compare September 25, 2026 20:53
@michael-richey
michael-richey requested a balanced review from Copilot September 25, 2026 21:19

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟢 Approval recommended

The implementation is consistent with adjacent RUM models and has focused coverage for all introduced operations.

Review effort: Balanced
Findings: None

What changed in this PR

Adds shell-only synchronization for RUM replay playlists with full CRUD support while excluding session associations.

Changes:

  • Implements and registers the playlist resource model.
  • Adds focused CRUD unit tests.
  • Documents support and dependencies.
File Description
datadog_sync/​model/​rum_replay_playlists.py Implements playlist shell synchronization.
datadog_sync/​models/​__init__.py Registers the resource model.
tests/​unit/​test_rum_replay_playlists.py Tests endpoint and CRUD behavior.
README.md Documents the resource and its lack of dependencies.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@michael-richey
michael-richey force-pushed the michael.richey/add-rum-operation-strong-links branch from 893649f to 381b14d Compare September 25, 2026 21:25
@michael-richey
michael-richey force-pushed the michael.richey/add-rum-replay-playlists branch from b8c2f84 to 3b6faa3 Compare September 25, 2026 21:25
@michael-richey
michael-richey force-pushed the michael.richey/add-rum-operation-strong-links branch from 381b14d to 2fbb6d5 Compare September 28, 2026 14:10
@michael-richey
michael-richey force-pushed the michael.richey/add-rum-replay-playlists branch from 3b6faa3 to dc95b0a Compare September 28, 2026 14:10
@michael-richey
michael-richey force-pushed the michael.richey/add-rum-operation-strong-links branch from 2fbb6d5 to d58b3b5 Compare October 1, 2026 15:54
@michael-richey
michael-richey force-pushed the michael.richey/add-rum-replay-playlists branch 2 times, most recently from 054e500 to 522f1b3 Compare October 1, 2026 16:13
@michael-richey
michael-richey force-pushed the michael.richey/add-rum-operation-strong-links branch from 4440f02 to 2498ccf Compare October 1, 2026 18:13
@michael-richey
michael-richey force-pushed the michael.richey/add-rum-replay-playlists branch from 522f1b3 to 75e0a6d Compare October 1, 2026 18:13
@michael-richey
michael-richey force-pushed the michael.richey/add-rum-operation-strong-links branch from 2498ccf to 0215115 Compare October 1, 2026 18:48
@michael-richey
michael-richey force-pushed the michael.richey/add-rum-replay-playlists branch 3 times, most recently from 810563c to 93a11e6 Compare October 1, 2026 20:17
@michael-richey
michael-richey force-pushed the michael.richey/add-rum-operation-strong-links branch from 111428f to 99755b9 Compare October 1, 2026 20:37
@michael-richey
michael-richey force-pushed the michael.richey/add-rum-replay-playlists branch from 93a11e6 to aa90fd0 Compare October 1, 2026 20:37
@michael-richey
michael-richey force-pushed the michael.richey/add-rum-operation-strong-links branch from 99755b9 to 456a32c Compare October 1, 2026 21:17
@michael-richey
michael-richey force-pushed the michael.richey/add-rum-replay-playlists branch from aa90fd0 to f332f2b Compare October 1, 2026 21:17
RUM replay playlists are static shell definitions (name, description). The
playlist body itself contains no session-id references; the playlist->session
associations live on the .../sessions sub-resources, which are intake-tied and
out of scope. The feasibility spike confirmed the shell is clean -- this model
syncs the playlist shell only (full CRUD) and does not call the .../sessions
endpoints.

- datadog_sync/model/rum_replay_playlists.py (new)
- datadog_sync/models/__init__.py -- register
- tests/unit/test_rum_replay_playlists.py (new) -- 6 unit tests
- README.md -- add rum_replay_playlists (no dependencies)

Integration tests + VCR cassettes deferred (require sandbox-org API access).
@michael-richey
michael-richey force-pushed the michael.richey/add-rum-operation-strong-links branch from 456a32c to 258282d Compare October 2, 2026 01:45
@michael-richey
michael-richey force-pushed the michael.richey/add-rum-replay-playlists branch from f332f2b to 3ea7963 Compare October 2, 2026 01:45
@michael-richey

Copy link
Copy Markdown
Collaborator Author

Nice addition — resource model and tests are straightforward and readable.

Non-blocking suggestion:

  • The replay playlist list endpoint supports page params (page[number], page[size]). If we expect orgs with many playlists, adding pagination here would make imports more robust and consistent with other paginated resources.

No blocking issues otherwise.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants