Skip to content

refactor: extract CSVImport._decompose_site_role, inverse of _evaluate_site_role#1812

Open
jacalata wants to merge 2 commits into
jac/csv-import-fixes-and-find-by-namefrom
jac/csv-site-role-decompose
Open

refactor: extract CSVImport._decompose_site_role, inverse of _evaluate_site_role#1812
jacalata wants to merge 2 commits into
jac/csv-import-fixes-and-find-by-namefrom
jac/csv-site-role-decompose

Conversation

@jacalata

@jacalata jacalata commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Summary

Stacks on #1811.

Moves the ad-hoc site role → CSV columns logic from create_users_csv into UserItem.CSVImport._decompose_site_role, making it the explicit inverse of _evaluate_site_role. Both encode/decode functions now live together in CSVImport.

What changed

New method: UserItem.CSVImport._decompose_site_role(site_role) -> (license, admin_level, publish)

Replaces the if/elif block in create_users_csv with a lookup table. create_users_csv becomes:

license, admin_level, publish = UserItem.CSVImport._decompose_site_role(user.site_role or "Unlicensed")

Pre-existing bugs fixed in the decomposition:

  • ExplorerCanPublish was emitted as license="ExplorerCanPublish" — not a valid CSV license value; now ("Explorer", "None", "1")
  • SiteAdministrator (legacy role) was emitting license="" via str.replace("SiteAdministrator", ""); now maps to ("Explorer", "Site", "1")
  • Non-admin roles now emit admin_level="None" (explicit CSV spec value) rather than "" — both accepted by the server but "None" is consistent with the spec and what _evaluate_site_role expects as input

Test updated: test_create_users_csv now asserts "None" for non-admin roles (previously asserted "") and verifies the auth column.

Test plan

  • pytest test/test_user.py test/test_user_model.py — 46 passed
  • Full suite — 848 passed, 1 skipped

🤖 Generated with Claude Code

jacalata and others added 2 commits July 7, 2026 12:33
…ion check and debug prints

- create_users_csv was producing 7-column CSV, silently dropping
  auth_setting; bulk_add roundtrip would lose auth type
- create_from_file extension check used filepath.find("csv") which
  evaluates as falsy only when "csv" is at index 0, letting all other
  paths through; fixed to "csv" not in filepath
- remove two debug print() calls left in create_from_file

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…th _evaluate_site_role

Moves the ad-hoc site role → (license, admin_level, publish) logic from
create_users_csv into UserItem.CSVImport._decompose_site_role, making it
the explicit inverse of _evaluate_site_role.

Also fixes pre-existing bugs in the decomposition:
- ExplorerCanPublish was emitted as license="ExplorerCanPublish" (not a
  valid CSV license value); now correctly "Explorer" with publish=1
- SiteAdministrator (legacy role) was emitting license="" via
  str.replace; now maps to ("Explorer", "Site", "1")
- Non-admin roles now emit admin_level="None" (explicit CSV spec value)
  rather than "" (empty string); both are accepted by the server but
  "None" is consistent with the spec and _evaluate_site_role input

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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.

1 participant