You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tooling.apache.org by "andrewmusselman (via GitHub)" <gi...@apache.org> on 2026/05/21 17:45:06 UTC

[I] Display name validator rejects Apache Empire-db and Apache mod_* projects (tooling-trusted-releases)

andrewmusselman opened a new issue, #1256:
URL: https://github.com/apache/tooling-trusted-releases/issues/1256

   ### Summary
   
   `AddProjectForm` rejects display names for real, current Apache projects that contain `-` or `_` — including `Apache Empire-db` and every `Apache mod_*` project. The whitelist of irregular words is honoured by the per-word case check but not by the subsequent whole-string character check.
   
   ### Affected projects
   
   Real TLPs/podlings that cannot currently be added or renamed to their actual display name:
   
   - `Apache Empire-db`
   - `Apache mod_jk`, `Apache mod_perl`, `Apache mod_ftp`, `Apache mod_python`, and the rest of the `mod_*` family
   
   ### Repro
   
   From the repo root:
   
   ```bash
   uv run python -c "
   from atr.shared.projects import AddProjectForm
   AddProjectForm(
       csrf_token='',
       committee_key='empire-db',
       display_name='Apache Empire-db',
       key='empire-db',
   )
   "
   ```
   
   Produces:
   
   ```
   display_name
     Value error, Name must be alphanumeric and may include spaces or dots or plus signs.
     [type=value_error, input_value='Apache Empire-db', input_type=str]
   ```
   
   Same error for `Apache mod_jk`, `Apache mod_perl`, etc.
   
   ### Where the bug lives
   
   `atr/shared/projects.py`, in the display-name validation in `AddProjectForm.validate_fields`. Two checks run in sequence:
   
   1. **Per-word case check.** Each word after `Apache` must match `PascalCase`, `camelCase`, or `^mod(_[0-9a-z]+)+$`, or be in `allowed_irregular_words = {".NET", "C++", "Empire-db", "Lucene.NET", "for", "jclouds"}`. ✅ Respects the whitelist.
   2. **Whole-string character check.** ```display_name.replace(" ", "").replace(".", "").replace("+", "").isalnum()``` must be true. ❌ Does **not** respect the whitelist, and only strips spaces, dots, and plus signs. Hyphens and underscores are not stripped, so `Empire-db` and `mod_jk` fail.
   
   So `Apache Empire-db` clears check 1 (whitelist match) and dies on check 2 (the `-` is not alphanumeric). `Apache mod_jk` clears check 1 via the `r_mod_case` regex and dies on check 2 on the `_`.
   
   ### Suggested fixes
   
   Two options, either works:
   
   **(a) Strip the extra characters too.** Smaller change, preserves the "every character must be one of these" invariant:
   
   ```python
   stripped = display_name.replace(" ", "").replace(".", "").replace("+", "").replace("-", "").replace("_", "")
   if not stripped.isalnum():
       raise ValueError("Name must be alphanumeric and may include spaces, dots, plus signs, hyphens, or underscores.")
   ```
   
   **(b) Skip check 2 for words that already passed check 1.** Cleaner conceptually — once a word is on the whitelist or matches a structural regex, it's by definition allowed:
   
   ```python
   for display_name_word in display_name_words[1:]:
       if display_name_word in allowed_irregular_words:
           continue
       if r_pascal_case.match(display_name_word) or r_camel_case.match(display_name_word) or r_mod_case.match(display_name_word):
           continue
       raise ValueError("Display name words must be in PascalCase, camelCase, or mod_ case.")
   # drop the .isalnum() check entirely
   ```
   
   I'd lean toward (b) since check 2 is already partially redundant with check 1 — if every word individually passed a structural check, the whole string is well-formed by construction. (a) is the safer change if you want to keep the belt-and-braces structure.
   
   Either way, please add `Apache Empire-db` and `Apache mod_jk` to the test cases so this doesn't regress:
   
   ```python
   def test_empire_db_is_accepted():
       AddProjectForm(csrf_token='', committee_key='empire-db', display_name='Apache Empire-db', key='empire-db')
   
   def test_mod_jk_is_accepted():
       AddProjectForm(csrf_token='', committee_key='httpd', display_name='Apache mod_jk', key='httpd-mod_jk')
   ```
   
   ### Found while doing
   
   #1254.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscribe@tooling.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tooling.apache.org
For additional commands, e-mail: dev-help@tooling.apache.org


Re: [I] Display name validator rejects Apache Empire-db and Apache mod_* projects (tooling-trusted-releases)

Posted by "andrewmusselman (via GitHub)" <gi...@apache.org>.
andrewmusselman closed issue #1256: Display name validator rejects Apache Empire-db and Apache mod_* projects
URL: https://github.com/apache/tooling-trusted-releases/issues/1256


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscribe@tooling.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tooling.apache.org
For additional commands, e-mail: dev-help@tooling.apache.org


Re: [I] Display name validator rejects Apache Empire-db and Apache mod_* projects (tooling-trusted-releases)

Posted by "andrewmusselman (via GitHub)" <gi...@apache.org>.
andrewmusselman commented on issue #1256:
URL: https://github.com/apache/tooling-trusted-releases/issues/1256#issuecomment-4511045820

   Folding this into the PR for #1254 — the display-name edit work already extracts the validator into a shared helper, which is the natural place to land the fix. Going with option (b) (dropping the redundant alnum check) plus regression tests in `tests/unit/test_shared_projects.py` covering `Empire-db`, all the `mod_*` projects, and the existing whitelist entries.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscribe@tooling.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tooling.apache.org
For additional commands, e-mail: dev-help@tooling.apache.org