Skip to content

RG config client — CRUD, models and versioned generate methods - #38

Open
carlosfunk wants to merge 4 commits into
mainfrom
dm-3731-rg-config
Open

RG config client — CRUD, models and versioned generate methods#38
carlosfunk wants to merge 4 commits into
mainfrom
dm-3731-rg-config

Conversation

@carlosfunk

@carlosfunk carlosfunk commented Jul 19, 2026

Copy link
Copy Markdown
Member

Adds client support for DataMasque ruleset-generation configs: server-side masks-per-label configs consumed by the versioned generate APIs.

Commits

  • feat(client): add RG config CRUD and versioned generate methods

What's in it

  • RGConfig pydantic model + RGConfigClient mixin: list/get/create/update/delete + get_default_rg_config_yaml() against rg/configs/
  • Versioned generate methods mirroring the discovery *_from_config split: generate_ruleset_with_rg_config (v3), generate_file_ruleset_with_rg_config (v2), start_async_ruleset_generation_with_rg_config (v2), start_async_ruleset_generation_from_csv_with_rg_config (v2). Old methods keep the old endpoints (server default RG config).
  • Old generate request models reject rg_config and point callers at the new methods.
  • CSV/multipart note: rg_config=None is sent as an empty form field; DRF coerces '' to null on relational fields (verified end-to-end against a live server).

@carlosfunk
carlosfunk marked this pull request as draft July 19, 2026 23:01
@carlosfunk carlosfunk changed the title DM-3731: RG config client — CRUD, models and versioned generate methods (DM-3958) RG config client — CRUD, models and versioned generate methods Jul 20, 2026
@carlosfunk carlosfunk self-assigned this Jul 20, 2026
- add RGConfig pydantic model and RGConfigClient mixin: list/get/create/update/delete + defaults yaml
- add generate_ruleset_with_rg_config (v3) and file/async/csv variants (v2), mirroring the discovery from_config split
- old generate request models reject rg_config and point callers at the new methods
- document dependent-RGC behaviour on ruleset library delete/usage APIs
@carlosfunk
carlosfunk marked this pull request as ready for review July 27, 2026 03:00

@cph-datamasque cph-datamasque left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Mostly minor issues.

Do we want a RGConfigNotFoundError exception type to mirror the handling of 400 responses for other APIs?

Another thing that needs to be done at some point: the docs are out of date and need regenerating. Up to you if you want to do that in this MR, or we could raise a ticket to do it another day.

Comment thread datamasque/client/models/discovery.py Outdated
Comment thread datamasque/client/models/discovery.py Outdated
Comment thread datamasque/client/models/discovery.py
Comment thread datamasque/client/discovery.py Outdated
Comment thread datamasque/client/discovery.py Outdated
Comment thread datamasque/client/discovery.py Outdated
Comment thread datamasque/client/rg_configs.py
Comment thread datamasque/client/rg_configs.py Outdated
Comment thread datamasque/client/models/rg_config.py Outdated
* Add `RGConfigNotFoundError`, raised by all four `*_with_rg_config` methods when the server rejects the config id.
* Guard `update_rg_config` against a YAML-less config, matching the discovery config library client.
* Resolve `delete_rg_config_by_name_if_exists` with the `name_exact` filter instead of enumerating every config.
* Fold the duplicated `rg_config` request-body handling into `_post_with_rg_config`.
* Drop API version numbers from the `rg_config`-rejection error messages and the changelog.
* Apply semantic line breaks to the RG config docstrings and add the missing docs stubs.
@carlosfunk

Copy link
Copy Markdown
Member Author

Do we want a RGConfigNotFoundError exception type to mirror the handling of 400 responses for other APIs?

Added.

Another thing that needs to be done at some point: the docs are out of date and need regenerating. Up to you if you want to do that in this MR, or we could raise a ticket to do it another day.

Added the two stubs for this PR.

@cph-datamasque cph-datamasque left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Approved after one wording change

Comment thread datamasque/client/exceptions.py Outdated
"""
Raised when ruleset generation references an RG config that cannot be found.
The config does not exist, or has been archived.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

archived -> deleted

- The admin server now persists a list of validation errors alongside the
  single-line summary, so surface them as `validation_errors` rather than
  making callers parse `validation_error`
- Correct the `is_valid` docstring, which described the removed asynchronous
  validation flow
- RG configs take no `version` key, and a label's mask goes under
  `preset_mask` rather than being mapped to a bare string
- The client treats `config_yaml` as an opaque string, so no test caught
  this; the fixture's only reader is whoever copies it as an example
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants